diff --git a/.github/workflows/python-coverage.yaml b/.github/workflows/python-coverage.yaml
index b50d8ee8..d7345020 100644
--- a/.github/workflows/python-coverage.yaml
+++ b/.github/workflows/python-coverage.yaml
@@ -11,7 +11,7 @@ on:
jobs:
build:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
@@ -19,7 +19,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v2
with:
- python-version: '3.8'
+ python-version: '3.10'
- uses: actions/cache@v2
with:
@@ -38,11 +38,11 @@ jobs:
- name: Test with pytest
run: |
coverage run -m pytest --cov-config=.coveragerc
-
- - name: Debug coverage
- run: coverage report -m
+
+ - name: Convert to LCO
+ run: coverage lcov --rcfile=.coveragerc
- name: Upload coverage data to coveralls.io
- run: coveralls --service=github --rcfile=.coveragerc
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ uses: coverallsapp/github-action@v2
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/python-docs.yaml b/.github/workflows/python-docs.yaml
index 5fcd99ad..e628b26f 100644
--- a/.github/workflows/python-docs.yaml
+++ b/.github/workflows/python-docs.yaml
@@ -10,14 +10,14 @@ on:
jobs:
deploy:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
- python-version: '3.8'
+ python-version: '3.10'
- uses: actions/cache@v2
with:
@@ -28,7 +28,7 @@ jobs:
run: |
python -m pip install --upgrade pip
pip install -e .[s3,tune]
- pip install -r ./requirements/DEV_REQUIREMENTS.txt
+
pip install -r ./requirements/S3_REQUIREMENTS.txt
pip install -r ./requirements/TUNE_REQUIREMENTS.txt
pip install -r ./requirements/TEST_EXTRAS_REQUIREMENTS.txt
diff --git a/.github/workflows/python-lint.yaml b/.github/workflows/python-lint.yaml
index 94325eb3..8cf9f5c2 100644
--- a/.github/workflows/python-lint.yaml
+++ b/.github/workflows/python-lint.yaml
@@ -12,14 +12,14 @@ on:
jobs:
run_lint:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
- python-version: '3.8'
+ python-version: '3.10'
- uses: actions/cache@v2
with:
@@ -37,8 +37,8 @@ jobs:
- name: Run isort linter
run: |
- isort --check . --skip="debug" --skip="versioneer.py" --skip="tests" --skip="_version.py"
+ isort --check .
- name: Run black linter
run: |
- black --check . --exclude="versioneer.py|_version.py|debug|tests"
+ black --check .
diff --git a/.github/workflows/python-manual-docs.yaml b/.github/workflows/python-manual-docs.yaml
index 83f090fb..40d55f04 100644
--- a/.github/workflows/python-manual-docs.yaml
+++ b/.github/workflows/python-manual-docs.yaml
@@ -7,14 +7,14 @@ on: workflow_dispatch
jobs:
deploy:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
- python-version: '3.8'
+ python-version: '3.10'
- uses: actions/cache@v2
with:
diff --git a/.github/workflows/python-publish.yaml b/.github/workflows/python-publish.yaml
index c9776df1..f5ad99ec 100644
--- a/.github/workflows/python-publish.yaml
+++ b/.github/workflows/python-publish.yaml
@@ -11,7 +11,7 @@ on:
jobs:
deploy:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
@@ -20,7 +20,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v2
with:
- python-version: '3.8'
+ python-version: '3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/python-pytest-s3.yaml b/.github/workflows/python-pytest-s3.yaml
index 27961247..545118a9 100644
--- a/.github/workflows/python-pytest-s3.yaml
+++ b/.github/workflows/python-pytest-s3.yaml
@@ -11,10 +11,10 @@ on:
jobs:
build:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
strategy:
matrix:
- python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"]
+ python-version: ["3.7", "3.8", "3.9", "3.10"]
steps:
- uses: actions/checkout@v2
diff --git a/.github/workflows/python-pytest-tune.yaml b/.github/workflows/python-pytest-tune.yaml
index 2f053ce6..4e1aded3 100644
--- a/.github/workflows/python-pytest-tune.yaml
+++ b/.github/workflows/python-pytest-tune.yaml
@@ -11,10 +11,10 @@ on:
jobs:
build:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
strategy:
matrix:
- python-version: ["3.7", "3.8", "3.9", "3.10"]
+ python-version: ["3.8", "3.9", "3.10"]
steps:
- uses: actions/checkout@v2
diff --git a/.github/workflows/python-pytest.yml b/.github/workflows/python-pytest.yml
index b4a9976e..d550a708 100644
--- a/.github/workflows/python-pytest.yml
+++ b/.github/workflows/python-pytest.yml
@@ -11,10 +11,10 @@ on:
jobs:
build:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
strategy:
matrix:
- python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"]
+ python-version: ["3.7", "3.8", "3.9", "3.10"]
steps:
- uses: actions/checkout@v2
diff --git a/.github/workflows/python-test-docs.yaml b/.github/workflows/python-test-docs.yaml
index 381736c7..141de20b 100644
--- a/.github/workflows/python-test-docs.yaml
+++ b/.github/workflows/python-test-docs.yaml
@@ -15,13 +15,13 @@ on:
jobs:
deploy:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
- python-version: '3.8'
+ python-version: '3.10'
- uses: actions/cache@v2
with:
diff --git a/README.md b/README.md
index 1d0a03ad..df832f9e 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
-
+
@@ -84,7 +84,7 @@ generating CLI arguments, and hierarchical configuration by composition.
## Quick Install
-The basic install and `[s3]` extension require Python 3.6+ while the `[tune]` extension requires Python 3.7+
+The basic install and `[s3]` extension require Python 3.7+ while the `[tune]` extension requires Python 3.8+
| Base | w/ S3 Extension | w/ Hyper-Parameter Tuner |
|------|-----------------|--------------------------|
@@ -102,7 +102,11 @@ See [Releases](https://github.com/fidelity/spock/releases) for more information.
-### Jan 12th, 2023
+#### August 30th, 2023
+* Removed Python 3.6 support as it was causing dependency hell
+* Collection of bugfixes
+
+#### Jan 12th, 2023
* Added support for resolving value definitions from references to other defined variables with the following syntax,`${spock.var:SpockClass.defined_variable}`
* Added support for new fundamental types: (1) file: this is an overload of a str that verifies file existence and (r/w) access (2) directory: this is an overload of a str that verifies directory existence, creation if not existing, and (r/w) access
* Deprecated support for `List` of repeated `@spock` decorated classes.
diff --git a/REQUIREMENTS.txt b/REQUIREMENTS.txt
index 9b67642a..1cc4e214 100644
--- a/REQUIREMENTS.txt
+++ b/REQUIREMENTS.txt
@@ -1,6 +1,8 @@
-attrs~=21.4
+attrs~=23.1
cryptography~=37.0
GitPython~=3.1
pytomlpp~=1.0
-pyYAML~=5.4
-setuptools~=59.6
+# pyYAML~=5.4
+pyYAML~=6.0
+setuptools~=68.1 ; python_version >= '3.8'
+setuptools~=68.0 ; python_version == '3.7'
\ No newline at end of file
diff --git a/requirements/DEV_REQUIREMENTS.txt b/requirements/DEV_REQUIREMENTS.txt
index ff176e24..e586773b 100644
--- a/requirements/DEV_REQUIREMENTS.txt
+++ b/requirements/DEV_REQUIREMENTS.txt
@@ -1,13 +1,14 @@
-black~=22.1 ; python_version >= '3.7'
-black~=21.4b0 ; python_version == '3.6'
-coveralls~=3.3
-coverage[toml]~=6.1
-isort~=5.10
+black~=23.7 ; python_version >= '3.8'
+black~=23.3 ; python_version == '3.7'
+# coveralls~=3.3
+coverage[toml]~=7.3 ; python_version >= '3.8'
+coverage[toml]~=7.2 ; python_version == '3.7'
+isort~=5.12 ; python_version >= '3.8'
+isort~=5.11 ; python_version == '3.7'
moto~=3.1
-pre-commit~=2.20 ; python_version >= '3.7'
-pre-commit~=2.17 ; python_version == '3.6'
-pydoc-markdown~=4.3, < 4.6.* ; python_version >= '3.7'
-pydoc-markdown~=3.13 ; python_version == '3.6'
-pytest~=7.0
-pytest-cov~=3.0
-pylint~=2.11
+pre-commit~=3.3 ; python_version >= '3.8'
+pre-commit~=2.21 ; python_version == '3.7'
+pydoc-markdown~=4.8 ; python_version >= '3.7'
+pytest~=7.4 ; python_version >= '3.7'
+pytest-cov~=4.1 ; python_version >= '3.7'
+pylint~=2.17 ; python_version >= '3.7'
diff --git a/requirements/S3_REQUIREMENTS.txt b/requirements/S3_REQUIREMENTS.txt
index 92aac2cd..f91b9032 100644
--- a/requirements/S3_REQUIREMENTS.txt
+++ b/requirements/S3_REQUIREMENTS.txt
@@ -1,4 +1,4 @@
-boto3~=1.20
-botocore~=1.26
+boto3~=1.28 ; python_version >= '3.7'
+botocore~=1.31 ; python_version >= '3.7'
hurry.filesize~=0.9
-s3transfer~=0.5
+s3transfer~=0.6 ; python_version >= '3.7'
diff --git a/requirements/TUNE_REQUIREMENTS.txt b/requirements/TUNE_REQUIREMENTS.txt
index 954ef1ce..162264dd 100644
--- a/requirements/TUNE_REQUIREMENTS.txt
+++ b/requirements/TUNE_REQUIREMENTS.txt
@@ -1,4 +1,7 @@
mypy_extensions~=0.4; python_version < '3.8'
-optuna~=2.10
-torch>=1.8.1
-ax-platform~=0.2.4; python_version >= '3.7'
+optuna~=3.3
+torch~=2.0 ; python_version >= '3.8'
+torch~=1.13 ; python_version <= '3.7'
+ax-platform~=0.3.4; python_version >= '3.9'
+ax-platform~=0.3.3; python_version == '3.8'
+
diff --git a/setup.py b/setup.py
index 110657cd..338b8df9 100644
--- a/setup.py
+++ b/setup.py
@@ -70,7 +70,7 @@
"": ["py.typed", "*.pyi"],
},
include_package_data=True,
- python_requires=">=3.6",
+ python_requires=">=3.7",
install_requires=install_reqs,
extras_require={"s3": s3_reqs, "tune": tune_reqs},
)
diff --git a/spock/backend/help.py b/spock/backend/help.py
index eff779e8..d7b94510 100644
--- a/spock/backend/help.py
+++ b/spock/backend/help.py
@@ -110,20 +110,22 @@ def handle_attributes_print(info_dict, max_indent: int):
max_indent: max indent for pretty print of help
"""
- # Figure out indents
- max_param_length = max([len(k) for k in info_dict.keys()])
- max_type_length = max([v["len"]["type"] for v in info_dict.values()])
- # Print akin to the argparser
- for k, v in info_dict.items():
- print(
- f" {k}"
- + (" " * (max_param_length - v["len"]["name"] + max_indent))
- + f'{v["type"]}'
- + (" " * (max_type_length - v["len"]["type"] + max_indent))
- + f'{v["desc"]} {v["default"]}'
- )
- # Blank for spacing :-/
- print("")
+ # Add check for an empty dict (corresponds to any empty spock class)
+ if len(info_dict) > 0:
+ # Figure out indents
+ max_param_length = max([len(k) for k in info_dict.keys()])
+ max_type_length = max([v["len"]["type"] for v in info_dict.values()])
+ # Print akin to the argparser
+ for k, v in info_dict.items():
+ print(
+ f" {k}"
+ + (" " * (max_param_length - v["len"]["name"] + max_indent))
+ + f'{v["type"]}'
+ + (" " * (max_type_length - v["len"]["type"] + max_indent))
+ + f'{v["desc"]} {v["default"]}'
+ )
+ # Blank for spacing :-/
+ print("")
def get_type_string(val, nested_others):
diff --git a/spock/backend/typed.py b/spock/backend/typed.py
index db9d4d82..3cbbaeb2 100644
--- a/spock/backend/typed.py
+++ b/spock/backend/typed.py
@@ -73,7 +73,6 @@ def _recursive_generic_validator(typed):
# Iterate through since there might be multiple types?
# Handle Tuple type
if _get_name_py_version(typed) == "Tuple":
-
# Tuples by def have len more than 1. We throw an exception if not since
# a tuple is not necessary in that case. Tuples can also have mixed types,
# thus we need to handle this oddity here -- we do this by passing each
diff --git a/spock/backend/validators.py b/spock/backend/validators.py
index b0428c7c..4f86c3c2 100644
--- a/spock/backend/validators.py
+++ b/spock/backend/validators.py
@@ -390,7 +390,6 @@ def __call__(
validator(inst, attr, member)
def __repr__(self):
-
return (
f""
diff --git a/spock/graph.py b/spock/graph.py
index 8fd93d0c..e1703b64 100644
--- a/spock/graph.py
+++ b/spock/graph.py
@@ -230,7 +230,6 @@ def _build(self) -> Dict:
class SelfGraph(BaseGraph):
-
var_resolver = VarResolver()
def __init__(self, cls: _C, fields: Dict):
diff --git a/spock/utils.py b/spock/utils.py
index 7c0bb86a..60811422 100644
--- a/spock/utils.py
+++ b/spock/utils.py
@@ -602,6 +602,7 @@ def add_repo_info(out_dict: Dict) -> Dict:
head_result = subprocess.run(
"git rev-parse --abbrev-ref --symbolic-full-name HEAD",
stdout=subprocess.PIPE,
+ stdin=subprocess.DEVNULL if sys.platform == "win32" else None,
shell=True,
check=False,
)
@@ -609,6 +610,7 @@ def add_repo_info(out_dict: Dict) -> Dict:
head_result = subprocess.run(
"git rev-parse --abbrev-ref --symbolic-full-name HEAD",
capture_output=True,
+ stdin=subprocess.DEVNULL if sys.platform == "win32" else None,
shell=True,
check=False,
)
@@ -631,6 +633,9 @@ def add_repo_info(out_dict: Dict) -> Dict:
out_dict.update(
{"# Git Origin": repo.active_branch.commit.repo.remotes.origin.url}
)
+ # Attempt to close to not leak resources
+ # https://github.com/gitpython-developers/GitPython#leakage-of-system-resources
+ repo.close()
except git.InvalidGitRepositoryError: # pragma: no cover
# But it's okay if we are not
out_dict = make_blank_git(out_dict)