py2docfx 0.1.12rc2002542__py3-none-any.whl → 0.1.12rc2012128__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.
Files changed (28) hide show
  1. py2docfx/docfx_yaml/tests/roots/test-writer-uri/code_with_uri.py +7 -0
  2. py2docfx/docfx_yaml/tests/test_writer_uri.py +4 -0
  3. py2docfx/docfx_yaml/writer.py +13 -1
  4. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/__init__.py +11 -6
  5. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +58 -0
  6. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_working_set.py +7 -3
  7. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_normalization.py +7 -1
  8. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +2 -12
  9. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +2 -2
  10. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist.py +2 -2
  11. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
  12. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_easy_install.py +11 -7
  13. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +6 -1
  14. py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py +1 -1
  15. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py +11 -6
  16. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +58 -0
  17. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_working_set.py +7 -3
  18. py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py +7 -1
  19. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +2 -12
  20. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +2 -2
  21. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py +2 -2
  22. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
  23. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py +11 -7
  24. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +6 -1
  25. {py2docfx-0.1.12rc2002542.dist-info → py2docfx-0.1.12rc2012128.dist-info}/METADATA +1 -1
  26. {py2docfx-0.1.12rc2002542.dist-info → py2docfx-0.1.12rc2012128.dist-info}/RECORD +28 -28
  27. {py2docfx-0.1.12rc2002542.dist-info → py2docfx-0.1.12rc2012128.dist-info}/WHEEL +0 -0
  28. {py2docfx-0.1.12rc2002542.dist-info → py2docfx-0.1.12rc2012128.dist-info}/top_level.txt +0 -0
@@ -17,5 +17,12 @@ class SampleClass():
17
17
  """
18
18
  pass
19
19
 
20
+ def dummy_summary3(self):
21
+ """
22
+ This is a bare URL that shouldn't be transformed into a link
23
+ because it's in the exclusion list: https://management.azure.com
24
+ """
25
+ pass
26
+
20
27
  pass
21
28
 
@@ -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
 
@@ -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
- ref_string = '[{}]({})'.format(node.astext(), node.attributes['refuri'])
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 = self.by_key.get(req.key)
711
+ dist: Distribution | None = None
712
712
 
713
- if dist is None:
714
- canonical_key = self.normalized_to_canonical_keys.get(req.key)
713
+ candidates = (
714
+ req.key,
715
+ self.normalized_to_canonical_keys.get(req.key),
716
+ safe_name(req.key).replace(".", "-"),
717
+ )
715
718
 
716
- if canonical_key is not None:
717
- req.key = canonical_key
718
- dist = self.by_key.get(canonical_key)
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
- 'installed_dists,installable_dists,'
108
- 'requirements,replace_conflicting,'
109
- 'resolved_dists_or_exception',
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 filename_component(safe_name(value))
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
- f"`Py_GIL_DISABLED` ({sys.abiflags=!r}). "
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 "unicode.dist" in path)
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("unicode.dist-0.1.dist-info/RECORD")
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 make_nspkg_sdist
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
- make_nspkg_sdist(str(dist_dir.join(dist_sdist)), distname, version)
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"{name.replace('-', '_')}-{version}{suffix}")
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, 'foo.bar-0.1.tar.gz')
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, 'foo.bar-0.1')
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 'foo.bar-0.2' not in foo.__path__[0]:
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
- self.fail(
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'{distname}=={version}'],
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'{distname}-{version}.tar.gz')
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
- 'requires,use_setup_cfg,expected_requires,install_cmd_kwargs',
303
+ (
304
+ "requires",
305
+ "use_setup_cfg",
306
+ "expected_requires",
307
+ "install_cmd_kwargs",
308
+ ),
304
309
  argvalues,
305
310
  ids=idlist,
306
311
  )
@@ -10,7 +10,7 @@ __all__ = [
10
10
  "__version__",
11
11
  ]
12
12
 
13
- __version__ = "44.0.1"
13
+ __version__ = "44.0.2"
14
14
 
15
15
 
16
16
  __author__ = "The Python Cryptographic Authority and individual contributors"
@@ -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 = self.by_key.get(req.key)
711
+ dist: Distribution | None = None
712
712
 
713
- if dist is None:
714
- canonical_key = self.normalized_to_canonical_keys.get(req.key)
713
+ candidates = (
714
+ req.key,
715
+ self.normalized_to_canonical_keys.get(req.key),
716
+ safe_name(req.key).replace(".", "-"),
717
+ )
715
718
 
716
- if canonical_key is not None:
717
- req.key = canonical_key
718
- dist = self.by_key.get(canonical_key)
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
- 'installed_dists,installable_dists,'
108
- 'requirements,replace_conflicting,'
109
- 'resolved_dists_or_exception',
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 filename_component(safe_name(value))
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
- f"`Py_GIL_DISABLED` ({sys.abiflags=!r}). "
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 "unicode.dist" in path)
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("unicode.dist-0.1.dist-info/RECORD")
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 make_nspkg_sdist
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
- make_nspkg_sdist(str(dist_dir.join(dist_sdist)), distname, version)
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"{name.replace('-', '_')}-{version}{suffix}")
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, 'foo.bar-0.1.tar.gz')
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, 'foo.bar-0.1')
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 'foo.bar-0.2' not in foo.__path__[0]:
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
- self.fail(
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'{distname}=={version}'],
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'{distname}-{version}.tar.gz')
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
- 'requires,use_setup_cfg,expected_requires,install_cmd_kwargs',
303
+ (
304
+ "requires",
305
+ "use_setup_cfg",
306
+ "expected_requires",
307
+ "install_cmd_kwargs",
308
+ ),
304
309
  argvalues,
305
310
  ids=idlist,
306
311
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py2docfx
3
- Version: 0.1.12rc2002542
3
+ Version: 0.1.12rc2012128
4
4
  Summary: A package built based on Sphinx which download source code package and generate yaml files supported by docfx.
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -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=rB_mwwCJfDNATKGHKnHBzWqxaOGfIHOTtJ_f_qsGB90,35313
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=L9eFHZndD6H7nkznJ9Bw0v8xh9IegDlhhGFHBz9EHmM,1745
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=bzWTZpY2yf_By2bOSl1GFaY3BsZpkAvwQuGztlcHKkQ,537
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=fuydd-87on31-3P0wTNTZiFn0quiY18pZdP6zRXalQs,126098
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=UMgFTBF8WN-yBOaWcsmKlr1wqEz7cu2B9OnPeXMmkMI,15207
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=ZUJ8Su47v1YfRDkf8B6nBPHcdChVdzgRcxppHTwJs9k,8539
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=t-SeXc0jU2weQY9BA3qGlRThzBND1oYK5Hpzg1_533g,4536
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=QCtkl0iSLhM5F65hACha-tAGxOdxu9dtJNBhKCa4wLI,22274
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=C3Pp7p2fUCGvuH0Idq8lCC2ABhsu4G2iN5JaocyNHQw,19906
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=HbTZp7D5NzLAh3btrU8LeuZv4SfAADa9EVubeZyu3iE,8897
1524
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py,sha256=Agy3L0M3hF5dxXwSpLJwIbgJI3ODy_bsH23cEUR2OlM,7094
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=D8hsk-Z0hYcrKoyKM8AnKR0IdVfgXDlR2yARSoXDzTc,53308
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=0Bi29Im-Pz_SvKtKVkq7sy2tYEdrvfvCOyexfTx3jyo,43963
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=7_pvWpkU4M2C1cgTcHSQPw8Az1RaaIZ9nJ7gD7P4I30,445
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
@@ -3087,14 +3087,14 @@ py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/webencodings/labels.py,sha256=
3087
3087
  py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305
3088
3088
  py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563
3089
3089
  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=fuydd-87on31-3P0wTNTZiFn0quiY18pZdP6zRXalQs,126098
3090
+ py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py,sha256=-rh7XOnTxdGuC-_9FAyu5D6s8BL1UsBehxUtj7a-IVo,126203
3091
3091
  py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3092
3092
  py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_find_distributions.py,sha256=U91cov5L1COAIWLNq3Xy4plU7_MnOE1WtXMu6iV2waM,1972
3093
3093
  py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_integration_zope_interface.py,sha256=nzVoK557KZQN0V3DIQ1sVeaCOgt4Kpl-CODAWsO7pmc,1652
3094
3094
  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=UMgFTBF8WN-yBOaWcsmKlr1wqEz7cu2B9OnPeXMmkMI,15207
3095
+ py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py,sha256=5Mt4bJQhLCL8j8cC46Uv32Np2Xc1TTxLGawIfET55Fk,17111
3096
3096
  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=ZUJ8Su47v1YfRDkf8B6nBPHcdChVdzgRcxppHTwJs9k,8539
3097
+ py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_working_set.py,sha256=lRtGJWIixSwSMSbjHgRxeJEQiLMRXcz3xzJL2qL7eXY,8602
3098
3098
  py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py,sha256=1VobhAZbMb7M9mfhb_NE8PwDsvukoWLs9aUAS0pYhe8,105
3099
3099
  py2docfx/venv/venv1/Lib/site-packages/portalocker/__about__.py,sha256=zm6QcwwGAMZ9u7Emd18lIC0atwT67O--BtXyVs9T8iY,231
3100
3100
  py2docfx/venv/venv1/Lib/site-packages/portalocker/__init__.py,sha256=b-NLz4kKv2MZhYtR6m0CWneEi1KJ-tntELq2FwjY42s,2056
@@ -3483,7 +3483,7 @@ py2docfx/venv/venv1/Lib/site-packages/setuptools/_entry_points.py,sha256=Y3QUE9J
3483
3483
  py2docfx/venv/venv1/Lib/site-packages/setuptools/_imp.py,sha256=YY1EjZEN-0zYci1cxO10B_adAEOr7i8eK8JoCc9Ierc,2435
3484
3484
  py2docfx/venv/venv1/Lib/site-packages/setuptools/_importlib.py,sha256=aKIjcK0HKXNz2D-XTrxaixGn_juTkONwmu3dcheMOF0,223
3485
3485
  py2docfx/venv/venv1/Lib/site-packages/setuptools/_itertools.py,sha256=jWRfsIrpC7myooz3hDURj9GtvpswZeKXg2HakmEhNjo,657
3486
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py,sha256=t-SeXc0jU2weQY9BA3qGlRThzBND1oYK5Hpzg1_533g,4536
3486
+ py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py,sha256=zdSsIDjziHb-3_GYcY4UEejWQZxclOz3387qbYNZ67s,4824
3487
3487
  py2docfx/venv/venv1/Lib/site-packages/setuptools/_path.py,sha256=cPv41v03HD7uEYqCIo-E_cGRfpPVr4lywBCiK-HSrCg,2685
3488
3488
  py2docfx/venv/venv1/Lib/site-packages/setuptools/_reqs.py,sha256=QI3C9uOBSNRccu208qPnixHx51nxCry7_nPTIJaSYxM,1438
3489
3489
  py2docfx/venv/venv1/Lib/site-packages/setuptools/_shutil.py,sha256=cAOllcoyMTXs5JLoybQi29yI5gABk82hepJyOBv2bMw,1496
@@ -3719,7 +3719,7 @@ py2docfx/venv/venv1/Lib/site-packages/setuptools/command/_requirestxt.py,sha256=
3719
3719
  py2docfx/venv/venv1/Lib/site-packages/setuptools/command/alias.py,sha256=rDdrMt32DS6qf3K7tjZZyHD_dMKrm77AXcAtx-nBQ0I,2380
3720
3720
  py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_egg.py,sha256=3eDucQ4fdeYMsLO9PhBfY1JkcMLhZXgnAI_9FdFNsEE,16972
3721
3721
  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=QCtkl0iSLhM5F65hACha-tAGxOdxu9dtJNBhKCa4wLI,22274
3722
+ py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py,sha256=NKE9391SgoggEtzLC1CZNKWHDZ6k5bGrIZiaAJtpNzU,21976
3723
3723
  py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build.py,sha256=eI7STMERGGZEpzk1tvJN8p9IOjAAXMcGLzljv2mwI3M,6052
3724
3724
  py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_clib.py,sha256=AbgpPIF_3qL8fZr3JIebI-WHTMTBiMfrFkVQz8K40G4,4528
3725
3725
  py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_ext.py,sha256=bUH4M0NizaJJrv10wK-ZD3uY0TxCSZlYQDhiwwzHslM,18377
@@ -3765,7 +3765,7 @@ py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/server.py,sha256=0FDZf0cS
3765
3765
  py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_archive_util.py,sha256=buuKdY8XkW26Pe3IKAoBRGHG0MDumnuNoPg2WsAQzIg,845
3766
3766
  py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_deprecations.py,sha256=75Xq3gYn79LIIyusEltbHan0bEgAt2e_CaL7KLS8-KQ,775
3767
3767
  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=C3Pp7p2fUCGvuH0Idq8lCC2ABhsu4G2iN5JaocyNHQw,19906
3768
+ py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py,sha256=9JY8c6jH_WVPYnkx_0aEnaoHBMzKAWpkUlRJRmrm6GM,19906
3769
3769
  py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build.py,sha256=wJgMz2hwHADcLFg-nXrwRVhus7hjmAeEGgrpIQwCGnA,798
3770
3770
  py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_clib.py,sha256=bX51XRAf4uO7IuHFpjePnoK8mE74N2gsoeEqF-ofgws,3123
3771
3771
  py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_ext.py,sha256=e4ZSxsYPB5zq1KSqGEuATZ0t0PJQzMhjjkKJ-hIjcgc,10099
@@ -3775,12 +3775,12 @@ py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_config_discovery.py,
3775
3775
  py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_core_metadata.py,sha256=FpnPjsuRnA-8jRDvBe2oI_3vivwjNTPuF2CswCONXA4,19102
3776
3776
  py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_depends.py,sha256=yQBXoQbNQlJit6mbRVoz6Bb553f3sNrq02lZimNz5XY,424
3777
3777
  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=HbTZp7D5NzLAh3btrU8LeuZv4SfAADa9EVubeZyu3iE,8897
3779
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py,sha256=Agy3L0M3hF5dxXwSpLJwIbgJI3ODy_bsH23cEUR2OlM,7094
3778
+ py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py,sha256=GFjyL2etAxvVM3q7NhFEGcXS5gyKj8VzbqcbKzpqbOk,8901
3779
+ py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py,sha256=5kBRj9tuBsVreBsY22H2feMO_JQZsSoOZMU_MJfUevY,7077
3780
3780
  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=D8hsk-Z0hYcrKoyKM8AnKR0IdVfgXDlR2yARSoXDzTc,53308
3781
+ py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py,sha256=jx4lpFyee0G432cdnwBow3AkL4ibw-0QILwldwv5SCI,53534
3782
3782
  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=0Bi29Im-Pz_SvKtKVkq7sy2tYEdrvfvCOyexfTx3jyo,43963
3783
+ py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py,sha256=wLQmM9grgJnYjazzxGV5pd_UAgamTtKPsHXFZmGYRd8,44073
3784
3784
  py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_extern.py,sha256=rpKU6oCcksumLwf5TeKlDluFQ0TUfbPwTLQbpxcFrCU,296
3785
3785
  py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_find_packages.py,sha256=CTLAcTzWGWBLCcd2aAsUVkvO3ibrlqexFBdDKOWPoq8,7819
3786
3786
  py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_find_py_modules.py,sha256=zQjuhIG5TQN2SJPix9ARo4DL_w84Ln8QsHDUjjbrtAQ,2404
@@ -4194,7 +4194,7 @@ py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtas
4194
4194
  py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_localsystem.py,sha256=08ojAS48W6RLsUbRD45j0SJhg_Y2NFHZT6qjT4Vrig0,75
4195
4195
  py2docfx/venv/venv1/Scripts/pywin32_postinstall.py,sha256=u95n7QQUxpCjrZistYE-3gN451zXzopuJna8cXRQ4Jw,28115
4196
4196
  py2docfx/venv/venv1/Scripts/pywin32_testall.py,sha256=-6yvZmd2lPQc4e8i6PgLsr_totF6mScvoq0Jqr0V2fM,3844
4197
- py2docfx-0.1.12rc2002542.dist-info/METADATA,sha256=O-nUwPpHPUNhpC5NUbimpeDSG5kwbR_KOSGkIvzG5JQ,599
4198
- py2docfx-0.1.12rc2002542.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
4199
- py2docfx-0.1.12rc2002542.dist-info/top_level.txt,sha256=5dH2uP81dczt_qQJ38wiZ-gzoVWasfiJALWRSjdbnYU,9
4200
- py2docfx-0.1.12rc2002542.dist-info/RECORD,,
4197
+ py2docfx-0.1.12rc2012128.dist-info/METADATA,sha256=jXB0bopjfHtwico6pb8KAADK3ksqfi80BwK8E3Ih7eY,599
4198
+ py2docfx-0.1.12rc2012128.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
4199
+ py2docfx-0.1.12rc2012128.dist-info/top_level.txt,sha256=5dH2uP81dczt_qQJ38wiZ-gzoVWasfiJALWRSjdbnYU,9
4200
+ py2docfx-0.1.12rc2012128.dist-info/RECORD,,