pax_global_header00006660000000000000000000000064144677631760014537gustar00rootroot0000000000000052 comment=9c0f7d8d141abff4fcae4b9273ac385c6bbe9cf3 python-readme-renderer-41.0/000077500000000000000000000000001446776317600160435ustar00rootroot00000000000000python-readme-renderer-41.0/.github/000077500000000000000000000000001446776317600174035ustar00rootroot00000000000000python-readme-renderer-41.0/.github/workflows/000077500000000000000000000000001446776317600214405ustar00rootroot00000000000000python-readme-renderer-41.0/.github/workflows/ci.yml000066400000000000000000000027711446776317600225650ustar00rootroot00000000000000name: CI on: [push, pull_request] jobs: test: name: Test - ${{ matrix.python-version }} runs-on: ubuntu-latest strategy: matrix: python-version: ["pypy-3.8", "3.8", "3.9", "3.10", "3.11"] steps: - name: Check out repository uses: actions/checkout@v3 - name: Install Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} check-latest: true - name: Install dependencies run: python -m pip install tox - name: Run tests run: | python -m tox -e py python -m tox -e noextra lint: name: Lint runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Install Python uses: actions/setup-python@v4 with: python-version: "3.x" check-latest: true - name: Install dependencies run: python -m pip install tox - name: Run linting run: python -m tox -e pep8 - name: Run mypy run: python -m tox -e mypy packaging: name: Packaging runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Install Python uses: actions/setup-python@v4 with: python-version: "3.x" check-latest: true - name: Install dependencies run: python -m pip install tox - name: Test packaging run: python -m tox -e packaging python-readme-renderer-41.0/.github/workflows/release.yml000066400000000000000000000012471446776317600236070ustar00rootroot00000000000000name: Release on: release: types: [published] jobs: build-and-publish: runs-on: ubuntu-latest permissions: # IMPORTANT: this permission is mandatory for trusted publishing id-token: write steps: - name: Checkout uses: actions/checkout@v3 with: ref: ${{ github.event.release.tag_name }} - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.x" check-latest: true - name: Install build dependencies run: pip install -U setuptools wheel build - name: Build run: python -m build . - name: Publish uses: pypa/gh-action-pypi-publish@release/v1 python-readme-renderer-41.0/.gitignore000066400000000000000000000002261446776317600200330ustar00rootroot00000000000000__pycache__/ _build/ build/ dist/ htmlcov/ .tox/ .cache/ .coverage *.egg-info/ *.egg *.eggs *.py[co] .pytest_cache/ .python-version .idea/ .vscode/ python-readme-renderer-41.0/.gitpod.yml000066400000000000000000000012601446776317600201310ustar00rootroot00000000000000# See https://www.gitpod.io/docs/references/gitpod-yml for full reference tasks: - name: Setup Development and run Tests init: | # Upgrade pyenv itself pyenv update export PY_VERSIONS="3.8 3.9 3.10 3.11" # Install all supported Python versions for py in $PY_VERSIONS; do pyenv install "$py":latest --skip-existing ; done # Make versions available via $PATH, exclude GitPod default pyenv global $(pyenv versions --bare | grep -v 3.8.13) # Install `tox` test orchestrator pip install tox command: tox vscode: extensions: - ms-python.python - EditorConfig.EditorConfig - bungcip.better-toml python-readme-renderer-41.0/CHANGES.rst000066400000000000000000000126171446776317600176540ustar00rootroot00000000000000Changes ======= 41.0 (2023-08-18) ----------------- * Allow HTML5 `figcaption` tag through cleaner (#291) * Test `README.rst` from this project (#288) 40.0 (2023-06-16) ----------------- * Add CLI option to render package README. (#271) * Adapt tests to pygments 2.14.0 (#272) * Update release process to use Trusted Publishing (#276) * Replace usage of deprecated `pkg_resources` with `importlib.metadata` (#281) * Drop support for Python 3.7 (#282), Test against Python 3.11 (#280) 37.3 (2022-10-31) ----------------- * Allow HTML5 `figure` tag through cleaner (#265) 37.2 (2022-09-24) ----------------- * Allow HTML5 `s` tag through cleaner (#261) 37.1 (2022-09-03) ----------------- * Allow HTML5 `nav` tag through cleaner (#259) 37.0 (2022-08-21) ----------------- * Remove command line example from docs (#197) * Multiple pyproject.toml fixes (#251) * Confirm handling multiple inline strong (#252) * Convert RST output to HTML5 (#253) * Add Typing to classifiers (#254) * Development tweaks - coverage reporting, actions updates (#255) * Add test confirming behavior with unknown lexers (#256) 36.0 (2022-08-06) ----------------- * Enable gitpod development (#238) * Allow rst admonitions to render (#242) * Add badges to README (#243) * Update codebase for modern Python (#244) * Fix table cell spans (#245) * Allow ``math`` directive in rst (#246) * Preserve ``lang`` attribute in ``pre`` (#247) 35.0 (2022-04-19) ----------------- * Add py.typed to the built wheel (#228) * Use isolated build for tox (#229) * Fix renderer ignore (#230) * Remove legacy check command and distutils (#233) * Emit a warning when no content is rendered (#231) * Drop support for Python 3.6 (#236) * Update html attribute order in tests (#235) 34.0 (2022-03-11) ----------------- * Add static types (#225) 33.0 (2022-03-05) ----------------- * Support cmarkgfm>=0.8.0 (#224) 33.0 (2022-02-05) ----------------- * Support cmarkgfm>=0.8.0 (#224) * Support Python 3.10 32.0 (2021-12-13) ----------------- * Allow start attribute in ordered lists (#216) * No limit rendering RST one column field names (#219) 31.0 (2021-12-09) ----------------- * Render disabled checkboxes from Markdown (#217) 30.0 (2021-09-30) ----------------- * support cmarkgfm>=0.6.0 (#209) 29.0 (2021-02-22) ----------------- * Support cmarkgfm>=0.5.0 (#180) * Drop support for Python 2 and 3.5 (#188) 28.0 (2020-10-20) ----------------- * Support Python 3.9 27.0 (2020-10-09) ----------------- * Add support for align attribute rendering Markdown headers (#173) 26.0 (2020-04-22) ----------------- * Fix regression with image width/height attributes (#164) 25.0 (2020-03-14) ----------------- * Support Python 3.7 and 3.8 * Drop support for Python 3.4 * Require Pygments>=2.5.1 24.0 (2018-10-27) ----------------- * Remove dependency on ``future``. (#134) 23.0 (2018-10-22) ----------------- * Breaking change: Move the cmarkgfm dependency into an extra (#130). Users that want to render Markdown will need to install readme_render[md] instead. 22.0 (2018-09-17) ----------------- * Unify handling of SVG and other images in RST. (#113) * Support width and alignment of images in RST (#114) 21.0 (2018-05-28) ----------------- * Allow . (#105) * Add specific tests for the raw directive. (#103) * Include docinfo when rendering rst. (#99) * Make Python 3 the default lexer for highlighting Python code in Markdown (#97) * Allow align attribute on

tags (#98) 20.0 (2018-04-13) ----------------- * Reformat docutils messages into more human-friendly output. (#92) * Fix incorrect escaping of html entities in pre tags when using markdown. (#89) * Allow width, height, alt, and align attributes on img tags. (#91) * Fix check to not report success when there is invalid RST. (#90) 19.0 (2018-04-10) ----------------- * Allow details and summary tags. (#77) * Add .pytest_cache to .gitignore. (#85) * Warn about Markdown content type when checking RST. (#83) * Update pep8 tox env to use py3.6. (#84) * Add Pygments-based syntax highlighting for Markdown. (#82) * Update docs about check to talk about Markdown. (#80) 18.1 (2018-04-01) ----------------- * Change Github-flavored Markdown identifier from ``gfm`` to ``GFM``. 18.0 (2018-03-30) ----------------- * Add support for GitHub-flavored Markdown. (#67) * Switch to cmarkgfm completely for rendering Markdown. (#68) * Warn about missing long description. (#69) * Make Github-Flavored Markdown the default variant (#73) 17.4 (2018-03-16) ----------------- * All renderers now accept arbitrary ``kwargs`` for future-proofing. 17.3 (2018-03-08) ----------------- * Gracefully handle new exceptions from bleach. 17.2 (2017-03-11) ----------------- * Fix an issue cleaning plaintext values. 17.1 (2017-03-09) ----------------- * Fix an issue attempting to clean data that had ```` tags without a href. 17.0 (2017-03-08) ----------------- * Fix issue with bleach >= 2.0. 16.0 (2016-12-09) ----------------- * Fix issue with docutils >= 0.13.1. 0.7.0 (2016-01-04) ------------------ * Renamed to ``readme_renderer``: https://github.com/pypa/readme_renderer to work around an name overlap with ``README`` files shipped in Python's default site-packages directory on certain case-insensitive file systems. * Added `PyPA Code of Conduct`_. * Allow and tags when cleaning rST HTML output. * Dropped support for Python 2.6. .. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ python-readme-renderer-41.0/LICENSE000066400000000000000000000227361446776317600170620ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. python-readme-renderer-41.0/MANIFEST.in000066400000000000000000000003561446776317600176050ustar00rootroot00000000000000include LICENSE README.rst CHANGES.rst include tox.ini include readme_renderer/py.typed recursive-include tests *.html recursive-include tests *.py recursive-include tests *.rst recursive-include tests *.txt recursive-include tests *.md python-readme-renderer-41.0/README.rst000066400000000000000000000023421446776317600175330ustar00rootroot00000000000000Readme Renderer =============== .. image:: https://badge.fury.io/py/readme-renderer.svg :target: https://badge.fury.io/py/readme-renderer .. image:: https://github.com/pypa/readme_renderer/actions/workflows/ci.yml/badge.svg :target: https://github.com/pypa/readme_renderer/actions/workflows/ci.yml Readme Renderer is a library that will safely render arbitrary ``README`` files into HTML. It is designed to be used in Warehouse_ to render the ``long_description`` for packages. It can handle Markdown, reStructuredText (``.rst``), and plain text. .. _Warehouse: https://github.com/pypa/warehouse Check Description Locally ------------------------- To locally check whether your long descriptions will render on PyPI, first build your distributions, and then use the |twine check|_ command. Code of Conduct --------------- Everyone interacting in the readme_renderer project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. .. |twine check| replace:: ``twine check`` .. _twine check: https://packaging.python.org/guides/making-a-pypi-friendly-readme#validating-restructuredtext-markup .. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md python-readme-renderer-41.0/pyproject.toml000066400000000000000000000010021446776317600207500ustar00rootroot00000000000000[build-system] requires = ["setuptools>=40.8.0"] build-backend = "setuptools.build_meta" # TODO: Remove when https://github.com/mgedmin/check-manifest/pull/155 released [tool.check-manifest] ignore = [".gitpod.yml"] [tool.coverage.run] branch = true [tool.mypy] strict = true warn_unused_configs = true show_error_codes = true enable_error_code = [ "ignore-without-code" ] [[tool.mypy.overrides]] # These modules do not yet have types available. module = [ "cmarkgfm.*" ] ignore_missing_imports = true python-readme-renderer-41.0/readme_renderer/000077500000000000000000000000001446776317600211665ustar00rootroot00000000000000python-readme-renderer-41.0/readme_renderer/__about__.py000066400000000000000000000021371446776317600234510ustar00rootroot00000000000000# Copyright 2014 Donald Stufft # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. __all__ = [ "__title__", "__summary__", "__uri__", "__version__", "__author__", "__email__", "__license__", "__copyright__", ] __title__ = "readme_renderer" __summary__ = ( 'readme_renderer is a library for rendering "readme" ' "descriptions for Warehouse" ) __uri__ = "https://github.com/pypa/readme_renderer" __version__ = "41.0" __author__ = "The Python Packaging Authority" __email__ = "admin@mail.pypi.org" __license__ = "Apache License, Version 2.0" __copyright__ = "Copyright 2014 %s" % __author__ python-readme-renderer-41.0/readme_renderer/__init__.py000066400000000000000000000010751446776317600233020ustar00rootroot00000000000000# Copyright 2014 Donald Stufft # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. python-readme-renderer-41.0/readme_renderer/__main__.py000066400000000000000000000050761446776317600232700ustar00rootroot00000000000000import argparse from readme_renderer.markdown import render as render_md from readme_renderer.rst import render as render_rst from readme_renderer.txt import render as render_txt import pathlib from importlib.metadata import metadata import sys from typing import Optional, List def main(cli_args: Optional[List[str]] = None) -> None: parser = argparse.ArgumentParser( description="Renders a .md, .rst, or .txt README to HTML", ) parser.add_argument("-p", "--package", help="Get README from package metadata", action="store_true") parser.add_argument("-f", "--format", choices=["md", "rst", "txt"], help="README format (inferred from input file name or package)") parser.add_argument('input', help="Input README file or package name") parser.add_argument('-o', '--output', help="Output file (default: stdout)", type=argparse.FileType('w'), default='-') args = parser.parse_args(cli_args) content_format = args.format if args.package: message = metadata(args.input) source = message.get_payload() # type: ignore[attr-defined] # noqa: E501 https://peps.python.org/pep-0566/ # Infer the format of the description from package metadata. if not content_format: content_type = message.get("Description-Content-Type", "text/x-rst") # type: ignore[attr-defined] # noqa: E501 https://github.com/python/typeshed/issues/10021 if content_type == "text/x-rst": content_format = "rst" elif content_type == "text/markdown": content_format = "md" elif content_type == "text/plain": content_format = "txt" else: raise ValueError(f"invalid content type {content_type} for package " "`long_description`") else: filename = pathlib.Path(args.input) content_format = content_format or filename.suffix.lstrip(".") with filename.open() as fp: source = fp.read() if content_format == "md": rendered = render_md(source, stream=sys.stderr) elif content_format == "rst": rendered = render_rst(source, stream=sys.stderr) elif content_format == "txt": rendered = render_txt(source, stream=sys.stderr) else: raise ValueError(f"invalid README format: {content_format} (expected `md`, " "`rst`, or `txt`)") if rendered is None: sys.exit(1) print(rendered, file=args.output) if __name__ == '__main__': main() python-readme-renderer-41.0/readme_renderer/clean.py000066400000000000000000000103241446776317600226220ustar00rootroot00000000000000# Copyright 2014 Donald Stufft # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import functools from typing import Any, Dict, Iterator, List, Optional import bleach import bleach.callbacks import bleach.linkifier import bleach.sanitizer ALLOWED_TAGS = [ # Bleach Defaults "a", "abbr", "acronym", "b", "blockquote", "code", "em", "i", "li", "ol", "strong", "ul", # Custom Additions "br", "caption", "cite", "col", "colgroup", "dd", "del", "details", "div", "dl", "dt", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "img", "p", "pre", "span", "sub", "summary", "sup", "table", "tbody", "td", "th", "thead", "tr", "tt", "kbd", "var", "input", "section", "aside", "nav", "s", "figure", "figcaption", ] ALLOWED_ATTRIBUTES = { # Bleach Defaults "a": ["href", "title"], "abbr": ["title"], "acronym": ["title"], # Custom Additions "*": ["id"], "hr": ["class"], "img": ["src", "width", "height", "alt", "align", "class"], "span": ["class"], "th": ["align", "class"], "td": ["align", "colspan", "rowspan"], "div": ["align", "class"], "h1": ["align"], "h2": ["align"], "h3": ["align"], "h4": ["align"], "h5": ["align"], "h6": ["align"], "code": ["class"], "p": ["align", "class"], "pre": ["lang"], "ol": ["start"], "input": ["type", "checked", "disabled"], "aside": ["class"], "dd": ["class"], "dl": ["class"], "dt": ["class"], "ul": ["class"], "nav": ["class"], "figure": ["class"], } class DisabledCheckboxInputsFilter: # The typeshed for bleach (html5lib) filters is incomplete, use `typing.Any` # See https://github.com/python/typeshed/blob/505ea726415016e53638c8b584b8fdc9c722cac1/stubs/bleach/bleach/html5lib_shim.pyi#L7-L8 # noqa E501 def __init__(self, source: Any) -> None: self.source = source def __iter__(self) -> Iterator[Dict[str, Optional[str]]]: for token in self.source: if token.get("name") == "input": # only allow disabled checkbox inputs is_checkbox, is_disabled, unsafe_attrs = False, False, False for (_, attrname), value in token.get("data", {}).items(): if attrname == "type" and value == "checkbox": is_checkbox = True elif attrname == "disabled": is_disabled = True elif attrname != "checked": unsafe_attrs = True break if is_checkbox and is_disabled and not unsafe_attrs: yield token else: yield token def __getattr__(self, name: str) -> Any: return getattr(self.source, name) def clean( html: str, tags: Optional[List[str]] = None, attributes: Optional[Dict[str, List[str]]] = None ) -> Optional[str]: if tags is None: tags = ALLOWED_TAGS if attributes is None: attributes = ALLOWED_ATTRIBUTES # Clean the output using Bleach cleaner = bleach.sanitizer.Cleaner( tags=tags, attributes=attributes, filters=[ # Bleach Linkify makes it easy to modify links, however, we will # not be using it to create additional links. functools.partial( bleach.linkifier.LinkifyFilter, callbacks=[ lambda attrs, new: attrs if not new else None, bleach.callbacks.nofollow, ], skip_tags=["pre"], parse_email=False, ), DisabledCheckboxInputsFilter, ], ) try: cleaned = cleaner.clean(html) return cleaned except ValueError: return None python-readme-renderer-41.0/readme_renderer/markdown.py000066400000000000000000000070131446776317600233630ustar00rootroot00000000000000# Copyright 2014 Donald Stufft # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import re import warnings from typing import cast, Any, Dict, Callable, Match, Optional from html import unescape import pygments import pygments.lexers import pygments.formatters from .clean import clean _EXTRA_WARNING = ( "Markdown renderers are not available. " "Install 'readme_renderer[md]' to enable Markdown rendering." ) try: import cmarkgfm from cmarkgfm.cmark import Options as cmarkgfmOptions variants: Dict[str, Callable[[str], str]] = { "GFM": lambda raw: cast(str, cmarkgfm.github_flavored_markdown_to_html( raw, options=cmarkgfmOptions.CMARK_OPT_UNSAFE )), "CommonMark": lambda raw: cast(str, cmarkgfm.markdown_to_html( raw, options=cmarkgfmOptions.CMARK_OPT_UNSAFE )), } except ImportError: warnings.warn(_EXTRA_WARNING) variants = {} # Make code fences with `python` as the language default to highlighting as # Python 3. _LANG_ALIASES = { 'python': 'python3', } def render( raw: str, variant: str = "GFM", **kwargs: Any ) -> Optional[str]: if not variants: warnings.warn(_EXTRA_WARNING) return None renderer = variants.get(variant) if not renderer: return None rendered = renderer(raw) if not rendered: return None highlighted = _highlight(rendered) cleaned = clean(highlighted) return cleaned def _highlight(html: str) -> str: """Syntax-highlights HTML-rendered Markdown. Plucks sections to highlight that conform the the GitHub fenced code info string as defined at https://github.github.com/gfm/#info-string. Args: html (str): The rendered HTML. Returns: str: The HTML with Pygments syntax highlighting applied to all code blocks. """ formatter = pygments.formatters.HtmlFormatter(nowrap=True) code_expr = re.compile( # cmarkgfm<0.6.0:

print('hello')
# cmarkgfm>=0.6.0:
print('hello')
r'(
(?P[^"]+?)">'
        '(?(in_code)|)(?P.+?)'
        r'
', re.DOTALL) def replacer(match: Match[Any]) -> str: try: lang = match.group('lang') lang = _LANG_ALIASES.get(lang, lang) lexer = pygments.lexers.get_lexer_by_name(lang) except ValueError: lexer = pygments.lexers.TextLexer() code = match.group('code') # Decode html entities in the code. cmark tries to be helpful and # translate '"' to '"', but it confuses pygments. Pygments will # escape any html entities when re-writing the code, and we run # everything through bleach after. code = unescape(code) highlighted = pygments.highlight(code, lexer, formatter) return f'
{highlighted}
' result = code_expr.sub(replacer, html) return result python-readme-renderer-41.0/readme_renderer/py.typed000066400000000000000000000000001446776317600226530ustar00rootroot00000000000000python-readme-renderer-41.0/readme_renderer/rst.py000066400000000000000000000105541446776317600223550ustar00rootroot00000000000000# Copyright 2014 Donald Stufft # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import io from typing import Any, Dict, IO, Optional, Union from docutils.core import publish_parts from docutils.nodes import colspec, image from docutils.writers.html5_polyglot import HTMLTranslator, Writer from docutils.utils import SystemMessage from .clean import clean class ReadMeHTMLTranslator(HTMLTranslator): # type: ignore[misc] # docutils is incomplete, returns `Any` python/typeshed#7256 # noqa E501 # Overrides base class not to output `` tag for SVG images. object_image_types: Dict[str, str] = {} def emptytag( self, node: Union[colspec, image], tagname: str, suffix: str = "\n", **attributes: Any ) -> Any: """Override this to add back the width/height attributes.""" if tagname == "img": if "width" in node: attributes["width"] = node["width"] if "height" in node: attributes["height"] = node["height"] return super().emptytag( node, tagname, suffix, **attributes ) SETTINGS = { # Cloaking email addresses provides a small amount of additional # privacy protection for email addresses inside of a chunk of ReST. "cloak_email_addresses": True, # Prevent a lone top level heading from being promoted to document # title, and thus second level headings from being promoted to top # level. "doctitle_xform": True, # Prevent a lone subsection heading from being promoted to section # title, and thus second level headings from being promoted to top # level. "sectsubtitle_xform": True, # Set our initial header level "initial_header_level": 2, # Prevent local files from being included into the rendered output. # This is a security concern because people can insert files # that are part of the system, such as /etc/passwd. "file_insertion_enabled": False, # Halt rendering and throw an exception if there was any errors or # warnings from docutils. "halt_level": 2, # Output math blocks as LaTeX that can be interpreted by MathJax for # a prettier display of Math formulas. # Pass a dummy path to supress docutils warning and emit HTML. "math_output": "MathJax /dummy.js", # Disable raw html as enabling it is a security risk, we do not want # people to be able to include any old HTML in the final output. "raw_enabled": False, # Disable all system messages from being reported. "report_level": 5, # Use typographic quotes, and transform --, ---, and ... into their # typographic counterparts. "smart_quotes": True, # Strip all comments from the rendered output. "strip_comments": True, # Use the short form of syntax highlighting so that the generated # Pygments CSS can be used to style the output. "syntax_highlight": "short", # Maximum width (in characters) for one-column field names. # 0 means "no limit" "field_name_limit": 0, } def render( raw: str, stream: Optional[IO[str]] = None, **kwargs: Any ) -> Optional[str]: if stream is None: # Use a io.StringIO as the warning stream to prevent warnings from # being printed to sys.stderr. stream = io.StringIO() settings = SETTINGS.copy() settings["warning_stream"] = stream writer = Writer() writer.translator_class = ReadMeHTMLTranslator try: parts = publish_parts(raw, writer=writer, settings_overrides=settings) except SystemMessage: rendered = None else: rendered = parts.get("docinfo", "") + parts.get("fragment", "") if rendered: return clean(rendered) else: # If the warnings stream is empty, docutils had none, so add ours. if not stream.tell(): stream.write("No content rendered from RST source.") return None python-readme-renderer-41.0/readme_renderer/txt.py000066400000000000000000000014671446776317600223670ustar00rootroot00000000000000# Copyright 2015 Donald Stufft # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from typing import Any, Optional from .clean import clean from html import escape as html_escape def render(raw: str, **kwargs: Any) -> Optional[str]: rendered = html_escape(raw).replace("\n", "
") return clean(rendered, tags=["br"]) python-readme-renderer-41.0/setup.cfg000066400000000000000000000000431446776317600176610ustar00rootroot00000000000000[metadata] license_files = LICENSE python-readme-renderer-41.0/setup.py000066400000000000000000000043651446776317600175650ustar00rootroot00000000000000# Copyright 2014 Donald Stufft # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import pathlib import setuptools base_dir = pathlib.Path(__file__).parent with open(base_dir.joinpath("readme_renderer", "__about__.py")) as f: about = {} exec(f.read(), about) with open(base_dir.joinpath("README.rst")) as f: long_description = f.read() setuptools.setup( name=about["__title__"], version=about["__version__"], description=about["__summary__"], long_description=long_description, license=about["__license__"], url=about["__uri__"], author=about["__author__"], author_email=about["__email__"], classifiers=[ "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Operating System :: POSIX :: BSD", "Operating System :: POSIX :: Linux", "Operating System :: Microsoft :: Windows", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Typing :: Typed", ], install_requires=["bleach>=2.1.0", "docutils>=0.13.1", "Pygments>=2.5.1"], include_package_data=True, extras_require={"md": "cmarkgfm>=0.8.0"}, packages=setuptools.find_packages(exclude=["tests", "tests.*"]), python_requires=">=3.8", ) python-readme-renderer-41.0/tests/000077500000000000000000000000001446776317600172055ustar00rootroot00000000000000python-readme-renderer-41.0/tests/__init__.py000066400000000000000000000000001446776317600213040ustar00rootroot00000000000000python-readme-renderer-41.0/tests/fixtures/000077500000000000000000000000001446776317600210565ustar00rootroot00000000000000python-readme-renderer-41.0/tests/fixtures/test_CommonMark_001.html000066400000000000000000000000151446776317600254220ustar00rootroot00000000000000

Hello

python-readme-renderer-41.0/tests/fixtures/test_CommonMark_001.md000066400000000000000000000000061446776317600250560ustar00rootroot00000000000000Hello python-readme-renderer-41.0/tests/fixtures/test_CommonMark_002.html000066400000000000000000000000431446776317600254240ustar00rootroot00000000000000

http://mymalicioussite.com/

python-readme-renderer-41.0/tests/fixtures/test_CommonMark_002.md000066400000000000000000000000341446776317600250600ustar00rootroot00000000000000http://mymalicioussite.com/ python-readme-renderer-41.0/tests/fixtures/test_CommonMark_003.html000066400000000000000000000002421446776317600254260ustar00rootroot00000000000000

Required packages

To run the PyPI software, you need Python 2.5+ and PostgreSQL

Quick development setup

Make sure you are sitting

python-readme-renderer-41.0/tests/fixtures/test_CommonMark_003.md000066400000000000000000000002121446776317600250570ustar00rootroot00000000000000## Required packages To run the PyPI software, you need Python 2.5+ and PostgreSQL ## Quick development setup Make sure you are sitting python-readme-renderer-41.0/tests/fixtures/test_CommonMark_004.html000066400000000000000000000002421446776317600254270ustar00rootroot00000000000000

Required packages

To run the PyPI software, you need Python 2.5+ and PostgreSQL

Quick development setup

Make sure you are sitting

python-readme-renderer-41.0/tests/fixtures/test_CommonMark_004.md000066400000000000000000000002411446776317600250620ustar00rootroot00000000000000

Required packages

To run the PyPI software, you need Python 2.5+ and PostgreSQL

Quick development setup

Make sure you are sitting

python-readme-renderer-41.0/tests/fixtures/test_CommonMark_005.html000066400000000000000000000001131446776317600254250ustar00rootroot00000000000000

Click here

python-readme-renderer-41.0/tests/fixtures/test_CommonMark_005.md000066400000000000000000000000651446776317600250670ustar00rootroot00000000000000Click here python-readme-renderer-41.0/tests/fixtures/test_CommonMark_006.html000066400000000000000000000001121446776317600254250ustar00rootroot00000000000000<iframe src="http://mymalicioussite.com/">Click here</iframe> python-readme-renderer-41.0/tests/fixtures/test_CommonMark_006.md000066400000000000000000000000751446776317600250710ustar00rootroot00000000000000python-readme-renderer-41.0/tests/fixtures/test_CommonMark_007.html000066400000000000000000000001331446776317600254310ustar00rootroot00000000000000

Something naughty this way comes

<script> alert("Hello"); </script> python-readme-renderer-41.0/tests/fixtures/test_CommonMark_007.md000066400000000000000000000001101446776317600250600ustar00rootroot00000000000000Something naughty this way comes python-readme-renderer-41.0/tests/fixtures/test_CommonMark_008.html000066400000000000000000000032411446776317600254350ustar00rootroot00000000000000

Here is some Python code for a Dog:

class Dog(Animal):
    def __init__(self, name):
        self.name = name

    def make_sound(self):
        print('Ruff!')

dog = Dog('Fido')

and then here is some bash:

if [ "$1" = "--help" ]; then
    echo "OK"
fi

or click SurveyMonkey

python-readme-renderer-41.0/tests/fixtures/test_CommonMark_008.md000066400000000000000000000005221446776317600250700ustar00rootroot00000000000000Here is some Python code for a `Dog`: ```python class Dog(Animal): def __init__(self, name): self.name = name def make_sound(self): print('Ruff!') dog = Dog('Fido') ``` and then here is some bash: ```bash if [ "$1" = "--help" ]; then echo "OK" fi ``` or click [SurveyMonkey](http://www.surveymonkey.com) python-readme-renderer-41.0/tests/fixtures/test_CommonMark_009.html000066400000000000000000000001761446776317600254420ustar00rootroot00000000000000

Normal text

Why am I getting an error during installation/when launching rtv?
python-readme-renderer-41.0/tests/fixtures/test_CommonMark_009.md000066400000000000000000000001701446776317600250700ustar00rootroot00000000000000Normal text
Why am I getting an error during installation/when launching rtv?
python-readme-renderer-41.0/tests/fixtures/test_CommonMark_smart_strong.html000066400000000000000000000001451446776317600276500ustar00rootroot00000000000000

Regular double underscore words.

Text with double__underscore__words.

python-readme-renderer-41.0/tests/fixtures/test_CommonMark_smart_strong.md000066400000000000000000000001131446776317600272770ustar00rootroot00000000000000Regular __double underscore__ words. Text with double__underscore__words. python-readme-renderer-41.0/tests/fixtures/test_CommonMark_strong.html000066400000000000000000000002701446776317600264410ustar00rootroot00000000000000

sphinx: a password Store that Perfectly Hides from Itself (No Xaggeration)

python-readme-renderer-41.0/tests/fixtures/test_CommonMark_strong.md000066400000000000000000000001431446776317600260740ustar00rootroot00000000000000sphinx: a password **S**tore that **P**erfectly **H**ides from **I**tself (**N**o **X**aggeration) python-readme-renderer-41.0/tests/fixtures/test_CommonMark_style.html000066400000000000000000000000521446776317600262630ustar00rootroot00000000000000 python-readme-renderer-41.0/tests/fixtures/test_CommonMark_style.md000066400000000000000000000000521446776317600257170ustar00rootroot00000000000000 python-readme-renderer-41.0/tests/fixtures/test_GFM_001.html000066400000000000000000000001751446776317600237770ustar00rootroot00000000000000
foo bar
baz bim
python-readme-renderer-41.0/tests/fixtures/test_GFM_001.md000066400000000000000000000000521446776317600234250ustar00rootroot00000000000000| foo | bar | | --- | --- | | baz | bim | python-readme-renderer-41.0/tests/fixtures/test_GFM_002.html000066400000000000000000000002721446776317600237760ustar00rootroot00000000000000
abc defghi
bar baz
python-readme-renderer-41.0/tests/fixtures/test_GFM_002.md000066400000000000000000000000561446776317600234320ustar00rootroot00000000000000| abc | defghi | :-: | -----------: bar | baz python-readme-renderer-41.0/tests/fixtures/test_GFM_003.html000066400000000000000000000002401446776317600237720ustar00rootroot00000000000000
f|oo
b | az
b | im
python-readme-renderer-41.0/tests/fixtures/test_GFM_003.md000066400000000000000000000000641446776317600234320ustar00rootroot00000000000000| f\|oo | | ------ | | b `\|` az | | b **\|** im | python-readme-renderer-41.0/tests/fixtures/test_GFM_004.html000066400000000000000000000002431446776317600237760ustar00rootroot00000000000000
abc def
bar baz

bar

python-readme-renderer-41.0/tests/fixtures/test_GFM_004.md000066400000000000000000000000601446776317600234270ustar00rootroot00000000000000| abc | def | | --- | --- | | bar | baz | > bar python-readme-renderer-41.0/tests/fixtures/test_GFM_005.html000066400000000000000000000002521446776317600237770ustar00rootroot00000000000000
abc def
bar baz
bar

bar

python-readme-renderer-41.0/tests/fixtures/test_GFM_005.md000066400000000000000000000000631446776317600234330ustar00rootroot00000000000000| abc | def | | --- | --- | | bar | baz | bar bar python-readme-renderer-41.0/tests/fixtures/test_GFM_006.html000066400000000000000000000000451446776317600240000ustar00rootroot00000000000000

| abc | def | | --- | | bar |

python-readme-renderer-41.0/tests/fixtures/test_GFM_006.md000066400000000000000000000000361446776317600234340ustar00rootroot00000000000000| abc | def | | --- | | bar | python-readme-renderer-41.0/tests/fixtures/test_GFM_007.html000066400000000000000000000002371446776317600240040ustar00rootroot00000000000000
abc def
bar
bar baz
python-readme-renderer-41.0/tests/fixtures/test_GFM_007.md000066400000000000000000000000701446776317600234330ustar00rootroot00000000000000| abc | def | | --- | --- | | bar | | bar | baz | boo | python-readme-renderer-41.0/tests/fixtures/test_GFM_008.html000066400000000000000000000001071446776317600240010ustar00rootroot00000000000000
abc def
python-readme-renderer-41.0/tests/fixtures/test_GFM_008.md000066400000000000000000000000341446776317600234340ustar00rootroot00000000000000| abc | def | | --- | --- | python-readme-renderer-41.0/tests/fixtures/test_GFM_009.html000066400000000000000000000000431446776317600240010ustar00rootroot00000000000000

Hi Hello, world!

python-readme-renderer-41.0/tests/fixtures/test_GFM_009.md000066400000000000000000000000231446776317600234330ustar00rootroot00000000000000~Hi~ Hello, world! python-readme-renderer-41.0/tests/fixtures/test_GFM_010.html000066400000000000000000000000601446776317600237700ustar00rootroot00000000000000

This text~~~~ is ~~~~curious.

python-readme-renderer-41.0/tests/fixtures/test_GFM_010.md000066400000000000000000000000401446776317600234220ustar00rootroot00000000000000This ~text~~~~ is ~~~~curious~. python-readme-renderer-41.0/tests/fixtures/test_GFM_011.html000066400000000000000000000000541446776317600237740ustar00rootroot00000000000000

This ~~has a

new paragraph~~.

python-readme-renderer-41.0/tests/fixtures/test_GFM_011.md000066400000000000000000000000371446776317600234310ustar00rootroot00000000000000This ~~has a new paragraph~~. python-readme-renderer-41.0/tests/fixtures/test_GFM_012.html000066400000000000000000000001211446776317600237700ustar00rootroot00000000000000

www.commonmark.org

python-readme-renderer-41.0/tests/fixtures/test_GFM_012.md000066400000000000000000000000231446776317600234250ustar00rootroot00000000000000www.commonmark.org python-readme-renderer-41.0/tests/fixtures/test_GFM_013.html000066400000000000000000000001671446776317600240030ustar00rootroot00000000000000

Visit www.commonmark.org/help for more information.

python-readme-renderer-41.0/tests/fixtures/test_GFM_013.md000066400000000000000000000000641446776317600234330ustar00rootroot00000000000000Visit www.commonmark.org/help for more information. python-readme-renderer-41.0/tests/fixtures/test_GFM_014.html000066400000000000000000000002701446776317600237770ustar00rootroot00000000000000

Visit www.commonmark.org.

Visit www.commonmark.org/a.b.

python-readme-renderer-41.0/tests/fixtures/test_GFM_014.md000066400000000000000000000000711446776317600234320ustar00rootroot00000000000000Visit www.commonmark.org. Visit www.commonmark.org/a.b. python-readme-renderer-41.0/tests/fixtures/test_GFM_015.html000066400000000000000000000004001446776317600237730ustar00rootroot00000000000000

www.google.com/search?q=Markup+(business)

(www.google.com/search?q=Markup+(business))

python-readme-renderer-41.0/tests/fixtures/test_GFM_015.md000066400000000000000000000001271446776317600234350ustar00rootroot00000000000000www.google.com/search?q=Markup+(business) (www.google.com/search?q=Markup+(business)) python-readme-renderer-41.0/tests/fixtures/test_GFM_016.html000066400000000000000000000001711446776317600240010ustar00rootroot00000000000000

www.google.com/search?q=(business))+ok

python-readme-renderer-41.0/tests/fixtures/test_GFM_016.md000066400000000000000000000000471446776317600234370ustar00rootroot00000000000000www.google.com/search?q=(business))+ok python-readme-renderer-41.0/tests/fixtures/test_GFM_017.html000066400000000000000000000003761446776317600240110ustar00rootroot00000000000000

www.google.com/search?q=commonmark&hl=en

www.google.com/search?q=commonmark&hl;

python-readme-renderer-41.0/tests/fixtures/test_GFM_017.md000066400000000000000000000001211446776317600234310ustar00rootroot00000000000000www.google.com/search?q=commonmark&hl=en www.google.com/search?q=commonmark&hl; python-readme-renderer-41.0/tests/fixtures/test_GFM_018.html000066400000000000000000000001351446776317600240030ustar00rootroot00000000000000

www.commonmark.org/he<lp

python-readme-renderer-41.0/tests/fixtures/test_GFM_018.md000066400000000000000000000000311446776317600234320ustar00rootroot00000000000000www.commonmark.org/hehttp://commonmark.org

(Visit https://encrypted.google.com/search?q=Markup+(business))

Anonymous FTP is available at ftp://foo.bar.baz.

python-readme-renderer-41.0/tests/fixtures/test_GFM_019.md000066400000000000000000000002111446776317600234330ustar00rootroot00000000000000http://commonmark.org (Visit https://encrypted.google.com/search?q=Markup+(business)) Anonymous FTP is available at ftp://foo.bar.baz. python-readme-renderer-41.0/tests/fixtures/test_GFM_020.html000066400000000000000000000000641446776317600237750ustar00rootroot00000000000000

foo@bar.baz

python-readme-renderer-41.0/tests/fixtures/test_GFM_020.md000066400000000000000000000000141446776317600234240ustar00rootroot00000000000000foo@bar.baz python-readme-renderer-41.0/tests/fixtures/test_GFM_021.html000066400000000000000000000001661446776317600240010ustar00rootroot00000000000000

hello@mail+xyz.example isn't valid, but hello+xyz@mail.example is.

python-readme-renderer-41.0/tests/fixtures/test_GFM_021.md000066400000000000000000000001031446776317600234240ustar00rootroot00000000000000hello@mail+xyz.example isn't valid, but hello+xyz@mail.example is. python-readme-renderer-41.0/tests/fixtures/test_GFM_022.html000066400000000000000000000002211446776317600237720ustar00rootroot00000000000000

a.b-c_d@a.b

a.b-c_d@a.b.

a.b-c_d@a.b-

a.b-c_d@a.b_

python-readme-renderer-41.0/tests/fixtures/test_GFM_022.md000066400000000000000000000000661446776317600234350ustar00rootroot00000000000000a.b-c_d@a.b a.b-c_d@a.b. a.b-c_d@a.b- a.b-c_d@a.b_ python-readme-renderer-41.0/tests/fixtures/test_GFM_023.html000066400000000000000000000002621446776317600240000ustar00rootroot00000000000000

<title> <style>

<xmp> is disallowed. <XMP> is also disallowed.
python-readme-renderer-41.0/tests/fixtures/test_GFM_023.md000066400000000000000000000001541446776317600234340ustar00rootroot00000000000000 <style> <em> <blockquote> <xmp> is disallowed. <XMP> is also disallowed. </blockquote> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_024.html����������������������������������������0000664�0000000�0000000�00000000352�14467763176�0024001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<ul> <li><input type="checkbox" disabled> Valid unchecked checkbox</li> <li><input type="checkbox" checked disabled> Valid checked checkbox</li> <li> Invalid enabled checkbox</li> <li> </li> <li> </li> <li> </li> <li> </li> </ul> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_024.md������������������������������������������0000664�0000000�0000000�00000000350�14467763176�0023433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������- [ ] Valid unchecked checkbox - [x] Valid checked checkbox - <input type="checkbox"> Invalid enabled checkbox - <input onlick="alert('XSS')" /> - <input type="submit" /> - <input method="PUT" /> - <input type="checkbox" checked /> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_025.html����������������������������������������0000664�0000000�0000000�00000000164�14467763176�0024003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<ol start="3"> <li>Foo</li> </ol> <p>Some text</p> <ol start="2"> <li> <p>Bar</p> </li> <li> <p>Baz</p> </li> </ol> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_025.md������������������������������������������0000664�0000000�0000000�00000000042�14467763176�0023432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������3. Foo Some text 2. Bar 1. Baz ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_doublequotes.html�������������������������������0000664�0000000�0000000�00000001042�14467763176�0026204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>This is normal text.</p> <pre><code>This is code text. </code></pre> <pre lang="python3"><span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span> <span class="w"> </span><span class="sd">"""This is a docstring."""</span> <span class="k">pass</span> </pre> <pre lang="go"><span class="kd">func</span><span class="w"> </span><span class="nx">ThisIsGo</span><span class="p">(){</span> <span class="w"> </span><span class="k">return</span> <span class="p">}</span> </pre> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_doublequotes.md���������������������������������0000664�0000000�0000000�00000000247�14467763176�0025646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is normal text. ``` This is code text. ``` ```python def this_is_python(): """This is a docstring.""" pass ``` ```go func ThisIsGo(){ return } ``` ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_highlight.html����������������������������������0000664�0000000�0000000�00000000751�14467763176�0025446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>This is normal text.</p> <pre><code>This is code text. </code></pre> <pre lang="python3"><span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span> <span class="k">pass</span> </pre> <pre lang="go"><span class="kd">func</span><span class="w"> </span><span class="nx">ThisIsGo</span><span class="p">(){</span> <span class="w"> </span><span class="k">return</span> <span class="p">}</span> </pre> <pre lang="abc">An unknown code fence block </pre> �����������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_highlight.md������������������������������������0000664�0000000�0000000�00000000260�14467763176�0025075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is normal text. ``` This is code text. ``` ```python def this_is_python(): pass ``` ```go func ThisIsGo(){ return } ``` ```abc An unknown code fence block ``` ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_highlight_default_py.html�����������������������0000664�0000000�0000000�00000000507�14467763176�0027661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<pre lang="python3"><span class="k">async</span> <span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span> <span class="k">pass</span> <span class="nb">print</span><span class="p">(</span><span class="k">await</span> <span class="n">this_is_python</span><span class="p">())</span> </pre> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_highlight_default_py.md�������������������������0000664�0000000�0000000�00000000122�14467763176�0027306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������```python async def this_is_python(): pass print(await this_is_python()) ``` ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_img.html����������������������������������������0000664�0000000�0000000�00000000344�14467763176�0024251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><img src="https://octodex.github.com/images/yaktocat.png" alt="Image of Yaktocat"></p> <p align="center"> <img src="https://octodex.github.com/images/yaktocat.png" width="20%" height="100px" alt="Image of Yaktocat"> </p> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_img.md������������������������������������������0000664�0000000�0000000�00000000320�14467763176�0023677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������![Image of Yaktocat](https://octodex.github.com/images/yaktocat.png) <p align="center"> <img src="https://octodex.github.com/images/yaktocat.png" width="20%" height="100px" alt="Image of Yaktocat"> </p> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_malicious_pre.html������������������������������0000664�0000000�0000000�00000001250�14467763176�0026325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>This is normal text.</p> <pre lang="python3"><span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span> <span class="w"> </span><span class="sd">"""This is a docstring."""</span> <span class="k">pass</span> <span class="o"><</span><span class="n">script</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"text/javascript"</span><span class="o">></span><span class="n">alert</span><span class="p">(</span><span class="s1">'I am evil.'</span><span class="p">);</span><span class="o"></</span><span class="n">script</span><span class="o">></span> </pre> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_malicious_pre.md��������������������������������0000664�0000000�0000000�00000000237�14467763176�0025765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is normal text. ```python def this_is_python(): """This is a docstring.""" pass <script type="text/javascript">alert('I am evil.');</script> ``` �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_style.html��������������������������������������0000664�0000000�0000000�00000000052�14467763176�0024631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<img src="https://example.com/badge.png"> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_GFM_style.md����������������������������������������0000664�0000000�0000000�00000000052�14467763176�0024265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<img src="https://example.com/badge.png"> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_003.html����������������������������������������0000664�0000000�0000000�00000000400�14467763176�0024167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<section id="required-packages"> <h2>Required packages</h2> <p>To run the PyPI software, you need Python 2.5+ and PostgreSQL</p> </section> <section id="quick-development-setup"> <h2>Quick development setup</h2> <p>Make sure you are sitting</p> </section> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_003.rst�����������������������������������������0000664�0000000�0000000�00000000260�14467763176�0024037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Required packages ----------------- To run the PyPI software, you need Python 2.5+ and PostgreSQL Quick development setup ----------------------- Make sure you are sitting ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_004.html����������������������������������������0000664�0000000�0000000�00000000507�14467763176�0024200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><div id=”required-packages”> <h2>Required packages</h2> <p>To run the PyPI software, you need Python 2.5+ and PostgreSQL</p> </div> <div id=”quick-development-setup”> <h2>Quick development setup</h2> <p>Make sure you are sitting</p> </div></p> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_004.rst�����������������������������������������0000664�0000000�0000000�00000000360�14467763176�0024041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<div id="required-packages"> <h2>Required packages</h2> <p>To run the PyPI software, you need Python 2.5+ and PostgreSQL</p> </div> <div id="quick-development-setup"> <h2>Quick development setup</h2> <p>Make sure you are sitting</p> </div> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_005.html����������������������������������������0000664�0000000�0000000�00000000205�14467763176�0024174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><a href=”<a href="http://mymalicioussite.com/" rel="nofollow">http://mymalicioussite.com/</a>”>Click here</a></p> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_005.rst�����������������������������������������0000664�0000000�0000000�00000000064�14467763176�0024043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<a href="http://mymalicioussite.com/">Click here</a>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_006.html����������������������������������������0000664�0000000�0000000�00000000216�14467763176�0024177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><iframe src=”<a href="http://mymalicioussite.com/" rel="nofollow">http://mymalicioussite.com/</a>”>Click here</iframe></p> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_006.rst�����������������������������������������0000664�0000000�0000000�00000000075�14467763176�0024046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<iframe src="http://mymalicioussite.com/">Click here</iframe>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_007.html����������������������������������������0000664�0000000�0000000�00000000124�14467763176�0024176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Something naughty this way comes <script> alert("Hello"); </script> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_007.rst�����������������������������������������0000664�0000000�0000000�00000000110�14467763176�0024035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Something naughty this way comes <script> alert("Hello"); </script> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_008.html����������������������������������������0000664�0000000�0000000�00000003545�14467763176�0024211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>Here is some Python code for a <span class="docutils literal">Dog</span>:</p> <pre><code><span class="k">class</span> <span class="nc">Dog</span><span class="p">(</span><span class="n">Animal</span><span class="p">):</span><span class="w"> </span> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span><span class="w"> </span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="w"> </span> <span class="k">def</span> <span class="nf">make_sound</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span><span class="w"> </span> <span class="nb">print</span><span class="p">(</span><span class="s1">'Ruff!'</span><span class="p">)</span><span class="w"> </span><span class="n">dog</span> <span class="o">=</span> <span class="n">Dog</span><span class="p">(</span><span class="s1">'Fido'</span><span class="p">)</span></code></pre> <p>and then here is some bash:</p> <pre><code><span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"--help"</span><span class="w"> </span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"OK"</span><span class="w"> </span><span class="k">fi</span></code></pre> <p>or click <a href="http://www.surveymonkey.com" rel="nofollow">SurveyMonkey</a></p> <pre><code>An unknown code fence block</code></pre> �����������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_008.rst�����������������������������������������0000664�0000000�0000000�00000000705�14467763176�0024050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Here is some Python code for a ``Dog``: .. code-block:: python class Dog(Animal): def __init__(self, name): self.name = name def make_sound(self): print('Ruff!') dog = Dog('Fido') and then here is some bash: .. code-block:: bash if [ "$1" = "--help" ]; then echo "OK" fi or click `SurveyMonkey <http://www.surveymonkey.com>`_ .. code-block:: abc An unknown code fence block �����������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_admonitions.html��������������������������������0000664�0000000�0000000�00000000725�14467763176�0026223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<aside class="admonition danger"> <p class="admonition-title">!DANGER!</p> <p>Will Robinson</p> </aside> <aside class="admonition note"> <p class="admonition-title">Note</p> <p>F Sharp is a note, right?</p> </aside> <aside class="admonition admonition-see-also"> <p class="admonition-title">See also</p> <p>A customized admonition. Read more at <a href="https://docutils.sourceforge.io/docs/ref/rst/directives.html#admonitions" rel="nofollow">docutils</a></p> </aside> �������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_admonitions.rst���������������������������������0000664�0000000�0000000�00000000342�14467763176�0026062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. danger:: Will Robinson .. note:: F Sharp is a note, right? .. admonition:: See also A customized admonition. Read more at `docutils <https://docutils.sourceforge.io/docs/ref/rst/directives.html#admonitions>`_ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_bibtex.html�������������������������������������0000664�0000000�0000000�00000000530�14467763176�0025146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<pre><code><span class="nc">@article</span><span class="p">{</span><span class="nl">the_impact_of_pygments_docutils_config_and_html5</span><span class="p">,</span><span class="w"> </span><span class="na">year</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><s>{2022}</s><span class="p">,</span></code></pre> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_bibtex.rst��������������������������������������0000664�0000000�0000000�00000000144�14467763176�0025013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. code:: bibtex @article{the_impact_of_pygments_docutils_config_and_html5, year = {2022}, ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_caption.html������������������������������������0000664�0000000�0000000�00000001370�14467763176�0025331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <caption>Multiplication</caption> <thead> <tr><th class="head"><p>1</p></th> <th class="head"><p>2</p></th> <th class="head"><p>3</p></th> <th class="head"><p>4</p></th> <th class="head"><p>5</p></th> </tr> </thead> <tbody> <tr><td><p>1</p></td> <td><p>2</p></td> <td><p>3</p></td> <td><p>4</p></td> <td><p>5</p></td> </tr> <tr><td><p>2</p></td> <td><p>4</p></td> <td><p>6</p></td> <td><p>8</p></td> <td><p>10</p></td> </tr> <tr><td><p>3</p></td> <td><p>6</p></td> <td><p>9</p></td> <td><p>12</p></td> <td><p>15</p></td> </tr> <tr><td><p>4</p></td> <td><p>8</p></td> <td><p>12</p></td> <td><p>16</p></td> <td><p>20</p></td> </tr> <tr><td><p>5</p></td> <td><p>10</p></td> <td><p>15</p></td> <td><p>20</p></td> <td><p>25</p></td> </tr> </tbody> </table> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_caption.rst�������������������������������������0000664�0000000�0000000�00000000436�14467763176�0025177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. The following test case is based on https://github.com/tiran/defusedxml/blob/f2c7c35b25f80c08923be49ac1f81e9cf95bd2ae/README.txt#L180 .. csv-table:: Multiplication :header: "1", "2", "3", "4", "5" 1,2,3,4,5 2,4,6,8,10 3,6,9,12,15 4,8,12,16,20 5,10,15,20,25 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_citations.html����������������������������������0000664�0000000�0000000�00000001720�14467763176�0025670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>Citation references, like <a href="#cit2002" id="citation-reference-1" rel="nofollow">[CIT2002]</a>. Note that citations may get rearranged, e.g., to the bottom of the “page”.</p> <div class="citation-list"> <div class="citation" id="cit2002"> <span class="label"><span class="fn-bracket">[</span><a href="#citation-reference-1" rel="nofollow">CIT2002</a><span class="fn-bracket">]</span></span> <p>A citation (as often used in journals).</p> </div> </div> <p>Citation labels contain alphanumerics, underlines, hyphens and fullstops. Case is not significant.</p> <p>Given a citation like <a href="#this" id="citation-reference-2" rel="nofollow">[this]</a>, one can also refer to it like <a href="#this" rel="nofollow">this</a>.</p> <div class="citation-list"> <div class="citation" id="this"> <span class="label"><span class="fn-bracket">[</span><a href="#citation-reference-2" rel="nofollow">this</a><span class="fn-bracket">]</span></span> <p>here.</p> </div> </div> ������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_citations.rst�����������������������������������0000664�0000000�0000000�00000000670�14467763176�0025537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. Citations https://docutils.sourceforge.io/docs/user/rst/quickref.html#citations Citation references, like [CIT2002]_. Note that citations may get rearranged, e.g., to the bottom of the "page". .. [CIT2002] A citation (as often used in journals). Citation labels contain alphanumerics, underlines, hyphens and fullstops. Case is not significant. Given a citation like [this]_, one can also refer to it like this_. .. [this] here. ������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_contents.html�����������������������������������0000664�0000000�0000000�00000001303�14467763176�0025525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<nav class="contents" id="contents"> <p class="topic-title">Contents</p> <ul class="simple"> <li><p><a href="#features" id="toc-entry-1" rel="nofollow">Features</a></p></li> <li><p><a href="#installation" id="toc-entry-2" rel="nofollow">Installation</a></p></li> </ul> </nav> <section id="features"> <h2><a href="#toc-entry-1" rel="nofollow">Features</a></h2> <ul class="simple"> <li><p>Eats cheese</p></li> </ul> </section> <section id="installation"> <h2><a href="#toc-entry-2" rel="nofollow">Installation</a></h2> <p class="section-subtitle" id="requirements">Requirements</p> <ul class="simple"> <li><p>Teeth</p></li> <li><p>Good taste</p></li> </ul> <p>Let’s eat some cheese together!</p> </section> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_contents.rst������������������������������������0000664�0000000�0000000�00000000342�14467763176�0025373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. Tests that using a Table of Contents directive renders correctly .. contents:: Features ======== * Eats cheese Installation ============ Requirements ------------ * Teeth * Good taste Let's eat some cheese together! ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_docinfo.html������������������������������������0000664�0000000�0000000�00000001505�14467763176�0025315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<dl class="docinfo simple"> <dt class="project">Project<span class="colon">:</span></dt> <dd class="project"><p>pg_query – Pythonic wrapper around libpg_query</p> </dd> <dt class="created">Created<span class="colon">:</span></dt> <dd class="created"><p>mer 02 ago 2017 14:49:24 CEST</p> </dd> <dt class="author">Author<span class="colon">:</span></dt> <dd class="author"><p>Lele Gaifax <<a href="mailto:lele%40metapensiero.it">lele<span>@</span>metapensiero<span>.</span>it</a>></p></dd> <dt class="license">License<span class="colon">:</span></dt> <dd class="license"><p>GNU General Public License version 3 or later</p> </dd> <dt class="copyright">Copyright<span class="colon">:</span></dt> <dd class="copyright">© 2017, 2018 Lele Gaifax</dd> </dl> <section id="pg-query"> <h2>pg_query</h2> </section> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_docinfo.rst�������������������������������������0000664�0000000�0000000�00000000426�14467763176�0025162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������:Project: pg_query -- Pythonic wrapper around libpg_query :Created: mer 02 ago 2017 14:49:24 CEST :Author: Lele Gaifax <lele@metapensiero.it> :License: GNU General Public License version 3 or later :Copyright: © 2017, 2018 Lele Gaifax ========== pg_query ========== ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_figure.html�������������������������������������0000664�0000000�0000000�00000000465�14467763176�0025161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<figure class="align-center"> <img alt="https://raw.githubusercontent.com/schlatterbeck/plot-antenna/master/test/12-el-azimuth.png" src="https://raw.githubusercontent.com/schlatterbeck/plot-antenna/master/test/12-el-azimuth.png"> <figcaption> <p>This is the caption for the figure</p> </figcaption> </figure> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_figure.rst��������������������������������������0000664�0000000�0000000�00000000241�14467763176�0025015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. figure:: https://raw.githubusercontent.com/schlatterbeck/plot-antenna/master/test/12-el-azimuth.png :align: center This is the caption for the figure���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_footnotes.html����������������������������������0000664�0000000�0000000�00000006210�14467763176�0025712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>Footnote references, like <a href="#footnote-1" id="footnote-reference-1" rel="nofollow"><span class="fn-bracket">[</span>5<span class="fn-bracket">]</span></a>. Note that footnotes may get rearranged, e.g., to the bottom of the “page”.</p> <aside class="footnote-list brackets"> <aside class="footnote brackets" id="footnote-1"> <span class="label"><span class="fn-bracket">[</span><a href="#footnote-reference-1" rel="nofollow">5</a><span class="fn-bracket">]</span></span> <p>A numerical footnote. Note there’s no colon after the <span class="docutils literal">]</span>.</p> </aside> </aside> <p>Autonumbered footnotes are possible, like using <a href="#footnote-2" id="footnote-reference-2" rel="nofollow"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a> and <a href="#footnote-3" id="footnote-reference-3" rel="nofollow"><span class="fn-bracket">[</span>2<span class="fn-bracket">]</span></a>.</p> <aside class="footnote-list brackets"> <aside class="footnote brackets" id="footnote-2"> <span class="label"><span class="fn-bracket">[</span><a href="#footnote-reference-2" rel="nofollow">1</a><span class="fn-bracket">]</span></span> <p>This is the first one.</p> </aside> <aside class="footnote brackets" id="footnote-3"> <span class="label"><span class="fn-bracket">[</span><a href="#footnote-reference-3" rel="nofollow">2</a><span class="fn-bracket">]</span></span> <p>This is the second one.</p> </aside> </aside> <p>They may be assigned ‘autonumber labels’ - for instance, <a href="#fourth" id="footnote-reference-4" rel="nofollow"><span class="fn-bracket">[</span>4<span class="fn-bracket">]</span></a> and <a href="#third" id="footnote-reference-5" rel="nofollow"><span class="fn-bracket">[</span>3<span class="fn-bracket">]</span></a>.</p> <aside class="footnote-list brackets"> <aside class="footnote brackets" id="third"> <span class="label"><span class="fn-bracket">[</span><a href="#footnote-reference-5" rel="nofollow">3</a><span class="fn-bracket">]</span></span> <p>a.k.a. <a href="#third" rel="nofollow">third</a></p> </aside> <aside class="footnote brackets" id="fourth"> <span class="label"><span class="fn-bracket">[</span><a href="#footnote-reference-4" rel="nofollow">4</a><span class="fn-bracket">]</span></span> <p>a.k.a. <a href="#fourth" rel="nofollow">fourth</a></p> </aside> </aside> <p>Auto-symbol footnotes are also possible, like this: <a href="#footnote-4" id="footnote-reference-6" rel="nofollow"><span class="fn-bracket">[</span>*<span class="fn-bracket">]</span></a> and <a href="#footnote-5" id="footnote-reference-7" rel="nofollow"><span class="fn-bracket">[</span>†<span class="fn-bracket">]</span></a>.</p> <aside class="footnote-list brackets"> <aside class="footnote brackets" id="footnote-4"> <span class="label"><span class="fn-bracket">[</span><a href="#footnote-reference-6" rel="nofollow">*</a><span class="fn-bracket">]</span></span> <p>This is the first one.</p> </aside> <aside class="footnote brackets" id="footnote-5"> <span class="label"><span class="fn-bracket">[</span><a href="#footnote-reference-7" rel="nofollow">†</a><span class="fn-bracket">]</span></span> <p>This is the second one.</p> </aside> </aside> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_footnotes.rst�����������������������������������0000664�0000000�0000000�00000001223�14467763176�0025555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. Footnotes https://docutils.sourceforge.io/docs/user/rst/quickref.html#footnotes Footnote references, like [5]_. Note that footnotes may get rearranged, e.g., to the bottom of the "page". .. [5] A numerical footnote. Note there's no colon after the ``]``. Autonumbered footnotes are possible, like using [#]_ and [#]_. .. [#] This is the first one. .. [#] This is the second one. They may be assigned 'autonumber labels' - for instance, [#fourth]_ and [#third]_. .. [#third] a.k.a. third_ .. [#fourth] a.k.a. fourth_ Auto-symbol footnotes are also possible, like this: [*]_ and [*]_. .. [*] This is the first one. .. [*] This is the second one. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_linkify.html������������������������������������0000664�0000000�0000000�00000007127�14467763176�0025347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<a href="https://travis-ci.org/tulsawebdevs/django-multi-gtfs" rel="nofollow"><img alt="https://travis-ci.org/tulsawebdevs/django-multi-gtfs.svg?branch=master" src="https://travis-ci.org/tulsawebdevs/django-multi-gtfs.svg?branch=master"></a> <a href="https://coveralls.io/github/tulsawebdevs/django-multi-gtfs" rel="nofollow"><img alt="https://coveralls.io/repos/github/tulsawebdevs/django-multi-gtfs/badge.svg?branch=django19" src="https://coveralls.io/repos/github/tulsawebdevs/django-multi-gtfs/badge.svg?branch=django19"></a> <p><strong>multigtfs</strong> is an <a href="http://choosealicense.com/licenses/apache/" rel="nofollow">Apache 2.0</a>-licensed Django app that supports importing and exporting of GTFS feeds. All features of the <a href="https://developers.google.com/transit/gtfs/reference" rel="nofollow">June 20, 2012 reference</a> are supported, including <a href="https://developers.google.com/transit/gtfs/changes#RevisionHistory" rel="nofollow">all changes</a> up to February 17, 2014. It allows multiple feeds to be stored in the database at once.</p> <p>It requires a spatial databases compatible with <a href="https://docs.djangoproject.com/en/dev/ref/contrib/gis/" rel="nofollow">GeoDjango</a>. <a href="http://www.postgresql.org" rel="nofollow">PostgreSQL</a> 9.x and <a href="http://postgis.refractions.net" rel="nofollow">PostGIS</a> 2.x are recommended for development and production, since these support all the GeoDjango features.</p> <section id="status"> <h2>Status</h2> <p>multigtfs is ready for your GTFS project.</p> <p>Point releases (0.4.1 to 0.4.2) should be safe, only adding features or fixing bugs. Minor updates (0.3.3 to 0.4.0) may include significant changes that will break relying code. In the worst case scenario, you may need to export your GTFS feeds in the original version, update multigtfs and your code, and re-import.</p> <p>multigtfs works with Django 1.5 through 1.9. In the next version, support will be limited to Django’s supported releases, so if you are using an old version you will want to update to at least 1.8, the long-term support (LTS) release.</p> <p>All valid GTFS feeds are supported for import and export. This includes feeds with extra columns not yet included in the GTFS spec, and feeds that omit <span class="docutils literal">calendar.txt</span> in favor of <span class="docutils literal">calendar_dates.txt</span> (such as the TriMet archive feeds). If you find a feed that doesn’t work, <a href="https://github.com/tulsawebdevs/django-multi-gtfs/issues" rel="nofollow">file a bug</a>!</p> <p>See the <a href="https://github.com/tulsawebdevs/django-multi-gtfs/issues?state=open" rel="nofollow">issues list</a> for more details on bugs and feature requests.</p> </section> <section id="example-project"> <h2>Example project</h2> <p>Check out the <a href="examples/explore/README.md" rel="nofollow">example project</a>.</p> </section> <section id="development"> <h2>Development</h2> <dl class="field-list simple"> <dt>Code<span class="colon">:</span></dt> <dd><p><a href="https://github.com/tulsawebdevs/django-multi-gtfs" rel="nofollow">https://github.com/tulsawebdevs/django-multi-gtfs</a></p> </dd> <dt>Issues<span class="colon">:</span></dt> <dd><p><a href="https://github.com/tulsawebdevs/django-multi-gtfs/issues" rel="nofollow">https://github.com/tulsawebdevs/django-multi-gtfs/issues</a></p> </dd> <dt>Dev Docs<span class="colon">:</span></dt> <dd><p><a href="http://multigtfs.readthedocs.org/" rel="nofollow">http://multigtfs.readthedocs.org/</a></p> </dd> <dt>IRC<span class="colon">:</span></dt> <dd><p><a>irc://irc.freenode.net/tulsawebdevs</a></p> </dd> </dl> </section> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_linkify.rst�������������������������������������0000664�0000000�0000000�00000005343�14467763176�0025211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������multigtfs: GTFS as a Django app =============================== .. image:: https://travis-ci.org/tulsawebdevs/django-multi-gtfs.svg?branch=master :target: https://travis-ci.org/tulsawebdevs/django-multi-gtfs .. image:: https://coveralls.io/repos/github/tulsawebdevs/django-multi-gtfs/badge.svg?branch=django19 :target: https://coveralls.io/github/tulsawebdevs/django-multi-gtfs .. Omit badges from docs **multigtfs** is an `Apache 2.0`_-licensed Django app that supports importing and exporting of GTFS feeds. All features of the `June 20, 2012 reference`_ are supported, including `all changes`_ up to February 17, 2014. It allows multiple feeds to be stored in the database at once. It requires a spatial databases compatible with GeoDjango_. PostgreSQL_ 9.x and PostGIS_ 2.x are recommended for development and production, since these support all the GeoDjango features. Status ------ multigtfs is ready for your GTFS project. Point releases (0.4.1 to 0.4.2) should be safe, only adding features or fixing bugs. Minor updates (0.3.3 to 0.4.0) may include significant changes that will break relying code. In the worst case scenario, you may need to export your GTFS feeds in the original version, update multigtfs and your code, and re-import. multigtfs works with Django 1.5 through 1.9. In the next version, support will be limited to Django's supported releases, so if you are using an old version you will want to update to at least 1.8, the long-term support (LTS) release. All valid GTFS feeds are supported for import and export. This includes feeds with extra columns not yet included in the GTFS spec, and feeds that omit ``calendar.txt`` in favor of ``calendar_dates.txt`` (such as the TriMet archive feeds). If you find a feed that doesn't work, `file a bug`_! See the `issues list`_ for more details on bugs and feature requests. Example project --------------- Check out the `example project <examples/explore/README.md>`_. Development ----------- :Code: https://github.com/tulsawebdevs/django-multi-gtfs :Issues: https://github.com/tulsawebdevs/django-multi-gtfs/issues :Dev Docs: http://multigtfs.readthedocs.org/ :IRC: irc://irc.freenode.net/tulsawebdevs .. _`Apache 2.0`: http://choosealicense.com/licenses/apache/ .. _`June 20, 2012 reference`: https://developers.google.com/transit/gtfs/reference .. _`all changes`: https://developers.google.com/transit/gtfs/changes#RevisionHistory .. _PostgreSQL: http://www.postgresql.org .. _PostGIS: http://postgis.refractions.net .. _GeoDjango: https://docs.djangoproject.com/en/dev/ref/contrib/gis/ .. _`file a bug`: https://github.com/tulsawebdevs/django-multi-gtfs/issues .. _`issues list`: https://github.com/tulsawebdevs/django-multi-gtfs/issues?state=open ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_math.html���������������������������������������0000664�0000000�0000000�00000000512�14467763176�0024622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>A <span class="docutils literal">math</span> directive:</p> <div class="math"> \begin{equation*} \alpha _t(i) = P(O_1, O_2, \ldots O_t, q_t = S_i \lambda ) \end{equation*} </div> <p>A <span class="docutils literal">:math:</span> role:</p> <p>The area of a circle is <span class="math">\(A_\text{c} = (\pi/4) d^2\)</span>.</p> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_math.rst����������������������������������������0000664�0000000�0000000�00000000500�14467763176�0024463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. Sample from https://docutils.sourceforge.io/docs/ref/rst/directives.html#math A ``math`` directive: .. math:: α_t(i) = P(O_1, O_2, … O_t, q_t = S_i λ) .. Sample from https://docutils.sourceforge.io/docs/ref/rst/roles.html#math A ``:math:`` role: The area of a circle is :math:`A_\text{c} = (\pi/4) d^2`. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_png.html����������������������������������������0000664�0000000�0000000�00000000116�14467763176�0024455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<img alt="https://example.com/badge.png" src="https://example.com/badge.png"> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_png.rst�����������������������������������������0000664�0000000�0000000�00000000051�14467763176�0024317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. image:: https://example.com/badge.png ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_png_attrs.html����������������������������������0000664�0000000�0000000�00000000160�14467763176�0025671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<img alt="alternate text" class="align-right" height="100px" src="https://example.com/badge.png" width="25.0%"> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_png_attrs.rst�����������������������������������0000664�0000000�0000000�00000000165�14467763176�0025542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. image:: https://example.com/badge.png :height: 100px :width: 25.0% :alt: alternate text :align: right �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_svg.html����������������������������������������0000664�0000000�0000000�00000000116�14467763176�0024470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<img alt="https://example.com/badge.svg" src="https://example.com/badge.svg"> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_svg.rst�����������������������������������������0000664�0000000�0000000�00000000051�14467763176�0024332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. image:: https://example.com/badge.svg ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_svg_attrs.html����������������������������������0000664�0000000�0000000�00000000160�14467763176�0025704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<img alt="alternate text" class="align-right" height="100px" src="https://example.com/badge.svg" width="25.0%"> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_svg_attrs.rst�����������������������������������0000664�0000000�0000000�00000000165�14467763176�0025555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. image:: https://example.com/badge.svg :height: 100px :width: 25.0% :alt: alternate text :align: right �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_tables.html�������������������������������������0000664�0000000�0000000�00000002054�14467763176�0025146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr><th class="head"><p>Header row, column 1 (header rows optional)</p></th> <th class="head"><p>Header 2</p></th> <th class="head"><p>Header 3</p></th> <th class="head"><p>Header 4</p></th> </tr> </thead> <tbody> <tr><td><p>body row 1, column 1</p></td> <td><p>column 2</p></td> <td><p>column 3</p></td> <td><p>column 4</p></td> </tr> <tr><td><p>body row 2</p></td> <td colspan="3"><p>Cells may span columns.</p></td> </tr> <tr><td><p>body row 3</p></td> <td rowspan="2"><p>Cells may span rows.</p></td> <td colspan="2" rowspan="2"><ul class="simple"> <li><p>Table cells</p></li> <li><p>contain</p></li> <li><p>body elements.</p></li> </ul> </td> </tr> <tr><td><p>body row 4</p></td> </tr> </tbody> </table> <table> <thead> <tr><th class="head"><p>title1</p></th> <th class="head"><p>title2</p></th> </tr> </thead> <tbody> <tr><td><p>col1</p></td> <td><p>col2</p></td> </tr> <tr><td rowspan="2"><p>mutirow</p></td> <td><p>cell1</p></td> </tr> <tr><td><p>cell2</p></td> </tr> <tr><td><p>singlerow</p></td> <td><p>cell3</p></td> </tr> </tbody> </table> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_rst_tables.rst��������������������������������������0000664�0000000�0000000�00000002320�14467763176�0025006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. Example from https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#tables +------------------------+------------+----------+----------+ | Header row, column 1 | Header 2 | Header 3 | Header 4 | | (header rows optional) | | | | +========================+============+==========+==========+ | body row 1, column 1 | column 2 | column 3 | column 4 | +------------------------+------------+----------+----------+ | body row 2 | Cells may span columns. | +------------------------+------------+---------------------+ | body row 3 | Cells may | - Table cells | +------------------------+ span rows. | - contain | | body row 4 | | - body elements. | +------------------------+------------+---------------------+ .. Example from #182 +---------------+---------------+ | title1 | title2 | +===============+===============+ | col1 | col2 | +---------------+---------------+ | mutirow | cell1 | | +---------------+ | | cell2 | +---------------+---------------+ | singlerow | cell3 | +---------------+---------------+ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_txt_001.html����������������������������������������0000664�0000000�0000000�00000017627�14467763176�0024217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Algen<br><br>Algen generates opionated ORM classes for sqlalchemy given a simple schema<br>either as a commandline string or as a yaml file.<br>It is designed to have minimal dependencies and is trivially extensible.<br>A command line tool is bundled along to help generate the models.<br>For DB specific types, only postgres is currently supported.<br>The tool currently assumes that sqlalchemy's declarative base object<br>is to be imported like ```from .alchemy_base import Base```<br><br><br>### CLI<br>```bash<br>$ algen --help<br>Usage: algen [OPTIONS]<br><br>Options:<br> -n, --name TEXT Name of model<br> -c, --columns TEXT Column definition. e.g. col_name:col_type Can be<br> used multiple times hence named columns. e.g. -c<br> foo:Int -c bar:Unicode(20)<br> -d, --destination PATH Destination directory. Default will assume 'Models'<br> directory inside the current working directory<br> -y, --yaml PATH Yaml file describing the Model. This supersedes the<br> column definition provided through --columns option.<br> --help Show this message and exit.<br>```<br><br>Given a file as follows:<br>```yaml<br>Person:<br> columns:<br> - name: id<br> type: BigInteger<br> primary_key: True<br> auto_increment: True<br> - name: name<br> type: Unicode(255)<br> - name: is_vip<br> type: Boolean<br> - name: created_at<br> type: DateTime(timezone=True)<br><br>Address:<br> columns:<br> - name: id<br> type: BigInteger<br> primary_key: True<br> auto_increment: True<br> - name: line1<br> type: Unicode()<br> - name: line2<br> type: Unicode()<br> - name: line3<br> type: Unicode()<br> - name: postcode<br> type: Unicode(10)<br> index: True<br>```<br><br>The cli tool will create two the following two files ```Person.py``` and ```Address.py```.<br><br>```python<br>from __future__ import unicode_literals, absolute_import, print_function<br><br>from collections import namedtuple<br><br>from sqlalchemy import Column, DateTime, Boolean, Unicode, BigInteger<br><br><br>from .alchemy_base import Base<br><br>__author__ = 'danishabdullah'<br><br><br>class Person(Base):<br> __tablename__ = 'persons'<br><br> id = Column(BigInteger, primary_key=True, auto_increment=True)<br> name = Column(Unicode(255), )<br> is_vip = Column(Boolean, )<br> created_at = Column(DateTime(timezone=True), )<br><br><br> def __init__(self, id=None, name=None, is_vip=None, created_at=None):<br> self.id = id<br> self.name = name<br> self.is_vip = is_vip<br> self.created_at = created_at<br><br> def add(self, session):<br> session.add(self)<br><br> def update(self, name=None, is_vip=None, created_at=None):<br> # This function only updates a value if it is not None.<br> # Falsy values go through in the normal way.<br> # To set things to None use the usual syntax:<br> # Person.column_name = None<br><br> if name is not None:<br> self.name = name<br><br> if is_vip is not None:<br> self.is_vip = is_vip<br><br> if created_at is not None:<br> self.created_at = created_at<br><br> def delete(self, session):<br> session.delete(self)<br><br> def to_dict(self):<br> return {x: y for x, y in self.__dict__.items() if not x.startswith("_sa")}<br><br> def get_proxy_cls(self):<br> # PersonProxy is useful when you want to persist data<br> # independent of the sqlalchemy session. It's just a namedtuple<br> # that has very low memory/cpu footprint compared the regular<br> # orm class instances.<br> keys = self.to_dict().keys()<br> name = "PersonProxy"<br> return namedtuple(name, keys)<br><br> def to_proxy(self):<br> # Proxy-ing is useful when you want to persist data<br> # independent of the sqlalchemy session. It's just a namedtuple<br> # that has very low memory/cpu footprint compared the regular<br> # orm class instances.<br> cls = self._get_proxy_cls()<br> return cls(**self.to_dict())<br><br> @classmethod<br> def from_proxy(cls, proxy):<br> return cls(**proxy._asdict())<br><br> def __hash__(self):<br> return hash(str(self.id))<br><br> def __eq__(self, other):<br> return (self.id == other.id)<br><br> def __neq__(self, other):<br> return not (self.id == other.id)<br><br> def __str__(self):<br> return "<Person: {id}>".format(id=self.id)<br><br> def __unicode__(self):<br> return "<Person: {id}>".format(id=self.id)<br><br> def __repr__(self):<br> return "<Person: {id}>".format(id=self.id)<br>```<br><br>```python<br>from __future__ import unicode_literals, absolute_import, print_function<br><br>from collections import namedtuple<br><br>from sqlalchemy import Column, Unicode, BigInteger<br><br><br>from .alchemy_base import Base<br><br>__author__ = 'danishabdullah'<br><br><br>class Address(Base):<br> __tablename__ = 'addresses'<br><br> id = Column(BigInteger, primary_key=True, auto_increment=True)<br> line1 = Column(Unicode(), )<br> line2 = Column(Unicode(), )<br> line3 = Column(Unicode(), )<br> postcode = Column(Unicode(10), index=True)<br><br><br> def __init__(self, id=None, line1=None, line2=None, line3=None, postcode=None):<br> self.id = id<br> self.line1 = line1<br> self.line2 = line2<br> self.line3 = line3<br> self.postcode = postcode<br><br> def add(self, session):<br> session.add(self)<br><br> def update(self, line1=None, line2=None, line3=None, postcode=None):<br> # This function only updates a value if it is not None.<br> # Falsy values go through in the normal way.<br> # To set things to None use the usual syntax:<br> # Address.column_name = None<br><br> if line1 is not None:<br> self.line1 = line1<br><br> if line2 is not None:<br> self.line2 = line2<br><br> if line3 is not None:<br> self.line3 = line3<br><br> if postcode is not None:<br> self.postcode = postcode<br><br> def delete(self, session):<br> session.delete(self)<br><br> def to_dict(self):<br> return {x: y for x, y in self.__dict__.items() if not x.startswith("_sa")}<br><br> def get_proxy_cls(self):<br> # AddressProxy is useful when you want to persist data<br> # independent of the sqlalchemy session. It's just a namedtuple<br> # that has very low memory/cpu footprint compared the regular<br> # orm class instances.<br> keys = self.to_dict().keys()<br> name = "AddressProxy"<br> return namedtuple(name, keys)<br><br> def to_proxy(self):<br> # Proxy-ing is useful when you want to persist data<br> # independent of the sqlalchemy session. It's just a namedtuple<br> # that has very low memory/cpu footprint compared the regular<br> # orm class instances.<br> cls = self._get_proxy_cls()<br> return cls(**self.to_dict())<br><br> @classmethod<br> def from_proxy(cls, proxy):<br> return cls(**proxy._asdict())<br><br> def __hash__(self):<br> return hash(str(self.id))<br><br> def __eq__(self, other):<br> return (self.id == other.id)<br><br> def __neq__(self, other):<br> return not (self.id == other.id)<br><br> def __str__(self):<br> return "<Address: {id}>".format(id=self.id)<br><br> def __unicode__(self):<br> return "<Address: {id}>".format(id=self.id)<br><br> def __repr__(self):<br> return "<Address: {id}>".format(id=self.id)<br><br>```<br>���������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/fixtures/test_txt_001.txt�����������������������������������������0000664�0000000�0000000�00000015723�14467763176�0024065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Algen Algen generates opionated ORM classes for sqlalchemy given a simple schema either as a commandline string or as a yaml file. It is designed to have minimal dependencies and is trivially extensible. A command line tool is bundled along to help generate the models. For DB specific types, only postgres is currently supported. The tool currently assumes that sqlalchemy's declarative base object is to be imported like ```from .alchemy_base import Base``` ### CLI ```bash $ algen --help Usage: algen [OPTIONS] Options: -n, --name TEXT Name of model -c, --columns TEXT Column definition. e.g. col_name:col_type Can be used multiple times hence named columns. e.g. -c foo:Int -c bar:Unicode(20) -d, --destination PATH Destination directory. Default will assume 'Models' directory inside the current working directory -y, --yaml PATH Yaml file describing the Model. This supersedes the column definition provided through --columns option. --help Show this message and exit. ``` Given a file as follows: ```yaml Person: columns: - name: id type: BigInteger primary_key: True auto_increment: True - name: name type: Unicode(255) - name: is_vip type: Boolean - name: created_at type: DateTime(timezone=True) Address: columns: - name: id type: BigInteger primary_key: True auto_increment: True - name: line1 type: Unicode() - name: line2 type: Unicode() - name: line3 type: Unicode() - name: postcode type: Unicode(10) index: True ``` The cli tool will create two the following two files ```Person.py``` and ```Address.py```. ```python from __future__ import unicode_literals, absolute_import, print_function from collections import namedtuple from sqlalchemy import Column, DateTime, Boolean, Unicode, BigInteger from .alchemy_base import Base __author__ = 'danishabdullah' class Person(Base): __tablename__ = 'persons' id = Column(BigInteger, primary_key=True, auto_increment=True) name = Column(Unicode(255), ) is_vip = Column(Boolean, ) created_at = Column(DateTime(timezone=True), ) def __init__(self, id=None, name=None, is_vip=None, created_at=None): self.id = id self.name = name self.is_vip = is_vip self.created_at = created_at def add(self, session): session.add(self) def update(self, name=None, is_vip=None, created_at=None): # This function only updates a value if it is not None. # Falsy values go through in the normal way. # To set things to None use the usual syntax: # Person.column_name = None if name is not None: self.name = name if is_vip is not None: self.is_vip = is_vip if created_at is not None: self.created_at = created_at def delete(self, session): session.delete(self) def to_dict(self): return {x: y for x, y in self.__dict__.items() if not x.startswith("_sa")} def get_proxy_cls(self): # PersonProxy is useful when you want to persist data # independent of the sqlalchemy session. It's just a namedtuple # that has very low memory/cpu footprint compared the regular # orm class instances. keys = self.to_dict().keys() name = "PersonProxy" return namedtuple(name, keys) def to_proxy(self): # Proxy-ing is useful when you want to persist data # independent of the sqlalchemy session. It's just a namedtuple # that has very low memory/cpu footprint compared the regular # orm class instances. cls = self._get_proxy_cls() return cls(**self.to_dict()) @classmethod def from_proxy(cls, proxy): return cls(**proxy._asdict()) def __hash__(self): return hash(str(self.id)) def __eq__(self, other): return (self.id == other.id) def __neq__(self, other): return not (self.id == other.id) def __str__(self): return "<Person: {id}>".format(id=self.id) def __unicode__(self): return "<Person: {id}>".format(id=self.id) def __repr__(self): return "<Person: {id}>".format(id=self.id) ``` ```python from __future__ import unicode_literals, absolute_import, print_function from collections import namedtuple from sqlalchemy import Column, Unicode, BigInteger from .alchemy_base import Base __author__ = 'danishabdullah' class Address(Base): __tablename__ = 'addresses' id = Column(BigInteger, primary_key=True, auto_increment=True) line1 = Column(Unicode(), ) line2 = Column(Unicode(), ) line3 = Column(Unicode(), ) postcode = Column(Unicode(10), index=True) def __init__(self, id=None, line1=None, line2=None, line3=None, postcode=None): self.id = id self.line1 = line1 self.line2 = line2 self.line3 = line3 self.postcode = postcode def add(self, session): session.add(self) def update(self, line1=None, line2=None, line3=None, postcode=None): # This function only updates a value if it is not None. # Falsy values go through in the normal way. # To set things to None use the usual syntax: # Address.column_name = None if line1 is not None: self.line1 = line1 if line2 is not None: self.line2 = line2 if line3 is not None: self.line3 = line3 if postcode is not None: self.postcode = postcode def delete(self, session): session.delete(self) def to_dict(self): return {x: y for x, y in self.__dict__.items() if not x.startswith("_sa")} def get_proxy_cls(self): # AddressProxy is useful when you want to persist data # independent of the sqlalchemy session. It's just a namedtuple # that has very low memory/cpu footprint compared the regular # orm class instances. keys = self.to_dict().keys() name = "AddressProxy" return namedtuple(name, keys) def to_proxy(self): # Proxy-ing is useful when you want to persist data # independent of the sqlalchemy session. It's just a namedtuple # that has very low memory/cpu footprint compared the regular # orm class instances. cls = self._get_proxy_cls() return cls(**self.to_dict()) @classmethod def from_proxy(cls, proxy): return cls(**proxy._asdict()) def __hash__(self): return hash(str(self.id)) def __eq__(self, other): return (self.id == other.id) def __neq__(self, other): return not (self.id == other.id) def __str__(self): return "<Address: {id}>".format(id=self.id) def __unicode__(self): return "<Address: {id}>".format(id=self.id) def __repr__(self): return "<Address: {id}>".format(id=self.id) ``` ���������������������������������������������python-readme-renderer-41.0/tests/test_clean.py�����������������������������������������������������0000664�0000000�0000000�00000000216�14467763176�0021677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from readme_renderer.clean import clean def test_invalid_link(): assert clean('<a href="http://exam](ple.com">foo</a>') == "<a>foo</a>" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/test_cli.py�������������������������������������������������������0000664�0000000�0000000�00000004463�14467763176�0021374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import pathlib import pytest from readme_renderer.__main__ import main import tempfile from unittest import mock @pytest.fixture(params=["test_CommonMark_001.md", "test_rst_003.rst", "test_GFM_001.md", "test_txt_001.txt"]) def input_file(request): path = pathlib.Path("tests/fixtures", request.param) # Skip markdown tests if the cmarkgfm optional dependency is not installed. if path.suffix == ".md": pytest.importorskip("cmarkgfm") return path @pytest.mark.parametrize("output_file", [False, True]) def test_cli_input_file(input_file, output_file): with mock.patch("builtins.print") as print_: if output_file: with tempfile.TemporaryDirectory() as tmpdir: output = pathlib.Path(tmpdir) / "output.html" main(["-o", str(output), str(input_file)]) with output.open() as fp: result = fp.read() else: main([str(input_file)]) print_.assert_called_once() (result,), kwargs = print_.call_args with input_file.with_suffix(".html").open() as fp: expected = fp.read() assert result.strip() == expected.strip() if output_file: assert kwargs["file"].name == str(output) def test_cli_invalid_format(): with mock.patch("pathlib.Path.open"), \ pytest.raises(ValueError, match="invalid README format: invalid"): main(["no-file.invalid"]) def test_cli_explicit_format(input_file): fmt = input_file.suffix.lstrip(".") with input_file.open() as fp, \ mock.patch("pathlib.Path.open", return_value=fp), \ mock.patch("builtins.print") as print_: main(["-f", fmt, "no-file.invalid"]) print_.assert_called_once() (result,), _ = print_.call_args with input_file.with_suffix(".html").open() as fp: assert result.strip() == fp.read().strip() @pytest.mark.parametrize("package, contains", [ ("readme_renderer", "Readme Renderer is a library that will safely render"), ("docutils", "Docutils is a modular system for processing documentation"), ]) def test_cli_package(package, contains): with mock.patch("builtins.print") as print_: main(["-p", package]) print_.assert_called_once() (result,), _ = print_.call_args assert contains in result �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/test_markdown.py��������������������������������������������������0000775�0000000�0000000�00000001420�14467763176�0022440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from pathlib import Path import pytest from readme_renderer.markdown import render, variants @pytest.mark.parametrize( ("md_filename", "html_filename", "variant"), [ (pytest.param(fn, fn.with_suffix(".html"), variant, id=fn.name)) for variant in variants for fn in Path(__file__).parent.glob(f"fixtures/test_{variant}*.md") ], ) def test_md_fixtures(md_filename, html_filename, variant): # Get our Markup with open(md_filename, encoding='utf-8') as f: md_markup = f.read() # Get our expected with open(html_filename, encoding="utf-8") as f: expected = f.read() assert render(md_markup, variant=variant) == expected def test_missing_variant(): assert render('Hello', variant="InvalidVariant") is None ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/test_noextra.py���������������������������������������������������0000775�0000000�0000000�00000001010�14467763176�0022271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import pytest from readme_renderer.markdown import render, variants @pytest.mark.skipif(variants, reason="Extra is installed") @pytest.mark.parametrize("variant", ('GFM', 'CommonMark')) def test_no_extra(variant): with pytest.warns(UserWarning) as warnings: assert render('Hello', variant=variant) is None assert len(warnings) == 1 assert warnings[0].message.args[0] == ( "Markdown renderers are not available. " "Install 'readme_renderer[md]' to enable Markdown rendering." ) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/test_rst.py�������������������������������������������������������0000775�0000000�0000000�00000004021�14467763176�0021426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import io from pathlib import Path import pytest from readme_renderer.rst import render @pytest.mark.parametrize( ("rst_filename", "html_filename"), [ (pytest.param(fn, fn.with_suffix(".html"), id=fn.name)) for fn in Path(__file__).parent.glob("fixtures/test_*.rst") ], ) def test_rst_fixtures(rst_filename, html_filename): # Get our Markup with open(rst_filename, encoding='utf-8') as f: rst_markup = f.read() # Get our expected with open(html_filename, encoding="utf-8") as f: expected = f.read() out = render(rst_markup) if "<" in expected: assert out == expected else: assert out is None def test_rst_001(): assert render('Hello') == '<p>Hello</p>\n' def test_rst_002(): assert render('http://mymalicioussite.com/') == ( '<p><a href="http://mymalicioussite.com/" rel="nofollow">' 'http://mymalicioussite.com/</a></p>\n' ) def test_rst_raw(): warnings = io.StringIO() assert render(""" .. raw:: html <script>I am evil</script> """, stream=warnings) is None assert '"raw" directive disabled' in warnings.getvalue() def test_rst_empty_file(): warnings = io.StringIO() assert render("", stream=warnings) is None assert "No content rendered from RST source." in warnings.getvalue() def test_rst_header_only(): warnings = io.StringIO() assert render(""" Header ====== """, stream=warnings) is None assert "No content rendered from RST source." in warnings.getvalue() def test_header_and_malformed_emits_docutils_warning_only(): warnings = io.StringIO() assert render(""" Header ====== ====== """, stream=warnings) is None assert len(warnings.getvalue().splitlines()) == 1 assert "No content rendered from RST source." not in warnings.getvalue() def test_own_readme(): """Render the project's README.rst from root.""" readme = Path(__file__).parent.parent / "README.rst" rendered = render(readme.read_text(encoding="utf-8")) assert rendered is not None ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tests/test_txt.py�������������������������������������������������������0000664�0000000�0000000�00000001164�14467763176�0021437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from pathlib import Path import pytest from readme_renderer.txt import render @pytest.mark.parametrize( ("txt_filename", "html_filename"), [ (pytest.param(fn, fn.with_suffix(".html"), id=fn.name)) for fn in Path(__file__).parent.glob("fixtures/test_*.txt") ], ) def test_txt_fixtures(txt_filename, html_filename): # Get our Markup with open(txt_filename, encoding='utf-8') as f: txt_markup = f.read() # Get our expected with open(html_filename, encoding="utf-8") as f: expected = f.read() out = render(txt_markup) assert out.strip() == expected.strip() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-readme-renderer-41.0/tox.ini�����������������������������������������������������������������0000664�0000000�0000000�00000001272�14467763176�0017360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[tox] envlist = py38,py39,py310,py311,pep8,packaging,noextra,mypy isolated_build = True [testenv] deps = pytest pytest-cov commands = pytest --strict-markers --cov {posargs} extras = md [testenv:mypy] basepython = python3 deps = mypy types-bleach types-docutils types-Pygments commands = mypy readme_renderer [testenv:pep8] basepython = python3 deps = flake8 pep8-naming commands = flake8 . [testenv:packaging] deps = check-manifest build twine commands = check-manifest python -m build python -m twine check dist/* [testenv:noextra] basepython = python3 extras = [flake8] exclude = .tox,*.egg select = E,W,F,N max-line-length = 88 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������