From c4ae7527d04d049d3f9595e041ca348be0fc6e93 Mon Sep 17 00:00:00 2001 From: DazEdword Date: Sun, 15 Mar 2020 12:24:14 +0000 Subject: [PATCH 1/4] Config load support from Win32 platforms. --- README.md | 5 +++ requirements-dev.txt | 1 + synotools/settings.py | 13 +++++--- .../integration/settings/test_settings_os.py | 31 +++++++++++++++++++ tests/unit/{ => settings}/test_settings.py | 2 +- 5 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 tests/integration/settings/test_settings_os.py rename tests/unit/{ => settings}/test_settings.py (86%) diff --git a/README.md b/README.md index 0ef3427..5ecb70d 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,13 @@ Install the package with pip: python -m pip install synotools ``` +Unix users (Linux, Mac) Create your credentials file in `~/.synotools/credentials`: +Windows users: +Use `C:\Users\\.synotools\credentials.txt` instead. + + ``` # Device access credentials SYNOLOGY_IP=your-ip diff --git a/requirements-dev.txt b/requirements-dev.txt index a451953..9ecda5e 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -6,6 +6,7 @@ coverage coveralls flake8 freezegun +ipython isort mypy pytest diff --git a/synotools/settings.py b/synotools/settings.py index f2b926a..eb84ffe 100644 --- a/synotools/settings.py +++ b/synotools/settings.py @@ -1,18 +1,23 @@ import os +import sys + from os.path import join from pathlib import Path from dotenv import load_dotenv -CREDENTIALS_PATH = ".synotools/credentials" - class Settings: def __init__(self): - load_dotenv(dotenv_path=self.get_local_credentials_path, verbose=True) + load_dotenv(dotenv_path=self.credentials_path, verbose=True) @property - def get_local_credentials_path(self): + def credentials_path(self): + if sys.platform.startswith("win"): + CREDENTIALS_PATH = ".synotools\\credentials.txt" + else: + CREDENTIALS_PATH = ".synotools/credentials" + return join(str(Path.home()), CREDENTIALS_PATH) def get_environmental_variable(self, var_name): diff --git a/tests/integration/settings/test_settings_os.py b/tests/integration/settings/test_settings_os.py new file mode 100644 index 0000000..88982e0 --- /dev/null +++ b/tests/integration/settings/test_settings_os.py @@ -0,0 +1,31 @@ +from synotools.settings import Settings + + +class TestSettingsOS: + def test_get_environmental_variable_loads_credentials_from_expected_location_on_linux( + self, mocker, + ): + # Arrange + mocker.patch("synotools.settings.sys.platform", "linux") + + # Act + target = Settings() + + actual = target.credentials_path + + # Assert + assert actual.endswith("credentials") + + def test_get_environmental_variable_loads_credentials_from_expected_location_on_windows( + self, mocker, + ): + # Arrange + mocker.patch("synotools.settings.sys.platform", "win32") + + # Act + target = Settings() + + actual = target.credentials_path + + # Assert + assert actual.endswith("credentials.txt") diff --git a/tests/unit/test_settings.py b/tests/unit/settings/test_settings.py similarity index 86% rename from tests/unit/test_settings.py rename to tests/unit/settings/test_settings.py index 36778dc..da4d1d9 100644 --- a/tests/unit/test_settings.py +++ b/tests/unit/settings/test_settings.py @@ -4,7 +4,7 @@ def test_get_environmental_variable_loads_credentials_from_expected_location(mocker): mocker.patch( - "synotools.settings.Settings.get_local_credentials_path", + "synotools.settings.Settings.credentials_path", "home/test-user/.my-test/credentials", ) From dd74455e60e3a40859dfc25c5354db8d5176b121 Mon Sep 17 00:00:00 2001 From: DazEdword Date: Sun, 15 Mar 2020 12:25:08 +0000 Subject: [PATCH 2/4] Bumpers. --- .bumpversion.cfg | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index e2fd9fa..a0ed8bf 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.4.0 +current_version = 0.5.0 commit = True tag = True diff --git a/setup.py b/setup.py index 04694c3..d813f72 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="synotools", - version="0.4.0", + version="0.5.0", author="Ed Garabito", author_email="eduardo@gottabegarabi.com", description="A Python API wrapper and toolset to interact with Synology NAS devices.", From 3da6473c99d2b3214d04e9cec962234026f5acda Mon Sep 17 00:00:00 2001 From: DazEdword Date: Sun, 15 Mar 2020 12:29:09 +0000 Subject: [PATCH 3/4] Linting. --- synotools/settings.py | 1 - 1 file changed, 1 deletion(-) diff --git a/synotools/settings.py b/synotools/settings.py index eb84ffe..c77a6f2 100644 --- a/synotools/settings.py +++ b/synotools/settings.py @@ -1,6 +1,5 @@ import os import sys - from os.path import join from pathlib import Path From bdcf9961ba197a7ef5d877491ff2910a666ebbbf Mon Sep 17 00:00:00 2001 From: DazEdword Date: Sun, 15 Mar 2020 12:35:12 +0000 Subject: [PATCH 4/4] Adding some integration tests to coverage. --- docker/scripts/tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/scripts/tests b/docker/scripts/tests index ec9b8dc..5a5d7c7 100755 --- a/docker/scripts/tests +++ b/docker/scripts/tests @@ -12,7 +12,7 @@ echo "--> Running tests with coverage..." coverage run \ --source=synotools \ - -- $(which pytest) -v --durations=20 --tb=short --junit-xml=artifacts/test-report.xml tests/unit + -- $(which pytest) -v --durations=20 --tb=short --junit-xml=artifacts/test-report.xml tests/unit tests/integration/settings echo "--> Coverage stats..." coverage html