py2docfx 0.1.12rc2002542__py3-none-any.whl → 0.1.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- py2docfx/docfx_yaml/tests/roots/test-writer-uri/code_with_uri.py +7 -0
- py2docfx/docfx_yaml/tests/test_writer_uri.py +4 -0
- py2docfx/docfx_yaml/writer.py +13 -1
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/__init__.py +11 -6
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +58 -0
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_working_set.py +7 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_normalization.py +7 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +2 -12
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_easy_install.py +11 -7
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +6 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/docs/conf.py +384 -0
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py +11 -6
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +58 -0
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_working_set.py +7 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py +7 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +2 -12
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py +11 -7
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +6 -1
- {py2docfx-0.1.12rc2002542.dist-info → py2docfx-0.1.13.dist-info}/METADATA +1 -1
- {py2docfx-0.1.12rc2002542.dist-info → py2docfx-0.1.13.dist-info}/RECORD +29 -28
- {py2docfx-0.1.12rc2002542.dist-info → py2docfx-0.1.13.dist-info}/WHEEL +0 -0
- {py2docfx-0.1.12rc2002542.dist-info → py2docfx-0.1.13.dist-info}/top_level.txt +0 -0
| @@ -20,6 +20,7 @@ def test_http_link_in_summary_should_not_nest_parenthesis(app): | |
| 20 20 | 
             
                class_summary_result = transform_node(app, doctree[1][1][0])
         | 
| 21 21 | 
             
                method1_summary_result = transform_node(app, doctree[1][1][2][1])
         | 
| 22 22 | 
             
                method2_summary_result = transform_node(app, doctree[1][1][4][1])
         | 
| 23 | 
            +
                method3_summary_result = transform_node(app, doctree[1][1][6][1])
         | 
| 23 24 |  | 
| 24 25 | 
             
                # Assert
         | 
| 25 26 | 
             
                # Shouldn't see something like [title]((link))
         | 
| @@ -28,7 +29,10 @@ def test_http_link_in_summary_should_not_nest_parenthesis(app): | |
| 28 29 | 
             
                                           "We should not generate nested parenthesis causing docs validation warnings\n")
         | 
| 29 30 | 
             
                method2_summary_expected = ("\n\n   This isn't a content issue link ([https://www.microsoft.com](https://www.microsoft.com))\n   "
         | 
| 30 31 | 
             
                                            "Should expect a transformed Markdown link.\n")
         | 
| 32 | 
            +
                method3_summary_expected = ("\n\n   This is a bare URL that shouldn't be transformed into a link\n   "
         | 
| 33 | 
            +
                                            "because it's in the exclusion list: `https://management.azure.com`\n")
         | 
| 31 34 | 
             
                assert(class_summary_expected == class_summary_result)
         | 
| 32 35 | 
             
                assert(method1_summary_expected == method1_summary_result)
         | 
| 33 36 | 
             
                assert(method2_summary_expected == method2_summary_result)
         | 
| 37 | 
            +
                assert(method3_summary_expected == method3_summary_result)
         | 
| 34 38 |  | 
    
        py2docfx/docfx_yaml/writer.py
    CHANGED
    
    | @@ -184,6 +184,15 @@ class MarkdownTranslator(nodes.NodeVisitor): | |
| 184 184 | 
             
                sectionchars = '*=-~"+`'
         | 
| 185 185 | 
             
                xref_template = "<xref:{0}>"
         | 
| 186 186 |  | 
| 187 | 
            +
                # URLs that shouldn't be automatically rendered as hyperlinks if found bare. Included because they appear
         | 
| 188 | 
            +
                # frequently, get flagged by the broken link validator and/or there's no value to the user in
         | 
| 189 | 
            +
                # making them clickable links.
         | 
| 190 | 
            +
                urls_that_shouldnt_be_rendered_as_links = {
         | 
| 191 | 
            +
                    "https://management.azure.com",
         | 
| 192 | 
            +
                    "https://management.chinacloudapi.cn",
         | 
| 193 | 
            +
                    "https://management.usgovcloudapi.net"
         | 
| 194 | 
            +
                    }
         | 
| 195 | 
            +
             | 
| 187 196 | 
             
                def __init__(self, document, builder):
         | 
| 188 197 | 
             
                    self.invdata = []
         | 
| 189 198 | 
             
                    nodes.NodeVisitor.__init__(self, document)
         | 
| @@ -927,7 +936,10 @@ class MarkdownTranslator(nodes.NodeVisitor): | |
| 927 936 | 
             
                                        match_content_issue_pattern = True
         | 
| 928 937 | 
             
                                        ref_string = node.attributes["refuri"]
         | 
| 929 938 | 
             
                            if not match_content_issue_pattern:
         | 
| 930 | 
            -
                                 | 
| 939 | 
            +
                                if inner_text == node.attributes['refuri'] and inner_text in cls.urls_that_shouldnt_be_rendered_as_links:
         | 
| 940 | 
            +
                                    ref_string = f'`{inner_text}`'
         | 
| 941 | 
            +
                                else:
         | 
| 942 | 
            +
                                    ref_string = '[{}]({})'.format(node.astext(), node.attributes['refuri'])
         | 
| 931 943 | 
             
                        else:
         | 
| 932 944 | 
             
                            # only use id in class and func refuri if its id exists
         | 
| 933 945 | 
             
                            # otherwise, remove '.html#' in refuri
         | 
| @@ -708,14 +708,19 @@ class WorkingSet: | |
| 708 708 | 
             
                    If there is no active distribution for the requested project, ``None``
         | 
| 709 709 | 
             
                    is returned.
         | 
| 710 710 | 
             
                    """
         | 
| 711 | 
            -
                    dist =  | 
| 711 | 
            +
                    dist: Distribution | None = None
         | 
| 712 712 |  | 
| 713 | 
            -
                     | 
| 714 | 
            -
                         | 
| 713 | 
            +
                    candidates = (
         | 
| 714 | 
            +
                        req.key,
         | 
| 715 | 
            +
                        self.normalized_to_canonical_keys.get(req.key),
         | 
| 716 | 
            +
                        safe_name(req.key).replace(".", "-"),
         | 
| 717 | 
            +
                    )
         | 
| 715 718 |  | 
| 716 | 
            -
             | 
| 717 | 
            -
             | 
| 718 | 
            -
             | 
| 719 | 
            +
                    for candidate in filter(None, candidates):
         | 
| 720 | 
            +
                        dist = self.by_key.get(candidate)
         | 
| 721 | 
            +
                        if dist:
         | 
| 722 | 
            +
                            req.key = candidate
         | 
| 723 | 
            +
                            break
         | 
| 719 724 |  | 
| 720 725 | 
             
                    if dist is not None and dist not in req:
         | 
| 721 726 | 
             
                        # XXX add more info
         | 
| @@ -2,6 +2,7 @@ from __future__ import annotations | |
| 2 2 |  | 
| 3 3 | 
             
            import builtins
         | 
| 4 4 | 
             
            import datetime
         | 
| 5 | 
            +
            import inspect
         | 
| 5 6 | 
             
            import os
         | 
| 6 7 | 
             
            import plistlib
         | 
| 7 8 | 
             
            import stat
         | 
| @@ -425,3 +426,60 @@ class TestDeepVersionLookupDistutils: | |
| 425 426 | 
             
                    """Ensure path seps are cleaned on backslash path sep systems."""
         | 
| 426 427 | 
             
                    result = pkg_resources.normalize_path(unnormalized)
         | 
| 427 428 | 
             
                    assert result.endswith(expected)
         | 
| 429 | 
            +
             | 
| 430 | 
            +
             | 
| 431 | 
            +
            class TestWorkdirRequire:
         | 
| 432 | 
            +
                def fake_site_packages(self, tmp_path, monkeypatch, dist_files):
         | 
| 433 | 
            +
                    site_packages = tmp_path / "site-packages"
         | 
| 434 | 
            +
                    site_packages.mkdir()
         | 
| 435 | 
            +
                    for file, content in self.FILES.items():
         | 
| 436 | 
            +
                        path = site_packages / file
         | 
| 437 | 
            +
                        path.parent.mkdir(exist_ok=True, parents=True)
         | 
| 438 | 
            +
                        path.write_text(inspect.cleandoc(content), encoding="utf-8")
         | 
| 439 | 
            +
             | 
| 440 | 
            +
                    monkeypatch.setattr(sys, "path", [site_packages])
         | 
| 441 | 
            +
                    return os.fspath(site_packages)
         | 
| 442 | 
            +
             | 
| 443 | 
            +
                FILES = {
         | 
| 444 | 
            +
                    "pkg1_mod-1.2.3.dist-info/METADATA": """
         | 
| 445 | 
            +
                        Metadata-Version: 2.4
         | 
| 446 | 
            +
                        Name: pkg1.mod
         | 
| 447 | 
            +
                        Version: 1.2.3
         | 
| 448 | 
            +
                        """,
         | 
| 449 | 
            +
                    "pkg2.mod-0.42.dist-info/METADATA": """
         | 
| 450 | 
            +
                        Metadata-Version: 2.1
         | 
| 451 | 
            +
                        Name: pkg2.mod
         | 
| 452 | 
            +
                        Version: 0.42
         | 
| 453 | 
            +
                        """,
         | 
| 454 | 
            +
                    "pkg3_mod.egg-info/PKG-INFO": """
         | 
| 455 | 
            +
                        Name: pkg3.mod
         | 
| 456 | 
            +
                        Version: 1.2.3.4
         | 
| 457 | 
            +
                        """,
         | 
| 458 | 
            +
                    "pkg4.mod.egg-info/PKG-INFO": """
         | 
| 459 | 
            +
                        Name: pkg4.mod
         | 
| 460 | 
            +
                        Version: 0.42.1
         | 
| 461 | 
            +
                        """,
         | 
| 462 | 
            +
                }
         | 
| 463 | 
            +
             | 
| 464 | 
            +
                @pytest.mark.parametrize(
         | 
| 465 | 
            +
                    ("version", "requirement"),
         | 
| 466 | 
            +
                    [
         | 
| 467 | 
            +
                        ("1.2.3", "pkg1.mod>=1"),
         | 
| 468 | 
            +
                        ("0.42", "pkg2.mod>=0.4"),
         | 
| 469 | 
            +
                        ("1.2.3.4", "pkg3.mod<=2"),
         | 
| 470 | 
            +
                        ("0.42.1", "pkg4.mod>0.2,<1"),
         | 
| 471 | 
            +
                    ],
         | 
| 472 | 
            +
                )
         | 
| 473 | 
            +
                def test_require_non_normalised_name(
         | 
| 474 | 
            +
                    self, tmp_path, monkeypatch, version, requirement
         | 
| 475 | 
            +
                ):
         | 
| 476 | 
            +
                    # https://github.com/pypa/setuptools/issues/4853
         | 
| 477 | 
            +
                    site_packages = self.fake_site_packages(tmp_path, monkeypatch, self.FILES)
         | 
| 478 | 
            +
                    ws = pkg_resources.WorkingSet([site_packages])
         | 
| 479 | 
            +
             | 
| 480 | 
            +
                    for req in [requirement, requirement.replace(".", "-")]:
         | 
| 481 | 
            +
                        [dist] = ws.require(req)
         | 
| 482 | 
            +
                        assert dist.version == version
         | 
| 483 | 
            +
                        assert os.path.samefile(
         | 
| 484 | 
            +
                            os.path.commonpath([dist.location, site_packages]), site_packages
         | 
| 485 | 
            +
                        )
         | 
| @@ -104,9 +104,13 @@ def parametrize_test_working_set_resolve(*test_list): | |
| 104 104 | 
             
                            )
         | 
| 105 105 | 
             
                        )
         | 
| 106 106 | 
             
                return pytest.mark.parametrize(
         | 
| 107 | 
            -
                     | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 107 | 
            +
                    (
         | 
| 108 | 
            +
                        "installed_dists",
         | 
| 109 | 
            +
                        "installable_dists",
         | 
| 110 | 
            +
                        "requirements",
         | 
| 111 | 
            +
                        "replace_conflicting",
         | 
| 112 | 
            +
                        "resolved_dists_or_exception",
         | 
| 113 | 
            +
                    ),
         | 
| 110 114 | 
             
                    argvalues,
         | 
| 111 115 | 
             
                    ids=idlist,
         | 
| 112 116 | 
             
                )
         | 
| @@ -134,7 +134,13 @@ def filename_component_broken(value: str) -> str: | |
| 134 134 | 
             
            def safer_name(value: str) -> str:
         | 
| 135 135 | 
             
                """Like ``safe_name`` but can be used as filename component for wheel"""
         | 
| 136 136 | 
             
                # See bdist_wheel.safer_name
         | 
| 137 | 
            -
                return  | 
| 137 | 
            +
                return (
         | 
| 138 | 
            +
                    # Per https://packaging.python.org/en/latest/specifications/name-normalization/#name-normalization
         | 
| 139 | 
            +
                    re.sub(r"[-_.]+", "-", safe_name(value))
         | 
| 140 | 
            +
                    .lower()
         | 
| 141 | 
            +
                    # Per https://packaging.python.org/en/latest/specifications/binary-distribution-format/#escaping-and-unicode
         | 
| 142 | 
            +
                    .replace("-", "_")
         | 
| 143 | 
            +
                )
         | 
| 138 144 |  | 
| 139 145 |  | 
| 140 146 | 
             
            def safer_best_effort_version(value: str) -> str:
         | 
| @@ -23,19 +23,13 @@ from packaging import tags, version as _packaging_version | |
| 23 23 | 
             
            from wheel.wheelfile import WheelFile
         | 
| 24 24 |  | 
| 25 25 | 
             
            from .. import Command, __version__, _shutil
         | 
| 26 | 
            +
            from .._normalization import safer_name
         | 
| 26 27 | 
             
            from ..warnings import SetuptoolsDeprecationWarning
         | 
| 27 28 | 
             
            from .egg_info import egg_info as egg_info_cls
         | 
| 28 29 |  | 
| 29 30 | 
             
            from distutils import log
         | 
| 30 31 |  | 
| 31 32 |  | 
| 32 | 
            -
            def safe_name(name: str) -> str:
         | 
| 33 | 
            -
                """Convert an arbitrary string to a standard distribution name
         | 
| 34 | 
            -
                Any runs of non-alphanumeric/. characters are replaced with a single '-'.
         | 
| 35 | 
            -
                """
         | 
| 36 | 
            -
                return re.sub("[^A-Za-z0-9.]+", "-", name)
         | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 33 | 
             
            def safe_version(version: str) -> str:
         | 
| 40 34 | 
             
                """
         | 
| 41 35 | 
             
                Convert an arbitrary string to a standard version string
         | 
| @@ -133,10 +127,6 @@ def get_abi_tag() -> str | None: | |
| 133 127 | 
             
                return abi
         | 
| 134 128 |  | 
| 135 129 |  | 
| 136 | 
            -
            def safer_name(name: str) -> str:
         | 
| 137 | 
            -
                return safe_name(name).replace("-", "_")
         | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 130 | 
             
            def safer_version(version: str) -> str:
         | 
| 141 131 | 
             
                return safe_version(version).replace("-", "_")
         | 
| 142 132 |  | 
| @@ -294,7 +284,7 @@ class bdist_wheel(Command): | |
| 294 284 | 
             
                        raise ValueError(
         | 
| 295 285 | 
             
                            f"`py_limited_api={self.py_limited_api!r}` not supported. "
         | 
| 296 286 | 
             
                            "`Py_LIMITED_API` is currently incompatible with "
         | 
| 297 | 
            -
                             | 
| 287 | 
            +
                            "`Py_GIL_DISABLED`."
         | 
| 298 288 | 
             
                            "See https://github.com/python/cpython/issues/111506."
         | 
| 299 289 | 
             
                        )
         | 
| 300 290 |  | 
| @@ -246,9 +246,9 @@ def test_no_scripts(wheel_paths): | |
| 246 246 |  | 
| 247 247 |  | 
| 248 248 | 
             
            def test_unicode_record(wheel_paths):
         | 
| 249 | 
            -
                path = next(path for path in wheel_paths if " | 
| 249 | 
            +
                path = next(path for path in wheel_paths if "unicode_dist" in path)
         | 
| 250 250 | 
             
                with ZipFile(path) as zf:
         | 
| 251 | 
            -
                    record = zf.read(" | 
| 251 | 
            +
                    record = zf.read("unicode_dist-0.1.dist-info/RECORD")
         | 
| 252 252 |  | 
| 253 253 | 
             
                assert "åäö_日本語.py".encode() in record
         | 
| 254 254 |  | 
| @@ -8,7 +8,7 @@ import pytest | |
| 8 8 | 
             
            from setuptools import Distribution
         | 
| 9 9 | 
             
            from setuptools.dist import check_package_data, check_specifier
         | 
| 10 10 |  | 
| 11 | 
            -
            from .test_easy_install import  | 
| 11 | 
            +
            from .test_easy_install import make_trivial_sdist
         | 
| 12 12 | 
             
            from .test_find_packages import ensure_files
         | 
| 13 13 | 
             
            from .textwrap import DALS
         | 
| 14 14 |  | 
| @@ -25,7 +25,7 @@ def test_dist_fetch_build_egg(tmpdir): | |
| 25 25 | 
             
                def sdist_with_index(distname, version):
         | 
| 26 26 | 
             
                    dist_dir = index.mkdir(distname)
         | 
| 27 27 | 
             
                    dist_sdist = f'{distname}-{version}.tar.gz'
         | 
| 28 | 
            -
                     | 
| 28 | 
            +
                    make_trivial_sdist(str(dist_dir.join(dist_sdist)), distname, version)
         | 
| 29 29 | 
             
                    with dist_dir.join('index.html').open('w') as fp:
         | 
| 30 30 | 
             
                        fp.write(
         | 
| 31 31 | 
             
                            DALS(
         | 
| @@ -188,7 +188,7 @@ class TestWheelCompatibility: | |
| 188 188 | 
             
                    dist_info = next(tmp_path.glob("dir_dist/*.dist-info"))
         | 
| 189 189 |  | 
| 190 190 | 
             
                    assert dist_info.name == wheel_dist_info.name
         | 
| 191 | 
            -
                    assert dist_info.name.startswith(f" | 
| 191 | 
            +
                    assert dist_info.name.startswith(f"my_proj-{version}{suffix}")
         | 
| 192 192 | 
             
                    for file in "METADATA", "entry_points.txt":
         | 
| 193 193 | 
             
                        assert read(dist_info / file) == read(wheel_dist_info / file)
         | 
| 194 194 |  | 
| @@ -26,6 +26,7 @@ import pkg_resources | |
| 26 26 | 
             
            import setuptools.command.easy_install as ei
         | 
| 27 27 | 
             
            from pkg_resources import Distribution as PRDistribution, normalize_path, working_set
         | 
| 28 28 | 
             
            from setuptools import sandbox
         | 
| 29 | 
            +
            from setuptools._normalization import safer_name
         | 
| 29 30 | 
             
            from setuptools.command.easy_install import PthDistributions
         | 
| 30 31 | 
             
            from setuptools.dist import Distribution
         | 
| 31 32 | 
             
            from setuptools.sandbox import run_setup
         | 
| @@ -670,11 +671,11 @@ class TestSetupRequires: | |
| 670 671 |  | 
| 671 672 | 
             
                    with contexts.save_pkg_resources_state():
         | 
| 672 673 | 
             
                        with contexts.tempdir() as temp_dir:
         | 
| 673 | 
            -
                            foobar_1_archive = os.path.join(temp_dir, ' | 
| 674 | 
            +
                            foobar_1_archive = os.path.join(temp_dir, 'foo_bar-0.1.tar.gz')
         | 
| 674 675 | 
             
                            make_nspkg_sdist(foobar_1_archive, 'foo.bar', '0.1')
         | 
| 675 676 | 
             
                            # Now actually go ahead an extract to the temp dir and add the
         | 
| 676 677 | 
             
                            # extracted path to sys.path so foo.bar v0.1 is importable
         | 
| 677 | 
            -
                            foobar_1_dir = os.path.join(temp_dir, ' | 
| 678 | 
            +
                            foobar_1_dir = os.path.join(temp_dir, 'foo_bar-0.1')
         | 
| 678 679 | 
             
                            os.mkdir(foobar_1_dir)
         | 
| 679 680 | 
             
                            with tarfile.open(foobar_1_archive) as tf:
         | 
| 680 681 | 
             
                                tf.extraction_filter = lambda member, path: member
         | 
| @@ -697,7 +698,7 @@ class TestSetupRequires: | |
| 697 698 | 
             
                                        len(foo.__path__) == 2):
         | 
| 698 699 | 
             
                                    print('FAIL')
         | 
| 699 700 |  | 
| 700 | 
            -
                                if ' | 
| 701 | 
            +
                                if 'foo_bar-0.2' not in foo.__path__[0]:
         | 
| 701 702 | 
             
                                    print('FAIL')
         | 
| 702 703 | 
             
                            """
         | 
| 703 704 | 
             
                            )
         | 
| @@ -718,8 +719,8 @@ class TestSetupRequires: | |
| 718 719 | 
             
                                    # Don't even need to install the package, just
         | 
| 719 720 | 
             
                                    # running the setup.py at all is sufficient
         | 
| 720 721 | 
             
                                    run_setup(test_setup_py, ['--name'])
         | 
| 721 | 
            -
                                except pkg_resources.VersionConflict:
         | 
| 722 | 
            -
                                     | 
| 722 | 
            +
                                except pkg_resources.VersionConflict:  # pragma: nocover
         | 
| 723 | 
            +
                                    pytest.fail(
         | 
| 723 724 | 
             
                                        'Installing setup.py requirements caused a VersionConflict'
         | 
| 724 725 | 
             
                                    )
         | 
| 725 726 |  | 
| @@ -1120,6 +1121,8 @@ def make_nspkg_sdist(dist_path, distname, version): | |
| 1120 1121 | 
             
                package with the same name as distname.  The top-level package is
         | 
| 1121 1122 | 
             
                designated a namespace package).
         | 
| 1122 1123 | 
             
                """
         | 
| 1124 | 
            +
                # Assert that the distname contains at least one period
         | 
| 1125 | 
            +
                assert '.' in distname
         | 
| 1123 1126 |  | 
| 1124 1127 | 
             
                parts = distname.split('.')
         | 
| 1125 1128 | 
             
                nspackage = parts[0]
         | 
| @@ -1207,10 +1210,11 @@ def create_setup_requires_package( | |
| 1207 1210 | 
             
                package itself is just 'test_pkg'.
         | 
| 1208 1211 | 
             
                """
         | 
| 1209 1212 |  | 
| 1213 | 
            +
                normalized_distname = safer_name(distname)
         | 
| 1210 1214 | 
             
                test_setup_attrs = {
         | 
| 1211 1215 | 
             
                    'name': 'test_pkg',
         | 
| 1212 1216 | 
             
                    'version': '0.0',
         | 
| 1213 | 
            -
                    'setup_requires': [f'{ | 
| 1217 | 
            +
                    'setup_requires': [f'{normalized_distname}=={version}'],
         | 
| 1214 1218 | 
             
                    'dependency_links': [os.path.abspath(path)],
         | 
| 1215 1219 | 
             
                }
         | 
| 1216 1220 | 
             
                if setup_attrs:
         | 
| @@ -1259,7 +1263,7 @@ def create_setup_requires_package( | |
| 1259 1263 | 
             
                with open(os.path.join(test_pkg, 'setup.py'), 'w', encoding="utf-8") as f:
         | 
| 1260 1264 | 
             
                    f.write(setup_py_template % test_setup_attrs)
         | 
| 1261 1265 |  | 
| 1262 | 
            -
                foobar_path = os.path.join(path, f'{ | 
| 1266 | 
            +
                foobar_path = os.path.join(path, f'{normalized_distname}-{version}.tar.gz')
         | 
| 1263 1267 | 
             
                make_package(foobar_path, distname, version)
         | 
| 1264 1268 |  | 
| 1265 1269 | 
             
                return test_pkg
         | 
| @@ -300,7 +300,12 @@ class TestEggInfo: | |
| 300 300 | 
             
                                    )
         | 
| 301 301 | 
             
                                )
         | 
| 302 302 | 
             
                        return pytest.mark.parametrize(
         | 
| 303 | 
            -
                             | 
| 303 | 
            +
                            (
         | 
| 304 | 
            +
                                "requires",
         | 
| 305 | 
            +
                                "use_setup_cfg",
         | 
| 306 | 
            +
                                "expected_requires",
         | 
| 307 | 
            +
                                "install_cmd_kwargs",
         | 
| 308 | 
            +
                            ),
         | 
| 304 309 | 
             
                            argvalues,
         | 
| 305 310 | 
             
                            ids=idlist,
         | 
| 306 311 | 
             
                        )
         | 
| @@ -0,0 +1,384 @@ | |
| 1 | 
            +
            # -*- coding: utf-8 -*-
         | 
| 2 | 
            +
            # Copyright 2024 Google LLC
         | 
| 3 | 
            +
            #
         | 
| 4 | 
            +
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| 5 | 
            +
            # you may not use this file except in compliance with the License.
         | 
| 6 | 
            +
            # You may obtain a copy of the License at
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            # http://www.apache.org/licenses/LICENSE-2.0
         | 
| 9 | 
            +
            #
         | 
| 10 | 
            +
            # Unless required by applicable law or agreed to in writing, software
         | 
| 11 | 
            +
            # distributed under the License is distributed on an "AS IS" BASIS,
         | 
| 12 | 
            +
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         | 
| 13 | 
            +
            # See the License for the specific language governing permissions and
         | 
| 14 | 
            +
            # limitations under the License.
         | 
| 15 | 
            +
            #
         | 
| 16 | 
            +
            # googleapis-common-protos documentation build configuration file
         | 
| 17 | 
            +
            #
         | 
| 18 | 
            +
            # This file is execfile()d with the current directory set to its
         | 
| 19 | 
            +
            # containing dir.
         | 
| 20 | 
            +
            #
         | 
| 21 | 
            +
            # Note that not all possible configuration values are present in this
         | 
| 22 | 
            +
            # autogenerated file.
         | 
| 23 | 
            +
            #
         | 
| 24 | 
            +
            # All configuration values have a default; values that are commented out
         | 
| 25 | 
            +
            # serve to show the default.
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            import os
         | 
| 28 | 
            +
            import shlex
         | 
| 29 | 
            +
            import sys
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            # If extensions (or modules to document with autodoc) are in another directory,
         | 
| 32 | 
            +
            # add these directories to sys.path here. If the directory is relative to the
         | 
| 33 | 
            +
            # documentation root, use os.path.abspath to make it absolute, like shown here.
         | 
| 34 | 
            +
            sys.path.insert(0, os.path.abspath(".."))
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            # For plugins that can not read conf.py.
         | 
| 37 | 
            +
            # See also: https://github.com/docascode/sphinx-docfx-yaml/issues/85
         | 
| 38 | 
            +
            sys.path.insert(0, os.path.abspath("."))
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            __version__ = ""
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            # -- General configuration ------------------------------------------------
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            # If your documentation needs a minimal Sphinx version, state it here.
         | 
| 45 | 
            +
            needs_sphinx = "1.5.5"
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            # Add any Sphinx extension module names here, as strings. They can be
         | 
| 48 | 
            +
            # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
         | 
| 49 | 
            +
            # ones.
         | 
| 50 | 
            +
            extensions = [
         | 
| 51 | 
            +
                "sphinx.ext.autodoc",
         | 
| 52 | 
            +
                "sphinx.ext.autosummary",
         | 
| 53 | 
            +
                "sphinx.ext.intersphinx",
         | 
| 54 | 
            +
                "sphinx.ext.coverage",
         | 
| 55 | 
            +
                "sphinx.ext.doctest",
         | 
| 56 | 
            +
                "sphinx.ext.napoleon",
         | 
| 57 | 
            +
                "sphinx.ext.todo",
         | 
| 58 | 
            +
                "sphinx.ext.viewcode",
         | 
| 59 | 
            +
                "recommonmark",
         | 
| 60 | 
            +
            ]
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            # autodoc/autosummary flags
         | 
| 63 | 
            +
            autoclass_content = "both"
         | 
| 64 | 
            +
            autodoc_default_options = {"members": True}
         | 
| 65 | 
            +
            autosummary_generate = True
         | 
| 66 | 
            +
             | 
| 67 | 
            +
             | 
| 68 | 
            +
            # Add any paths that contain templates here, relative to this directory.
         | 
| 69 | 
            +
            templates_path = ["_templates"]
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            # The suffix(es) of source filenames.
         | 
| 72 | 
            +
            # You can specify multiple suffix as a list of string:
         | 
| 73 | 
            +
            # source_suffix = ['.rst', '.md']
         | 
| 74 | 
            +
            source_suffix = [".rst", ".md"]
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            # The encoding of source files.
         | 
| 77 | 
            +
            # source_encoding = 'utf-8-sig'
         | 
| 78 | 
            +
             | 
| 79 | 
            +
            # The root toctree document.
         | 
| 80 | 
            +
            root_doc = "index"
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            # General information about the project.
         | 
| 83 | 
            +
            project = "googleapis-common-protos"
         | 
| 84 | 
            +
            copyright = "2019, Google"
         | 
| 85 | 
            +
            author = "Google APIs"
         | 
| 86 | 
            +
             | 
| 87 | 
            +
            # The version info for the project you're documenting, acts as replacement for
         | 
| 88 | 
            +
            # |version| and |release|, also used in various other places throughout the
         | 
| 89 | 
            +
            # built documents.
         | 
| 90 | 
            +
            #
         | 
| 91 | 
            +
            # The full version, including alpha/beta/rc tags.
         | 
| 92 | 
            +
            release = __version__
         | 
| 93 | 
            +
            # The short X.Y version.
         | 
| 94 | 
            +
            version = ".".join(release.split(".")[0:2])
         | 
| 95 | 
            +
             | 
| 96 | 
            +
            # The language for content autogenerated by Sphinx. Refer to documentation
         | 
| 97 | 
            +
            # for a list of supported languages.
         | 
| 98 | 
            +
            #
         | 
| 99 | 
            +
            # This is also used if you do content translation via gettext catalogs.
         | 
| 100 | 
            +
            # Usually you set "language" from the command line for these cases.
         | 
| 101 | 
            +
            language = None
         | 
| 102 | 
            +
             | 
| 103 | 
            +
            # There are two options for replacing |today|: either, you set today to some
         | 
| 104 | 
            +
            # non-false value, then it is used:
         | 
| 105 | 
            +
            # today = ''
         | 
| 106 | 
            +
            # Else, today_fmt is used as the format for a strftime call.
         | 
| 107 | 
            +
            # today_fmt = '%B %d, %Y'
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            # List of patterns, relative to source directory, that match files and
         | 
| 110 | 
            +
            # directories to ignore when looking for source files.
         | 
| 111 | 
            +
            exclude_patterns = [
         | 
| 112 | 
            +
                "_build",
         | 
| 113 | 
            +
                "**/.nox/**/*",
         | 
| 114 | 
            +
                "samples/AUTHORING_GUIDE.md",
         | 
| 115 | 
            +
                "samples/CONTRIBUTING.md",
         | 
| 116 | 
            +
                "samples/snippets/README.rst",
         | 
| 117 | 
            +
            ]
         | 
| 118 | 
            +
             | 
| 119 | 
            +
            # The reST default role (used for this markup: `text`) to use for all
         | 
| 120 | 
            +
            # documents.
         | 
| 121 | 
            +
            # default_role = None
         | 
| 122 | 
            +
             | 
| 123 | 
            +
            # If true, '()' will be appended to :func: etc. cross-reference text.
         | 
| 124 | 
            +
            # add_function_parentheses = True
         | 
| 125 | 
            +
             | 
| 126 | 
            +
            # If true, the current module name will be prepended to all description
         | 
| 127 | 
            +
            # unit titles (such as .. function::).
         | 
| 128 | 
            +
            # add_module_names = True
         | 
| 129 | 
            +
             | 
| 130 | 
            +
            # If true, sectionauthor and moduleauthor directives will be shown in the
         | 
| 131 | 
            +
            # output. They are ignored by default.
         | 
| 132 | 
            +
            # show_authors = False
         | 
| 133 | 
            +
             | 
| 134 | 
            +
            # The name of the Pygments (syntax highlighting) style to use.
         | 
| 135 | 
            +
            pygments_style = "sphinx"
         | 
| 136 | 
            +
             | 
| 137 | 
            +
            # A list of ignored prefixes for module index sorting.
         | 
| 138 | 
            +
            # modindex_common_prefix = []
         | 
| 139 | 
            +
             | 
| 140 | 
            +
            # If true, keep warnings as "system message" paragraphs in the built documents.
         | 
| 141 | 
            +
            # keep_warnings = False
         | 
| 142 | 
            +
             | 
| 143 | 
            +
            # If true, `todo` and `todoList` produce output, else they produce nothing.
         | 
| 144 | 
            +
            todo_include_todos = True
         | 
| 145 | 
            +
             | 
| 146 | 
            +
             | 
| 147 | 
            +
            # -- Options for HTML output ----------------------------------------------
         | 
| 148 | 
            +
             | 
| 149 | 
            +
            # The theme to use for HTML and HTML Help pages.  See the documentation for
         | 
| 150 | 
            +
            # a list of builtin themes.
         | 
| 151 | 
            +
            html_theme = "alabaster"
         | 
| 152 | 
            +
             | 
| 153 | 
            +
            # Theme options are theme-specific and customize the look and feel of a theme
         | 
| 154 | 
            +
            # further.  For a list of options available for each theme, see the
         | 
| 155 | 
            +
            # documentation.
         | 
| 156 | 
            +
            html_theme_options = {
         | 
| 157 | 
            +
                "description": "Google Cloud Client Libraries for googleapis-common-protos",
         | 
| 158 | 
            +
                "github_user": "googleapis",
         | 
| 159 | 
            +
                "github_repo": "google-cloud-python",
         | 
| 160 | 
            +
                "github_banner": True,
         | 
| 161 | 
            +
                "font_family": "'Roboto', Georgia, sans",
         | 
| 162 | 
            +
                "head_font_family": "'Roboto', Georgia, serif",
         | 
| 163 | 
            +
                "code_font_family": "'Roboto Mono', 'Consolas', monospace",
         | 
| 164 | 
            +
            }
         | 
| 165 | 
            +
             | 
| 166 | 
            +
            # Add any paths that contain custom themes here, relative to this directory.
         | 
| 167 | 
            +
            # html_theme_path = []
         | 
| 168 | 
            +
             | 
| 169 | 
            +
            # The name for this set of Sphinx documents.  If None, it defaults to
         | 
| 170 | 
            +
            # "<project> v<release> documentation".
         | 
| 171 | 
            +
            # html_title = None
         | 
| 172 | 
            +
             | 
| 173 | 
            +
            # A shorter title for the navigation bar.  Default is the same as html_title.
         | 
| 174 | 
            +
            # html_short_title = None
         | 
| 175 | 
            +
             | 
| 176 | 
            +
            # The name of an image file (relative to this directory) to place at the top
         | 
| 177 | 
            +
            # of the sidebar.
         | 
| 178 | 
            +
            # html_logo = None
         | 
| 179 | 
            +
             | 
| 180 | 
            +
            # The name of an image file (within the static path) to use as favicon of the
         | 
| 181 | 
            +
            # docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
         | 
| 182 | 
            +
            # pixels large.
         | 
| 183 | 
            +
            # html_favicon = None
         | 
| 184 | 
            +
             | 
| 185 | 
            +
            # Add any paths that contain custom static files (such as style sheets) here,
         | 
| 186 | 
            +
            # relative to this directory. They are copied after the builtin static files,
         | 
| 187 | 
            +
            # so a file named "default.css" will overwrite the builtin "default.css".
         | 
| 188 | 
            +
            html_static_path = ["_static"]
         | 
| 189 | 
            +
             | 
| 190 | 
            +
            # Add any extra paths that contain custom files (such as robots.txt or
         | 
| 191 | 
            +
            # .htaccess) here, relative to this directory. These files are copied
         | 
| 192 | 
            +
            # directly to the root of the documentation.
         | 
| 193 | 
            +
            # html_extra_path = []
         | 
| 194 | 
            +
             | 
| 195 | 
            +
            # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
         | 
| 196 | 
            +
            # using the given strftime format.
         | 
| 197 | 
            +
            # html_last_updated_fmt = '%b %d, %Y'
         | 
| 198 | 
            +
             | 
| 199 | 
            +
            # If true, SmartyPants will be used to convert quotes and dashes to
         | 
| 200 | 
            +
            # typographically correct entities.
         | 
| 201 | 
            +
            # html_use_smartypants = True
         | 
| 202 | 
            +
             | 
| 203 | 
            +
            # Custom sidebar templates, maps document names to template names.
         | 
| 204 | 
            +
            # html_sidebars = {}
         | 
| 205 | 
            +
             | 
| 206 | 
            +
            # Additional templates that should be rendered to pages, maps page names to
         | 
| 207 | 
            +
            # template names.
         | 
| 208 | 
            +
            # html_additional_pages = {}
         | 
| 209 | 
            +
             | 
| 210 | 
            +
            # If false, no module index is generated.
         | 
| 211 | 
            +
            # html_domain_indices = True
         | 
| 212 | 
            +
             | 
| 213 | 
            +
            # If false, no index is generated.
         | 
| 214 | 
            +
            # html_use_index = True
         | 
| 215 | 
            +
             | 
| 216 | 
            +
            # If true, the index is split into individual pages for each letter.
         | 
| 217 | 
            +
            # html_split_index = False
         | 
| 218 | 
            +
             | 
| 219 | 
            +
            # If true, links to the reST sources are added to the pages.
         | 
| 220 | 
            +
            # html_show_sourcelink = True
         | 
| 221 | 
            +
             | 
| 222 | 
            +
            # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
         | 
| 223 | 
            +
            # html_show_sphinx = True
         | 
| 224 | 
            +
             | 
| 225 | 
            +
            # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
         | 
| 226 | 
            +
            # html_show_copyright = True
         | 
| 227 | 
            +
             | 
| 228 | 
            +
            # If true, an OpenSearch description file will be output, and all pages will
         | 
| 229 | 
            +
            # contain a <link> tag referring to it.  The value of this option must be the
         | 
| 230 | 
            +
            # base URL from which the finished HTML is served.
         | 
| 231 | 
            +
            # html_use_opensearch = ''
         | 
| 232 | 
            +
             | 
| 233 | 
            +
            # This is the file name suffix for HTML files (e.g. ".xhtml").
         | 
| 234 | 
            +
            # html_file_suffix = None
         | 
| 235 | 
            +
             | 
| 236 | 
            +
            # Language to be used for generating the HTML full-text search index.
         | 
| 237 | 
            +
            # Sphinx supports the following languages:
         | 
| 238 | 
            +
            #   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
         | 
| 239 | 
            +
            #   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
         | 
| 240 | 
            +
            # html_search_language = 'en'
         | 
| 241 | 
            +
             | 
| 242 | 
            +
            # A dictionary with options for the search language support, empty by default.
         | 
| 243 | 
            +
            # Now only 'ja' uses this config value
         | 
| 244 | 
            +
            # html_search_options = {'type': 'default'}
         | 
| 245 | 
            +
             | 
| 246 | 
            +
            # The name of a javascript file (relative to the configuration directory) that
         | 
| 247 | 
            +
            # implements a search results scorer. If empty, the default will be used.
         | 
| 248 | 
            +
            # html_search_scorer = 'scorer.js'
         | 
| 249 | 
            +
             | 
| 250 | 
            +
            # Output file base name for HTML help builder.
         | 
| 251 | 
            +
            htmlhelp_basename = "googleapis-common-protos-doc"
         | 
| 252 | 
            +
             | 
| 253 | 
            +
            # -- Options for warnings ------------------------------------------------------
         | 
| 254 | 
            +
             | 
| 255 | 
            +
             | 
| 256 | 
            +
            suppress_warnings = [
         | 
| 257 | 
            +
                # Temporarily suppress this to avoid "more than one target found for
         | 
| 258 | 
            +
                # cross-reference" warning, which are intractable for us to avoid while in
         | 
| 259 | 
            +
                # a mono-repo.
         | 
| 260 | 
            +
                # See https://github.com/sphinx-doc/sphinx/blob
         | 
| 261 | 
            +
                # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843
         | 
| 262 | 
            +
                "ref.python"
         | 
| 263 | 
            +
            ]
         | 
| 264 | 
            +
             | 
| 265 | 
            +
            # -- Options for LaTeX output ---------------------------------------------
         | 
| 266 | 
            +
             | 
| 267 | 
            +
            latex_elements = {
         | 
| 268 | 
            +
                # The paper size ('letterpaper' or 'a4paper').
         | 
| 269 | 
            +
                #'papersize': 'letterpaper',
         | 
| 270 | 
            +
                # The font size ('10pt', '11pt' or '12pt').
         | 
| 271 | 
            +
                #'pointsize': '10pt',
         | 
| 272 | 
            +
                # Additional stuff for the LaTeX preamble.
         | 
| 273 | 
            +
                #'preamble': '',
         | 
| 274 | 
            +
                # Latex figure (float) alignment
         | 
| 275 | 
            +
                #'figure_align': 'htbp',
         | 
| 276 | 
            +
            }
         | 
| 277 | 
            +
             | 
| 278 | 
            +
            # Grouping the document tree into LaTeX files. List of tuples
         | 
| 279 | 
            +
            # (source start file, target name, title,
         | 
| 280 | 
            +
            #  author, documentclass [howto, manual, or own class]).
         | 
| 281 | 
            +
            latex_documents = [
         | 
| 282 | 
            +
                (
         | 
| 283 | 
            +
                    root_doc,
         | 
| 284 | 
            +
                    "googleapis-common-protos.tex",
         | 
| 285 | 
            +
                    "googleapis-common-protos Documentation",
         | 
| 286 | 
            +
                    author,
         | 
| 287 | 
            +
                    "manual",
         | 
| 288 | 
            +
                )
         | 
| 289 | 
            +
            ]
         | 
| 290 | 
            +
             | 
| 291 | 
            +
            # The name of an image file (relative to this directory) to place at the top of
         | 
| 292 | 
            +
            # the title page.
         | 
| 293 | 
            +
            # latex_logo = None
         | 
| 294 | 
            +
             | 
| 295 | 
            +
            # For "manual" documents, if this is true, then toplevel headings are parts,
         | 
| 296 | 
            +
            # not chapters.
         | 
| 297 | 
            +
            # latex_use_parts = False
         | 
| 298 | 
            +
             | 
| 299 | 
            +
            # If true, show page references after internal links.
         | 
| 300 | 
            +
            # latex_show_pagerefs = False
         | 
| 301 | 
            +
             | 
| 302 | 
            +
            # If true, show URL addresses after external links.
         | 
| 303 | 
            +
            # latex_show_urls = False
         | 
| 304 | 
            +
             | 
| 305 | 
            +
            # Documents to append as an appendix to all manuals.
         | 
| 306 | 
            +
            # latex_appendices = []
         | 
| 307 | 
            +
             | 
| 308 | 
            +
            # If false, no module index is generated.
         | 
| 309 | 
            +
            # latex_domain_indices = True
         | 
| 310 | 
            +
             | 
| 311 | 
            +
             | 
| 312 | 
            +
            # -- Options for manual page output ---------------------------------------
         | 
| 313 | 
            +
             | 
| 314 | 
            +
            # One entry per manual page. List of tuples
         | 
| 315 | 
            +
            # (source start file, name, description, authors, manual section).
         | 
| 316 | 
            +
            man_pages = [
         | 
| 317 | 
            +
                (
         | 
| 318 | 
            +
                    root_doc,
         | 
| 319 | 
            +
                    "googleapis-common-protos",
         | 
| 320 | 
            +
                    "googleapis-common-protos Documentation",
         | 
| 321 | 
            +
                    [author],
         | 
| 322 | 
            +
                    1,
         | 
| 323 | 
            +
                )
         | 
| 324 | 
            +
            ]
         | 
| 325 | 
            +
             | 
| 326 | 
            +
            # If true, show URL addresses after external links.
         | 
| 327 | 
            +
            # man_show_urls = False
         | 
| 328 | 
            +
             | 
| 329 | 
            +
             | 
| 330 | 
            +
            # -- Options for Texinfo output -------------------------------------------
         | 
| 331 | 
            +
             | 
| 332 | 
            +
            # Grouping the document tree into Texinfo files. List of tuples
         | 
| 333 | 
            +
            # (source start file, target name, title, author,
         | 
| 334 | 
            +
            #  dir menu entry, description, category)
         | 
| 335 | 
            +
            texinfo_documents = [
         | 
| 336 | 
            +
                (
         | 
| 337 | 
            +
                    root_doc,
         | 
| 338 | 
            +
                    "googleapis-common-protos",
         | 
| 339 | 
            +
                    "googleapis-common-protos Documentation",
         | 
| 340 | 
            +
                    author,
         | 
| 341 | 
            +
                    "googleapis-common-protos",
         | 
| 342 | 
            +
                    "googleapis-common-protos Library",
         | 
| 343 | 
            +
                    "APIs",
         | 
| 344 | 
            +
                )
         | 
| 345 | 
            +
            ]
         | 
| 346 | 
            +
             | 
| 347 | 
            +
            # Documents to append as an appendix to all manuals.
         | 
| 348 | 
            +
            # texinfo_appendices = []
         | 
| 349 | 
            +
             | 
| 350 | 
            +
            # If false, no module index is generated.
         | 
| 351 | 
            +
            # texinfo_domain_indices = True
         | 
| 352 | 
            +
             | 
| 353 | 
            +
            # How to display URL addresses: 'footnote', 'no', or 'inline'.
         | 
| 354 | 
            +
            # texinfo_show_urls = 'footnote'
         | 
| 355 | 
            +
             | 
| 356 | 
            +
            # If true, do not generate a @detailmenu in the "Top" node's menu.
         | 
| 357 | 
            +
            # texinfo_no_detailmenu = False
         | 
| 358 | 
            +
             | 
| 359 | 
            +
             | 
| 360 | 
            +
            # Example configuration for intersphinx: refer to the Python standard library.
         | 
| 361 | 
            +
            intersphinx_mapping = {
         | 
| 362 | 
            +
                "python": ("https://python.readthedocs.org/en/latest/", None),
         | 
| 363 | 
            +
                "google-auth": ("https://googleapis.dev/python/google-auth/latest/", None),
         | 
| 364 | 
            +
                "google.api_core": (
         | 
| 365 | 
            +
                    "https://googleapis.dev/python/google-api-core/latest/",
         | 
| 366 | 
            +
                    None,
         | 
| 367 | 
            +
                ),
         | 
| 368 | 
            +
                "grpc": ("https://grpc.github.io/grpc/python/", None),
         | 
| 369 | 
            +
                "proto-plus": ("https://proto-plus-python.readthedocs.io/en/latest/", None),
         | 
| 370 | 
            +
                "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None),
         | 
| 371 | 
            +
            }
         | 
| 372 | 
            +
             | 
| 373 | 
            +
             | 
| 374 | 
            +
            # Napoleon settings
         | 
| 375 | 
            +
            napoleon_google_docstring = True
         | 
| 376 | 
            +
            napoleon_numpy_docstring = True
         | 
| 377 | 
            +
            napoleon_include_private_with_doc = False
         | 
| 378 | 
            +
            napoleon_include_special_with_doc = True
         | 
| 379 | 
            +
            napoleon_use_admonition_for_examples = False
         | 
| 380 | 
            +
            napoleon_use_admonition_for_notes = False
         | 
| 381 | 
            +
            napoleon_use_admonition_for_references = False
         | 
| 382 | 
            +
            napoleon_use_ivar = False
         | 
| 383 | 
            +
            napoleon_use_param = True
         | 
| 384 | 
            +
            napoleon_use_rtype = True
         | 
| @@ -708,14 +708,19 @@ class WorkingSet: | |
| 708 708 | 
             
                    If there is no active distribution for the requested project, ``None``
         | 
| 709 709 | 
             
                    is returned.
         | 
| 710 710 | 
             
                    """
         | 
| 711 | 
            -
                    dist =  | 
| 711 | 
            +
                    dist: Distribution | None = None
         | 
| 712 712 |  | 
| 713 | 
            -
                     | 
| 714 | 
            -
                         | 
| 713 | 
            +
                    candidates = (
         | 
| 714 | 
            +
                        req.key,
         | 
| 715 | 
            +
                        self.normalized_to_canonical_keys.get(req.key),
         | 
| 716 | 
            +
                        safe_name(req.key).replace(".", "-"),
         | 
| 717 | 
            +
                    )
         | 
| 715 718 |  | 
| 716 | 
            -
             | 
| 717 | 
            -
             | 
| 718 | 
            -
             | 
| 719 | 
            +
                    for candidate in filter(None, candidates):
         | 
| 720 | 
            +
                        dist = self.by_key.get(candidate)
         | 
| 721 | 
            +
                        if dist:
         | 
| 722 | 
            +
                            req.key = candidate
         | 
| 723 | 
            +
                            break
         | 
| 719 724 |  | 
| 720 725 | 
             
                    if dist is not None and dist not in req:
         | 
| 721 726 | 
             
                        # XXX add more info
         | 
| @@ -2,6 +2,7 @@ from __future__ import annotations | |
| 2 2 |  | 
| 3 3 | 
             
            import builtins
         | 
| 4 4 | 
             
            import datetime
         | 
| 5 | 
            +
            import inspect
         | 
| 5 6 | 
             
            import os
         | 
| 6 7 | 
             
            import plistlib
         | 
| 7 8 | 
             
            import stat
         | 
| @@ -425,3 +426,60 @@ class TestDeepVersionLookupDistutils: | |
| 425 426 | 
             
                    """Ensure path seps are cleaned on backslash path sep systems."""
         | 
| 426 427 | 
             
                    result = pkg_resources.normalize_path(unnormalized)
         | 
| 427 428 | 
             
                    assert result.endswith(expected)
         | 
| 429 | 
            +
             | 
| 430 | 
            +
             | 
| 431 | 
            +
            class TestWorkdirRequire:
         | 
| 432 | 
            +
                def fake_site_packages(self, tmp_path, monkeypatch, dist_files):
         | 
| 433 | 
            +
                    site_packages = tmp_path / "site-packages"
         | 
| 434 | 
            +
                    site_packages.mkdir()
         | 
| 435 | 
            +
                    for file, content in self.FILES.items():
         | 
| 436 | 
            +
                        path = site_packages / file
         | 
| 437 | 
            +
                        path.parent.mkdir(exist_ok=True, parents=True)
         | 
| 438 | 
            +
                        path.write_text(inspect.cleandoc(content), encoding="utf-8")
         | 
| 439 | 
            +
             | 
| 440 | 
            +
                    monkeypatch.setattr(sys, "path", [site_packages])
         | 
| 441 | 
            +
                    return os.fspath(site_packages)
         | 
| 442 | 
            +
             | 
| 443 | 
            +
                FILES = {
         | 
| 444 | 
            +
                    "pkg1_mod-1.2.3.dist-info/METADATA": """
         | 
| 445 | 
            +
                        Metadata-Version: 2.4
         | 
| 446 | 
            +
                        Name: pkg1.mod
         | 
| 447 | 
            +
                        Version: 1.2.3
         | 
| 448 | 
            +
                        """,
         | 
| 449 | 
            +
                    "pkg2.mod-0.42.dist-info/METADATA": """
         | 
| 450 | 
            +
                        Metadata-Version: 2.1
         | 
| 451 | 
            +
                        Name: pkg2.mod
         | 
| 452 | 
            +
                        Version: 0.42
         | 
| 453 | 
            +
                        """,
         | 
| 454 | 
            +
                    "pkg3_mod.egg-info/PKG-INFO": """
         | 
| 455 | 
            +
                        Name: pkg3.mod
         | 
| 456 | 
            +
                        Version: 1.2.3.4
         | 
| 457 | 
            +
                        """,
         | 
| 458 | 
            +
                    "pkg4.mod.egg-info/PKG-INFO": """
         | 
| 459 | 
            +
                        Name: pkg4.mod
         | 
| 460 | 
            +
                        Version: 0.42.1
         | 
| 461 | 
            +
                        """,
         | 
| 462 | 
            +
                }
         | 
| 463 | 
            +
             | 
| 464 | 
            +
                @pytest.mark.parametrize(
         | 
| 465 | 
            +
                    ("version", "requirement"),
         | 
| 466 | 
            +
                    [
         | 
| 467 | 
            +
                        ("1.2.3", "pkg1.mod>=1"),
         | 
| 468 | 
            +
                        ("0.42", "pkg2.mod>=0.4"),
         | 
| 469 | 
            +
                        ("1.2.3.4", "pkg3.mod<=2"),
         | 
| 470 | 
            +
                        ("0.42.1", "pkg4.mod>0.2,<1"),
         | 
| 471 | 
            +
                    ],
         | 
| 472 | 
            +
                )
         | 
| 473 | 
            +
                def test_require_non_normalised_name(
         | 
| 474 | 
            +
                    self, tmp_path, monkeypatch, version, requirement
         | 
| 475 | 
            +
                ):
         | 
| 476 | 
            +
                    # https://github.com/pypa/setuptools/issues/4853
         | 
| 477 | 
            +
                    site_packages = self.fake_site_packages(tmp_path, monkeypatch, self.FILES)
         | 
| 478 | 
            +
                    ws = pkg_resources.WorkingSet([site_packages])
         | 
| 479 | 
            +
             | 
| 480 | 
            +
                    for req in [requirement, requirement.replace(".", "-")]:
         | 
| 481 | 
            +
                        [dist] = ws.require(req)
         | 
| 482 | 
            +
                        assert dist.version == version
         | 
| 483 | 
            +
                        assert os.path.samefile(
         | 
| 484 | 
            +
                            os.path.commonpath([dist.location, site_packages]), site_packages
         | 
| 485 | 
            +
                        )
         | 
| @@ -104,9 +104,13 @@ def parametrize_test_working_set_resolve(*test_list): | |
| 104 104 | 
             
                            )
         | 
| 105 105 | 
             
                        )
         | 
| 106 106 | 
             
                return pytest.mark.parametrize(
         | 
| 107 | 
            -
                     | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 107 | 
            +
                    (
         | 
| 108 | 
            +
                        "installed_dists",
         | 
| 109 | 
            +
                        "installable_dists",
         | 
| 110 | 
            +
                        "requirements",
         | 
| 111 | 
            +
                        "replace_conflicting",
         | 
| 112 | 
            +
                        "resolved_dists_or_exception",
         | 
| 113 | 
            +
                    ),
         | 
| 110 114 | 
             
                    argvalues,
         | 
| 111 115 | 
             
                    ids=idlist,
         | 
| 112 116 | 
             
                )
         | 
| @@ -134,7 +134,13 @@ def filename_component_broken(value: str) -> str: | |
| 134 134 | 
             
            def safer_name(value: str) -> str:
         | 
| 135 135 | 
             
                """Like ``safe_name`` but can be used as filename component for wheel"""
         | 
| 136 136 | 
             
                # See bdist_wheel.safer_name
         | 
| 137 | 
            -
                return  | 
| 137 | 
            +
                return (
         | 
| 138 | 
            +
                    # Per https://packaging.python.org/en/latest/specifications/name-normalization/#name-normalization
         | 
| 139 | 
            +
                    re.sub(r"[-_.]+", "-", safe_name(value))
         | 
| 140 | 
            +
                    .lower()
         | 
| 141 | 
            +
                    # Per https://packaging.python.org/en/latest/specifications/binary-distribution-format/#escaping-and-unicode
         | 
| 142 | 
            +
                    .replace("-", "_")
         | 
| 143 | 
            +
                )
         | 
| 138 144 |  | 
| 139 145 |  | 
| 140 146 | 
             
            def safer_best_effort_version(value: str) -> str:
         | 
| @@ -23,19 +23,13 @@ from packaging import tags, version as _packaging_version | |
| 23 23 | 
             
            from wheel.wheelfile import WheelFile
         | 
| 24 24 |  | 
| 25 25 | 
             
            from .. import Command, __version__, _shutil
         | 
| 26 | 
            +
            from .._normalization import safer_name
         | 
| 26 27 | 
             
            from ..warnings import SetuptoolsDeprecationWarning
         | 
| 27 28 | 
             
            from .egg_info import egg_info as egg_info_cls
         | 
| 28 29 |  | 
| 29 30 | 
             
            from distutils import log
         | 
| 30 31 |  | 
| 31 32 |  | 
| 32 | 
            -
            def safe_name(name: str) -> str:
         | 
| 33 | 
            -
                """Convert an arbitrary string to a standard distribution name
         | 
| 34 | 
            -
                Any runs of non-alphanumeric/. characters are replaced with a single '-'.
         | 
| 35 | 
            -
                """
         | 
| 36 | 
            -
                return re.sub("[^A-Za-z0-9.]+", "-", name)
         | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 33 | 
             
            def safe_version(version: str) -> str:
         | 
| 40 34 | 
             
                """
         | 
| 41 35 | 
             
                Convert an arbitrary string to a standard version string
         | 
| @@ -133,10 +127,6 @@ def get_abi_tag() -> str | None: | |
| 133 127 | 
             
                return abi
         | 
| 134 128 |  | 
| 135 129 |  | 
| 136 | 
            -
            def safer_name(name: str) -> str:
         | 
| 137 | 
            -
                return safe_name(name).replace("-", "_")
         | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 130 | 
             
            def safer_version(version: str) -> str:
         | 
| 141 131 | 
             
                return safe_version(version).replace("-", "_")
         | 
| 142 132 |  | 
| @@ -294,7 +284,7 @@ class bdist_wheel(Command): | |
| 294 284 | 
             
                        raise ValueError(
         | 
| 295 285 | 
             
                            f"`py_limited_api={self.py_limited_api!r}` not supported. "
         | 
| 296 286 | 
             
                            "`Py_LIMITED_API` is currently incompatible with "
         | 
| 297 | 
            -
                             | 
| 287 | 
            +
                            "`Py_GIL_DISABLED`."
         | 
| 298 288 | 
             
                            "See https://github.com/python/cpython/issues/111506."
         | 
| 299 289 | 
             
                        )
         | 
| 300 290 |  | 
| @@ -246,9 +246,9 @@ def test_no_scripts(wheel_paths): | |
| 246 246 |  | 
| 247 247 |  | 
| 248 248 | 
             
            def test_unicode_record(wheel_paths):
         | 
| 249 | 
            -
                path = next(path for path in wheel_paths if " | 
| 249 | 
            +
                path = next(path for path in wheel_paths if "unicode_dist" in path)
         | 
| 250 250 | 
             
                with ZipFile(path) as zf:
         | 
| 251 | 
            -
                    record = zf.read(" | 
| 251 | 
            +
                    record = zf.read("unicode_dist-0.1.dist-info/RECORD")
         | 
| 252 252 |  | 
| 253 253 | 
             
                assert "åäö_日本語.py".encode() in record
         | 
| 254 254 |  | 
| @@ -8,7 +8,7 @@ import pytest | |
| 8 8 | 
             
            from setuptools import Distribution
         | 
| 9 9 | 
             
            from setuptools.dist import check_package_data, check_specifier
         | 
| 10 10 |  | 
| 11 | 
            -
            from .test_easy_install import  | 
| 11 | 
            +
            from .test_easy_install import make_trivial_sdist
         | 
| 12 12 | 
             
            from .test_find_packages import ensure_files
         | 
| 13 13 | 
             
            from .textwrap import DALS
         | 
| 14 14 |  | 
| @@ -25,7 +25,7 @@ def test_dist_fetch_build_egg(tmpdir): | |
| 25 25 | 
             
                def sdist_with_index(distname, version):
         | 
| 26 26 | 
             
                    dist_dir = index.mkdir(distname)
         | 
| 27 27 | 
             
                    dist_sdist = f'{distname}-{version}.tar.gz'
         | 
| 28 | 
            -
                     | 
| 28 | 
            +
                    make_trivial_sdist(str(dist_dir.join(dist_sdist)), distname, version)
         | 
| 29 29 | 
             
                    with dist_dir.join('index.html').open('w') as fp:
         | 
| 30 30 | 
             
                        fp.write(
         | 
| 31 31 | 
             
                            DALS(
         | 
| @@ -188,7 +188,7 @@ class TestWheelCompatibility: | |
| 188 188 | 
             
                    dist_info = next(tmp_path.glob("dir_dist/*.dist-info"))
         | 
| 189 189 |  | 
| 190 190 | 
             
                    assert dist_info.name == wheel_dist_info.name
         | 
| 191 | 
            -
                    assert dist_info.name.startswith(f" | 
| 191 | 
            +
                    assert dist_info.name.startswith(f"my_proj-{version}{suffix}")
         | 
| 192 192 | 
             
                    for file in "METADATA", "entry_points.txt":
         | 
| 193 193 | 
             
                        assert read(dist_info / file) == read(wheel_dist_info / file)
         | 
| 194 194 |  | 
| @@ -26,6 +26,7 @@ import pkg_resources | |
| 26 26 | 
             
            import setuptools.command.easy_install as ei
         | 
| 27 27 | 
             
            from pkg_resources import Distribution as PRDistribution, normalize_path, working_set
         | 
| 28 28 | 
             
            from setuptools import sandbox
         | 
| 29 | 
            +
            from setuptools._normalization import safer_name
         | 
| 29 30 | 
             
            from setuptools.command.easy_install import PthDistributions
         | 
| 30 31 | 
             
            from setuptools.dist import Distribution
         | 
| 31 32 | 
             
            from setuptools.sandbox import run_setup
         | 
| @@ -670,11 +671,11 @@ class TestSetupRequires: | |
| 670 671 |  | 
| 671 672 | 
             
                    with contexts.save_pkg_resources_state():
         | 
| 672 673 | 
             
                        with contexts.tempdir() as temp_dir:
         | 
| 673 | 
            -
                            foobar_1_archive = os.path.join(temp_dir, ' | 
| 674 | 
            +
                            foobar_1_archive = os.path.join(temp_dir, 'foo_bar-0.1.tar.gz')
         | 
| 674 675 | 
             
                            make_nspkg_sdist(foobar_1_archive, 'foo.bar', '0.1')
         | 
| 675 676 | 
             
                            # Now actually go ahead an extract to the temp dir and add the
         | 
| 676 677 | 
             
                            # extracted path to sys.path so foo.bar v0.1 is importable
         | 
| 677 | 
            -
                            foobar_1_dir = os.path.join(temp_dir, ' | 
| 678 | 
            +
                            foobar_1_dir = os.path.join(temp_dir, 'foo_bar-0.1')
         | 
| 678 679 | 
             
                            os.mkdir(foobar_1_dir)
         | 
| 679 680 | 
             
                            with tarfile.open(foobar_1_archive) as tf:
         | 
| 680 681 | 
             
                                tf.extraction_filter = lambda member, path: member
         | 
| @@ -697,7 +698,7 @@ class TestSetupRequires: | |
| 697 698 | 
             
                                        len(foo.__path__) == 2):
         | 
| 698 699 | 
             
                                    print('FAIL')
         | 
| 699 700 |  | 
| 700 | 
            -
                                if ' | 
| 701 | 
            +
                                if 'foo_bar-0.2' not in foo.__path__[0]:
         | 
| 701 702 | 
             
                                    print('FAIL')
         | 
| 702 703 | 
             
                            """
         | 
| 703 704 | 
             
                            )
         | 
| @@ -718,8 +719,8 @@ class TestSetupRequires: | |
| 718 719 | 
             
                                    # Don't even need to install the package, just
         | 
| 719 720 | 
             
                                    # running the setup.py at all is sufficient
         | 
| 720 721 | 
             
                                    run_setup(test_setup_py, ['--name'])
         | 
| 721 | 
            -
                                except pkg_resources.VersionConflict:
         | 
| 722 | 
            -
                                     | 
| 722 | 
            +
                                except pkg_resources.VersionConflict:  # pragma: nocover
         | 
| 723 | 
            +
                                    pytest.fail(
         | 
| 723 724 | 
             
                                        'Installing setup.py requirements caused a VersionConflict'
         | 
| 724 725 | 
             
                                    )
         | 
| 725 726 |  | 
| @@ -1120,6 +1121,8 @@ def make_nspkg_sdist(dist_path, distname, version): | |
| 1120 1121 | 
             
                package with the same name as distname.  The top-level package is
         | 
| 1121 1122 | 
             
                designated a namespace package).
         | 
| 1122 1123 | 
             
                """
         | 
| 1124 | 
            +
                # Assert that the distname contains at least one period
         | 
| 1125 | 
            +
                assert '.' in distname
         | 
| 1123 1126 |  | 
| 1124 1127 | 
             
                parts = distname.split('.')
         | 
| 1125 1128 | 
             
                nspackage = parts[0]
         | 
| @@ -1207,10 +1210,11 @@ def create_setup_requires_package( | |
| 1207 1210 | 
             
                package itself is just 'test_pkg'.
         | 
| 1208 1211 | 
             
                """
         | 
| 1209 1212 |  | 
| 1213 | 
            +
                normalized_distname = safer_name(distname)
         | 
| 1210 1214 | 
             
                test_setup_attrs = {
         | 
| 1211 1215 | 
             
                    'name': 'test_pkg',
         | 
| 1212 1216 | 
             
                    'version': '0.0',
         | 
| 1213 | 
            -
                    'setup_requires': [f'{ | 
| 1217 | 
            +
                    'setup_requires': [f'{normalized_distname}=={version}'],
         | 
| 1214 1218 | 
             
                    'dependency_links': [os.path.abspath(path)],
         | 
| 1215 1219 | 
             
                }
         | 
| 1216 1220 | 
             
                if setup_attrs:
         | 
| @@ -1259,7 +1263,7 @@ def create_setup_requires_package( | |
| 1259 1263 | 
             
                with open(os.path.join(test_pkg, 'setup.py'), 'w', encoding="utf-8") as f:
         | 
| 1260 1264 | 
             
                    f.write(setup_py_template % test_setup_attrs)
         | 
| 1261 1265 |  | 
| 1262 | 
            -
                foobar_path = os.path.join(path, f'{ | 
| 1266 | 
            +
                foobar_path = os.path.join(path, f'{normalized_distname}-{version}.tar.gz')
         | 
| 1263 1267 | 
             
                make_package(foobar_path, distname, version)
         | 
| 1264 1268 |  | 
| 1265 1269 | 
             
                return test_pkg
         | 
| @@ -300,7 +300,12 @@ class TestEggInfo: | |
| 300 300 | 
             
                                    )
         | 
| 301 301 | 
             
                                )
         | 
| 302 302 | 
             
                        return pytest.mark.parametrize(
         | 
| 303 | 
            -
                             | 
| 303 | 
            +
                            (
         | 
| 304 | 
            +
                                "requires",
         | 
| 305 | 
            +
                                "use_setup_cfg",
         | 
| 306 | 
            +
                                "expected_requires",
         | 
| 307 | 
            +
                                "install_cmd_kwargs",
         | 
| 308 | 
            +
                            ),
         | 
| 304 309 | 
             
                            argvalues,
         | 
| 305 310 | 
             
                            ids=idlist,
         | 
| 306 311 | 
             
                        )
         | 
| @@ -75,7 +75,7 @@ py2docfx/docfx_yaml/settings.py,sha256=JQZNwFebczl-zn8Yk2taAGANRi-Hw8hywtDWxqXXF | |
| 75 75 | 
             
            py2docfx/docfx_yaml/translator.py,sha256=LSzNl4C-07bLbUZ5myfyWwh25cTNIIBih77Cp4tBWvo,25999
         | 
| 76 76 | 
             
            py2docfx/docfx_yaml/utils.py,sha256=m5jC_qP2NKqzUx_z0zgZ-HAmxQdNTpJYKkL_F9vGeII,1555
         | 
| 77 77 | 
             
            py2docfx/docfx_yaml/write_utils.py,sha256=q5qoYWw6GVDV8a3E8IxcSLWnN9sAer42VFRgadHBkgk,305
         | 
| 78 | 
            -
            py2docfx/docfx_yaml/writer.py,sha256= | 
| 78 | 
            +
            py2docfx/docfx_yaml/writer.py,sha256=c_3s3KLbKJWRaafQgSK7P_8rs42RjB4nSBj9Mi4yA9g,35972
         | 
| 79 79 | 
             
            py2docfx/docfx_yaml/yaml_builder.py,sha256=S3xty_ILxEUsw1J9VCwUkSLLYAUfQDm3fYbciv70gXc,2573
         | 
| 80 80 | 
             
            py2docfx/docfx_yaml/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 81 81 | 
             
            py2docfx/docfx_yaml/tests/conftest.py,sha256=CykkZxaDZ-3a1EIQdGBieSmHL9FdyTE2xTJZe9QgKcg,1214
         | 
| @@ -91,7 +91,7 @@ py2docfx/docfx_yaml/tests/test_translator_numpy_returns.py,sha256=nmC70WUqCRcB1t | |
| 91 91 | 
             
            py2docfx/docfx_yaml/tests/test_translator_rst_returns.py,sha256=BL3nOMMTPzNPJk-P9oMANiXnJ7ocuiecbFHH4DU1n40,2942
         | 
| 92 92 | 
             
            py2docfx/docfx_yaml/tests/test_translator_signatures.py,sha256=DM51EOb4UXLkrO1-4cQQQvvX210goAsnxKJH-4A2U2Q,1537
         | 
| 93 93 | 
             
            py2docfx/docfx_yaml/tests/test_writer_table.py,sha256=UnGYXQ-QVxin_e-HGZAHdg1LSFV0qc480ZNsqPN9OYc,1444
         | 
| 94 | 
            -
            py2docfx/docfx_yaml/tests/test_writer_uri.py,sha256= | 
| 94 | 
            +
            py2docfx/docfx_yaml/tests/test_writer_uri.py,sha256=wwdxraB5wP88OIJzuLGviit44Kesb8dvU9ajb5Ra0qA,2093
         | 
| 95 95 | 
             
            py2docfx/docfx_yaml/tests/test_writer_versions.py,sha256=0-0VTMhbZ4ml9ryu1gYnu0mM2yIEKsBuFYb2F6grzTE,2995
         | 
| 96 96 | 
             
            py2docfx/docfx_yaml/tests/roots/test-build-finished/code_with_signature_and_docstring.py,sha256=qvcKWL68C2aDTP8JT022nMV4EdZ50vhxVshMrHVO2sY,449
         | 
| 97 97 | 
             
            py2docfx/docfx_yaml/tests/roots/test-build-finished/conf.py,sha256=L8vIFmO546PCQks50Gif_uTBwC3cppohXrQaogfyRF8,410
         | 
| @@ -123,7 +123,7 @@ py2docfx/docfx_yaml/tests/roots/test-translator-signatures/conf.py,sha256=avcbnI | |
| 123 123 | 
             
            py2docfx/docfx_yaml/tests/roots/test-translator-signatures/refered_objects.py,sha256=DJaX52mnHw9W3GSqKh75CYK87g4CczXNNjFO496Ai2U,79
         | 
| 124 124 | 
             
            py2docfx/docfx_yaml/tests/roots/test-writer-table/code_with_table_desc.py,sha256=J4eFvXsymgFvjnwVUY0APtUGwuxvt-AFJjTaEaQ7zMQ,574
         | 
| 125 125 | 
             
            py2docfx/docfx_yaml/tests/roots/test-writer-table/conf.py,sha256=avcbnIOV2mlGQwhMQJZC4W6UGRBRhnq1QBxjPWlySxQ,260
         | 
| 126 | 
            -
            py2docfx/docfx_yaml/tests/roots/test-writer-uri/code_with_uri.py,sha256= | 
| 126 | 
            +
            py2docfx/docfx_yaml/tests/roots/test-writer-uri/code_with_uri.py,sha256=GSz1B0xiXSaddkrniVBXzW7R4jDuPq1sWU7ByBH6MxA,754
         | 
| 127 127 | 
             
            py2docfx/docfx_yaml/tests/roots/test-writer-uri/conf.py,sha256=avcbnIOV2mlGQwhMQJZC4W6UGRBRhnq1QBxjPWlySxQ,260
         | 
| 128 128 | 
             
            py2docfx/docfx_yaml/tests/roots/test-writer-versions/code_with_version_directives.py,sha256=UuizbrJPaG_PcaH18BvbI9KQevOaLd4SslpnzMSqcrE,1030
         | 
| 129 129 | 
             
            py2docfx/docfx_yaml/tests/roots/test-writer-versions/conf.py,sha256=SCEKrm9VigArfdgf-GAieJD-40d0ctT6urmGIjFOZLM,404
         | 
| @@ -858,14 +858,14 @@ py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/webencodings/labels.py,sha2 | |
| 858 858 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305
         | 
| 859 859 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563
         | 
| 860 860 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307
         | 
| 861 | 
            -
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/__init__.py,sha256 | 
| 861 | 
            +
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/__init__.py,sha256=-rh7XOnTxdGuC-_9FAyu5D6s8BL1UsBehxUtj7a-IVo,126203
         | 
| 862 862 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 863 863 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_find_distributions.py,sha256=U91cov5L1COAIWLNq3Xy4plU7_MnOE1WtXMu6iV2waM,1972
         | 
| 864 864 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_integration_zope_interface.py,sha256=nzVoK557KZQN0V3DIQ1sVeaCOgt4Kpl-CODAWsO7pmc,1652
         | 
| 865 865 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_markers.py,sha256=0orKg7UMDf7fnuNQvRMOc-EF9EAP_JTQnk4mtGgbW50,241
         | 
| 866 | 
            -
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py,sha256= | 
| 866 | 
            +
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py,sha256=5Mt4bJQhLCL8j8cC46Uv32Np2Xc1TTxLGawIfET55Fk,17111
         | 
| 867 867 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_resources.py,sha256=K0LqMAUGpRQ9pUb9K0vyI7GesvtlQvTH074m-E2VQlo,31252
         | 
| 868 | 
            -
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_working_set.py,sha256= | 
| 868 | 
            +
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_working_set.py,sha256=lRtGJWIixSwSMSbjHgRxeJEQiLMRXcz3xzJL2qL7eXY,8602
         | 
| 869 869 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py,sha256=1VobhAZbMb7M9mfhb_NE8PwDsvukoWLs9aUAS0pYhe8,105
         | 
| 870 870 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pygments/__init__.py,sha256=H0XmVJ1Fe9qSEDBU1j1wZLT-Tfu7blFbDiFSfpwU63c,2959
         | 
| 871 871 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/pygments/__main__.py,sha256=p8AJyoyCOMYGvzWHdnq0_A9qaaVqaj02nIu3xhJp1_4,348
         | 
| @@ -1228,7 +1228,7 @@ py2docfx/venv/basevenv/Lib/site-packages/setuptools/_entry_points.py,sha256=Y3QU | |
| 1228 1228 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/_imp.py,sha256=YY1EjZEN-0zYci1cxO10B_adAEOr7i8eK8JoCc9Ierc,2435
         | 
| 1229 1229 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/_importlib.py,sha256=aKIjcK0HKXNz2D-XTrxaixGn_juTkONwmu3dcheMOF0,223
         | 
| 1230 1230 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/_itertools.py,sha256=jWRfsIrpC7myooz3hDURj9GtvpswZeKXg2HakmEhNjo,657
         | 
| 1231 | 
            -
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/_normalization.py,sha256= | 
| 1231 | 
            +
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/_normalization.py,sha256=zdSsIDjziHb-3_GYcY4UEejWQZxclOz3387qbYNZ67s,4824
         | 
| 1232 1232 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/_path.py,sha256=cPv41v03HD7uEYqCIo-E_cGRfpPVr4lywBCiK-HSrCg,2685
         | 
| 1233 1233 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/_reqs.py,sha256=QI3C9uOBSNRccu208qPnixHx51nxCry7_nPTIJaSYxM,1438
         | 
| 1234 1234 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/_shutil.py,sha256=cAOllcoyMTXs5JLoybQi29yI5gABk82hepJyOBv2bMw,1496
         | 
| @@ -1464,7 +1464,7 @@ py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/_requirestxt.py,sha2 | |
| 1464 1464 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/alias.py,sha256=rDdrMt32DS6qf3K7tjZZyHD_dMKrm77AXcAtx-nBQ0I,2380
         | 
| 1465 1465 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_egg.py,sha256=3eDucQ4fdeYMsLO9PhBfY1JkcMLhZXgnAI_9FdFNsEE,16972
         | 
| 1466 1466 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_rpm.py,sha256=LyqI49w48SKk0FmuHsE9MLzX1SuXjL7YMNbZMFZqFII,1435
         | 
| 1467 | 
            -
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py,sha256= | 
| 1467 | 
            +
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py,sha256=NKE9391SgoggEtzLC1CZNKWHDZ6k5bGrIZiaAJtpNzU,21976
         | 
| 1468 1468 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build.py,sha256=eI7STMERGGZEpzk1tvJN8p9IOjAAXMcGLzljv2mwI3M,6052
         | 
| 1469 1469 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_clib.py,sha256=AbgpPIF_3qL8fZr3JIebI-WHTMTBiMfrFkVQz8K40G4,4528
         | 
| 1470 1470 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_ext.py,sha256=bUH4M0NizaJJrv10wK-ZD3uY0TxCSZlYQDhiwwzHslM,18377
         | 
| @@ -1510,7 +1510,7 @@ py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/server.py,sha256=0FDZf | |
| 1510 1510 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_archive_util.py,sha256=buuKdY8XkW26Pe3IKAoBRGHG0MDumnuNoPg2WsAQzIg,845
         | 
| 1511 1511 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_deprecations.py,sha256=75Xq3gYn79LIIyusEltbHan0bEgAt2e_CaL7KLS8-KQ,775
         | 
| 1512 1512 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_egg.py,sha256=6PaYN1F3JDbIh1uK0urv7yJFcx98z5dn9SOJ8Mv91l8,1957
         | 
| 1513 | 
            -
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py,sha256= | 
| 1513 | 
            +
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py,sha256=9JY8c6jH_WVPYnkx_0aEnaoHBMzKAWpkUlRJRmrm6GM,19906
         | 
| 1514 1514 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build.py,sha256=wJgMz2hwHADcLFg-nXrwRVhus7hjmAeEGgrpIQwCGnA,798
         | 
| 1515 1515 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_clib.py,sha256=bX51XRAf4uO7IuHFpjePnoK8mE74N2gsoeEqF-ofgws,3123
         | 
| 1516 1516 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_ext.py,sha256=e4ZSxsYPB5zq1KSqGEuATZ0t0PJQzMhjjkKJ-hIjcgc,10099
         | 
| @@ -1520,12 +1520,12 @@ py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_config_discovery. | |
| 1520 1520 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_core_metadata.py,sha256=FpnPjsuRnA-8jRDvBe2oI_3vivwjNTPuF2CswCONXA4,19102
         | 
| 1521 1521 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_depends.py,sha256=yQBXoQbNQlJit6mbRVoz6Bb553f3sNrq02lZimNz5XY,424
         | 
| 1522 1522 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_develop.py,sha256=CLzXZ8-b5-VFTuau4P4yXEdLx1UdyTFcOfrV0qyUIdE,5142
         | 
| 1523 | 
            -
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist.py,sha256= | 
| 1524 | 
            -
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py,sha256= | 
| 1523 | 
            +
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist.py,sha256=GFjyL2etAxvVM3q7NhFEGcXS5gyKj8VzbqcbKzpqbOk,8901
         | 
| 1524 | 
            +
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py,sha256=5kBRj9tuBsVreBsY22H2feMO_JQZsSoOZMU_MJfUevY,7077
         | 
| 1525 1525 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_distutils_adoption.py,sha256=_eynrOfyEqXFEmjUJhzpe8GXPyTUPvNSObs4qAAmBy8,5987
         | 
| 1526 | 
            -
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_easy_install.py,sha256= | 
| 1526 | 
            +
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_easy_install.py,sha256=jx4lpFyee0G432cdnwBow3AkL4ibw-0QILwldwv5SCI,53534
         | 
| 1527 1527 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_editable_install.py,sha256=7eTEtpT0k7QeVyZg64eh3kZn-SjckuB9LcokOuV37DI,43383
         | 
| 1528 | 
            -
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py,sha256= | 
| 1528 | 
            +
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py,sha256=wLQmM9grgJnYjazzxGV5pd_UAgamTtKPsHXFZmGYRd8,44073
         | 
| 1529 1529 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_extern.py,sha256=rpKU6oCcksumLwf5TeKlDluFQ0TUfbPwTLQbpxcFrCU,296
         | 
| 1530 1530 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_find_packages.py,sha256=CTLAcTzWGWBLCcd2aAsUVkvO3ibrlqexFBdDKOWPoq8,7819
         | 
| 1531 1531 | 
             
            py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_find_py_modules.py,sha256=zQjuhIG5TQN2SJPix9ARo4DL_w84Ln8QsHDUjjbrtAQ,2404
         | 
| @@ -2090,7 +2090,7 @@ py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/utils.py,sha256=oH9Q3Wc | |
| 2090 2090 | 
             
            py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/version.py,sha256=7_thI7FzRQxEsbtUYwrJs3FCFWF666mw74H8mggPRR0,123
         | 
| 2091 2091 | 
             
            py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/cli/__init__.py,sha256=d9MUx-1V_qD3x9igIy4JT4oC5CU0yjulk7QyZWeRFhg,144
         | 
| 2092 2092 | 
             
            py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/cli/__main__.py,sha256=lZ89qRWun7FRxX0qm1GhK-m0DH0i048yiMAX1mVIuRg,10731
         | 
| 2093 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py,sha256= | 
| 2093 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py,sha256=LsHy-0b4kwxfAD0ryobJhitlFn7Tk8Sepunxo8YcUZs,445
         | 
| 2094 2094 | 
             
            py2docfx/venv/venv1/Lib/site-packages/cryptography/__init__.py,sha256=XsRL_PxbU6UgoyoglAgJQSrJCP97ovBA8YIEQ2-uI68,762
         | 
| 2095 2095 | 
             
            py2docfx/venv/venv1/Lib/site-packages/cryptography/exceptions.py,sha256=835EWILc2fwxw-gyFMriciC2SqhViETB10LBSytnDIc,1087
         | 
| 2096 2096 | 
             
            py2docfx/venv/venv1/Lib/site-packages/cryptography/fernet.py,sha256=aMU2HyDJ5oRGjg8AkFvHwE7BSmHY4fVUCaioxZcd8gA,6933
         | 
| @@ -2160,6 +2160,7 @@ py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/name.py,sha256=MYCxCSTQT | |
| 2160 2160 | 
             
            py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/ocsp.py,sha256=vbrg3p1hBJQEEFIZ35GHcjbGwTrsxPhlot-OVpyP-C8,11390
         | 
| 2161 2161 | 
             
            py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/oid.py,sha256=X8EbhkRTLrGuv9vHZSGqPd9zpvRVsonU_joWAL5LLY8,885
         | 
| 2162 2162 | 
             
            py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/verification.py,sha256=alfx3VaTSb2bMz7_7s788oL90vzgHwBjVINssdz0Gv0,796
         | 
| 2163 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/docs/conf.py,sha256=wWmiclfhoUtsbchRP_oRf1aJdJURdhQUEES674mVI4U,12453
         | 
| 2163 2164 | 
             
            py2docfx/venv/venv1/Lib/site-packages/google/api/annotations_pb2.py,sha256=N4cPaBC9BCIlQOPWOQdASPi2eD3e4d6TkfdFtLYKW1M,2182
         | 
| 2164 2165 | 
             
            py2docfx/venv/venv1/Lib/site-packages/google/api/auth_pb2.py,sha256=0M9Gb8InDi8Q07RSMmUtvVyTkaijVkhyj8Vga2XjsOQ,3601
         | 
| 2165 2166 | 
             
            py2docfx/venv/venv1/Lib/site-packages/google/api/backend_pb2.py,sha256=pxhfZZJJM9NOtv1aLVYbtYAqrMzgUkD4GCMopWmOh9M,3774
         | 
| @@ -3087,14 +3088,14 @@ py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/webencodings/labels.py,sha256= | |
| 3087 3088 | 
             
            py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305
         | 
| 3088 3089 | 
             
            py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563
         | 
| 3089 3090 | 
             
            py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307
         | 
| 3090 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py,sha256 | 
| 3091 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py,sha256=-rh7XOnTxdGuC-_9FAyu5D6s8BL1UsBehxUtj7a-IVo,126203
         | 
| 3091 3092 | 
             
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 3092 3093 | 
             
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_find_distributions.py,sha256=U91cov5L1COAIWLNq3Xy4plU7_MnOE1WtXMu6iV2waM,1972
         | 
| 3093 3094 | 
             
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_integration_zope_interface.py,sha256=nzVoK557KZQN0V3DIQ1sVeaCOgt4Kpl-CODAWsO7pmc,1652
         | 
| 3094 3095 | 
             
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_markers.py,sha256=0orKg7UMDf7fnuNQvRMOc-EF9EAP_JTQnk4mtGgbW50,241
         | 
| 3095 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py,sha256= | 
| 3096 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py,sha256=5Mt4bJQhLCL8j8cC46Uv32Np2Xc1TTxLGawIfET55Fk,17111
         | 
| 3096 3097 | 
             
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_resources.py,sha256=K0LqMAUGpRQ9pUb9K0vyI7GesvtlQvTH074m-E2VQlo,31252
         | 
| 3097 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_working_set.py,sha256= | 
| 3098 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_working_set.py,sha256=lRtGJWIixSwSMSbjHgRxeJEQiLMRXcz3xzJL2qL7eXY,8602
         | 
| 3098 3099 | 
             
            py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py,sha256=1VobhAZbMb7M9mfhb_NE8PwDsvukoWLs9aUAS0pYhe8,105
         | 
| 3099 3100 | 
             
            py2docfx/venv/venv1/Lib/site-packages/portalocker/__about__.py,sha256=zm6QcwwGAMZ9u7Emd18lIC0atwT67O--BtXyVs9T8iY,231
         | 
| 3100 3101 | 
             
            py2docfx/venv/venv1/Lib/site-packages/portalocker/__init__.py,sha256=b-NLz4kKv2MZhYtR6m0CWneEi1KJ-tntELq2FwjY42s,2056
         | 
| @@ -3483,7 +3484,7 @@ py2docfx/venv/venv1/Lib/site-packages/setuptools/_entry_points.py,sha256=Y3QUE9J | |
| 3483 3484 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/_imp.py,sha256=YY1EjZEN-0zYci1cxO10B_adAEOr7i8eK8JoCc9Ierc,2435
         | 
| 3484 3485 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/_importlib.py,sha256=aKIjcK0HKXNz2D-XTrxaixGn_juTkONwmu3dcheMOF0,223
         | 
| 3485 3486 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/_itertools.py,sha256=jWRfsIrpC7myooz3hDURj9GtvpswZeKXg2HakmEhNjo,657
         | 
| 3486 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py,sha256= | 
| 3487 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py,sha256=zdSsIDjziHb-3_GYcY4UEejWQZxclOz3387qbYNZ67s,4824
         | 
| 3487 3488 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/_path.py,sha256=cPv41v03HD7uEYqCIo-E_cGRfpPVr4lywBCiK-HSrCg,2685
         | 
| 3488 3489 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/_reqs.py,sha256=QI3C9uOBSNRccu208qPnixHx51nxCry7_nPTIJaSYxM,1438
         | 
| 3489 3490 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/_shutil.py,sha256=cAOllcoyMTXs5JLoybQi29yI5gABk82hepJyOBv2bMw,1496
         | 
| @@ -3719,7 +3720,7 @@ py2docfx/venv/venv1/Lib/site-packages/setuptools/command/_requirestxt.py,sha256= | |
| 3719 3720 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/command/alias.py,sha256=rDdrMt32DS6qf3K7tjZZyHD_dMKrm77AXcAtx-nBQ0I,2380
         | 
| 3720 3721 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_egg.py,sha256=3eDucQ4fdeYMsLO9PhBfY1JkcMLhZXgnAI_9FdFNsEE,16972
         | 
| 3721 3722 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_rpm.py,sha256=LyqI49w48SKk0FmuHsE9MLzX1SuXjL7YMNbZMFZqFII,1435
         | 
| 3722 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py,sha256= | 
| 3723 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py,sha256=NKE9391SgoggEtzLC1CZNKWHDZ6k5bGrIZiaAJtpNzU,21976
         | 
| 3723 3724 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build.py,sha256=eI7STMERGGZEpzk1tvJN8p9IOjAAXMcGLzljv2mwI3M,6052
         | 
| 3724 3725 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_clib.py,sha256=AbgpPIF_3qL8fZr3JIebI-WHTMTBiMfrFkVQz8K40G4,4528
         | 
| 3725 3726 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_ext.py,sha256=bUH4M0NizaJJrv10wK-ZD3uY0TxCSZlYQDhiwwzHslM,18377
         | 
| @@ -3765,7 +3766,7 @@ py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/server.py,sha256=0FDZf0cS | |
| 3765 3766 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_archive_util.py,sha256=buuKdY8XkW26Pe3IKAoBRGHG0MDumnuNoPg2WsAQzIg,845
         | 
| 3766 3767 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_deprecations.py,sha256=75Xq3gYn79LIIyusEltbHan0bEgAt2e_CaL7KLS8-KQ,775
         | 
| 3767 3768 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_egg.py,sha256=6PaYN1F3JDbIh1uK0urv7yJFcx98z5dn9SOJ8Mv91l8,1957
         | 
| 3768 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py,sha256= | 
| 3769 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py,sha256=9JY8c6jH_WVPYnkx_0aEnaoHBMzKAWpkUlRJRmrm6GM,19906
         | 
| 3769 3770 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build.py,sha256=wJgMz2hwHADcLFg-nXrwRVhus7hjmAeEGgrpIQwCGnA,798
         | 
| 3770 3771 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_clib.py,sha256=bX51XRAf4uO7IuHFpjePnoK8mE74N2gsoeEqF-ofgws,3123
         | 
| 3771 3772 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_ext.py,sha256=e4ZSxsYPB5zq1KSqGEuATZ0t0PJQzMhjjkKJ-hIjcgc,10099
         | 
| @@ -3775,12 +3776,12 @@ py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_config_discovery.py, | |
| 3775 3776 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_core_metadata.py,sha256=FpnPjsuRnA-8jRDvBe2oI_3vivwjNTPuF2CswCONXA4,19102
         | 
| 3776 3777 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_depends.py,sha256=yQBXoQbNQlJit6mbRVoz6Bb553f3sNrq02lZimNz5XY,424
         | 
| 3777 3778 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_develop.py,sha256=CLzXZ8-b5-VFTuau4P4yXEdLx1UdyTFcOfrV0qyUIdE,5142
         | 
| 3778 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py,sha256= | 
| 3779 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py,sha256= | 
| 3779 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py,sha256=GFjyL2etAxvVM3q7NhFEGcXS5gyKj8VzbqcbKzpqbOk,8901
         | 
| 3780 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py,sha256=5kBRj9tuBsVreBsY22H2feMO_JQZsSoOZMU_MJfUevY,7077
         | 
| 3780 3781 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_distutils_adoption.py,sha256=_eynrOfyEqXFEmjUJhzpe8GXPyTUPvNSObs4qAAmBy8,5987
         | 
| 3781 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py,sha256= | 
| 3782 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py,sha256=jx4lpFyee0G432cdnwBow3AkL4ibw-0QILwldwv5SCI,53534
         | 
| 3782 3783 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_editable_install.py,sha256=7eTEtpT0k7QeVyZg64eh3kZn-SjckuB9LcokOuV37DI,43383
         | 
| 3783 | 
            -
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py,sha256= | 
| 3784 | 
            +
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py,sha256=wLQmM9grgJnYjazzxGV5pd_UAgamTtKPsHXFZmGYRd8,44073
         | 
| 3784 3785 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_extern.py,sha256=rpKU6oCcksumLwf5TeKlDluFQ0TUfbPwTLQbpxcFrCU,296
         | 
| 3785 3786 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_find_packages.py,sha256=CTLAcTzWGWBLCcd2aAsUVkvO3ibrlqexFBdDKOWPoq8,7819
         | 
| 3786 3787 | 
             
            py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_find_py_modules.py,sha256=zQjuhIG5TQN2SJPix9ARo4DL_w84Ln8QsHDUjjbrtAQ,2404
         | 
| @@ -4194,7 +4195,7 @@ py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtas | |
| 4194 4195 | 
             
            py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_localsystem.py,sha256=08ojAS48W6RLsUbRD45j0SJhg_Y2NFHZT6qjT4Vrig0,75
         | 
| 4195 4196 | 
             
            py2docfx/venv/venv1/Scripts/pywin32_postinstall.py,sha256=u95n7QQUxpCjrZistYE-3gN451zXzopuJna8cXRQ4Jw,28115
         | 
| 4196 4197 | 
             
            py2docfx/venv/venv1/Scripts/pywin32_testall.py,sha256=-6yvZmd2lPQc4e8i6PgLsr_totF6mScvoq0Jqr0V2fM,3844
         | 
| 4197 | 
            -
            py2docfx-0.1. | 
| 4198 | 
            -
            py2docfx-0.1. | 
| 4199 | 
            -
            py2docfx-0.1. | 
| 4200 | 
            -
            py2docfx-0.1. | 
| 4198 | 
            +
            py2docfx-0.1.13.dist-info/METADATA,sha256=rOC70HxqRqia0ATGShBLBbZ7LUr32rdiYM_HftpHq7w,590
         | 
| 4199 | 
            +
            py2docfx-0.1.13.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
         | 
| 4200 | 
            +
            py2docfx-0.1.13.dist-info/top_level.txt,sha256=5dH2uP81dczt_qQJ38wiZ-gzoVWasfiJALWRSjdbnYU,9
         | 
| 4201 | 
            +
            py2docfx-0.1.13.dist-info/RECORD,,
         | 
| 
            File without changes
         | 
| 
            File without changes
         |