From cf9ee5ace4c3b5877cda546a52d5f0d6f46f4a9f Mon Sep 17 00:00:00 2001 From: Rafal Jankowski Date: Wed, 19 Oct 2022 13:00:47 +0200 Subject: [PATCH 1/9] Version fix --- src/neptune/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/neptune/_version.py b/src/neptune/_version.py index 120b32dec..6b77e3139 100644 --- a/src/neptune/_version.py +++ b/src/neptune/_version.py @@ -44,7 +44,7 @@ def get_config(): cfg.style = "pep440" cfg.tag_prefix = "" cfg.parentdir_prefix = "" - cfg.versionfile_source = "neptune/_version.py" + cfg.versionfile_source = "src/neptune/_version.py" cfg.verbose = False return cfg From 80074d0ed1a15fc47c4085a5f6ea4db914ae99ea Mon Sep 17 00:00:00 2001 From: Rafal Jankowski Date: Wed, 19 Oct 2022 13:07:10 +0200 Subject: [PATCH 2/9] Git attributes --- .gitattributes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 97aa3f333..994bf8275 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1 @@ -neptune/_version.py export-subst +src/neptune/_version.py export-subst From fc17177489d84ea2a2ae66a8ab179943f64334da Mon Sep 17 00:00:00 2001 From: Rafal Jankowski Date: Wed, 19 Oct 2022 13:35:38 +0200 Subject: [PATCH 3/9] Importlib instead of raw get_versions --- requirements.txt | 1 + src/neptune/__init__.py | 15 +++++++++++++-- src/neptune/_version.py | 3 ++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 648c21a8c..afd8ee42c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,3 +17,4 @@ dataclasses>=0.6; python_version<"3.7" swagger-spec-validator>=2.7.4 psutil jsonschema[format]<4.0.0 +importlib-metadata<4; python_version<"3.8.0" diff --git a/src/neptune/__init__.py b/src/neptune/__init__.py index a116ed1d5..398451833 100644 --- a/src/neptune/__init__.py +++ b/src/neptune/__init__.py @@ -13,7 +13,14 @@ # See the License for the specific language governing permissions and # limitations under the License. # -from neptune._version import get_versions +try: + from importlib.metadata import ( + PackageNotFoundError, + version, + ) +except ImportError: + from importlib_metadata import PackageNotFoundError, version + from neptune.legacy import ( ANONYMOUS, ANONYMOUS_API_TOKEN, @@ -47,4 +54,8 @@ stop, ) -__version__ = get_versions()["version"] +try: + __version__ = version("neptune-client") +except PackageNotFoundError: + # package is not installed + pass diff --git a/src/neptune/_version.py b/src/neptune/_version.py index 6b77e3139..3c0839c16 100644 --- a/src/neptune/_version.py +++ b/src/neptune/_version.py @@ -45,7 +45,8 @@ def get_config(): cfg.tag_prefix = "" cfg.parentdir_prefix = "" cfg.versionfile_source = "src/neptune/_version.py" - cfg.verbose = False + cfg.versionfile_build = "neptune/_version.py" + cfg.verbose = True return cfg From 88de123b0575da48ba2088315c37f536ce0bc145 Mon Sep 17 00:00:00 2001 From: Rafal Jankowski Date: Wed, 19 Oct 2022 13:38:36 +0200 Subject: [PATCH 4/9] Quiet versioneer --- src/neptune/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/neptune/_version.py b/src/neptune/_version.py index 3c0839c16..a1a0d21bb 100644 --- a/src/neptune/_version.py +++ b/src/neptune/_version.py @@ -46,7 +46,7 @@ def get_config(): cfg.parentdir_prefix = "" cfg.versionfile_source = "src/neptune/_version.py" cfg.versionfile_build = "neptune/_version.py" - cfg.verbose = True + cfg.verbose = False return cfg From 88fc999bd714c6f11104955b32a63e1db37ba940 Mon Sep 17 00:00:00 2001 From: Rafal Jankowski Date: Wed, 19 Oct 2022 13:42:30 +0200 Subject: [PATCH 5/9] Tests for lightning --- e2e_tests/conftest.py | 85 ++++++++++++------- .../integrations/test_pytorch_lightning.py | 1 + e2e_tests/pytest.ini | 1 + 3 files changed, 54 insertions(+), 33 deletions(-) diff --git a/e2e_tests/conftest.py b/e2e_tests/conftest.py index cf58e82b4..4fa88cfaa 100644 --- a/e2e_tests/conftest.py +++ b/e2e_tests/conftest.py @@ -33,6 +33,7 @@ add_project_service_account, create_project, ) +from neptune.management.exceptions import ProjectNameCollision from neptune.management.internal.utils import normalize_project_name from neptune.new import init_project @@ -41,48 +42,66 @@ @pytest.fixture(scope="session") def environment(): - raw_env = RawEnvironment() - workspace = raw_env.workspace_name - admin_token = raw_env.admin_neptune_api_token - user = raw_env.user_username - service_account_name = raw_env.service_account_name + # check if lightning env variable is present + project_env_var = os.getenv("NEPTUNE_LIGHTNING_ECOSYSTEM_CI_PROJECT", "") + + if project_env_var: + workspace, project_name = project_env_var.split("/") + user_token = os.getenv("NEPTUNE_API_TOKEN") + admin_token = user_token + admin = "" + user = "" + service_account_name = "" + + else: + raw_env = RawEnvironment() + workspace = raw_env.workspace_name + project_name = a_project_name(project_slug=fake.slug()) + user_token = raw_env.neptune_api_token + admin_token = raw_env.admin_neptune_api_token + admin = raw_env.admin_username + user = raw_env.user_username + service_account_name = raw_env.service_account_name - project_name = a_project_name(project_slug=fake.slug()) project_identifier = normalize_project_name(name=project_name, workspace=workspace) - created_project_identifier = create_project( - name=project_name, - visibility="priv", - workspace=workspace, - api_token=admin_token, - ) - - time.sleep(10) - - add_project_member( - name=created_project_identifier, - username=user, - # pylint: disable=no-member - role="contributor", - api_token=admin_token, - ) - - add_project_service_account( - name=created_project_identifier, - service_account_name=service_account_name, - # pylint: disable=no-member - role="contributor", - api_token=admin_token, - ) + try: + created_project_identifier = create_project( + name=project_name, + visibility="priv", + workspace=workspace, + api_token=admin_token, + ) + + time.sleep(10) + + add_project_member( + name=created_project_identifier, + username=user, + # pylint: disable=no-member + role="contributor", + api_token=admin_token, + ) + + add_project_service_account( + name=created_project_identifier, + service_account_name=service_account_name, + # pylint: disable=no-member + role="contributor", + api_token=admin_token, + ) + + except ProjectNameCollision: + created_project_identifier = project_name yield Environment( workspace=workspace, project=project_identifier, - user_token=raw_env.neptune_api_token, + user_token=user_token, admin_token=admin_token, - admin=raw_env.admin_username, + admin=admin, user=user, - service_account=raw_env.service_account_name, + service_account=service_account_name, ) project = init_project(name=created_project_identifier, api_token=admin_token) diff --git a/e2e_tests/integrations/test_pytorch_lightning.py b/e2e_tests/integrations/test_pytorch_lightning.py index 7e6a62ef5..58d961fb5 100644 --- a/e2e_tests/integrations/test_pytorch_lightning.py +++ b/e2e_tests/integrations/test_pytorch_lightning.py @@ -114,6 +114,7 @@ def pytorch_run(environment): @pytest.mark.integrations +@pytest.mark.lightning class TestPytorchLightning(BaseE2ETest): def test_logging_values(self, pytorch_run): # correct integration version is logged diff --git a/e2e_tests/pytest.ini b/e2e_tests/pytest.ini index 8b361be04..42606ca5a 100644 --- a/e2e_tests/pytest.ini +++ b/e2e_tests/pytest.ini @@ -3,3 +3,4 @@ markers = s3: a test is using AWS S3 management: a test is using Management API integrations: a test is testing an integration + lightning: a test is supposed to run with Lightning EcoSystem CI From 85dca437376d2f7adf5c1a9782906ff770ffafc1 Mon Sep 17 00:00:00 2001 From: Rafal Jankowski Date: Wed, 19 Oct 2022 14:38:51 +0200 Subject: [PATCH 6/9] The same way of version retrieval in neptune.new.version --- src/neptune/new/version.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/neptune/new/version.py b/src/neptune/new/version.py index 1928c86f9..cb27ef271 100644 --- a/src/neptune/new/version.py +++ b/src/neptune/new/version.py @@ -13,9 +13,23 @@ # See the License for the specific language governing permissions and # limitations under the License. # -from packaging import version +import packaging -from neptune._version import get_versions +try: + from importlib.metadata import ( + PackageNotFoundError, + version, + ) +except ImportError: + from importlib_metadata import ( + PackageNotFoundError, + version, + ) -version = version.parse(get_versions()["version"]) -del get_versions + +try: + __version__ = version("neptune-client") + version = packaging.version.parse(__version__) +except PackageNotFoundError: + # package is not installed + pass From c026715454c87b5be2074ce93fabf83319980f59 Mon Sep 17 00:00:00 2001 From: Rafal Jankowski Date: Wed, 19 Oct 2022 16:18:12 +0200 Subject: [PATCH 7/9] Revert "Tests for lightning" This reverts commit 88fc999bd714c6f11104955b32a63e1db37ba940. --- e2e_tests/conftest.py | 85 +++++++------------ .../integrations/test_pytorch_lightning.py | 1 - e2e_tests/pytest.ini | 1 - 3 files changed, 33 insertions(+), 54 deletions(-) diff --git a/e2e_tests/conftest.py b/e2e_tests/conftest.py index 4fa88cfaa..cf58e82b4 100644 --- a/e2e_tests/conftest.py +++ b/e2e_tests/conftest.py @@ -33,7 +33,6 @@ add_project_service_account, create_project, ) -from neptune.management.exceptions import ProjectNameCollision from neptune.management.internal.utils import normalize_project_name from neptune.new import init_project @@ -42,66 +41,48 @@ @pytest.fixture(scope="session") def environment(): - # check if lightning env variable is present - project_env_var = os.getenv("NEPTUNE_LIGHTNING_ECOSYSTEM_CI_PROJECT", "") - - if project_env_var: - workspace, project_name = project_env_var.split("/") - user_token = os.getenv("NEPTUNE_API_TOKEN") - admin_token = user_token - admin = "" - user = "" - service_account_name = "" - - else: - raw_env = RawEnvironment() - workspace = raw_env.workspace_name - project_name = a_project_name(project_slug=fake.slug()) - user_token = raw_env.neptune_api_token - admin_token = raw_env.admin_neptune_api_token - admin = raw_env.admin_username - user = raw_env.user_username - service_account_name = raw_env.service_account_name + raw_env = RawEnvironment() + workspace = raw_env.workspace_name + admin_token = raw_env.admin_neptune_api_token + user = raw_env.user_username + service_account_name = raw_env.service_account_name + project_name = a_project_name(project_slug=fake.slug()) project_identifier = normalize_project_name(name=project_name, workspace=workspace) - try: - created_project_identifier = create_project( - name=project_name, - visibility="priv", - workspace=workspace, - api_token=admin_token, - ) - - time.sleep(10) - - add_project_member( - name=created_project_identifier, - username=user, - # pylint: disable=no-member - role="contributor", - api_token=admin_token, - ) - - add_project_service_account( - name=created_project_identifier, - service_account_name=service_account_name, - # pylint: disable=no-member - role="contributor", - api_token=admin_token, - ) - - except ProjectNameCollision: - created_project_identifier = project_name + created_project_identifier = create_project( + name=project_name, + visibility="priv", + workspace=workspace, + api_token=admin_token, + ) + + time.sleep(10) + + add_project_member( + name=created_project_identifier, + username=user, + # pylint: disable=no-member + role="contributor", + api_token=admin_token, + ) + + add_project_service_account( + name=created_project_identifier, + service_account_name=service_account_name, + # pylint: disable=no-member + role="contributor", + api_token=admin_token, + ) yield Environment( workspace=workspace, project=project_identifier, - user_token=user_token, + user_token=raw_env.neptune_api_token, admin_token=admin_token, - admin=admin, + admin=raw_env.admin_username, user=user, - service_account=service_account_name, + service_account=raw_env.service_account_name, ) project = init_project(name=created_project_identifier, api_token=admin_token) diff --git a/e2e_tests/integrations/test_pytorch_lightning.py b/e2e_tests/integrations/test_pytorch_lightning.py index 58d961fb5..7e6a62ef5 100644 --- a/e2e_tests/integrations/test_pytorch_lightning.py +++ b/e2e_tests/integrations/test_pytorch_lightning.py @@ -114,7 +114,6 @@ def pytorch_run(environment): @pytest.mark.integrations -@pytest.mark.lightning class TestPytorchLightning(BaseE2ETest): def test_logging_values(self, pytorch_run): # correct integration version is logged diff --git a/e2e_tests/pytest.ini b/e2e_tests/pytest.ini index 42606ca5a..8b361be04 100644 --- a/e2e_tests/pytest.ini +++ b/e2e_tests/pytest.ini @@ -3,4 +3,3 @@ markers = s3: a test is using AWS S3 management: a test is using Management API integrations: a test is testing an integration - lightning: a test is supposed to run with Lightning EcoSystem CI From 4feac96c70603abe1fb9c5220a6fe642e94d59f1 Mon Sep 17 00:00:00 2001 From: Rafal Jankowski Date: Wed, 19 Oct 2022 16:35:08 +0200 Subject: [PATCH 8/9] Simplified --- src/neptune/__init__.py | 15 +-------------- src/neptune/new/version.py | 21 +++------------------ src/neptune/version.py | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 32 deletions(-) create mode 100644 src/neptune/version.py diff --git a/src/neptune/__init__.py b/src/neptune/__init__.py index 398451833..4419cfdbb 100644 --- a/src/neptune/__init__.py +++ b/src/neptune/__init__.py @@ -13,14 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # -try: - from importlib.metadata import ( - PackageNotFoundError, - version, - ) -except ImportError: - from importlib_metadata import PackageNotFoundError, version - from neptune.legacy import ( ANONYMOUS, ANONYMOUS_API_TOKEN, @@ -53,9 +45,4 @@ set_property, stop, ) - -try: - __version__ = version("neptune-client") -except PackageNotFoundError: - # package is not installed - pass +from neptune.version import __version__ diff --git a/src/neptune/new/version.py b/src/neptune/new/version.py index cb27ef271..c1e0c0722 100644 --- a/src/neptune/new/version.py +++ b/src/neptune/new/version.py @@ -13,23 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import packaging +from packaging.version import parse -try: - from importlib.metadata import ( - PackageNotFoundError, - version, - ) -except ImportError: - from importlib_metadata import ( - PackageNotFoundError, - version, - ) +from neptune.version import __version__ - -try: - __version__ = version("neptune-client") - version = packaging.version.parse(__version__) -except PackageNotFoundError: - # package is not installed - pass +version = parse(__version__) diff --git a/src/neptune/version.py b/src/neptune/version.py new file mode 100644 index 000000000..881f5c138 --- /dev/null +++ b/src/neptune/version.py @@ -0,0 +1,33 @@ +# +# Copyright (c) 2022, Neptune Labs Sp. z o.o. +# +# 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 sys + +if sys.version_info >= (3, 8): + from importlib.metadata import ( + PackageNotFoundError, + version, + ) +else: + from importlib_metadata import ( + PackageNotFoundError, + version, + ) + +try: + __version__ = version("neptune-client") +except PackageNotFoundError: + # package is not installed + pass From 9985db85e4b0edd518b9112776992de7f113c9da Mon Sep 17 00:00:00 2001 From: Rafal Jankowski Date: Wed, 19 Oct 2022 16:40:13 +0200 Subject: [PATCH 9/9] CHANGELOG update --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90d7e5eb6..b3a36a71e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### Fixes - Update jsonschema requirement with explicit `format` specifier ([#1010](https://github.com/neptune-ai/neptune-client/pull/1010)) - Escape inputs to SQL in Artifact LocalFileHashStorage ([#1034](https://github.com/neptune-ai/neptune-client/pull/1034)) +- Version checking with importlib and versioneer config update ([#1048](https://github.com/neptune-ai/neptune-client/pull/1048)) ### Changes - More consistent and strict way of git repository, source files and entrypoint detection ([#1007](https://github.com/neptune-ai/neptune-client/pull/1007))