From dc704a9d716a74bc28ab83eec77dd91fb46f3b3b Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Wed, 15 Nov 2023 16:52:02 +0000 Subject: [PATCH 1/3] feat: Introduce compatibility with native namespace packages --- google/__init__.py | 22 ---------------------- google/cloud/__init__.py | 22 ---------------------- google/cloud/dns/__init__.py | 6 +----- setup.py | 22 ++++++++++++---------- 4 files changed, 13 insertions(+), 59 deletions(-) delete mode 100644 google/__init__.py delete mode 100644 google/cloud/__init__.py diff --git a/google/__init__.py b/google/__init__.py deleted file mode 100644 index 0e1bc51..0000000 --- a/google/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright 2016 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -try: - import pkg_resources - - pkg_resources.declare_namespace(__name__) -except ImportError: - import pkgutil - - __path__ = pkgutil.extend_path(__path__, __name__) diff --git a/google/cloud/__init__.py b/google/cloud/__init__.py deleted file mode 100644 index 0e1bc51..0000000 --- a/google/cloud/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright 2016 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -try: - import pkg_resources - - pkg_resources.declare_namespace(__name__) -except ImportError: - import pkgutil - - __path__ = pkgutil.extend_path(__path__, __name__) diff --git a/google/cloud/dns/__init__.py b/google/cloud/dns/__init__.py index dc3754e..d26ba70 100644 --- a/google/cloud/dns/__init__.py +++ b/google/cloud/dns/__init__.py @@ -24,11 +24,7 @@ (adding/deleting resource record sets) to a zone. """ - -from pkg_resources import get_distribution - -__version__ = get_distribution("google-cloud-dns").version - +from google.cloud.dns.version import __version__ from google.cloud.dns.zone import Changes from google.cloud.dns.client import Client from google.cloud.dns.zone import ManagedZone diff --git a/setup.py b/setup.py index 9c123db..f67e444 100644 --- a/setup.py +++ b/setup.py @@ -14,6 +14,7 @@ import io import os +import re import setuptools @@ -22,7 +23,16 @@ name = "google-cloud-dns" description = "Google Cloud DNS API client library" -version = "0.34.2" + +package_root = os.path.abspath(os.path.dirname(__file__)) + +version = None + +with open(os.path.join(package_root, 'google/cloud/dns/version.py')) as fp: + version_candidates = re.findall(r"(?<=\")\d+.\d+.\d+(?=\")", fp.read()) + assert (len(version_candidates) == 1) + version = version_candidates[0] + # Should be one of: # 'Development Status :: 3 - Alpha' # 'Development Status :: 4 - Beta' @@ -39,7 +49,6 @@ # Setup boilerplate below this line. -package_root = os.path.abspath(os.path.dirname(__file__)) readme_filename = os.path.join(package_root, "README.rst") with io.open(readme_filename, encoding="utf-8") as readme_file: @@ -48,15 +57,9 @@ # Only include packages under the 'google' namespace. Do not include tests, # benchmarks, etc. packages = [ - package for package in setuptools.find_packages() if package.startswith("google") + package for package in setuptools.find_namespace_packages() if package.startswith("google") ] -# Determine which namespaces are needed. -namespaces = ["google"] -if "google.cloud" in packages: - namespaces.append("google.cloud") - - setuptools.setup( name=name, version=version, @@ -81,7 +84,6 @@ ], platforms="Posix; MacOS X; Windows", packages=packages, - namespace_packages=namespaces, install_requires=dependencies, extras_require=extras, python_requires=">=3.7", From 1eef31cae5063bc3c048704b3d7ddead1bd0cb72 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Thu, 23 Nov 2023 21:42:21 +0000 Subject: [PATCH 2/3] Add missing files --- google/cloud/dns/version.py | 16 ++++++++++++++++ tests/unit/test_packaging.py | 37 ++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 google/cloud/dns/version.py create mode 100644 tests/unit/test_packaging.py diff --git a/google/cloud/dns/version.py b/google/cloud/dns/version.py new file mode 100644 index 0000000..a8a437c --- /dev/null +++ b/google/cloud/dns/version.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +__version__ = "0.34.2" diff --git a/tests/unit/test_packaging.py b/tests/unit/test_packaging.py new file mode 100644 index 0000000..c9adb6e --- /dev/null +++ b/tests/unit/test_packaging.py @@ -0,0 +1,37 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import subprocess +import sys + + +def test_namespace_package_compat(tmp_path): + # The ``google`` namespace package should not be masked + # by the presence of ``google-cloud-dns``. + google = tmp_path / "google" + google.mkdir() + google.joinpath("othermod.py").write_text("") + env = dict(os.environ, PYTHONPATH=str(tmp_path)) + cmd = [sys.executable, "-m", "google.othermod"] + subprocess.check_call(cmd, env=env) + + # The ``google.cloud`` namespace package should not be masked + # by the presence of ``google-cloud-dns``. + google_cloud = tmp_path / "google" / "cloud" + google_cloud.mkdir() + google_cloud.joinpath("othermod.py").write_text("") + env = dict(os.environ, PYTHONPATH=str(tmp_path)) + cmd = [sys.executable, "-m", "google.cloud.othermod"] + subprocess.check_call(cmd, env=env) From 6911e48973b2a05e78341b3c44efba771fed3abd Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Thu, 23 Nov 2023 21:44:15 +0000 Subject: [PATCH 3/3] lint --- setup.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index f67e444..eb2be22 100644 --- a/setup.py +++ b/setup.py @@ -28,9 +28,9 @@ version = None -with open(os.path.join(package_root, 'google/cloud/dns/version.py')) as fp: +with open(os.path.join(package_root, "google/cloud/dns/version.py")) as fp: version_candidates = re.findall(r"(?<=\")\d+.\d+.\d+(?=\")", fp.read()) - assert (len(version_candidates) == 1) + assert len(version_candidates) == 1 version = version_candidates[0] # Should be one of: @@ -57,7 +57,9 @@ # Only include packages under the 'google' namespace. Do not include tests, # benchmarks, etc. packages = [ - package for package in setuptools.find_namespace_packages() if package.startswith("google") + package + for package in setuptools.find_namespace_packages() + if package.startswith("google") ] setuptools.setup(