Skip to content

Commit 795934a

Browse files
author
Jonathon Belotti
committed
Add function documentation, and extract a conditional check into the namespace_pkgs module where it really belongs
1 parent 53ecb83 commit 795934a

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

src/extract_wheels.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def sanitise_name(name):
4141

4242
def _setup_namespace_pkg_compatibility(extracted_whl_directory):
4343
"""
44-
Namespace packages can be created in one of three ways. The are detailed here:
44+
Namespace packages can be created in one of three ways. They are detailed here:
4545
https://packaging.python.org/guides/packaging-namespace-packages/#creating-a-namespace-package
4646
4747
'pkgutil-style namespace packages' (2) works in Bazel, but 'native namespace packages' (1) and
@@ -54,7 +54,7 @@ def _setup_namespace_pkg_compatibility(extracted_whl_directory):
5454
)
5555
if (
5656
not namespace_pkg_dirs and
57-
(sys.version_info.major, sys.version_info.minor) >= (3, 3)
57+
namespace_pkgs.native_namespace_packages_supported()
5858
):
5959
namespace_pkg_dirs = namespace_pkgs.implicit_namespace_packages(
6060
extracted_whl_directory,

src/namespace_pkgs.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22
import glob
3+
import sys
34

45
from typing import Set
56

@@ -13,6 +14,8 @@
1314

1415
def pkg_resources_style_namespace_packages(extracted_whl_directory) -> Set[str]:
1516
"""
17+
Discovers namespace packages implemented using the 'pkg_resources-style namespace packages' method.
18+
1619
"While this approach is no longer recommended, it is widely present in most existing namespace packages." - PyPA
1720
See https://packaging.python.org/guides/packaging-namespace-packages/#pkg-resources-style-namespace-packages
1821
"""
@@ -37,7 +40,17 @@ def pkg_resources_style_namespace_packages(extracted_whl_directory) -> Set[str]:
3740
return namespace_pkg_dirs
3841

3942

43+
def native_namespace_packages_supported() -> bool:
44+
return (sys.version_info.major, sys.version_info.minor) >= (3, 3)
45+
46+
4047
def implicit_namespace_packages(directory, ignored_dirnames=None) -> Set[str]:
48+
"""
49+
Discovers namespace packages implemented using the 'native namespace packages' method,
50+
AKA 'implicit namespace packages', which has been supported since Python 3.3.
51+
52+
See: https://packaging.python.org/guides/packaging-namespace-packages/#native-namespace-packages
53+
"""
4154
namespace_pkg_dirs = set()
4255
for dirpath, dirnames, filenames in os.walk(directory, topdown=True):
4356
# We are only interested in dirs with no init file
@@ -60,7 +73,11 @@ def implicit_namespace_packages(directory, ignored_dirnames=None) -> Set[str]:
6073

6174

6275
def add_pkgutil_style_namespace_pkg_init(dir_path: str) -> None:
63-
"""TODO"""
76+
"""
77+
Used to implement the 'pkgutil-style namespace packages' method of
78+
doing namespace packages.
79+
See: https://packaging.python.org/guides/packaging-namespace-packages/#pkgutil-style-namespace-packages
80+
"""
6481
ns_pkg_init_filepath = os.path.join(dir_path, "__init__.py")
6582

6683
if os.path.isfile(ns_pkg_init_filepath):

0 commit comments

Comments
 (0)