From 28e0e2705b9d03798a7c8c1e8fc8e92d298525af Mon Sep 17 00:00:00 2001 From: Sam Washko Date: Thu, 23 May 2024 10:16:45 -0700 Subject: [PATCH 01/10] Standardize model format names (#150) --- modelscan/scanners/h5/scan.py | 3 ++- modelscan/scanners/keras/scan.py | 3 ++- modelscan/scanners/pickle/scan.py | 7 ++++--- modelscan/scanners/saved_model/scan.py | 3 ++- modelscan/settings.py | 24 +++++++++++++++++------- 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/modelscan/scanners/h5/scan.py b/modelscan/scanners/h5/scan.py index c398535..af2da51 100644 --- a/modelscan/scanners/h5/scan.py +++ b/modelscan/scanners/h5/scan.py @@ -18,6 +18,7 @@ from modelscan.scanners.scan import ScanResults from modelscan.scanners.saved_model.scan import SavedModelLambdaDetectScan from modelscan.model import Model +from modelscan.settings import DefaultModelFormats logger = logging.getLogger("modelscan") @@ -27,7 +28,7 @@ def scan( self, model: Model, ) -> Optional[ScanResults]: - if "keras_h5" not in model.get_context("formats"): + if DefaultModelFormats.KERAS_H5 not in model.get_context("formats"): return None dep_error = self.handle_binary_dependencies() diff --git a/modelscan/scanners/keras/scan.py b/modelscan/scanners/keras/scan.py index 2a7fb5e..c4a7727 100644 --- a/modelscan/scanners/keras/scan.py +++ b/modelscan/scanners/keras/scan.py @@ -9,6 +9,7 @@ from modelscan.scanners.scan import ScanResults from modelscan.scanners.saved_model.scan import SavedModelLambdaDetectScan from modelscan.model import Model +from modelscan.settings import DefaultModelFormats logger = logging.getLogger("modelscan") @@ -16,7 +17,7 @@ class KerasLambdaDetectScan(SavedModelLambdaDetectScan): def scan(self, model: Model) -> Optional[ScanResults]: - if "keras" not in model.get_context("formats"): + if DefaultModelFormats.KERAS not in model.get_context("formats"): return None dep_error = self.handle_binary_dependencies() diff --git a/modelscan/scanners/pickle/scan.py b/modelscan/scanners/pickle/scan.py index d138202..77c9445 100644 --- a/modelscan/scanners/pickle/scan.py +++ b/modelscan/scanners/pickle/scan.py @@ -9,6 +9,7 @@ scan_pytorch, ) from modelscan.model import Model +from modelscan.settings import DefaultModelFormats logger = logging.getLogger("modelscan") @@ -18,7 +19,7 @@ def scan( self, model: Model, ) -> Optional[ScanResults]: - if "pytorch" not in model.get_context("formats"): + if DefaultModelFormats.PYTORCH not in model.get_context("formats"): return None if _is_zipfile(model.get_source(), model.get_stream()): @@ -45,7 +46,7 @@ def scan( self, model: Model, ) -> Optional[ScanResults]: - if "numpy" not in model.get_context("formats"): + if DefaultModelFormats.NUMPY not in model.get_context("formats"): return None results = scan_numpy( @@ -69,7 +70,7 @@ def scan( self, model: Model, ) -> Optional[ScanResults]: - if "pickle" not in model.get_context("formats"): + if DefaultModelFormats.PICKLE not in model.get_context("formats"): return None results = scan_pickle_bytes( diff --git a/modelscan/scanners/saved_model/scan.py b/modelscan/scanners/saved_model/scan.py index 74e8fb8..d7af13e 100644 --- a/modelscan/scanners/saved_model/scan.py +++ b/modelscan/scanners/saved_model/scan.py @@ -22,6 +22,7 @@ from modelscan.issues import Issue, IssueCode, IssueSeverity, OperatorIssueDetails from modelscan.scanners.scan import ScanBase, ScanResults from modelscan.model import Model +from modelscan.settings import DefaultModelFormats logger = logging.getLogger("modelscan") @@ -31,7 +32,7 @@ def scan( self, model: Model, ) -> Optional[ScanResults]: - if "tf_saved_model" not in model.get_context("formats"): + if DefaultModelFormats.TENSORFLOW not in model.get_context("formats"): return None dep_error = self.handle_binary_dependencies() diff --git a/modelscan/settings.py b/modelscan/settings.py index 5f4e6ed..21500cb 100644 --- a/modelscan/settings.py +++ b/modelscan/settings.py @@ -1,9 +1,20 @@ import tomlkit +from enum import Enum from typing import Any from modelscan._version import __version__ + +class DefaultModelFormats(Enum): + TENSORFLOW = "tensorflow" + KERAS_H5 = "keras_h5" + KERAS = "keras" + NUMPY = "numpy" + PYTORCH = "pytorch" + PICKLE = "pickle" + + DEFAULT_REPORTING_MODULES = { "console": "modelscan.reports.ConsoleReport", "json": "modelscan.reports.JSONReport", @@ -59,13 +70,12 @@ "middlewares": { "modelscan.middlewares.FormatViaExtensionMiddleware": { "formats": { - "tf": [".pb"], - "tf_saved_model": [".pb"], - "keras_h5": [".h5"], - "keras": [".keras"], - "numpy": [".npy"], - "pytorch": [".bin", ".pt", ".pth", ".ckpt"], - "pickle": [ + DefaultModelFormats.TENSORFLOW: [".pb"], + DefaultModelFormats.KERAS_H5: [".h5"], + DefaultModelFormats.KERAS: [".keras"], + DefaultModelFormats.NUMPY: [".npy"], + DefaultModelFormats.PYTORCH: [".bin", ".pt", ".pth", ".ckpt"], + DefaultModelFormats.PICKLE: [ ".pkl", ".pickle", ".joblib", From bc2bf6b17955bf93256c656b181824069afcaade Mon Sep 17 00:00:00 2001 From: Sam Washko Date: Thu, 23 May 2024 15:55:11 -0700 Subject: [PATCH 02/10] Replace enums to be extendable (#151) --- modelscan/error.py | 1 - modelscan/issues.py | 12 ++++++---- modelscan/scanners/h5/scan.py | 6 +++-- modelscan/scanners/keras/scan.py | 6 +++-- modelscan/scanners/pickle/scan.py | 14 +++++++---- modelscan/scanners/saved_model/scan.py | 6 +++-- modelscan/settings.py | 33 +++++++++++++++----------- modelscan/skip.py | 17 ++++++------- 8 files changed, 57 insertions(+), 38 deletions(-) diff --git a/modelscan/error.py b/modelscan/error.py index 7e227c4..d471169 100644 --- a/modelscan/error.py +++ b/modelscan/error.py @@ -1,4 +1,3 @@ -from enum import Enum from modelscan.model import Model import abc from pathlib import Path diff --git a/modelscan/issues.py b/modelscan/issues.py index 130318d..16bfb51 100644 --- a/modelscan/issues.py +++ b/modelscan/issues.py @@ -6,6 +6,8 @@ from collections import defaultdict +from modelscan.settings import Property + logger = logging.getLogger("modelscan") @@ -16,8 +18,8 @@ class IssueSeverity(Enum): CRITICAL = 4 -class IssueCode(Enum): - UNSAFE_OPERATOR = 1 +class IssueCode: + UNSAFE_OPERATOR = Property("UNSAFE_OPERATOR", 1) class IssueDetails(metaclass=abc.ABCMeta): @@ -40,14 +42,14 @@ class Issue: def __init__( self, - code: IssueCode, + code: Property, severity: IssueSeverity, details: IssueDetails, ) -> None: """ Create a issue with given information - :param code: Code of the issue from the issue code enum. + :param code: Code of the issue from the issue code class. :param severity: The severity level of the issue from Severity enum. :param details: An implementation of the IssueDetails object. """ @@ -82,7 +84,7 @@ def __hash__(self) -> int: def print(self) -> None: issue_description = self.code.name - if self.code == IssueCode.UNSAFE_OPERATOR: + if self.code.value == IssueCode.UNSAFE_OPERATOR.value: issue_description = "Unsafe operator" else: logger.error("No issue description for issue code %s", self.code) diff --git a/modelscan/scanners/h5/scan.py b/modelscan/scanners/h5/scan.py index af2da51..bd088f6 100644 --- a/modelscan/scanners/h5/scan.py +++ b/modelscan/scanners/h5/scan.py @@ -18,7 +18,7 @@ from modelscan.scanners.scan import ScanResults from modelscan.scanners.saved_model.scan import SavedModelLambdaDetectScan from modelscan.model import Model -from modelscan.settings import DefaultModelFormats +from modelscan.settings import SupportedModelFormats logger = logging.getLogger("modelscan") @@ -28,7 +28,9 @@ def scan( self, model: Model, ) -> Optional[ScanResults]: - if DefaultModelFormats.KERAS_H5 not in model.get_context("formats"): + if SupportedModelFormats.KERAS_H5.value not in [ + format_property.value for format_property in model.get_context("formats") + ]: return None dep_error = self.handle_binary_dependencies() diff --git a/modelscan/scanners/keras/scan.py b/modelscan/scanners/keras/scan.py index c4a7727..1e88c38 100644 --- a/modelscan/scanners/keras/scan.py +++ b/modelscan/scanners/keras/scan.py @@ -9,7 +9,7 @@ from modelscan.scanners.scan import ScanResults from modelscan.scanners.saved_model.scan import SavedModelLambdaDetectScan from modelscan.model import Model -from modelscan.settings import DefaultModelFormats +from modelscan.settings import SupportedModelFormats logger = logging.getLogger("modelscan") @@ -17,7 +17,9 @@ class KerasLambdaDetectScan(SavedModelLambdaDetectScan): def scan(self, model: Model) -> Optional[ScanResults]: - if DefaultModelFormats.KERAS not in model.get_context("formats"): + if SupportedModelFormats.KERAS.value not in [ + format_property.value for format_property in model.get_context("formats") + ]: return None dep_error = self.handle_binary_dependencies() diff --git a/modelscan/scanners/pickle/scan.py b/modelscan/scanners/pickle/scan.py index 77c9445..3ece571 100644 --- a/modelscan/scanners/pickle/scan.py +++ b/modelscan/scanners/pickle/scan.py @@ -9,7 +9,7 @@ scan_pytorch, ) from modelscan.model import Model -from modelscan.settings import DefaultModelFormats +from modelscan.settings import SupportedModelFormats logger = logging.getLogger("modelscan") @@ -19,7 +19,9 @@ def scan( self, model: Model, ) -> Optional[ScanResults]: - if DefaultModelFormats.PYTORCH not in model.get_context("formats"): + if SupportedModelFormats.PYTORCH.value not in [ + format_property.value for format_property in model.get_context("formats") + ]: return None if _is_zipfile(model.get_source(), model.get_stream()): @@ -46,7 +48,9 @@ def scan( self, model: Model, ) -> Optional[ScanResults]: - if DefaultModelFormats.NUMPY not in model.get_context("formats"): + if SupportedModelFormats.NUMPY.value not in [ + format_property.value for format_property in model.get_context("formats") + ]: return None results = scan_numpy( @@ -70,7 +74,9 @@ def scan( self, model: Model, ) -> Optional[ScanResults]: - if DefaultModelFormats.PICKLE not in model.get_context("formats"): + if SupportedModelFormats.PICKLE.value not in [ + format_property.value for format_property in model.get_context("formats") + ]: return None results = scan_pickle_bytes( diff --git a/modelscan/scanners/saved_model/scan.py b/modelscan/scanners/saved_model/scan.py index d7af13e..4c8f6f6 100644 --- a/modelscan/scanners/saved_model/scan.py +++ b/modelscan/scanners/saved_model/scan.py @@ -22,7 +22,7 @@ from modelscan.issues import Issue, IssueCode, IssueSeverity, OperatorIssueDetails from modelscan.scanners.scan import ScanBase, ScanResults from modelscan.model import Model -from modelscan.settings import DefaultModelFormats +from modelscan.settings import SupportedModelFormats logger = logging.getLogger("modelscan") @@ -32,7 +32,9 @@ def scan( self, model: Model, ) -> Optional[ScanResults]: - if DefaultModelFormats.TENSORFLOW not in model.get_context("formats"): + if SupportedModelFormats.TENSORFLOW.value not in [ + format_property.value for format_property in model.get_context("formats") + ]: return None dep_error = self.handle_binary_dependencies() diff --git a/modelscan/settings.py b/modelscan/settings.py index 21500cb..395dfbe 100644 --- a/modelscan/settings.py +++ b/modelscan/settings.py @@ -1,18 +1,23 @@ import tomlkit -from enum import Enum from typing import Any from modelscan._version import __version__ -class DefaultModelFormats(Enum): - TENSORFLOW = "tensorflow" - KERAS_H5 = "keras_h5" - KERAS = "keras" - NUMPY = "numpy" - PYTORCH = "pytorch" - PICKLE = "pickle" +class Property: + def __init__(self, name: str, value: Any) -> None: + self.name = name + self.value = value + + +class SupportedModelFormats: + TENSORFLOW = Property("TENSORFLOW", "tensorflow") + KERAS_H5 = Property("KERAS_H5", "keras_h5") + KERAS = Property("KERAS", "keras") + NUMPY = Property("NUMPY", "numpy") + PYTORCH = Property("PYTORCH", "pytorch") + PICKLE = Property("PICKLE", "pickle") DEFAULT_REPORTING_MODULES = { @@ -70,12 +75,12 @@ class DefaultModelFormats(Enum): "middlewares": { "modelscan.middlewares.FormatViaExtensionMiddleware": { "formats": { - DefaultModelFormats.TENSORFLOW: [".pb"], - DefaultModelFormats.KERAS_H5: [".h5"], - DefaultModelFormats.KERAS: [".keras"], - DefaultModelFormats.NUMPY: [".npy"], - DefaultModelFormats.PYTORCH: [".bin", ".pt", ".pth", ".ckpt"], - DefaultModelFormats.PICKLE: [ + SupportedModelFormats.TENSORFLOW: [".pb"], + SupportedModelFormats.KERAS_H5: [".h5"], + SupportedModelFormats.KERAS: [".keras"], + SupportedModelFormats.NUMPY: [".npy"], + SupportedModelFormats.PYTORCH: [".bin", ".pt", ".pth", ".ckpt"], + SupportedModelFormats.PICKLE: [ ".pkl", ".pickle", ".joblib", diff --git a/modelscan/skip.py b/modelscan/skip.py index 27272e6..2f83b75 100644 --- a/modelscan/skip.py +++ b/modelscan/skip.py @@ -1,17 +1,18 @@ import logging from enum import Enum +from modelscan.settings import Property logger = logging.getLogger("modelscan") -class SkipCategories(Enum): - SCAN_NOT_SUPPORTED = 1 - BAD_ZIP = 2 - MODEL_CONFIG = 3 - H5_DATA = 4 - NOT_IMPLEMENTED = 5 - MAGIC_NUMBER = 6 +class SkipCategories: + SCAN_NOT_SUPPORTED = Property("SCAN_NOT_SUPPORTED", 1) + BAD_ZIP = Property("BAD_ZIP", 2) + MODEL_CONFIG = Property("MODEL_CONFIG", 3) + H5_DATA = Property("H5_DATA", 4) + NOT_IMPLEMENTED = Property("NOT_IMPLEMENTED", 5) + MAGIC_NUMBER = Property("MAGIC_NUMBER", 6) class Skip: @@ -31,7 +32,7 @@ class ModelScanSkipped: def __init__( self, scan_name: str, - category: SkipCategories, + category: Property, message: str, source: str, ) -> None: From 33222f1d34d0d74ced304cdb4fc26c76c50e526b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 11:31:49 -0700 Subject: [PATCH 03/10] Bump werkzeug from 3.0.1 to 3.0.3 (#147) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1f0595d..3c9b632 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2088,13 +2088,13 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "werkzeug" -version = "3.0.1" +version = "3.0.3" description = "The comprehensive WSGI web application library." -optional = true +optional = false python-versions = ">=3.8" files = [ - {file = "werkzeug-3.0.1-py3-none-any.whl", hash = "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10"}, - {file = "werkzeug-3.0.1.tar.gz", hash = "sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc"}, + {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, + {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, ] [package.dependencies] From 72bb0da1cbd72faedda281245cbb97c56f2d1fab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 11:37:19 -0700 Subject: [PATCH 04/10] Bump idna from 3.6 to 3.7 (#136) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3c9b632..8084779 100644 --- a/poetry.lock +++ b/poetry.lock @@ -781,13 +781,13 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] @@ -2090,7 +2090,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "werkzeug" version = "3.0.3" description = "The comprehensive WSGI web application library." -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, From ca0669dedc5846b248bbdabc9a2fa5ab040a4a40 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 11:42:52 -0700 Subject: [PATCH 05/10] Bump jinja2 from 3.1.3 to 3.1.4 (#148) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8084779..d58de72 100644 --- a/poetry.lock +++ b/poetry.lock @@ -822,13 +822,13 @@ files = [ [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] From e5d84548949a775e3546eb15e52e194d9965320f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 11:57:17 -0700 Subject: [PATCH 06/10] Bump requests from 2.31.0 to 2.32.0 (#149) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index d58de72..82737f9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1618,13 +1618,13 @@ files = [ [[package]] name = "requests" -version = "2.31.0" +version = "2.32.2" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.2-py3-none-any.whl", hash = "sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c"}, + {file = "requests-2.32.2.tar.gz", hash = "sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289"}, ] [package.dependencies] From 681ca4dd2e199f02b156a7b3c5af8649796f7ac3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 19:57:53 -0700 Subject: [PATCH 07/10] Bump requests from 2.31.0 to 2.32.2 (#152) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sean Morgan From 711aea8fe68676b56cba6fd9d2de2f58c85d5f9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 20:15:48 -0700 Subject: [PATCH 08/10] Bump types-requests from 2.31.0.20240106 to 2.31.0.20240406 (#132) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sean Morgan --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 82737f9..ba9a919 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2027,13 +2027,13 @@ tutorials = ["matplotlib", "pandas", "tabulate"] [[package]] name = "types-requests" -version = "2.31.0.20240106" +version = "2.31.0.20240406" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.31.0.20240106.tar.gz", hash = "sha256:0e1c731c17f33618ec58e022b614a1a2ecc25f7dc86800b36ef341380402c612"}, - {file = "types_requests-2.31.0.20240106-py3-none-any.whl", hash = "sha256:da997b3b6a72cc08d09f4dba9802fdbabc89104b35fe24ee588e674037689354"}, + {file = "types-requests-2.31.0.20240406.tar.gz", hash = "sha256:4428df33c5503945c74b3f42e82b181e86ec7b724620419a2966e2de604ce1a1"}, + {file = "types_requests-2.31.0.20240406-py3-none-any.whl", hash = "sha256:6216cdac377c6b9a040ac1c0404f7284bd13199c0e1bb235f4324627e8898cf5"}, ] [package.dependencies] From b9117e160b220e7f6efea166784c11dd13ba7e3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 20:21:21 -0700 Subject: [PATCH 09/10] Bump rich from 13.7.0 to 13.7.1 (#131) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sean Morgan --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index ba9a919..1733d34 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1657,13 +1657,13 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rich" -version = "13.7.0" +version = "13.7.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, - {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, ] [package.dependencies] From 86e538d8f408af44de66696fff0c1c2c68b5a43d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 20:25:49 -0700 Subject: [PATCH 10/10] Bump mypy from 1.8.0 to 1.9.0 (#129) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sean Morgan --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1733d34..8ae0e29 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1092,38 +1092,38 @@ files = [ [[package]] name = "mypy" -version = "1.8.0" +version = "1.9.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, - {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, - {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, - {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, - {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, - {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, - {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, - {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, - {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, - {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, - {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, - {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, - {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, - {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, - {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, - {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, - {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, - {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, - {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, + {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, + {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, + {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, + {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, + {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, + {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, + {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, + {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, + {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, + {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, + {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, + {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, + {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, + {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, + {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, + {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, + {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, ] [package.dependencies]