diff options
author | Jens Diemer <github.com@jensdiemer.de> | 2020-10-17 20:26:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-17 20:26:35 +0200 |
commit | 37e288808b7a8dfccaf4b2cecfd5d836f3819d3e (patch) | |
tree | a6a4ac171bce62718154b7776bfb5bebe938e61c | |
parent | 443816eddfcdc14eca0fc2d37af8ba3de22e0854 (diff) | |
parent | 70bc936d994a606dceb650970cea4568383b4515 (diff) | |
download | creole-37e288808b7a8dfccaf4b2cecfd5d836f3819d3e.tar.gz |
Merge pull request #48 from jedie/develop
Develop
34 files changed, 42 insertions, 202 deletions
@@ -1,4 +1,4 @@ [flake8] -exclude = .pytest_cache, python_creole.egg-info +exclude = .tox, .pytest_cache, python_creole.egg-info ignore = E115,E124,E128,E265,E301,E309,E501 max-line-length = 119 @@ -11,6 +11,7 @@ case_sensitive=false multi_line_output=3 include_trailing_comma=true +known_external=poetry-publish known_first_party=creole no_lines_before=LOCALFOLDER diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 8cefd2c..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -include AUTHORS LICENSE MANIFEST.in README.creole -recursive-exclude * *.py[co] -recursive-include * *.creole
\ No newline at end of file @@ -28,15 +28,19 @@ install-poetry: ## install or update poetry install: check-poetry ## install python-creole via poetry poetry install +update: check-poetry ## Update the dependencies as according to the pyproject.toml file + poetry update + lint: ## Run code formatters and linter - poetry run flynt --fail-on-change --line_length=${MAX_LINE_LENGTH} creole - poetry run isort --check-only --recursive creole - poetry run flake8 creole + poetry run flynt --fail-on-change --line_length=${MAX_LINE_LENGTH} . + poetry run isort --check-only . + poetry run flake8 . fix-code-style: ## Fix code formatting - poetry run flynt --line_length=${MAX_LINE_LENGTH} creole - poetry run isort --apply --recursive creole - poetry run autopep8 --ignore-local-config --max-line-length=${MAX_LINE_LENGTH} --aggressive --aggressive --in-place --recursive creole + poetry run flynt --line_length=${MAX_LINE_LENGTH} . + poetry run pyupgrade --exit-zero-even-if-changed --py3-plus --py36-plus --py37-plus `find . -name "*.py" -type f -not -path "./.tox/*"` + poetry run autopep8 --aggressive --aggressive --in-place --recursive . + poetry run isort . tox-listenvs: check-poetry ## List all tox test environments poetry run tox --listenvs diff --git a/creole/cmdline.py b/creole/cmdline.py index 16ecb4e..f2761a4 100644 --- a/creole/cmdline.py +++ b/creole/cmdline.py @@ -1,5 +1,3 @@ - - """ python-creole commandline interface ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/creole/emitter/creol2html_emitter.py b/creole/emitter/creol2html_emitter.py index 61e2e55..e8689b3 100644 --- a/creole/emitter/creol2html_emitter.py +++ b/creole/emitter/creol2html_emitter.py @@ -163,7 +163,7 @@ class HtmlEmitter: return '<hr />\n' def paragraph_emit(self, node): - return '<p>%s</p>\n' % self.emit_children(node) + return f'<p>{self.emit_children(node)}</p>\n' def _list_emit(self, node, list_type): if node.parent.kind in ("document",): @@ -197,16 +197,16 @@ class HtmlEmitter: return self._list_emit(node, list_type="li") def table_emit(self, node): - return '<table>\n%s</table>\n' % self.emit_children(node) + return f'<table>\n{self.emit_children(node)}</table>\n' def table_row_emit(self, node): - return '<tr>\n%s</tr>\n' % self.emit_children(node) + return f'<tr>\n{self.emit_children(node)}</tr>\n' def table_cell_emit(self, node): - return '\t<td>%s</td>\n' % self.emit_children(node) + return f'\t<td>{self.emit_children(node)}</td>\n' def table_head_emit(self, node): - return '\t<th>%s</th>\n' % self.emit_children(node) + return f'\t<th>{self.emit_children(node)}</th>\n' # -------------------------------------------------------------------------- @@ -254,7 +254,7 @@ class HtmlEmitter: return header def preformatted_emit(self, node): - return '<pre>%s</pre>' % self.html_escape(node.content) + return f'<pre>{self.html_escape(node.content)}</pre>' def link_emit(self, node): target = node.content @@ -277,8 +277,7 @@ class HtmlEmitter: w_str, h_str = size_str.split("x", 1) width = int(w_str.strip()) height = int(h_str.strip()) - return '<img src="{}" title="{}" alt="{}" width="{}" height="{}" />'.format( - self.attr_escape(target), title, title, width, height) + return f'<img src="{self.attr_escape(target)}" title="{title}" alt="{title}" width="{width}" height="{height}" />' except BaseException: pass return f'<img src="{self.attr_escape(target)}" title="{text}" alt="{text}" />' @@ -377,11 +376,11 @@ class HtmlEmitter: def pre_block_emit(self, node): """ pre block, with newline at the end """ - return "<pre>%s</pre>\n" % self.html_escape(node.content) + return f"<pre>{self.html_escape(node.content)}</pre>\n" def pre_inline_emit(self, node): """ pre without newline at the end """ - return "<tt>%s</tt>" % self.html_escape(node.content) + return f"<tt>{self.html_escape(node.content)}</tt>" def default_emit(self, node): """Fallback function for emitting unknown nodes.""" diff --git a/creole/emitter/html2creole_emitter.py b/creole/emitter/html2creole_emitter.py index ceac4fd..d745fe3 100644 --- a/creole/emitter/html2creole_emitter.py +++ b/creole/emitter/html2creole_emitter.py @@ -1,5 +1,3 @@ - - """ html -> creole Emitter ~~~~~~~~~~~~~~~~~~~~~~ @@ -44,7 +42,6 @@ class CreoleEmitter(BaseEmitter): def blockdata_pass_emit(self, node): return f"{node.content}\n\n" - return node.content # -------------------------------------------------------------------------- @@ -149,32 +146,3 @@ class CreoleEmitter(BaseEmitter): def span_emit(self, node): return self._emit_content(node) - - -if __name__ == '__main__': - import doctest - print(doctest.testmod()) - -# import sys;sys.exit() - from creole.parser.html_parser import HtmlParser - - data = """A <<unittest_macro1 args="foo1">>bar1<</unittest_macro1>> in a line...""" - -# print(data.strip()) - h2c = HtmlParser( - debug=True - ) - document_tree = h2c.feed(data) - h2c.debug() - - from creole.shared.unknown_tags import escape_unknown_nodes - - e = CreoleEmitter(document_tree, - debug=True, - unknown_emit=escape_unknown_nodes - ) - content = e.emit() - print("*" * 79) - print(content) - print("*" * 79) - print(content.replace(" ", ".").replace("\n", "\\n\n")) diff --git a/creole/emitter/html2rest_emitter.py b/creole/emitter/html2rest_emitter.py index e45210c..d2d9042 100644 --- a/creole/emitter/html2rest_emitter.py +++ b/creole/emitter/html2rest_emitter.py @@ -1,5 +1,3 @@ - - """ html -> reStructuredText Emitter ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -65,11 +63,10 @@ class ReStructuredTextEmitter(BaseEmitter): def inlinedata_pre_emit(self, node): """ a pre inline block -> no newline at the end """ - return "<pre>%s</pre>" % self.deentity.replace_all(node.content) + return f"<pre>{self.deentity.replace_all(node.content)}</pre>" def blockdata_pass_emit(self, node): return f"{node.content}\n\n" - return node.content # -------------------------------------------------------------------------- @@ -88,19 +85,19 @@ class ReStructuredTextEmitter(BaseEmitter): # add rest at the end if not result.endswith("\n\n"): result += "\n\n" - result += "%s\n\n" % self._get_block_data() + result += f"{self._get_block_data()}\n\n" return result def emit_node(self, node): result = "" if self._substitution_data and node.parent == self.root: - result += "%s\n\n" % self._get_block_data() + result += f"{self._get_block_data()}\n\n" result += super().emit_node(node) return result def p_emit(self, node): - return "%s\n\n" % self.emit_children(node) + return f"{self.emit_children(node)}\n\n" HEADLINE_DATA = { 1: ("=", True), @@ -255,7 +252,7 @@ class ReStructuredTextEmitter(BaseEmitter): # -------------------------------------------------------------------------- def code_emit(self, node): - return "``%s``" % self._emit_content(node) + return f"``{self._emit_content(node)}``" # -------------------------------------------------------------------------- @@ -293,52 +290,3 @@ class ReStructuredTextEmitter(BaseEmitter): self.emit_children(node) content = self._table.get_rest_table() return f"{content}\n\n" - - -if __name__ == '__main__': - import doctest - print(doctest.testmod()) - -# import sys;sys.exit() - from creole.parser.html_parser import HtmlParser - - data = """<p>A nested bullet lists:</p> -<ul> -<li><p>item 1</p> -<ul> -<li><p>A <strong>bold subitem 1.1</strong> here.</p> -<ul> -<li>subsubitem 1.1.1</li> -<li>subsubitem 1.1.2 with inline <img alt="substitution text" src="/url/to/image.png" /> image.</li> -</ul> -</li> -<li><p>subitem 1.2</p> -</li> -</ul> -</li> -<li><p>item 2</p> -<ul> -<li>subitem 2.1</li> -</ul> -</li> -</ul> -<p>Text under list.</p> -<p>4 <img alt="PNG pictures" src="/image.png" /> four</p> -<p>5 <img alt="Image without files ext?" src="/path1/path2/image" /> five</p> -""" - - print(data) - h2c = HtmlParser( - # debug=True - ) - document_tree = h2c.feed(data) - h2c.debug() - - e = ReStructuredTextEmitter(document_tree, - debug=True - ) - content = e.emit() - print("*" * 79) - print(content) - print("*" * 79) - print(content.replace(" ", ".").replace("\n", "\\n\n")) diff --git a/creole/emitter/html2textile_emitter.py b/creole/emitter/html2textile_emitter.py index 785ed17..89623d4 100644 --- a/creole/emitter/html2textile_emitter.py +++ b/creole/emitter/html2textile_emitter.py @@ -1,5 +1,3 @@ - - """ html -> textile Emitter ~~~~~~~~~~~~~~~~~~~~~~ @@ -35,20 +33,19 @@ class TextileEmitter(BaseEmitter): def blockdata_pre_emit(self, node): """ pre block -> with newline at the end """ - return "<pre>%s</pre>\n" % self.deentity.replace_all(node.content) + return f"<pre>{self.deentity.replace_all(node.content)}</pre>\n" def inlinedata_pre_emit(self, node): """ a pre inline block -> no newline at the end """ - return "<pre>%s</pre>" % self.deentity.replace_all(node.content) + return f"<pre>{self.deentity.replace_all(node.content)}</pre>" def blockdata_pass_emit(self, node): return f"{node.content}\n\n" - return node.content # -------------------------------------------------------------------------- def p_emit(self, node): - return "%s\n\n" % self.emit_children(node) + return f"{self.emit_children(node)}\n\n" def headline_emit(self, node): return f"h{node.level:d}. {self.emit_children(node)}\n\n" @@ -127,41 +124,3 @@ class TextileEmitter(BaseEmitter): def ol_emit(self, node): return self._list_emit(node, list_type="#") - - -if __name__ == '__main__': - import doctest - print(doctest.testmod()) - -# import sys;sys.exit() - from creole.parser.html_parser import HtmlParser - - data = """ -<h1>Textile</h1> -<table> -<tr> - <th>Headline 1</th> - <th>Headline 2</th> -</tr> -<tr> - <td>cell one</td> - <td>cell two</td> -</tr> -</table> -""" - -# print(data.strip()) - h2c = HtmlParser( - debug=True - ) - document_tree = h2c.feed(data) - h2c.debug() - - e = TextileEmitter(document_tree, - debug=True - ) - content = e.emit() - print("*" * 79) - print(content) - print("*" * 79) - print(content.replace(" ", ".").replace("\n", "\\n\n")) diff --git a/creole/exceptions.py b/creole/exceptions.py index 826ddbd..e8ff79c 100644 --- a/creole/exceptions.py +++ b/creole/exceptions.py @@ -1,5 +1,3 @@ - - """ python-creole exceptions ~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/creole/html_tools/strip_html.py b/creole/html_tools/strip_html.py index be3d37e..d8dbac3 100644 --- a/creole/html_tools/strip_html.py +++ b/creole/html_tools/strip_html.py @@ -1,5 +1,3 @@ - - """ python-creole utils ~~~~~~~~~~~~~~~~~~~ diff --git a/creole/html_tools/text_tools.py b/creole/html_tools/text_tools.py index c08b392..7963bd6 100644 --- a/creole/html_tools/text_tools.py +++ b/creole/html_tools/text_tools.py @@ -1,5 +1,3 @@ - - """ python-creole utils ~~~~~~~~~~~~~~~~~~~ diff --git a/creole/parser/html_parser.py b/creole/parser/html_parser.py index d789a97..a3879a9 100644 --- a/creole/parser/html_parser.py +++ b/creole/parser/html_parser.py @@ -235,7 +235,7 @@ class HtmlParser(HTMLParser): if tag == "br": # handled in starttag return - self.debug_msg("starttag", "%r" % self.get_starttag_text()) + self.debug_msg("starttag", f"{self.get_starttag_text()!r}") if tag in ("ul", "ol"): self.__list_level -= 1 diff --git a/creole/rest_tools/clean_writer.py b/creole/rest_tools/clean_writer.py index e8c224b..e55361d 100644 --- a/creole/rest_tools/clean_writer.py +++ b/creole/rest_tools/clean_writer.py @@ -131,7 +131,7 @@ class CleanHTMLTranslator(html4css1.HTMLTranslator): self.html_body.extend( self.body_prefix[1:] + self.body_pre_docinfo + self.docinfo + self.body + self.body_suffix[:-1] ) - assert not self.context, 'len(context) = %s' % len(self.context) + assert not self.context, f'len(context) = {len(self.context)}' # __________________________________________________________________________ # Clean table: diff --git a/creole/rest_tools/pypi_rest2html.py b/creole/rest_tools/pypi_rest2html.py index 50b2d54..368572e 100644 --- a/creole/rest_tools/pypi_rest2html.py +++ b/creole/rest_tools/pypi_rest2html.py @@ -1,5 +1,3 @@ - - """ Try to be so strict as PyPi. @@ -19,7 +17,7 @@ from creole.exceptions import DocutilsImportError try: import docutils # noqa flake8 from docutils import io, readers - from docutils.core import publish_doctree, Publisher + from docutils.core import Publisher, publish_doctree from docutils.transforms import TransformError except ImportError as err: msg = ( diff --git a/creole/shared/base_emitter.py b/creole/shared/base_emitter.py index a6e2819..4f7c5f4 100644 --- a/creole/shared/base_emitter.py +++ b/creole/shared/base_emitter.py @@ -81,7 +81,7 @@ class BaseEmitter: # -------------------------------------------------------------------------- def p_emit(self, node): - return "%s\n\n" % self.emit_children(node) + return f"{self.emit_children(node)}\n\n" def br_emit(self, node): if self._inner_list != "": @@ -111,7 +111,7 @@ class BaseEmitter: else: self._inner_list += list_type - content = "%s" % self.emit_children(node) + content = f"{self.emit_children(node)}" self._inner_list = self._inner_list[:-1] diff --git a/creole/shared/document_tree.py b/creole/shared/document_tree.py index fdcc863..7e22266 100644 --- a/creole/shared/document_tree.py +++ b/creole/shared/document_tree.py @@ -1,5 +1,3 @@ - - """ python-creole ~~~~~~~~~~~~~ diff --git a/creole/shared/example_macros.py b/creole/shared/example_macros.py index 78f317c..635e920 100644 --- a/creole/shared/example_macros.py +++ b/creole/shared/example_macros.py @@ -35,7 +35,7 @@ def pre(text): Macro tag <<pre>>...<</pre>>. Put text between html pre tag. """ - return '<pre>%s</pre>' % escape(text) + return f'<pre>{escape(text)}</pre>' def code(ext, text): diff --git a/creole/shared/markup_table.py b/creole/shared/markup_table.py index dd26374..444aae9 100644 --- a/creole/shared/markup_table.py +++ b/creole/shared/markup_table.py @@ -81,8 +81,8 @@ class MarkupTable: # preformat every table cell cells, widths = self._get_preformat_info() - separator_line = "+%s+" % "+".join(["-" * width for width in widths]) - headline_separator = "+%s+" % "+".join(["=" * width for width in widths]) + separator_line = f"+{'+'.join([('-' * width) for width in widths])}+" + headline_separator = f"+{'+'.join([('=' * width) for width in widths])}+" lines = [] for no, row in enumerate(cells): diff --git a/creole/shared/unknown_tags.py b/creole/shared/unknown_tags.py index 8d36ad0..e08492f 100644 --- a/creole/shared/unknown_tags.py +++ b/creole/shared/unknown_tags.py @@ -1,5 +1,3 @@ - - """ python-creole ~~~~~~~~~~~~~ diff --git a/creole/tests/test_cli.py b/creole/tests/test_cli.py index 76d8050..6c4fa84 100644 --- a/creole/tests/test_cli.py +++ b/creole/tests/test_cli.py @@ -1,5 +1,3 @@ - - """ unittest for CLI ~~~~~~~~~~~~~~~~ diff --git a/creole/tests/test_creole2html.py b/creole/tests/test_creole2html.py index d129848..e2d2a0a 100644 --- a/creole/tests/test_creole2html.py +++ b/creole/tests/test_creole2html.py @@ -66,7 +66,7 @@ class TestCreole2html(BaseCreoleTest): tb_lines = [" -" * 40] tb_lines += error_msg.splitlines() tb_lines += [" -" * 40] - tb = "\n".join([" >>> %s" % l for l in tb_lines]) + tb = "\n".join([" >>> %s" % line for line in tb_lines]) msg = f"{part!r} not found in:\n{tb}" # TODO: use assertIn if python 2.6 will be not support anymore. if part not in error_msg: diff --git a/creole/tests/test_cross_compare_all.py b/creole/tests/test_cross_compare_all.py index c09b550..cd85eef 100644 --- a/creole/tests/test_cross_compare_all.py +++ b/creole/tests/test_cross_compare_all.py @@ -1,5 +1,3 @@ - - """ cross compare unittest ~~~~~~~~~~~~~~~~~~~~~~ diff --git a/creole/tests/test_cross_compare_creole.py b/creole/tests/test_cross_compare_creole.py index fe71397..396b2af 100644 --- a/creole/tests/test_cross_compare_creole.py +++ b/creole/tests/test_cross_compare_creole.py @@ -1,5 +1,3 @@ - - """ cross compare creole unittest ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/creole/tests/test_cross_compare_rest.py b/creole/tests/test_cross_compare_rest.py index a475e06..1b891e2 100644 --- a/creole/tests/test_cross_compare_rest.py +++ b/creole/tests/test_cross_compare_rest.py @@ -1,5 +1,3 @@ - - """ cross compare reStructuredText unittest ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/creole/tests/test_cross_compare_textile.py b/creole/tests/test_cross_compare_textile.py index b387806..7277537 100644 --- a/creole/tests/test_cross_compare_textile.py +++ b/creole/tests/test_cross_compare_textile.py @@ -1,5 +1,3 @@ - - """ cross compare textile unittest ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/creole/tests/test_html2creole.py b/creole/tests/test_html2creole.py index 7cbad0d..452bc5d 100644 --- a/creole/tests/test_html2creole.py +++ b/creole/tests/test_html2creole.py @@ -1,5 +1,3 @@ - - """ html2creole tests ~~~~~~~~~~~~~~~~~ diff --git a/creole/tests/test_html2rest.py b/creole/tests/test_html2rest.py index 13ac4ee..572816f 100644 --- a/creole/tests/test_html2rest.py +++ b/creole/tests/test_html2rest.py @@ -1,5 +1,3 @@ - - """ html2rest unittest ~~~~~~~~~~~~~~~~~~~~~ diff --git a/creole/tests/test_html2textile.py b/creole/tests/test_html2textile.py index 318eca6..3da6805 100644 --- a/creole/tests/test_html2textile.py +++ b/creole/tests/test_html2textile.py @@ -1,5 +1,3 @@ - - """ html2textile unittest ~~~~~~~~~~~~~~~~~~~~~ diff --git a/creole/tests/test_project_setup.py b/creole/tests/test_project_setup.py index 4d100a3..cc06578 100644 --- a/creole/tests/test_project_setup.py +++ b/creole/tests/test_project_setup.py @@ -2,8 +2,7 @@ :copyleft: 2020 by python-creole team, see AUTHORS for more details. :license: GNU GPL v3 or above, see LICENSE for more details. """ - -from poetry_publish.tests.test_project_setup import test_assert_rst_readme as assert_rst_readme +from poetry_publish.tests.test_assert_rst_readme import test_assert_rst_readme as assert_rst_readme from poetry_publish.tests.test_project_setup import test_poetry_check as assert_poetry_check from poetry_publish.tests.test_project_setup import test_version as assert_version diff --git a/creole/tests/test_rest2html.py b/creole/tests/test_rest2html.py index 195e65e..87c8b3c 100644 --- a/creole/tests/test_rest2html.py +++ b/creole/tests/test_rest2html.py @@ -1,5 +1,3 @@ - - """ rest2html unittest ~~~~~~~~~~~~~~~~~~ diff --git a/creole/tests/test_utils.py b/creole/tests/test_utils.py index c310aa1..061f2cd 100644 --- a/creole/tests/test_utils.py +++ b/creole/tests/test_utils.py @@ -1,5 +1,3 @@ - - """ unittest for some utils ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/pyproject.toml b/pyproject.toml index 679b059..fce9de7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,9 +32,10 @@ classifiers = [ packages = [ { include = "creole" }, ] +include = ['AUTHORS', 'LICENSE'] [tool.poetry.dependencies] -python = "^3.6" +python = ">=3.6,<4.0.0" docutils = "*" [tool.poetry.dev-dependencies] @@ -48,6 +49,7 @@ isort = "*" flake8 = "*" flynt = "*" autopep8 = "*" +pyupgrade = "*" [tool.poetry.scripts] creole2html = "creole.cmdline:cli_creole2html" @@ -25,9 +25,6 @@ addopts = # per-test capturing method: one of fd|sys|no: #--capture=no - # We used logging config in django, so: disable printing caught logs on failed tests. - --no-print-logs - # run the last failures first: --failed-first |