From c4180fd548844b64e651d196249dbb6973278814 Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 16 Nov 2022 14:49:07 -0500 Subject: [PATCH 001/114] set default as using service_account creds --- api/openapi/api.yaml | 2 +- schematic/__init__.py | 2 +- schematic/manifest/generator.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/openapi/api.yaml b/api/openapi/api.yaml index bbd4845c1..7efd1b296 100644 --- a/api/openapi/api.yaml +++ b/api/openapi/api.yaml @@ -51,7 +51,7 @@ paths: name: oauth schema: type: boolean - default: true + default: false description: OAuth or Service Account required: false - in: query diff --git a/schematic/__init__.py b/schematic/__init__.py index e459baafb..b4354bd45 100644 --- a/schematic/__init__.py +++ b/schematic/__init__.py @@ -30,7 +30,7 @@ @click.option( "-a", "--auth", - default="token", + default="service_account", type=click.Choice(["token", "service_account"], case_sensitive=False), help=query_dict(init_command, ("init", "auth")), ) diff --git a/schematic/manifest/generator.py b/schematic/manifest/generator.py index 3bdf4beb3..6d21a5270 100644 --- a/schematic/manifest/generator.py +++ b/schematic/manifest/generator.py @@ -38,7 +38,7 @@ def __init__( title: str = None, # manifest sheet title root: str = None, additional_metadata: Dict = None, - oauth: bool = True, + oauth: bool = False, # set the default to use service account credentials use_annotations: bool = False, ) -> None: From 1899b295d952030ffeeafd6caefea53335292102 Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 16 Nov 2022 14:54:37 -0500 Subject: [PATCH 002/114] use service_account_creds as environment variable --- schematic/utils/google_api_utils.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/schematic/utils/google_api_utils.py b/schematic/utils/google_api_utils.py index bcfa21d13..549031dc2 100644 --- a/schematic/utils/google_api_utils.py +++ b/schematic/utils/google_api_utils.py @@ -1,7 +1,7 @@ import os import pickle import logging - +import json import pygsheets as ps from typing import Dict, Any @@ -65,9 +65,13 @@ def build_credentials() -> Dict[str, Any]: def build_service_account_creds() -> Dict[str, Any]: - credentials = service_account.Credentials.from_service_account_file( - CONFIG.SERVICE_ACCT_CREDS, scopes=SCOPES - ) + if "SERVICE_ACCOUNT_CREDS" in os.environ: + dict_creds=json.loads(os.environ["SERVICE_ACCOUNT_CREDS"]) + credentials = service_account.Credentials.from_service_account_info(dict_creds, scopes=SCOPES) + else: + credentials = service_account.Credentials.from_service_account_file( + CONFIG.SERVICE_ACCT_CREDS, scopes=SCOPES + ) # get a Google Sheet API service sheet_service = build("sheets", "v4", credentials=credentials) @@ -81,7 +85,7 @@ def build_service_account_creds() -> Dict[str, Any]: } -def download_creds_file(auth: str = "token") -> None: +def download_creds_file(auth: str = "service_account") -> None: if auth is None: raise ValueError( f"'{auth}' is not a valid authentication method. Please " @@ -90,6 +94,8 @@ def download_creds_file(auth: str = "token") -> None: syn = SynapseStorage.login() + # use the service account auth method by default + if auth == "token": if not os.path.exists(CONFIG.CREDS_PATH): # synapse ID of the 'credentials.json' file @@ -107,7 +113,11 @@ def download_creds_file(auth: str = "token") -> None: ) elif auth == "service_account": - if not os.path.exists(CONFIG.SERVICE_ACCT_CREDS): + # if file path of service_account does not exist + # and if an environment variable related to service account is not found + # regenerate service_account credentials + if not os.path.exists(CONFIG.SERVICE_ACCT_CREDS) and "SERVICE_ACCOUNT_CREDS" not in os.environ: + # synapse ID of the 'schematic_service_account_creds.json' file API_CREDS = CONFIG["synapse"]["service_acct_creds"] @@ -123,6 +133,12 @@ def download_creds_file(auth: str = "token") -> None: f"to '{CONFIG.SERVICE_ACCT_CREDS}'" ) + elif "SERVICE_ACCOUNT_CREDS" in os.environ: + # remind users that "SERVICE_ACCOUNT_CREDS" as an environment variable is being used + logger.info( + "Using environment variable SERVICE_ACCOUNT_CREDS as the credential file." + ) + else: logger.warning( f"The mode of authentication you selected '{auth}' is " From e9db93e21385fc6bb8fb58ab768acd9ef4f8b44f Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 16 Nov 2022 17:05:15 -0500 Subject: [PATCH 003/114] remove using mock creds --- tests/test_manifest.py | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/tests/test_manifest.py b/tests/test_manifest.py index 1f0e8f90c..afa078d85 100644 --- a/tests/test_manifest.py +++ b/tests/test_manifest.py @@ -10,15 +10,6 @@ logger = logging.getLogger(__name__) -@pytest.fixture() -def mock_creds(): - mock_creds = { - "sheet_service": "mock_sheet_service", - "drive_service": "mock_drive_service", - "creds": "mock_creds", - } - yield mock_creds - @pytest.fixture( params=[ @@ -68,19 +59,16 @@ def manifest(dataset_id, manifest_generator, request): class TestManifestGenerator: - def test_init(self, monkeypatch, mock_creds, helpers): - - monkeypatch.setattr( - "schematic.manifest.generator.build_credentials", lambda: mock_creds - ) + def test_init(self, helpers): generator = ManifestGenerator( title="mock_title", path_to_json_ld=helpers.get_data_path("example.model.jsonld"), + oauth=False ) assert type(generator.title) is str - assert generator.sheet_service == mock_creds["sheet_service"] + # assert generator.sheet_service == mock_creds["sheet_service"] assert generator.root is None assert type(generator.sg) is SchemaGenerator From d5fbb82f7ffdb7f304514df8f62975af05fcef3d Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 16 Nov 2022 18:10:11 -0500 Subject: [PATCH 004/114] add service account creds as environment variable in workflow --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d83c2bef5..131f751af 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,7 +25,6 @@ concurrency: cancel-in-progress: true jobs: test: - runs-on: ubuntu-latest env: POETRY_VERSION: 1.2.0rc1 @@ -113,7 +112,8 @@ jobs: - name: Run tests env: - SYNAPSE_ACCESS_TOKEN: ${{ secrets.SYNAPSE_ACCESS_TOKEN }} + SYNAPSE_ACCESS_TOKEN: ${{ secrets.SYNAPSE_ACCESS_TOKEN }} + SERVICE_ACCOUNT_CREDS: ${{ secrets.SERVICE_ACCOUNT_CREDS }} if: ${{ false == contains(github.event.head_commit.message, 'runcombos') }} run: > source .venv/bin/activate; From 312a8ad61c0e5f568d00379d96a2e030e6afda4b Mon Sep 17 00:00:00 2001 From: linglp Date: Thu, 17 Nov 2022 11:25:27 -0500 Subject: [PATCH 005/114] update documentation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 38e114182..297fc1673 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ Please make sure that you run the command before running `schematic init` below To obtain ``credentials.json`` and ``token.pickle``, please run: ``` -schematic init --config ~/path/to/config.yml +schematic init --config ~/path/to/config.yml --auth token ``` This should prompt you with a URL that will take you through Google OAuth. Your `credentials.json` and `token.pickle` will get automatically downloaded the first time you run this command. From 7c0c2358fd04f3994b4277e74fa846887fba6d34 Mon Sep 17 00:00:00 2001 From: linglp Date: Thu, 17 Nov 2022 11:33:13 -0500 Subject: [PATCH 006/114] continue update doc --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 297fc1673..dc0beab17 100644 --- a/README.md +++ b/README.md @@ -210,16 +210,19 @@ docker run --rm -p 3001:3001 \ python /usr/src/app/run_api.py ``` -#### Use content of `config.yml` as an environment variable to run API endpoints: -1. save content of `config.yml` as to environment variable `SCHEMATIC_CONFIG_CONTENT` by doing: `export SCHEMATIC_CONFIG_CONTENT=$(cat config.yml)` +#### Use content of `config.yml` and `schematic_service_account_creds.json`as an environment variable to run API endpoints: +1. save content of `config.yml` as to environment variable `SCHEMATIC_CONFIG_CONTENT` by doing: `export SCHEMATIC_CONFIG_CONTENT=$(cat /path/to/config.yml)` -2. Pass `SCHEMATIC_CONFIG_CONTENT` as an environment variable by using `docker run` +2. Similarly, save the content of `schematic_service_account_creds.json` as `SERVICE_ACCOUNT_CREDS` by doing: `export SERVICE_ACCOUNT_CREDS=$(cat /path/to/schematic_service_account_creds.json)` + +2. Pass `SCHEMATIC_CONFIG_CONTENT` and `schematic_service_account_creds` as environment variables by using `docker run` ``` docker run --rm -p 3001:3001 \ -v $(pwd):/schematic -w /schematic --name schematic \ -e GE_HOME=/usr/src/app/great_expectations/ \ -e SCHEMATIC_CONFIG_CONTENT=$SCHEMATIC_CONFIG_CONTENT \ + -e SERVICE_ACCOUNT_CREDS=$SERVICE_ACCOUNT_CREDS \ sagebionetworks/schematic \ python /usr/src/app/run_api.py ``` From 045f934a2655fef6a2299116c78b12178426ab74 Mon Sep 17 00:00:00 2001 From: linglp Date: Thu, 17 Nov 2022 13:36:43 -0500 Subject: [PATCH 007/114] add code to use env variable for synapse access token --- tests/test_api.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_api.py b/tests/test_api.py index 28ed4b2dc..008e3597e 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -44,6 +44,9 @@ def syn_token(config): synapse_config_path = config.SYNAPSE_CONFIG_PATH config_parser = configparser.ConfigParser() config_parser.read(synapse_config_path) + # try using synapse access token + if "SYNAPSE_ACCESS_TOKEN" in os.environ: + token=os.environ["SYNAPSE_ACCESS_TOKEN"] token = config_parser["authentication"]["authtoken"] yield token From c5b2dad585814ecc6189d0cd8c02afc4410d8013 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 22 Nov 2022 09:37:06 -0700 Subject: [PATCH 008/114] add new attribute to mockComponent --- tests/data/example.model.csv | 1 + tests/data/example.model.jsonld | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/tests/data/example.model.csv b/tests/data/example.model.csv index b9bb1e027..cfe08da33 100644 --- a/tests/data/example.model.csv +++ b/tests/data/example.model.csv @@ -36,3 +36,4 @@ Check Recommended,,,,,FALSE,DataProperty,,,recommended Check Ages,,,,,TRUE,DataProperty,,,protectAges Check Unique,,,,,TRUE,DataProperty,,,unique error Check Range,,,,,TRUE,DataProperty,,,inRange 50 100 error +Check Date,,,,,TRUE,DataProperty,,, diff --git a/tests/data/example.model.jsonld b/tests/data/example.model.jsonld index e64e0f1d1..b7396e479 100644 --- a/tests/data/example.model.jsonld +++ b/tests/data/example.model.jsonld @@ -2878,6 +2878,23 @@ "inRange 50 100 error" ] }, + { + "@id": "bts:CheckDate", + "@type": "rdfs:Class", + "rdfs:comment": "TBD", + "rdfs:label": "CheckDate", + "rdfs:subClassOf": [ + { + "@id": "bts:DataProperty" + } + ], + "schema:isPartOf": { + "@id": "http://schema.biothings.io" + }, + "sms:displayName": "Check Date", + "sms:required": "sms:true", + "sms:validationRules": [] + }, { "@id": "bts:Component", "@type": "rdfs:Class", From 6fcb927fe2ffedaf59f0c2891097d175ce84348b Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 22 Nov 2022 09:37:29 -0700 Subject: [PATCH 009/114] add attribute to valid manifest --- tests/data/mock_manifests/Valid_Test_Manifest.csv | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/data/mock_manifests/Valid_Test_Manifest.csv b/tests/data/mock_manifests/Valid_Test_Manifest.csv index c87a8f6d3..ca139874c 100644 --- a/tests/data/mock_manifests/Valid_Test_Manifest.csv +++ b/tests/data/mock_manifests/Valid_Test_Manifest.csv @@ -1,5 +1,5 @@ -Component,Check List,Check Regex List,Check Regex Single,Check Regex Format,Check Num,Check Float,Check Int,Check String,Check URL,Check Match at Least,Check Match at Least values,Check Match Exactly,Check Match Exactly values,Check Recommended,Check Ages,Check Unique,Check Range -MockComponent,"ab,cd","a,c,f",a,a,6,99.65,7,valid,https://www.google.com/,1738,1738,8085,8085,,6571,str1,75 -MockComponent,"ab,cd","a,c,f",e,b,71,58.4,3,valid,https://www.google.com/,9965,9965,9965,9965,,6571,str2,80 -MockComponent,"ab,cd","b,d,f",b,c,6.5,62.3,2,valid,https://www.google.com/,8085,8085,1738,1738,present,32849,str3,95 -MockComponent,"ab,cd","b,d,f",b,c,6.5,62.3,2,valid,https://www.google.com/,79,79,7,7,,32849,str4,55 +Component,Check List,Check Regex List,Check Regex Single,Check Regex Format,Check Num,Check Float,Check Int,Check String,Check URL,Check Match at Least,Check Match at Least values,Check Match Exactly,Check Match Exactly values,Check Recommended,Check Ages,Check Unique,Check Range,Check Date +MockComponent,"ab,cd","a,c,f",a,a,6,99.65,7,valid,https://www.google.com/,1738,1738,8085,8085,,6571,str1,75,2022-10-21 +MockComponent,"ab,cd","a,c,f",e,b,71,58.4,3,valid,https://www.google.com/,9965,9965,9965,9965,,6571,str2,80,2022-10-22 +MockComponent,"ab,cd","b,d,f",b,c,6.5,62.3,2,valid,https://www.google.com/,8085,8085,1738,1738,present,32849,str3,95,2022-10-23 +MockComponent,"ab,cd","b,d,f",b,c,6.5,62.3,2,valid,https://www.google.com/,79,79,7,7,,32849,str4,55,2022-10-24 From f49f0184c0f0162166a0da23a420caa385cc3b42 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 22 Nov 2022 09:50:36 -0700 Subject: [PATCH 010/114] add date parsing to df import --- schematic/utils/df_utils.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/schematic/utils/df_utils.py b/schematic/utils/df_utils.py index 3dbfdf896..8ea161a03 100644 --- a/schematic/utils/df_utils.py +++ b/schematic/utils/df_utils.py @@ -3,6 +3,7 @@ import pandas as pd import numpy as np from copy import deepcopy +import datetime as dt logger = logging.getLogger(__name__) @@ -36,6 +37,7 @@ def load_df(file_path, preserve_raw_input=True, data_model=False, **load_args): null_cells = org_df.isnull() org_df = org_df.astype(str).mask(null_cells, '') ints = org_df.applymap(lambda x: np.int64(x) if str.isdigit(x) else False, na_action='ignore').fillna(False) + dates = org_df.applymap(lambda x: _parse_dates(x), na_action='ignore').fillna(False) #convert strings to numerical dtype (float) if possible, preserve non-numerical strings for col in org_df.columns: @@ -45,11 +47,22 @@ def load_df(file_path, preserve_raw_input=True, data_model=False, **load_args): #Trim nans and empty rows and columns processed_df = trim_commas_df(float_df) - #Store values that were entered as ints + #Store values that were entered as ints and dates processed_df=processed_df.mask(ints != False, other = ints) + processed_df=processed_df.mask(dates != False, other = dates) return processed_df + +def _parse_dates(date_string): + + try: + return dt.date.fromisoformat(date_string) + except ValueError: + return False + + + def normalize_table(df: pd.DataFrame, primary_key: str) -> pd.DataFrame: """ From b9333170234cde51319ef073e6c8c9c10152b42e Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 22 Nov 2022 10:18:37 -0700 Subject: [PATCH 011/114] add date validation rule --- schematic/utils/validate_rules_utils.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/schematic/utils/validate_rules_utils.py b/schematic/utils/validate_rules_utils.py index 3edcc358b..196d20607 100644 --- a/schematic/utils/validate_rules_utils.py +++ b/schematic/utils/validate_rules_utils.py @@ -42,6 +42,12 @@ def validation_rule_info(): 'type': "type_validation", 'complementary_rules': None, 'default_message_level': 'error'}, + + "date": { + 'arguments':(1, 0), + 'type': "type_validation", + 'complementary_rules': None, + 'default_message_level': 'error'}, "regex": { 'arguments':(3, 2), From 162adde352b7a9ddad5e581e1b5367ca1d0d0a52 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 22 Nov 2022 10:18:46 -0700 Subject: [PATCH 012/114] add new rule to model --- tests/data/example.model.csv | 2 +- tests/data/example.model.jsonld | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/data/example.model.csv b/tests/data/example.model.csv index cfe08da33..3a6aaacda 100644 --- a/tests/data/example.model.csv +++ b/tests/data/example.model.csv @@ -36,4 +36,4 @@ Check Recommended,,,,,FALSE,DataProperty,,,recommended Check Ages,,,,,TRUE,DataProperty,,,protectAges Check Unique,,,,,TRUE,DataProperty,,,unique error Check Range,,,,,TRUE,DataProperty,,,inRange 50 100 error -Check Date,,,,,TRUE,DataProperty,,, +Check Date,,,,,TRUE,DataProperty,,,date diff --git a/tests/data/example.model.jsonld b/tests/data/example.model.jsonld index b7396e479..b12ed1f6a 100644 --- a/tests/data/example.model.jsonld +++ b/tests/data/example.model.jsonld @@ -2893,7 +2893,9 @@ }, "sms:displayName": "Check Date", "sms:required": "sms:true", - "sms:validationRules": [] + "sms:validationRules": [ + "date" + ] }, { "@id": "bts:Component", From a8733707411e6665d596ef20c18f900288301a2f Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 22 Nov 2022 10:19:05 -0700 Subject: [PATCH 013/114] add rule to GE validator --- schematic/models/GE_Helpers.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/schematic/models/GE_Helpers.py b/schematic/models/GE_Helpers.py index 9c0c1cfa0..f6e16f59c 100644 --- a/schematic/models/GE_Helpers.py +++ b/schematic/models/GE_Helpers.py @@ -14,6 +14,7 @@ from urllib import error from attr import attr +from datetime import date from ruamel import yaml import great_expectations as ge @@ -126,6 +127,7 @@ def build_expectation_suite(self,): "int": "expect_column_values_to_be_in_type_list", "float": "expect_column_values_to_be_in_type_list", "str": "expect_column_values_to_be_of_type", + "date": "expect_column_values_to_be_of_type", "num": "expect_column_values_to_be_in_type_list", "recommended": "expect_column_values_to_not_match_regex_list", "protectAges": "expect_column_values_to_be_between", @@ -218,7 +220,17 @@ def build_expectation_suite(self,): }, "validation_rule": rule } - + #Validate date + elif base_rule=='date': + args["mostly"]=1.0 + args["type_"]=date + meta={ + "notes": { + "format": "markdown", + "content": "Expect column values to be of date or datetime type. **Markdown** `Supported`", + }, + "validation_rule": rule + } elif base_rule==("recommended"): args["mostly"]=0.0000000001 args["regex_list"]=['^$'] From 6c9d0d0b878f62181daf393b86eda7447205585f Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 22 Nov 2022 10:49:00 -0700 Subject: [PATCH 014/114] switch to use datetime --- schematic/models/GE_Helpers.py | 2 +- schematic/utils/df_utils.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/schematic/models/GE_Helpers.py b/schematic/models/GE_Helpers.py index f6e16f59c..f7d10c587 100644 --- a/schematic/models/GE_Helpers.py +++ b/schematic/models/GE_Helpers.py @@ -223,7 +223,7 @@ def build_expectation_suite(self,): #Validate date elif base_rule=='date': args["mostly"]=1.0 - args["type_"]=date + args["type_"]='datetime' meta={ "notes": { "format": "markdown", diff --git a/schematic/utils/df_utils.py b/schematic/utils/df_utils.py index 8ea161a03..5d6df5c4a 100644 --- a/schematic/utils/df_utils.py +++ b/schematic/utils/df_utils.py @@ -57,7 +57,7 @@ def load_df(file_path, preserve_raw_input=True, data_model=False, **load_args): def _parse_dates(date_string): try: - return dt.date.fromisoformat(date_string) + return dt.datetime.fromisoformat(date_string) except ValueError: return False From e687e65239cce02767054530ccbc4add6c6a3504 Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 28 Nov 2022 12:08:37 -0500 Subject: [PATCH 015/114] change to step 3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dc0beab17..71a2e531f 100644 --- a/README.md +++ b/README.md @@ -215,7 +215,7 @@ docker run --rm -p 3001:3001 \ 2. Similarly, save the content of `schematic_service_account_creds.json` as `SERVICE_ACCOUNT_CREDS` by doing: `export SERVICE_ACCOUNT_CREDS=$(cat /path/to/schematic_service_account_creds.json)` -2. Pass `SCHEMATIC_CONFIG_CONTENT` and `schematic_service_account_creds` as environment variables by using `docker run` +3. Pass `SCHEMATIC_CONFIG_CONTENT` and `schematic_service_account_creds` as environment variables by using `docker run` ``` docker run --rm -p 3001:3001 \ From 0f9a9fcfb88754c183c448ba12b923e3825b1bd5 Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 28 Nov 2022 13:14:47 -0500 Subject: [PATCH 016/114] remove base image --- Dockerfile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7b0221065..833b74f92 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ -FROM python:3.10.6 +# FROM python:3.10.6 +FROM python:3.10.8-slim-bullseye ENV PYTHONFAULTHANDLER=1 \ PYTHONUNBUFFERED=1 \ @@ -12,8 +13,11 @@ WORKDIR /usr/src/app RUN apt-get update -qqy \ && apt-get install -qqy \ - libopenblas-dev \ - gfortran + libopenblas-dev \ + gfortran + +# remove libtiff5 for security reasons +RUN apt remove -y libtiff5 RUN pip install --no-cache-dir "poetry==$POETRY_VERSION" From c99c995b901190c7c2ef188e7dc5d74ba2f1796a Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 30 Nov 2022 11:19:52 -0500 Subject: [PATCH 017/114] deprecate multi-select app script ui --- schematic/manifest/generator.py | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/schematic/manifest/generator.py b/schematic/manifest/generator.py index 6d21a5270..9e05c490e 100644 --- a/schematic/manifest/generator.py +++ b/schematic/manifest/generator.py @@ -278,7 +278,6 @@ def _get_column_data_validation_values( + str(len(values) + 1) ) valid_values = [{"userEnteredValue": "=" + target_range}] - response = ( self.sheet_service.spreadsheets() .values() @@ -838,9 +837,8 @@ def _request_note_valid_values(self, i, req, validation_rules, valid_values): to add to the column header, about using multiselect. This notes body will be added to a request. """ - if rule_in_rule_list("list", validation_rules) and valid_values: - note = "From 'Selection options' menu above, go to 'Select multiple values', check all items that apply, and click 'Save selected values'" + note = "Please enter applicable comma-separated items selected from the set of allowable terms for this attribute. See our data standards for allowable terms" notes_body = { "requests": [ { @@ -934,10 +932,11 @@ def _request_cell_borders(self): } return self._get_cell_borders(cell_range) - def _request_dropdown_or_multi( + def _request_dropdown( self, i, req_vals, spreadsheet_id, validation_rules, valid_values ): - """Generating sheet api request to populate a dropdown or a multi selection UI + """Generating sheet api request to populate a dropdown + Note: multi-select was deprecated Args: i (int): column index req_vals (list[dict]): dict for each valid value @@ -960,20 +959,6 @@ def _request_dropdown_or_multi( validation_body = self._get_column_data_validation_values( spreadsheet_id, req_vals, i, strict=None, validation_type="ONE_OF_RANGE" ) - elif rule_in_rule_list("list", validation_rules) and valid_values: - # if list is in validation rule attempt to create a multi-value - # selection UI, which requires explicit valid values range in - # the spreadsheet - # set "strict" parameter to false to allow users enter multiple values on google sheet - validation_body = self._get_column_data_validation_values( - spreadsheet_id, - req_vals, - i, - strict=False, - custom_ui=False, - input_message="", - validation_type="ONE_OF_RANGE", - ) else: validation_body = self._get_column_data_validation_values( spreadsheet_id, req_vals, i, strict=None @@ -1151,7 +1136,8 @@ def _create_requests_body( continue # Create dropdown or multi-select options, where called for - create_dropdown = self._request_dropdown_or_multi( + if not rule_in_rule_list("list", validation_rules): + create_dropdown = self._request_dropdown( i, req_vals, spreadsheet_id, validation_rules, valid_values ) if create_dropdown: From 134f0c84af2c28eb13d3d57d3b00ceaca873f93d Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 30 Nov 2022 12:33:08 -0500 Subject: [PATCH 018/114] deprecate --auth flag and update documentation --- README.md | 24 ++-------- api/openapi/api.yaml | 7 --- api/routes.py | 4 +- config.yml | 2 - schematic/__init__.py | 20 ++------ schematic/configuration.py | 11 ----- schematic/help.py | 7 +-- schematic/manifest/generator.py | 12 +---- schematic/utils/google_api_utils.py | 72 ++++++++--------------------- schematic_cli_examples.ipynb | 7 +-- 10 files changed, 33 insertions(+), 133 deletions(-) diff --git a/README.md b/README.md index 2b19351a3..f23a87d21 100644 --- a/README.md +++ b/README.md @@ -94,8 +94,6 @@ Description of `config.yml` attributes definitions: synapse_config: "~/path/to/.synapseConfig" - creds_path: "~/path/to/credentials.json" - token_pickle: "~/path/to/token.pickle" service_acct_creds: "~/path/to/service_account_creds.json" synapse: @@ -139,28 +137,12 @@ synapse login -u -p --rememberMe Please make sure that you run the command before running `schematic init` below 7. Obtain Google credential Files - -To obtain ``credentials.json`` and ``token.pickle``, please run: - -``` -schematic init --config ~/path/to/config.yml --auth token -``` -This should prompt you with a URL that will take you through Google OAuth. Your `credentials.json` and `token.pickle` will get automatically downloaded the first time you run this command. - -*Note* : The ``credentials.json`` file is required when you are using -[OAuth2](https://developers.google.com/identity/protocols/oauth2) -to authenticate with the Google APIs. - -For details about the steps involved in the [OAuth2 authorization -flow](https://github.com/Sage-Bionetworks/schematic/blob/develop/schematic/utils/google_api_utils.py#L18) -refer to the ``Credentials`` section in the -[docs/md/details](https://github.com/Sage-Bionetworks/schematic/blob/develop/docs/md/details.md#credentials) -document. - To obtain ``schematic_service_account_creds.json``, please run: ``` -schematic init --config ~/path/to/config.yml --auth service_account +schematic init --config ~/path/to/config.yml ``` +> As v22.12.1 version of schematic, using `token` mode of authentication (in other words, using `token.pickle` and `credentials.json`) is no longer supported due to Google's decision to move away from using OAuth out-of-band (OOB) flow. Click [here](https://developers.google.com/identity/protocols/oauth2/resources/oob-migration) to learn more. + *Notes*: Use the ``schematic_service_account_creds.json`` file for the service account mode of authentication (*for Google services/APIs*). Service accounts are special Google accounts that can be used by applications to access Google APIs diff --git a/api/openapi/api.yaml b/api/openapi/api.yaml index 03ee530a9..981527048 100644 --- a/api/openapi/api.yaml +++ b/api/openapi/api.yaml @@ -47,13 +47,6 @@ paths: - Patient - Biospecimen required: true - - in: query - name: oauth - schema: - type: boolean - default: false - description: OAuth or Service Account - required: false - in: query name: use_annotations schema: diff --git a/api/routes.py b/api/routes.py index af6fdcbea..309a6aaf3 100644 --- a/api/routes.py +++ b/api/routes.py @@ -197,12 +197,11 @@ def get_temp_jsonld(schema_url): return tmp_file.name # @before_request -def get_manifest_route(schema_url: str, oauth: bool, use_annotations: bool, dataset_ids=None, asset_view = None, output_format=None, title=None): +def get_manifest_route(schema_url: str, use_annotations: bool, dataset_ids=None, asset_view = None, output_format=None, title=None): """Get the immediate dependencies that are related to a given source node. Args: schema_url: link to data model in json ld format title: title of a given manifest. - oauth: if user wants to use OAuth for Google authentication dataset_id: Synapse ID of the "dataset" entity on Synapse (for a given center/project). output_format: contains three option: "excel", "google_sheet", and "dataframe". if set to "excel", return an excel spreadsheet use_annotations: Whether to use existing annotations during manifest generation @@ -258,7 +257,6 @@ def create_single_manifest(data_type, title, dataset_id=None, output_format=None path_to_json_ld=jsonld, title=title, root=data_type, - oauth=oauth, use_annotations=use_annotations, alphabetize_valid_values = 'ascending', ) diff --git a/config.yml b/config.yml index 957ea5d07..ba6b5da6b 100644 --- a/config.yml +++ b/config.yml @@ -1,8 +1,6 @@ # Do not change the 'definitions' section unless you know what you're doing definitions: synapse_config: ".synapseConfig" - creds_path: "credentials.json" - token_pickle: "token.pickle" service_acct_creds: "schematic_service_account_creds.json" synapse: diff --git a/schematic/__init__.py b/schematic/__init__.py index b4354bd45..ef5eaba35 100644 --- a/schematic/__init__.py +++ b/schematic/__init__.py @@ -6,7 +6,7 @@ from schematic.configuration import CONFIG from schematic.loader import LOADER -from schematic.utils.google_api_utils import download_creds_file, generate_token +from schematic.utils.google_api_utils import download_creds_file from schematic.utils.cli_utils import query_dict from schematic.help import init_command @@ -27,18 +27,11 @@ @click.command("init", short_help=query_dict(init_command, ("init", "short_help"))) @click_log.simple_verbosity_option(logger) -@click.option( - "-a", - "--auth", - default="service_account", - type=click.Choice(["token", "service_account"], case_sensitive=False), - help=query_dict(init_command, ("init", "auth")), -) @click.option( "-c", "--config", required=True, help=query_dict(init_command, ("init", "config")) ) -def init(auth, config): - """Initialize mode of authentication for schematic.""" +def init(config): + """Initialize authentication for schematic.""" try: logger.debug(f"Loading config file contents in '{config}'") obj = CONFIG.load_config(config) @@ -48,9 +41,4 @@ def init(auth, config): sys.exit(1) # download crdentials file based on selected mode of authentication - download_creds_file(auth) - - # if authentication method is token-based - # then create 'token.pickle' file from 'credentials.json' file - if auth == "token": - generate_token() + download_creds_file() diff --git a/schematic/configuration.py b/schematic/configuration.py index df1d200c2..85c7bd2a8 100644 --- a/schematic/configuration.py +++ b/schematic/configuration.py @@ -113,17 +113,6 @@ def load_config(self, config_path=None, asset_view=None): # Return self.DATA as a side-effect return self.DATA - @property - def CREDS_PATH(self): - self._CREDS_PATH = self.DATA["definitions"]["creds_path"] - self._CREDS_PATH = self.normalize_path(self._CREDS_PATH) - return self._CREDS_PATH - - @property - def TOKEN_PICKLE(self): - self._TOKEN_PICKLE = self.DATA["definitions"]["token_pickle"] - self._TOKEN_PICKLE = self.normalize_path(self._TOKEN_PICKLE) - return self._TOKEN_PICKLE @property def SERVICE_ACCT_CREDS(self): diff --git a/schematic/help.py b/schematic/help.py index de402b183..ab2df0cf8 100644 --- a/schematic/help.py +++ b/schematic/help.py @@ -167,12 +167,7 @@ # `schematic init` command description init_command = { "init": { - "short_help": ("Initialize mode of authentication for schematic."), - "auth": ( - "Specify the mode of authentication you want to use for Google accounts. " - "You can use one of either 'token' or 'service_account'. The default mode of authentication " - "is 'token' which uses OAuth." - ), + "short_help": ("Initialize authentication for schematic."), "config": ( "Specify the path to the `config.yml` using this option. This is a required argument." ), diff --git a/schematic/manifest/generator.py b/schematic/manifest/generator.py index 9e05c490e..9f738d79b 100644 --- a/schematic/manifest/generator.py +++ b/schematic/manifest/generator.py @@ -10,7 +10,6 @@ from schematic.schemas.generator import SchemaGenerator from schematic.utils.google_api_utils import ( - build_credentials, execute_google_api_requests, build_service_account_creds, ) @@ -38,17 +37,10 @@ def __init__( title: str = None, # manifest sheet title root: str = None, additional_metadata: Dict = None, - oauth: bool = False, # set the default to use service account credentials use_annotations: bool = False, ) -> None: - - if oauth: - # if user wants to use OAuth for Google authentication - # use credentials.json and create token.pickle file - services_creds = build_credentials() - else: - # if not oauth then use service account credentials - services_creds = build_service_account_creds() + # use service account creds + services_creds = build_service_account_creds() # google service for Sheet API self.sheet_service = services_creds["sheet_service"] diff --git a/schematic/utils/google_api_utils.py b/schematic/utils/google_api_utils.py index 549031dc2..8e7fa682b 100644 --- a/schematic/utils/google_api_utils.py +++ b/schematic/utils/google_api_utils.py @@ -85,65 +85,33 @@ def build_service_account_creds() -> Dict[str, Any]: } -def download_creds_file(auth: str = "service_account") -> None: - if auth is None: - raise ValueError( - f"'{auth}' is not a valid authentication method. Please " - "enter one of 'token' or 'service_account'." - ) - +def download_creds_file() -> None: syn = SynapseStorage.login() - # use the service account auth method by default - - if auth == "token": - if not os.path.exists(CONFIG.CREDS_PATH): - # synapse ID of the 'credentials.json' file - API_CREDS = CONFIG["synapse"]["token_creds"] - - # Download in parent directory of CREDS_PATH to - # ensure same file system for os.rename() - creds_dir = os.path.dirname(CONFIG.CREDS_PATH) - - creds_file = syn.get(API_CREDS, downloadLocation=creds_dir) - os.rename(creds_file.path, CONFIG.CREDS_PATH) + # if file path of service_account does not exist + # and if an environment variable related to service account is not found + # regenerate service_account credentials + if not os.path.exists(CONFIG.SERVICE_ACCT_CREDS) and "SERVICE_ACCOUNT_CREDS" not in os.environ: - logger.info( - "The credentials file has been downloaded " f"to '{CONFIG.CREDS_PATH}'" - ) + # synapse ID of the 'schematic_service_account_creds.json' file + API_CREDS = CONFIG["synapse"]["service_acct_creds"] - elif auth == "service_account": - # if file path of service_account does not exist - # and if an environment variable related to service account is not found - # regenerate service_account credentials - if not os.path.exists(CONFIG.SERVICE_ACCT_CREDS) and "SERVICE_ACCOUNT_CREDS" not in os.environ: + # Download in parent directory of SERVICE_ACCT_CREDS to + # ensure same file system for os.rename() + creds_dir = os.path.dirname(CONFIG.SERVICE_ACCT_CREDS) - # synapse ID of the 'schematic_service_account_creds.json' file - API_CREDS = CONFIG["synapse"]["service_acct_creds"] + creds_file = syn.get(API_CREDS, downloadLocation=creds_dir) + os.rename(creds_file.path, CONFIG.SERVICE_ACCT_CREDS) - # Download in parent directory of SERVICE_ACCT_CREDS to - # ensure same file system for os.rename() - creds_dir = os.path.dirname(CONFIG.SERVICE_ACCT_CREDS) - - creds_file = syn.get(API_CREDS, downloadLocation=creds_dir) - os.rename(creds_file.path, CONFIG.SERVICE_ACCT_CREDS) - - logger.info( - "The credentials file has been downloaded " - f"to '{CONFIG.SERVICE_ACCT_CREDS}'" - ) - - elif "SERVICE_ACCOUNT_CREDS" in os.environ: - # remind users that "SERVICE_ACCOUNT_CREDS" as an environment variable is being used - logger.info( - "Using environment variable SERVICE_ACCOUNT_CREDS as the credential file." - ) + logger.info( + "The credentials file has been downloaded " + f"to '{CONFIG.SERVICE_ACCT_CREDS}'" + ) - else: - logger.warning( - f"The mode of authentication you selected '{auth}' is " - "not supported. Please use one of either 'token' or " - "'service_account'." + elif "SERVICE_ACCOUNT_CREDS" in os.environ: + # remind users that "SERVICE_ACCOUNT_CREDS" as an environment variable is being used + logger.info( + "Using environment variable SERVICE_ACCOUNT_CREDS as the credential file." ) diff --git a/schematic_cli_examples.ipynb b/schematic_cli_examples.ipynb index 9328fe881..57324594a 100644 --- a/schematic_cli_examples.ipynb +++ b/schematic_cli_examples.ipynb @@ -29,11 +29,8 @@ "metadata": {}, "source": [ "### Initalize schematic \n", - "For token which uses OAuth: \n", - "* `schematic init --config ~/path/to/config.yml --auth token`\n", - "\n", - "For service account: \n", - "* `schematic init --config ~/path/to/config.yml --auth service_account`" + "To get service account credentials: \n", + "* `schematic init --config ~/path/to/config.yml`" ] }, { From 522df6d3a749f01d81a467087c7326b40cdd643c Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 30 Nov 2022 12:41:11 -0500 Subject: [PATCH 019/114] update test --- tests/test_manifest.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_manifest.py b/tests/test_manifest.py index afa078d85..96cb556ac 100644 --- a/tests/test_manifest.py +++ b/tests/test_manifest.py @@ -64,7 +64,6 @@ def test_init(self, helpers): generator = ManifestGenerator( title="mock_title", path_to_json_ld=helpers.get_data_path("example.model.jsonld"), - oauth=False ) assert type(generator.title) is str From 7f29f642319edbb669c4d6966d0d3f017bb501ad Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 30 Nov 2022 11:00:18 -0700 Subject: [PATCH 020/114] Update Valid_Test_Manifest.csv --- tests/data/mock_manifests/Valid_Test_Manifest.csv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/data/mock_manifests/Valid_Test_Manifest.csv b/tests/data/mock_manifests/Valid_Test_Manifest.csv index ca139874c..97b736efd 100644 --- a/tests/data/mock_manifests/Valid_Test_Manifest.csv +++ b/tests/data/mock_manifests/Valid_Test_Manifest.csv @@ -1,5 +1,5 @@ Component,Check List,Check Regex List,Check Regex Single,Check Regex Format,Check Num,Check Float,Check Int,Check String,Check URL,Check Match at Least,Check Match at Least values,Check Match Exactly,Check Match Exactly values,Check Recommended,Check Ages,Check Unique,Check Range,Check Date MockComponent,"ab,cd","a,c,f",a,a,6,99.65,7,valid,https://www.google.com/,1738,1738,8085,8085,,6571,str1,75,2022-10-21 -MockComponent,"ab,cd","a,c,f",e,b,71,58.4,3,valid,https://www.google.com/,9965,9965,9965,9965,,6571,str2,80,2022-10-22 -MockComponent,"ab,cd","b,d,f",b,c,6.5,62.3,2,valid,https://www.google.com/,8085,8085,1738,1738,present,32849,str3,95,2022-10-23 -MockComponent,"ab,cd","b,d,f",b,c,6.5,62.3,2,valid,https://www.google.com/,79,79,7,7,,32849,str4,55,2022-10-24 +MockComponent,"ab,cd","a,c,f",e,b,71,58.4,3,valid,https://www.google.com/,9965,9965,9965,9965,,6571,str2,80,October 21 2022 +MockComponent,"ab,cd","b,d,f",b,c,6.5,62.3,2,valid,https://www.google.com/,8085,8085,1738,1738,present,32849,str3,95,10/21/2022 +MockComponent,"ab,cd","b,d,f",b,c,6.5,62.3,2,valid,https://www.google.com/,79,79,7,7,,32849,str4,55,21/10/2022 From 7325e7d9abf9c51ed515fbf73566e18c38fbaf65 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 30 Nov 2022 11:05:06 -0700 Subject: [PATCH 021/114] implement dateparser --- schematic/utils/df_utils.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/schematic/utils/df_utils.py b/schematic/utils/df_utils.py index 5d6df5c4a..9db13b3f9 100644 --- a/schematic/utils/df_utils.py +++ b/schematic/utils/df_utils.py @@ -3,6 +3,7 @@ import pandas as pd import numpy as np from copy import deepcopy +import dateparser as dp import datetime as dt logger = logging.getLogger(__name__) @@ -49,16 +50,19 @@ def load_df(file_path, preserve_raw_input=True, data_model=False, **load_args): #Store values that were entered as ints and dates processed_df=processed_df.mask(ints != False, other = ints) - processed_df=processed_df.mask(dates != False, other = dates) + #dates = processed_df.applymap(lambda x: _parse_dates(x), na_action='ignore').fillna(False) + + processed_df=processed_df.mask(dates != False, other = dates) + return processed_df def _parse_dates(date_string): - - try: - return dt.datetime.fromisoformat(date_string) - except ValueError: + try: + date = dp.parse(date_string = date_string, settings = {'STRICT_PARSING': True}) + return date if date else False + except TypeError: return False From dac3a359e0c35b0a1a465b259cb361e2653c2bab Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 30 Nov 2022 13:18:01 -0500 Subject: [PATCH 022/114] remove --oauth flag in command line --- schematic/help.py | 4 ---- schematic/manifest/commands.py | 9 +-------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/schematic/help.py b/schematic/help.py index ab2df0cf8..ecd901120 100644 --- a/schematic/help.py +++ b/schematic/help.py @@ -41,10 +41,6 @@ "This is a boolean flag. If flag is provided when command line utility is executed, it will prepopulate template " "with existing annotations from Synapse." ), - "oauth": ( - "This is a boolean flag. If flag is provided when command line utility is executed, OAuth will be used to " - "authenticate your Google credentials. If not service account mode of authentication will be used." - ), "json_schema": ( "Specify the path to the JSON Validation Schema for this argument. " "You can either explicitly pass the `.json` file here or provide it in the `config.yml` file " diff --git a/schematic/manifest/commands.py b/schematic/manifest/commands.py index f6654a3bb..d0b265c49 100644 --- a/schematic/manifest/commands.py +++ b/schematic/manifest/commands.py @@ -89,12 +89,6 @@ def manifest(ctx, config): # use as `schematic manifest ...` is_flag=True, help=query_dict(manifest_commands, ("manifest", "get", "use_annotations")), ) -@click.option( - "-oa", - "--oauth", - is_flag=True, - help=query_dict(manifest_commands, ("manifest", "get", "oauth")), -) @click.option( "-js", "--json_schema", @@ -116,7 +110,6 @@ def get_manifest( sheet_url, output_csv, use_annotations, - oauth, json_schema, output_xlsx, alphabetize_valid_values, @@ -141,7 +134,6 @@ def create_single_manifest(data_type, output_csv=None, output_xlsx=None): path_to_json_ld=jsonld, title=t, root=data_type, - oauth=oauth, use_annotations=use_annotations, alphabetize_valid_values=alphabetize_valid_values, ) @@ -165,6 +157,7 @@ def create_single_manifest(data_type, output_csv=None, output_xlsx=None): output_format = None output_path = None + print('dataset_id', dataset_id) result = manifest_generator.get_manifest( dataset_id=dataset_id, sheet_url=sheet_url, json_schema=json_schema, output_format = output_format, output_path = output_path ) From 251f8ef7fb80a099d478bcd213e8371f75b1d66e Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 30 Nov 2022 13:18:15 -0500 Subject: [PATCH 023/114] update documentation --- schematic_cli_examples.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schematic_cli_examples.ipynb b/schematic_cli_examples.ipynb index 57324594a..78de2c135 100644 --- a/schematic_cli_examples.ipynb +++ b/schematic_cli_examples.ipynb @@ -74,7 +74,7 @@ "- `schematic manifest --config ~/path/to/config.yml get --sheet_url`\n", "\n", "Get an existing manifest (syn28397250) and download it as a csv file (without customizing title)\n", - "- `schematic manifest --config ~/path/to/config.yml get --dataset_id syn28268700`\n", + "- `schematic manifest --config ~/path/to/config.yml get --dataset_id syn28268700 --data_type BulkRNA-seqAssay`\n", "\n", "*Note*: the dataset_id here has to be the parent folder syn id\n", "\n", From 45095c1c67847c92b519cf46b3f38d83312251d6 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 30 Nov 2022 11:20:34 -0700 Subject: [PATCH 024/114] update .lock and .toml --- poetry.lock | 1358 ++++++++++++++++++++++++++++-------------------- pyproject.toml | 1 + 2 files changed, 791 insertions(+), 568 deletions(-) diff --git a/poetry.lock b/poetry.lock index 569fae7ed..4c3b9f23b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -25,6 +25,24 @@ toolz = "*" [package.extras] dev = ["black", "docutils", "flake8", "ipython", "m2r", "mistune (<2.0.0)", "pytest", "recommonmark", "sphinx", "vega-datasets"] +[[package]] +name = "anyio" +version = "3.6.2" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] +trio = ["trio (>=0.16,<0.22)"] + [[package]] name = "appdirs" version = "1.4.4" @@ -102,14 +120,14 @@ optional = false python-versions = ">=3.5" [package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope-interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope-interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope-interface"] -tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] +dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] +docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] +tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] +tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] [[package]] name = "babel" -version = "2.10.3" +version = "2.11.0" description = "Internationalization utilities" category = "main" optional = false @@ -185,7 +203,7 @@ python-versions = "~=3.7" [[package]] name = "certifi" -version = "2022.6.15" +version = "2022.9.24" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -211,7 +229,7 @@ optional = false python-versions = ">=3.6.0" [package.extras] -unicode_backport = ["unicodedata2"] +unicode-backport = ["unicodedata2"] [[package]] name = "click" @@ -246,11 +264,11 @@ PyYAML = ">=3.11" [[package]] name = "colorama" -version = "0.4.5" +version = "0.4.6" description = "Cross-platform colored terminal text." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" [[package]] name = "connexion" @@ -282,7 +300,7 @@ tests = ["MarkupSafe (>=0.23)", "aiohttp (>=2.3.10,<4)", "aiohttp-jinja2 (>=0.14 [[package]] name = "coverage" -version = "6.4.4" +version = "6.5.0" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -293,7 +311,7 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "37.0.4" +version = "38.0.4" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false @@ -306,13 +324,32 @@ cffi = ">=1.12" docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools_rust (>=0.11.4)"] +sdist = ["setuptools-rust (>=0.11.4)"] ssh = ["bcrypt (>=3.1.5)"] test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] +[[package]] +name = "dateparser" +version = "1.1.4" +description = "Date parsing library designed to parse dates from HTML pages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +python-dateutil = "*" +pytz = "*" +regex = "<2019.02.19 || >2019.02.19,<2021.8.27 || >2021.8.27" +tzlocal = "*" + +[package.extras] +calendars = ["convertdate", "hijri-converter"] +fasttext = ["fasttext"] +langdetect = ["langdetect"] + [[package]] name = "debugpy" -version = "1.6.3" +version = "1.6.4" description = "An implementation of the Debug Adapter Protocol for Python" category = "main" optional = false @@ -346,7 +383,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest (<5)", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "pytest", "pytest-cov", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] +dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] [[package]] name = "docutils" @@ -374,7 +411,7 @@ python-versions = ">=3.6" [[package]] name = "fastjsonschema" -version = "2.16.1" +version = "2.16.2" description = "Fastest Python implementation of JSON schema" category = "main" optional = false @@ -430,20 +467,22 @@ Six = "*" [[package]] name = "google-api-core" -version = "2.8.2" +version = "2.10.2" description = "Google API client core library" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] google-auth = ">=1.25.0,<3.0dev" googleapis-common-protos = ">=1.56.2,<2.0dev" -protobuf = ">=3.15.0,<5.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" requests = ">=2.18.0,<3.0.0dev" [package.extras] grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] [[package]] name = "google-api-python-client" @@ -463,7 +502,7 @@ uritemplate = ">=3.0.0,<4dev" [[package]] name = "google-auth" -version = "2.11.0" +version = "2.14.1" description = "Google Authentication Library" category = "main" optional = false @@ -477,8 +516,8 @@ six = ">=1.9.0" [package.extras] aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] -enterprise_cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] -pyopenssl = ["pyopenssl (>=20.0.0)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] [[package]] @@ -511,17 +550,17 @@ tool = ["click (>=6.0.0)"] [[package]] name = "googleapis-common-protos" -version = "1.56.4" +version = "1.57.0" description = "Common protobufs used in Google APIs" category = "main" optional = false python-versions = ">=3.7" [package.dependencies] -protobuf = ">=3.15.0,<5.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" [package.extras] -grpc = ["grpcio (>=1.0.0,<2.0.0dev)"] +grpc = ["grpcio (>=1.44.0,<2.0.0dev)"] [[package]] name = "graphviz" @@ -538,7 +577,7 @@ test = ["mock (>=3)", "pytest (>=4)", "pytest-cov", "pytest-mock (>=2)"] [[package]] name = "great-expectations" -version = "0.15.20" +version = "0.15.34" description = "Always know what to expect from your data." category = "main" optional = false @@ -554,21 +593,22 @@ Ipython = ">=7.16.3" ipywidgets = ">=7.5.1" jinja2 = ">=2.10" jsonpatch = ">=1.22" -jsonschema = ">=2.5.1" +jsonschema = ">=2.5.1,<=4.7.2" makefun = ">=1.7.0,<2" +marshmallow = ">=3.7.1,<4.0.0" mistune = ">=0.8.4" nbformat = ">=5.0" notebook = ">=6.4.10" numpy = ">=1.18.5" packaging = "*" pandas = ">=1.1.0" -pyparsing = ">=2.4,<3" +pydantic = ">=1.0,<2.0" +pyparsing = ">=2.4" python-dateutil = ">=2.8.1" pytz = ">=2021.3" requests = ">=2.20" "ruamel.yaml" = ">=0.16,<0.17.18" scipy = ">=0.19.0" -termcolor = ">=1.1.0" tqdm = ">=4.59.0" typing-extensions = ">=3.10.0.0" tzlocal = ">=1.2" @@ -577,11 +617,12 @@ urllib3 = ">=1.25.4,<1.27" [package.extras] arrow = ["feather-format (>=0.4.1)", "pyarrow"] athena = ["pyathena (>=1.11)", "sqlalchemy (>=1.3.18,<2.0.0)"] -aws_secrets = ["boto3 (==1.17.106)"] +aws-secrets = ["boto3 (==1.17.106)"] azure = ["azure-identity (>=1.10.0)", "azure-keyvault-secrets (>=4.0.0)", "azure-storage-blob (>=12.5.0)"] -azure_secrets = ["azure-identity (>=1.10.0)", "azure-keyvault-secrets (>=4.0.0)", "azure-storage-blob (>=12.5.0)"] +azure-secrets = ["azure-identity (>=1.10.0)", "azure-keyvault-secrets (>=4.0.0)", "azure-storage-blob (>=12.5.0)"] bigquery = ["gcsfs (>=0.5.1)", "google-cloud-secret-manager (>=1.0.0)", "google-cloud-storage (>=1.28.0)", "sqlalchemy (>=1.3.18,<2.0.0)", "sqlalchemy-bigquery (>=1.3.0)"] -dremio = ["pyarrow", "pyodbc (>=4.0.30)", "sqlalchemy (>=1.3.18,<2.0.0)", "sqlalchemy-dremio (>=1.2.1)"] +dev = ["PyHive (>=0.6.5)", "PyMySQL (>=0.9.3,<0.10)", "azure-identity (>=1.10.0)", "azure-keyvault-secrets (>=4.0.0)", "azure-storage-blob (>=12.5.0)", "black (==22.3.0)", "boto3 (==1.17.106)", "feather-format (>=0.4.1)", "flake8 (==5.0.4)", "flask (>=1.0.0)", "freezegun (>=0.3.15)", "gcsfs (>=0.5.1)", "google-cloud-secret-manager (>=1.0.0)", "google-cloud-storage (>=1.28.0)", "invoke (>=1.7.1)", "isort (==5.10.1)", "mock-alchemy (>=0.2.5)", "moto (>=2.0.0,<3.0.0)", "mypy (==0.991)", "nbconvert (>=5)", "openpyxl (>=3.0.7)", "pre-commit (>=2.6.0)", "psycopg2-binary (>=2.7.6)", "pyarrow", "pyathena (>=1.11)", "pydantic (>=1.0,<2.0)", "pyfakefs (>=4.5.1)", "pyodbc (>=4.0.30)", "pypd (==1.1.0)", "pyspark (>=2.3.2)", "pytest (>=5.3.5)", "pytest-benchmark (>=3.4.1)", "pytest-cov (>=2.8.1)", "pytest-icdiff (>=0.6)", "pytest-mock (>=3.8.2)", "pytest-order (>=0.9.5)", "pytest-random-order (>=1.0.4)", "pytest-timeout (>=2.1.0)", "pyupgrade (==2.7.2)", "requirements-parser (>=0.2.0)", "s3fs (>=0.5.1)", "snapshottest (==0.6.0)", "snowflake-connector-python (>=2.5.0)", "snowflake-sqlalchemy (>=1.2.3)", "sqlalchemy (>=1.3.18,<2.0.0)", "sqlalchemy-bigquery (>=1.3.0)", "sqlalchemy-dremio (==1.2.1)", "sqlalchemy-redshift (>=0.8.8)", "sqlalchemy-vertica-python (>=0.5.10)", "teradatasqlalchemy (==17.0.0.1)", "thrift (>=0.16.0)", "thrift-sasl (>=0.4.3)", "trino (>=0.310.0,!=0.316.0)", "xlrd (>=1.1.0,<2.0.0)"] +dremio = ["pyarrow", "pyodbc (>=4.0.30)", "sqlalchemy (>=1.3.18,<2.0.0)", "sqlalchemy-dremio (==1.2.1)"] excel = ["openpyxl (>=3.0.7)", "xlrd (>=1.1.0,<2.0.0)"] gcp = ["gcsfs (>=0.5.1)", "google-cloud-secret-manager (>=1.0.0)", "google-cloud-storage (>=1.28.0)", "sqlalchemy (>=1.3.18,<2.0.0)", "sqlalchemy-bigquery (>=1.3.0)"] hive = ["PyHive (>=0.6.5)", "thrift (>=0.16.0)", "thrift-sasl (>=0.4.3)"] @@ -589,18 +630,19 @@ mssql = ["pyodbc (>=4.0.30)", "sqlalchemy (>=1.3.18,<2.0.0)"] mysql = ["PyMySQL (>=0.9.3,<0.10)", "sqlalchemy (>=1.3.18,<2.0.0)"] pagerduty = ["pypd (==1.1.0)"] postgresql = ["psycopg2-binary (>=2.7.6)", "sqlalchemy (>=1.3.18,<2.0.0)"] -redshift = ["psycopg2-binary (>=2.7.6)", "sqlalchemy (>=1.3.18,<2.0.0)", "sqlalchemy-redshift (>=0.7.7)"] +redshift = ["psycopg2-binary (>=2.7.6)", "sqlalchemy (>=1.3.18,<2.0.0)", "sqlalchemy-redshift (>=0.8.8)"] s3 = ["boto3 (==1.17.106)"] snowflake = ["snowflake-connector-python (>=2.5.0)", "snowflake-sqlalchemy (>=1.2.3)", "sqlalchemy (>=1.3.18,<2.0.0)"] spark = ["pyspark (>=2.3.2)"] sqlalchemy = ["sqlalchemy (>=1.3.18,<2.0.0)"] teradata = ["sqlalchemy (>=1.3.18,<2.0.0)", "teradatasqlalchemy (==17.0.0.1)"] -test = ["black (==22.3.0)", "boto3 (==1.17.106)", "flake8 (==5.0.4)", "flask (>=1.0.0)", "freezegun (>=0.3.15)", "invoke (>=1.7.1)", "isort (==5.10.1)", "mock-alchemy (>=0.2.5)", "moto (>=1.3.7,<2.0.0)", "mypy (>=0.971)", "nbconvert (>=5)", "pre-commit (>=2.6.0)", "pyfakefs (>=4.5.1)", "pytest (>=5.3.5)", "pytest-benchmark (>=3.4.1)", "pytest-cov (>=2.8.1)", "pytest-icdiff (>=0.6)", "pytest-mock (>=3.8.2)", "pytest-order (>=0.9.5)", "pyupgrade (==2.7.2)", "requirements-parser (>=0.2.0)", "s3fs (>=0.5.1)", "snapshottest (==0.6.0)", "sqlalchemy (>=1.3.18,<2.0.0)"] -trino = ["sqlalchemy (>=1.3.18,<2.0.0)", "trino (>=0.310.0)"] +test = ["black (==22.3.0)", "boto3 (==1.17.106)", "flake8 (==5.0.4)", "flask (>=1.0.0)", "freezegun (>=0.3.15)", "invoke (>=1.7.1)", "isort (==5.10.1)", "mock-alchemy (>=0.2.5)", "moto (>=2.0.0,<3.0.0)", "mypy (==0.991)", "nbconvert (>=5)", "pre-commit (>=2.6.0)", "pydantic (>=1.0,<2.0)", "pyfakefs (>=4.5.1)", "pytest (>=5.3.5)", "pytest-benchmark (>=3.4.1)", "pytest-cov (>=2.8.1)", "pytest-icdiff (>=0.6)", "pytest-mock (>=3.8.2)", "pytest-order (>=0.9.5)", "pytest-random-order (>=1.0.4)", "pytest-timeout (>=2.1.0)", "pyupgrade (==2.7.2)", "requirements-parser (>=0.2.0)", "s3fs (>=0.5.1)", "snapshottest (==0.6.0)", "sqlalchemy (>=1.3.18,<2.0.0)"] +trino = ["sqlalchemy (>=1.3.18,<2.0.0)", "trino (>=0.310.0,!=0.316.0)"] +vertica = ["sqlalchemy (>=1.3.18,<2.0.0)", "sqlalchemy-vertica-python (>=0.5.10)"] [[package]] name = "httplib2" -version = "0.20.4" +version = "0.21.0" description = "A comprehensive HTTP client library." category = "main" optional = false @@ -611,7 +653,7 @@ pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0 [[package]] name = "idna" -version = "3.3" +version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false @@ -627,7 +669,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.12.0" +version = "5.1.0" description = "Read metadata from Python packages" category = "main" optional = false @@ -638,9 +680,9 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] perf = ["ipython"] -testing = ["flufl-flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] [[package]] name = "inflection" @@ -660,7 +702,7 @@ python-versions = "*" [[package]] name = "ipykernel" -version = "6.15.2" +version = "6.16.2" description = "IPython Kernel for Jupyter" category = "main" optional = false @@ -680,7 +722,8 @@ tornado = ">=6.1" traitlets = ">=5.1.0" [package.extras] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=6.0)", "pytest-cov", "pytest-timeout"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" @@ -725,7 +768,7 @@ python-versions = "*" [[package]] name = "ipywidgets" -version = "8.0.1" +version = "8.0.2" description = "Jupyter interactive widgets" category = "main" optional = false @@ -762,7 +805,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "jedi" -version = "0.18.1" +version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." category = "main" optional = false @@ -772,8 +815,9 @@ python-versions = ">=3.6" parso = ">=0.8.0,<0.9.0" [package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jeepney" @@ -785,7 +829,7 @@ python-versions = ">=3.7" [package.extras] test = ["async-timeout", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] -trio = ["async-generator", "trio"] +trio = ["async_generator", "trio"] [[package]] name = "jinja2" @@ -837,11 +881,11 @@ six = ">=1.11.0" [package.extras] format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] -format_nongpl = ["idna", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "webcolors"] +format-nongpl = ["idna", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "webcolors"] [[package]] name = "jupyter-client" -version = "7.3.5" +version = "7.4.7" description = "Jupyter protocol implementation and client libraries" category = "main" optional = false @@ -858,11 +902,11 @@ traitlets = "*" [package.extras] doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] +test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-core" -version = "4.11.1" +version = "4.12.0" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "main" optional = false @@ -875,9 +919,38 @@ traitlets = "*" [package.extras] test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] +[[package]] +name = "jupyter-server" +version = "1.15.6" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = "*" +jinja2 = "*" +jupyter-client = ">=6.1.1" +jupyter-core = ">=4.6.0" +nbconvert = "*" +nbformat = ">=5.2.0" +packaging = "*" +prometheus-client = "*" +pywinpty = {version = "*", markers = "os_name == \"nt\""} +pyzmq = ">=17" +Send2Trash = "*" +terminado = ">=0.8.3" +tornado = ">=6.1.0" +traitlets = ">=5" +websocket-client = "*" + +[package.extras] +test = ["coverage", "ipykernel", "pytest (>=6.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] + [[package]] name = "jupyterlab-widgets" -version = "3.0.2" +version = "3.0.3" description = "Jupyter interactive widgets for JupyterLab" category = "main" optional = false @@ -914,11 +987,11 @@ six = "*" [package.extras] docs = ["jaraco.packaging (>=3.2)", "rst.linker (>=1.9)", "sphinx"] -testing = ["backports-unittest-mock", "collective-checkdocs", "fs (>=0.5,<2)", "gdata", "keyring[test] (>=10.3.1)", "pycrypto", "pytest (>=3.5)", "pytest-flake8", "pytest-sugar (>=0.9.1)", "python-keyczar"] +testing = ["backports.unittest-mock", "collective.checkdocs", "fs (>=0.5,<2)", "gdata", "keyring[test] (>=10.3.1)", "pycrypto", "pytest (>=3.5)", "pytest-flake8", "pytest-sugar (>=0.9.1)", "python-keyczar"] [[package]] name = "makefun" -version = "1.14.0" +version = "1.15.0" description = "Small library to dynamically create python functions." category = "main" optional = false @@ -932,6 +1005,23 @@ category = "main" optional = false python-versions = ">=3.6" +[[package]] +name = "marshmallow" +version = "3.19.0" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["flake8 (==5.0.4)", "flake8-bugbear (==22.10.25)", "mypy (==0.990)", "pre-commit (>=2.4,<3.0)", "pytest", "pytz", "simplejson", "tox"] +docs = ["alabaster (==0.7.12)", "autodocsumm (==0.2.9)", "sphinx (==5.3.0)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] +lint = ["flake8 (==5.0.4)", "flake8-bugbear (==22.10.25)", "mypy (==0.990)", "pre-commit (>=2.4,<3.0)"] +tests = ["pytest", "pytz", "simplejson"] + [[package]] name = "matplotlib-inline" version = "0.1.6" @@ -967,6 +1057,38 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "nbclassic" +version = "0.4.8" +description = "A web-based notebook environment for interactive computing" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=6.1.1" +jupyter-core = ">=4.6.1" +jupyter-server = ">=1.8" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +notebook-shim = ">=0.1.0" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +json-logging = ["json-logging"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] + [[package]] name = "nbconvert" version = "5.5.0" @@ -997,7 +1119,7 @@ test = ["ipykernel", "ipywidgets (>=7)", "jupyter-client (>=4.2)", "pytest", "py [[package]] name = "nbformat" -version = "5.4.0" +version = "5.7.0" description = "The Jupyter Notebook format" category = "main" optional = false @@ -1005,16 +1127,17 @@ python-versions = ">=3.7" [package.dependencies] fastjsonschema = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.8\""} jsonschema = ">=2.6" jupyter-core = "*" traitlets = ">=5.1" [package.extras] -test = ["check-manifest", "pre-commit", "pytest", "testpath"] +test = ["check-manifest", "pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.5" +version = "1.5.6" description = "Patch asyncio to allow nested event loops" category = "main" optional = false @@ -1037,7 +1160,7 @@ test = ["codecov (>=2.1)", "pytest (>=6.2)", "pytest-cov (>=2.12)"] [[package]] name = "notebook" -version = "6.4.12" +version = "6.5.2" description = "A web-based notebook environment for interactive computing" category = "main" optional = false @@ -1050,6 +1173,7 @@ ipython-genutils = "*" jinja2 = "*" jupyter-client = ">=5.3.4" jupyter-core = ">=4.6.1" +nbclassic = ">=0.4.7" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" @@ -1063,7 +1187,21 @@ traitlets = ">=4.2.1" [package.extras] docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium", "testpath"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] + +[[package]] +name = "notebook-shim" +version = "0.2.2" +description = "A shim layer for notebook traits and config" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-tornasync"] [[package]] name = "numpy" @@ -1090,7 +1228,7 @@ six = ">=1.6.1" [[package]] name = "oauthlib" -version = "3.2.0" +version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" category = "main" optional = false @@ -1166,15 +1304,15 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.9.0" +version = "0.10.2" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.7" [[package]] name = "pdoc" -version = "12.2.0" +version = "12.3.0" description = "API Documentation for Python Projects" category = "main" optional = false @@ -1187,7 +1325,7 @@ MarkupSafe = "*" pygments = ">=2.12.0" [package.extras] -dev = ["flake8", "hypothesis", "mypy", "pytest", "pytest-cov", "pytest-timeout", "tox"] +dev = ["autoflake", "black", "flake8", "hypothesis", "mypy", "pytest", "pytest-cov", "pytest-timeout", "pyupgrade", "reorder-python-imports", "tox", "yesqa"] [[package]] name = "pexpect" @@ -1225,7 +1363,7 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prometheus-client" -version = "0.14.1" +version = "0.15.0" description = "Python client for the Prometheus monitoring system." category = "main" optional = false @@ -1236,7 +1374,7 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.30" +version = "3.0.33" description = "Library for building powerful interactive command lines in Python" category = "main" optional = false @@ -1247,7 +1385,7 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "4.21.5" +version = "4.21.9" description = "" category = "main" optional = false @@ -1255,7 +1393,7 @@ python-versions = ">=3.7" [[package]] name = "psutil" -version = "5.9.1" +version = "5.9.4" description = "Cross-platform lib for process and system monitoring in Python." category = "main" optional = false @@ -1315,6 +1453,21 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "pydantic" +version = "1.10.2" +description = "Data validation and settings management using python type hints" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = ">=4.1.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + [[package]] name = "pyflakes" version = "2.3.1" @@ -1351,15 +1504,18 @@ pandas = ["pandas (>=0.14.0)"] [[package]] name = "pyparsing" -version = "2.4.7" -description = "Python parsing module" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.6.8" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyrsistent" -version = "0.18.1" +version = "0.19.2" description = "Persistent/Functional/Immutable data structures" category = "main" optional = false @@ -1405,7 +1561,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale [[package]] name = "pytest-mock" -version = "3.8.2" +version = "3.10.0" description = "Thin-wrapper around the mock package for easier use with pytest" category = "dev" optional = false @@ -1441,7 +1597,7 @@ cli = ["click (>=5.0)"] [[package]] name = "pytz" -version = "2022.2.1" +version = "2022.6" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -1461,7 +1617,7 @@ tzdata = {version = "*", markers = "python_version >= \"3.6\""} [[package]] name = "pywin32" -version = "304" +version = "305" description = "Python for Window Extensions" category = "main" optional = false @@ -1477,7 +1633,7 @@ python-versions = "*" [[package]] name = "pywinpty" -version = "2.0.7" +version = "2.0.9" description = "Pseudo terminal support for Windows from Python." category = "main" optional = false @@ -1493,7 +1649,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [[package]] name = "pyzmq" -version = "23.2.1" +version = "24.0.1" description = "Python bindings for 0MQ" category = "main" optional = false @@ -1524,9 +1680,9 @@ tests = ["doctest-ignore-unicode", "html5lib", "networkx", "nose"] [[package]] name = "regex" -version = "2022.8.17" +version = "2022.10.31" description = "Alternative regular expression module, to replace re." -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -1546,7 +1702,7 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requests-oauthlib" @@ -1591,7 +1747,7 @@ jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] [[package]] name = "ruamel-yaml-clib" -version = "0.2.6" +version = "0.2.7" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" category = "main" optional = false @@ -1629,8 +1785,8 @@ optional = false python-versions = "*" [package.extras] -nativelib = ["pyobjc-framework-cocoa", "pywin32"] -objc = ["pyobjc-framework-cocoa"] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] win32 = ["pywin32"] [[package]] @@ -1645,7 +1801,7 @@ python-versions = ">=3.6" certs = ["certifi (==2016.9.26)"] docs = ["jaraco.packaging (>=8.2)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx"] ssl = ["wincertstore (==0.2)"] -testing = ["flake8-2020", "jaraco-envs", "mock", "paver", "pip (>=19.1)", "pytest (>=3.5,!=3.7.3)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=1.2.3)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy", "pytest-virtualenv (>=1.2.7)", "pytest-xdist", "virtualenv (>=13.0.0)", "wheel"] +testing = ["flake8-2020", "jaraco.envs", "mock", "paver", "pip (>=19.1)", "pytest (>=3.5,!=3.7.3)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=1.2.3)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy", "pytest-virtualenv (>=1.2.7)", "pytest-xdist", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -1655,6 +1811,14 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +category = "main" +optional = false +python-versions = ">=3.7" + [[package]] name = "snowballstemmer" version = "2.2.0" @@ -1792,7 +1956,7 @@ Jinja2 = ">=2.0" [[package]] name = "synapseclient" -version = "2.6.0" +version = "2.7.0" description = "A client for Synapse, a collaborative compute space that allows scientists to share and analyze data together." category = "main" optional = false @@ -1813,7 +1977,7 @@ tests = ["flake8 (>=3.7.0,<4.0)", "pytest (>=5.0.0,<7.0)", "pytest-mock (>=3.0,< [[package]] name = "tenacity" -version = "8.0.1" +version = "8.1.0" description = "Retry code until it succeeds" category = "main" optional = false @@ -1822,17 +1986,9 @@ python-versions = ">=3.6" [package.extras] doc = ["reno", "sphinx", "tornado (>=4.5)"] -[[package]] -name = "termcolor" -version = "1.1.0" -description = "ANSII Color formatting for output in terminal." -category = "main" -optional = false -python-versions = "*" - [[package]] name = "terminado" -version = "0.15.0" +version = "0.17.0" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." category = "main" optional = false @@ -1844,7 +2000,8 @@ pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} tornado = ">=6.1.0" [package.extras] -test = ["pre-commit", "pytest (>=6.0)", "pytest-timeout"] +docs = ["pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] [[package]] name = "testpath" @@ -1883,7 +2040,7 @@ python-versions = ">= 3.7" [[package]] name = "tqdm" -version = "4.64.0" +version = "4.64.1" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -1900,13 +2057,14 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.3.0" -description = "" +version = "5.6.0" +description = "Traitlets Python configuration system" category = "main" optional = false python-versions = ">=3.7" [package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pre-commit", "pytest"] [[package]] @@ -1919,7 +2077,7 @@ python-versions = ">=3.6" [[package]] name = "typing-extensions" -version = "4.3.0" +version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false @@ -1927,7 +2085,7 @@ python-versions = ">=3.7" [[package]] name = "tzdata" -version = "2022.2" +version = "2022.6" description = "Provider of IANA time zone data" category = "main" optional = false @@ -1947,7 +2105,7 @@ pytz-deprecation-shim = "*" tzdata = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -devenv = ["black", "pyroma", "pytest-cov", "zest-releaser"] +devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"] test = ["pytest (>=4.3)", "pytest-mock (>=3.3)"] [[package]] @@ -1960,11 +2118,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "urllib3" -version = "1.26.12" +version = "1.26.13" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] @@ -1987,6 +2145,19 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "websocket-client" +version = "1.4.2" +description = "WebSocket client for Python with low level API options" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + [[package]] name = "werkzeug" version = "1.0.1" @@ -2001,18 +2172,18 @@ watchdog = ["watchdog"] [[package]] name = "wheel" -version = "0.37.1" +version = "0.38.4" description = "A built-package format for Python" category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.7" [package.extras] -test = ["pytest (>=3.0.0)", "pytest-cov"] +test = ["pytest (>=3.0.0)"] [[package]] name = "widgetsnbextension" -version = "4.0.2" +version = "4.0.3" description = "Jupyter interactive widgets for Jupyter Notebook" category = "main" optional = false @@ -2028,20 +2199,20 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "zipp" -version = "3.8.1" +version = "3.11.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] -testing = ["func-timeout", "jaraco-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "1.1" python-versions = ">=3.7.1,<3.11" -content-hash = "4546028400d18ed2c6b6de3057a5537db284b8d2e9263b320f1f823280a900b1" +content-hash = "3292d40bff445ff16b9c13585b4b3dbd47d6328807367ac8efdeccdb96da349c" [metadata.files] alabaster = [ @@ -2052,6 +2223,10 @@ altair = [ {file = "altair-4.2.0-py3-none-any.whl", hash = "sha256:0c724848ae53410c13fa28be2b3b9a9dcb7b5caa1a70f7f217bd663bb419935a"}, {file = "altair-4.2.0.tar.gz", hash = "sha256:d87d9372e63b48cd96b2a6415f0cf9457f50162ab79dc7a31cd7e024dd840026"}, ] +anyio = [ + {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, + {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, +] appdirs = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, @@ -2099,8 +2274,8 @@ attrs = [ {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, ] babel = [ - {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, - {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, + {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, + {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, ] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, @@ -2136,8 +2311,8 @@ cachetools = [ {file = "cachetools-5.2.0.tar.gz", hash = "sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757"}, ] certifi = [ - {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, + {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, + {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, ] cffi = [ {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, @@ -2222,108 +2397,116 @@ clickclick = [ {file = "clickclick-20.10.2.tar.gz", hash = "sha256:4efb13e62353e34c5eef7ed6582c4920b418d7dedc86d819e22ee089ba01802c"}, ] colorama = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] connexion = [ {file = "connexion-2.14.1-py2.py3-none-any.whl", hash = "sha256:f343717241b4c4802a694c38fee66fb1693c897fe4ea5a957fa9b3b07caf6394"}, {file = "connexion-2.14.1.tar.gz", hash = "sha256:99aa5781e70a7b94f8ffae8cf89f309d49cdb811bbd65a8e2f2546f3b19a01e6"}, ] coverage = [ - {file = "coverage-6.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7b4da9bafad21ea45a714d3ea6f3e1679099e420c8741c74905b92ee9bfa7cc"}, - {file = "coverage-6.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fde17bc42e0716c94bf19d92e4c9f5a00c5feb401f5bc01101fdf2a8b7cacf60"}, - {file = "coverage-6.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdbb0d89923c80dbd435b9cf8bba0ff55585a3cdb28cbec65f376c041472c60d"}, - {file = "coverage-6.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67f9346aeebea54e845d29b487eb38ec95f2ecf3558a3cffb26ee3f0dcc3e760"}, - {file = "coverage-6.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42c499c14efd858b98c4e03595bf914089b98400d30789511577aa44607a1b74"}, - {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c35cca192ba700979d20ac43024a82b9b32a60da2f983bec6c0f5b84aead635c"}, - {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9cc4f107009bca5a81caef2fca843dbec4215c05e917a59dec0c8db5cff1d2aa"}, - {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f444627b3664b80d078c05fe6a850dd711beeb90d26731f11d492dcbadb6973"}, - {file = "coverage-6.4.4-cp310-cp310-win32.whl", hash = "sha256:66e6df3ac4659a435677d8cd40e8eb1ac7219345d27c41145991ee9bf4b806a0"}, - {file = "coverage-6.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:35ef1f8d8a7a275aa7410d2f2c60fa6443f4a64fae9be671ec0696a68525b875"}, - {file = "coverage-6.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c1328d0c2f194ffda30a45f11058c02410e679456276bfa0bbe0b0ee87225fac"}, - {file = "coverage-6.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61b993f3998ee384935ee423c3d40894e93277f12482f6e777642a0141f55782"}, - {file = "coverage-6.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5dd4b8e9cd0deb60e6fcc7b0647cbc1da6c33b9e786f9c79721fd303994832f"}, - {file = "coverage-6.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7026f5afe0d1a933685d8f2169d7c2d2e624f6255fb584ca99ccca8c0e966fd7"}, - {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9c7b9b498eb0c0d48b4c2abc0e10c2d78912203f972e0e63e3c9dc21f15abdaa"}, - {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ee2b2fb6eb4ace35805f434e0f6409444e1466a47f620d1d5763a22600f0f892"}, - {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ab066f5ab67059d1f1000b5e1aa8bbd75b6ed1fc0014559aea41a9eb66fc2ce0"}, - {file = "coverage-6.4.4-cp311-cp311-win32.whl", hash = "sha256:9d6e1f3185cbfd3d91ac77ea065d85d5215d3dfa45b191d14ddfcd952fa53796"}, - {file = "coverage-6.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e3d3c4cc38b2882f9a15bafd30aec079582b819bec1b8afdbde8f7797008108a"}, - {file = "coverage-6.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a095aa0a996ea08b10580908e88fbaf81ecf798e923bbe64fb98d1807db3d68a"}, - {file = "coverage-6.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef6f44409ab02e202b31a05dd6666797f9de2aa2b4b3534e9d450e42dea5e817"}, - {file = "coverage-6.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b7101938584d67e6f45f0015b60e24a95bf8dea19836b1709a80342e01b472f"}, - {file = "coverage-6.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a32ec68d721c3d714d9b105c7acf8e0f8a4f4734c811eda75ff3718570b5e3"}, - {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6a864733b22d3081749450466ac80698fe39c91cb6849b2ef8752fd7482011f3"}, - {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:08002f9251f51afdcc5e3adf5d5d66bb490ae893d9e21359b085f0e03390a820"}, - {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a3b2752de32c455f2521a51bd3ffb53c5b3ae92736afde67ce83477f5c1dd928"}, - {file = "coverage-6.4.4-cp37-cp37m-win32.whl", hash = "sha256:f855b39e4f75abd0dfbcf74a82e84ae3fc260d523fcb3532786bcbbcb158322c"}, - {file = "coverage-6.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ee6ae6bbcac0786807295e9687169fba80cb0617852b2fa118a99667e8e6815d"}, - {file = "coverage-6.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:564cd0f5b5470094df06fab676c6d77547abfdcb09b6c29c8a97c41ad03b103c"}, - {file = "coverage-6.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cbbb0e4cd8ddcd5ef47641cfac97d8473ab6b132dd9a46bacb18872828031685"}, - {file = "coverage-6.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6113e4df2fa73b80f77663445be6d567913fb3b82a86ceb64e44ae0e4b695de1"}, - {file = "coverage-6.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d032bfc562a52318ae05047a6eb801ff31ccee172dc0d2504614e911d8fa83e"}, - {file = "coverage-6.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e431e305a1f3126477abe9a184624a85308da8edf8486a863601d58419d26ffa"}, - {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cf2afe83a53f77aec067033199797832617890e15bed42f4a1a93ea24794ae3e"}, - {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:783bc7c4ee524039ca13b6d9b4186a67f8e63d91342c713e88c1865a38d0892a"}, - {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ff934ced84054b9018665ca3967fc48e1ac99e811f6cc99ea65978e1d384454b"}, - {file = "coverage-6.4.4-cp38-cp38-win32.whl", hash = "sha256:e1fabd473566fce2cf18ea41171d92814e4ef1495e04471786cbc943b89a3781"}, - {file = "coverage-6.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:4179502f210ebed3ccfe2f78bf8e2d59e50b297b598b100d6c6e3341053066a2"}, - {file = "coverage-6.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:98c0b9e9b572893cdb0a00e66cf961a238f8d870d4e1dc8e679eb8bdc2eb1b86"}, - {file = "coverage-6.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc600f6ec19b273da1d85817eda339fb46ce9eef3e89f220055d8696e0a06908"}, - {file = "coverage-6.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a98d6bf6d4ca5c07a600c7b4e0c5350cd483c85c736c522b786be90ea5bac4f"}, - {file = "coverage-6.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01778769097dbd705a24e221f42be885c544bb91251747a8a3efdec6eb4788f2"}, - {file = "coverage-6.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfa0b97eb904255e2ab24166071b27408f1f69c8fbda58e9c0972804851e0558"}, - {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:fcbe3d9a53e013f8ab88734d7e517eb2cd06b7e689bedf22c0eb68db5e4a0a19"}, - {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:15e38d853ee224e92ccc9a851457fb1e1f12d7a5df5ae44544ce7863691c7a0d"}, - {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6913dddee2deff8ab2512639c5168c3e80b3ebb0f818fed22048ee46f735351a"}, - {file = "coverage-6.4.4-cp39-cp39-win32.whl", hash = "sha256:354df19fefd03b9a13132fa6643527ef7905712109d9c1c1903f2133d3a4e145"}, - {file = "coverage-6.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:1238b08f3576201ebf41f7c20bf59baa0d05da941b123c6656e42cdb668e9827"}, - {file = "coverage-6.4.4-pp36.pp37.pp38-none-any.whl", hash = "sha256:f67cf9f406cf0d2f08a3515ce2db5b82625a7257f88aad87904674def6ddaec1"}, - {file = "coverage-6.4.4.tar.gz", hash = "sha256:e16c45b726acb780e1e6f88b286d3c10b3914ab03438f32117c4aa52d7f30d58"}, + {file = "coverage-6.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53"}, + {file = "coverage-6.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660"}, + {file = "coverage-6.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4"}, + {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04"}, + {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0"}, + {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae"}, + {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466"}, + {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a"}, + {file = "coverage-6.5.0-cp310-cp310-win32.whl", hash = "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32"}, + {file = "coverage-6.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e"}, + {file = "coverage-6.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795"}, + {file = "coverage-6.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75"}, + {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b"}, + {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91"}, + {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4"}, + {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa"}, + {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b"}, + {file = "coverage-6.5.0-cp311-cp311-win32.whl", hash = "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578"}, + {file = "coverage-6.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b"}, + {file = "coverage-6.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d"}, + {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3"}, + {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef"}, + {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79"}, + {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d"}, + {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c"}, + {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f"}, + {file = "coverage-6.5.0-cp37-cp37m-win32.whl", hash = "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b"}, + {file = "coverage-6.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2"}, + {file = "coverage-6.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c"}, + {file = "coverage-6.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba"}, + {file = "coverage-6.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e"}, + {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398"}, + {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b"}, + {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b"}, + {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f"}, + {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e"}, + {file = "coverage-6.5.0-cp38-cp38-win32.whl", hash = "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d"}, + {file = "coverage-6.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6"}, + {file = "coverage-6.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745"}, + {file = "coverage-6.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc"}, + {file = "coverage-6.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe"}, + {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf"}, + {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5"}, + {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62"}, + {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518"}, + {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f"}, + {file = "coverage-6.5.0-cp39-cp39-win32.whl", hash = "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72"}, + {file = "coverage-6.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987"}, + {file = "coverage-6.5.0-pp36.pp37.pp38-none-any.whl", hash = "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a"}, + {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"}, ] cryptography = [ - {file = "cryptography-37.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:549153378611c0cca1042f20fd9c5030d37a72f634c9326e225c9f666d472884"}, - {file = "cryptography-37.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a958c52505c8adf0d3822703078580d2c0456dd1d27fabfb6f76fe63d2971cd6"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f721d1885ecae9078c3f6bbe8a88bc0786b6e749bf32ccec1ef2b18929a05046"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3d41b965b3380f10e4611dbae366f6dc3cefc7c9ac4e8842a806b9672ae9add5"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80f49023dd13ba35f7c34072fa17f604d2f19bf0989f292cedf7ab5770b87a0b"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2dcb0b3b63afb6df7fd94ec6fbddac81b5492513f7b0436210d390c14d46ee8"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b7f8dd0d4c1f21759695c05a5ec8536c12f31611541f8904083f3dc582604280"}, - {file = "cryptography-37.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:30788e070800fec9bbcf9faa71ea6d8068f5136f60029759fd8c3efec3c9dcb3"}, - {file = "cryptography-37.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:190f82f3e87033821828f60787cfa42bff98404483577b591429ed99bed39d59"}, - {file = "cryptography-37.0.4-cp36-abi3-win32.whl", hash = "sha256:b62439d7cd1222f3da897e9a9fe53bbf5c104fff4d60893ad1355d4c14a24157"}, - {file = "cryptography-37.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:f7a6de3e98771e183645181b3627e2563dcde3ce94a9e42a3f427d2255190327"}, - {file = "cryptography-37.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc95ed67b6741b2607298f9ea4932ff157e570ef456ef7ff0ef4884a134cc4b"}, - {file = "cryptography-37.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f8c0a6e9e1dd3eb0414ba320f85da6b0dcbd543126e30fcc546e7372a7fbf3b9"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:e007f052ed10cc316df59bc90fbb7ff7950d7e2919c9757fd42a2b8ecf8a5f67"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bc997818309f56c0038a33b8da5c0bfbb3f1f067f315f9abd6fc07ad359398d"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d204833f3c8a33bbe11eda63a54b1aad7aa7456ed769a982f21ec599ba5fa282"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:75976c217f10d48a8b5a8de3d70c454c249e4b91851f6838a4e48b8f41eb71aa"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:7099a8d55cd49b737ffc99c17de504f2257e3787e02abe6d1a6d136574873441"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2be53f9f5505673eeda5f2736bea736c40f051a739bfae2f92d18aed1eb54596"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:91ce48d35f4e3d3f1d83e29ef4a9267246e6a3be51864a5b7d2247d5086fa99a"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4c590ec31550a724ef893c50f9a97a0c14e9c851c85621c5650d699a7b88f7ab"}, - {file = "cryptography-37.0.4.tar.gz", hash = "sha256:63f9c17c0e2474ccbebc9302ce2f07b55b3b3fcb211ded18a42d5764f5c10a82"}, + {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70"}, + {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb"}, + {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d"}, + {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1"}, + {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8"}, + {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db"}, + {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b"}, + {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c"}, + {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00"}, + {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0"}, + {file = "cryptography-38.0.4-cp36-abi3-win32.whl", hash = "sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744"}, + {file = "cryptography-38.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d"}, + {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353"}, + {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7"}, + {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd"}, + {file = "cryptography-38.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2"}, + {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b"}, + {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6"}, + {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876"}, + {file = "cryptography-38.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b"}, + {file = "cryptography-38.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285"}, + {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b"}, + {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083"}, + {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee"}, + {file = "cryptography-38.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9"}, + {file = "cryptography-38.0.4.tar.gz", hash = "sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290"}, +] +dateparser = [ + {file = "dateparser-1.1.4-py2.py3-none-any.whl", hash = "sha256:4431159799b63d8acec5d7d844c5e06edf3d1b0eb2bda6d4cac87134ddddd01c"}, + {file = "dateparser-1.1.4.tar.gz", hash = "sha256:73ec6e44a133c54076ecf9f9dc0fbe3dd4831f154f977ff06f53114d57c5425e"}, ] debugpy = [ - {file = "debugpy-1.6.3-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:c4b2bd5c245eeb49824bf7e539f95fb17f9a756186e51c3e513e32999d8846f3"}, - {file = "debugpy-1.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b8deaeb779699350deeed835322730a3efec170b88927debc9ba07a1a38e2585"}, - {file = "debugpy-1.6.3-cp310-cp310-win32.whl", hash = "sha256:fc233a0160f3b117b20216f1169e7211b83235e3cd6749bcdd8dbb72177030c7"}, - {file = "debugpy-1.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:dda8652520eae3945833e061cbe2993ad94a0b545aebd62e4e6b80ee616c76b2"}, - {file = "debugpy-1.6.3-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5c814596a170a0a58fa6fad74947e30bfd7e192a5d2d7bd6a12156c2899e13a"}, - {file = "debugpy-1.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c4cd6f37e3c168080d61d698390dfe2cd9e74ebf80b448069822a15dadcda57d"}, - {file = "debugpy-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:3c9f985944a30cfc9ae4306ac6a27b9c31dba72ca943214dad4a0ab3840f6161"}, - {file = "debugpy-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:5ad571a36cec137ae6ed951d0ff75b5e092e9af6683da084753231150cbc5b25"}, - {file = "debugpy-1.6.3-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:adcfea5ea06d55d505375995e150c06445e2b20cd12885bcae566148c076636b"}, - {file = "debugpy-1.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:daadab4403427abd090eccb38d8901afd8b393e01fd243048fab3f1d7132abb4"}, - {file = "debugpy-1.6.3-cp38-cp38-win32.whl", hash = "sha256:6efc30325b68e451118b795eff6fe8488253ca3958251d5158106d9c87581bc6"}, - {file = "debugpy-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:86d784b72c5411c833af1cd45b83d80c252b77c3bfdb43db17c441d772f4c734"}, - {file = "debugpy-1.6.3-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:4e255982552b0edfe3a6264438dbd62d404baa6556a81a88f9420d3ed79b06ae"}, - {file = "debugpy-1.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cca23cb6161ac89698d629d892520327dd1be9321c0960e610bbcb807232b45d"}, - {file = "debugpy-1.6.3-cp39-cp39-win32.whl", hash = "sha256:7c302095a81be0d5c19f6529b600bac971440db3e226dce85347cc27e6a61908"}, - {file = "debugpy-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:34d2cdd3a7c87302ba5322b86e79c32c2115be396f3f09ca13306d8a04fe0f16"}, - {file = "debugpy-1.6.3-py2.py3-none-any.whl", hash = "sha256:84c39940a0cac410bf6aa4db00ba174f973eef521fbe9dd058e26bcabad89c4f"}, - {file = "debugpy-1.6.3.zip", hash = "sha256:e8922090514a890eec99cfb991bab872dd2e353ebb793164d5f01c362b9a40bf"}, + {file = "debugpy-1.6.4-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:6ae238943482c78867ac707c09122688efb700372b617ffd364261e5e41f7a2f"}, + {file = "debugpy-1.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a39e7da178e1f22f4bc04b57f085e785ed1bcf424aaf318835a1a7129eefe35"}, + {file = "debugpy-1.6.4-cp310-cp310-win32.whl", hash = "sha256:143f79d0798a9acea21cd1d111badb789f19d414aec95fa6389cfea9485ddfb1"}, + {file = "debugpy-1.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:563f148f94434365ec0ce94739c749aabf60bf67339e68a9446499f3582d62f3"}, + {file = "debugpy-1.6.4-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1caee68f7e254267df908576c0d0938f8f88af16383f172cb9f0602e24c30c01"}, + {file = "debugpy-1.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e2a83d31a16b83666f19fa06d97b2cc311af88e6266590579737949971a17e"}, + {file = "debugpy-1.6.4-cp37-cp37m-win32.whl", hash = "sha256:82229790442856962aec4767b98ba2559fe0998f897e9f21fb10b4fd24b6c436"}, + {file = "debugpy-1.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:67edf033f9e512958f7b472975ff9d9b7ff64bf4440f6f6ae44afdc66b89e6b6"}, + {file = "debugpy-1.6.4-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:4ab5e938925e5d973f567d6ef32751b17d10f3be3a8c4d73c52f53e727f69bf1"}, + {file = "debugpy-1.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8df268e9f72fc06efc2e75e8dc8e2b881d6a397356faec26efb2ee70b6863b7"}, + {file = "debugpy-1.6.4-cp38-cp38-win32.whl", hash = "sha256:86bd25f38f8b6c5d430a5e2931eebbd5f580c640f4819fcd236d0498790c7204"}, + {file = "debugpy-1.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:62ba4179b372a62abf9c89b56997d70a4100c6dea6c2a4e0e4be5f45920b3253"}, + {file = "debugpy-1.6.4-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d2968e589bda4e485a9c61f113754a28e48d88c5152ed8e0b2564a1fadbe50a5"}, + {file = "debugpy-1.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e62b8034ede98932b92268669318848a0d42133d857087a3b9cec03bb844c615"}, + {file = "debugpy-1.6.4-cp39-cp39-win32.whl", hash = "sha256:3d9c31baf64bf959a593996c108e911c5a9aa1693a296840e5469473f064bcec"}, + {file = "debugpy-1.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:ea4bf208054e6d41749f17612066da861dff10102729d32c85b47f155223cf2b"}, + {file = "debugpy-1.6.4-py2.py3-none-any.whl", hash = "sha256:e886a1296cd20a10172e94788009ce74b759e54229ebd64a43fa5c2b4e62cd76"}, + {file = "debugpy-1.6.4.zip", hash = "sha256:d5ab9bd3f4e7faf3765fd52c7c43c074104ab1e109621dc73219099ed1a5399d"}, ] decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, @@ -2350,8 +2533,8 @@ et-xmlfile = [ {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, ] fastjsonschema = [ - {file = "fastjsonschema-2.16.1-py3-none-any.whl", hash = "sha256:2f7158c4de792555753d6c2277d6a2af2d406dfd97aeca21d17173561ede4fe6"}, - {file = "fastjsonschema-2.16.1.tar.gz", hash = "sha256:d6fa3ffbe719768d70e298b9fb847484e2bdfdb7241ed052b8d57a9294a8c334"}, + {file = "fastjsonschema-2.16.2-py3-none-any.whl", hash = "sha256:21f918e8d9a1a4ba9c22e09574ba72267a6762d47822db9add95f6454e51cc1c"}, + {file = "fastjsonschema-2.16.2.tar.gz", hash = "sha256:01e366f25d9047816fe3d288cbfc3e10541daf0af2044763f3d0ade42476da18"}, ] flake8 = [ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, @@ -2366,16 +2549,16 @@ flask-cors = [ {file = "Flask_Cors-3.0.10-py2.py3-none-any.whl", hash = "sha256:74efc975af1194fc7891ff5cd85b0f7478be4f7f59fe158102e91abb72bb4438"}, ] google-api-core = [ - {file = "google-api-core-2.8.2.tar.gz", hash = "sha256:06f7244c640322b508b125903bb5701bebabce8832f85aba9335ec00b3d02edc"}, - {file = "google_api_core-2.8.2-py3-none-any.whl", hash = "sha256:93c6a91ccac79079ac6bbf8b74ee75db970cc899278b97d53bc012f35908cf50"}, + {file = "google-api-core-2.10.2.tar.gz", hash = "sha256:10c06f7739fe57781f87523375e8e1a3a4674bf6392cd6131a3222182b971320"}, + {file = "google_api_core-2.10.2-py3-none-any.whl", hash = "sha256:34f24bd1d5f72a8c4519773d99ca6bf080a6c4e041b4e9f024fe230191dda62e"}, ] google-api-python-client = [ {file = "google-api-python-client-1.12.11.tar.gz", hash = "sha256:1b4bd42a46321e13c0542a9e4d96fa05d73626f07b39f83a73a947d70ca706a9"}, {file = "google_api_python_client-1.12.11-py2.py3-none-any.whl", hash = "sha256:7e0a1a265c8d3088ee1987778c72683fcb376e32bada8d7767162bd9c503fd9b"}, ] google-auth = [ - {file = "google-auth-2.11.0.tar.gz", hash = "sha256:ed65ecf9f681832298e29328e1ef0a3676e3732b2e56f41532d45f70a22de0fb"}, - {file = "google_auth-2.11.0-py2.py3-none-any.whl", hash = "sha256:be62acaae38d0049c21ca90f27a23847245c9f161ff54ede13af2cb6afecbac9"}, + {file = "google-auth-2.14.1.tar.gz", hash = "sha256:ccaa901f31ad5cbb562615eb8b664b3dd0bf5404a67618e642307f00613eda4d"}, + {file = "google_auth-2.14.1-py2.py3-none-any.whl", hash = "sha256:f5d8701633bebc12e0deea4df8abd8aff31c28b355360597f7f2ee60f2e4d016"}, ] google-auth-httplib2 = [ {file = "google-auth-httplib2-0.0.4.tar.gz", hash = "sha256:8d092cc60fb16517b12057ec0bba9185a96e3b7169d86ae12eae98e645b7bc39"}, @@ -2386,32 +2569,32 @@ google-auth-oauthlib = [ {file = "google_auth_oauthlib-0.4.6-py2.py3-none-any.whl", hash = "sha256:3f2a6e802eebbb6fb736a370fbf3b055edcb6b52878bf2f26330b5e041316c73"}, ] googleapis-common-protos = [ - {file = "googleapis-common-protos-1.56.4.tar.gz", hash = "sha256:c25873c47279387cfdcbdafa36149887901d36202cb645a0e4f29686bf6e4417"}, - {file = "googleapis_common_protos-1.56.4-py2.py3-none-any.whl", hash = "sha256:8eb2cbc91b69feaf23e32452a7ae60e791e09967d81d4fcc7fc388182d1bd394"}, + {file = "googleapis-common-protos-1.57.0.tar.gz", hash = "sha256:27a849d6205838fb6cc3c1c21cb9800707a661bb21c6ce7fb13e99eb1f8a0c46"}, + {file = "googleapis_common_protos-1.57.0-py2.py3-none-any.whl", hash = "sha256:a9f4a1d7f6d9809657b7f1316a1aa527f6664891531bcfcc13b6696e685f443c"}, ] graphviz = [ {file = "graphviz-0.16-py2.py3-none-any.whl", hash = "sha256:3cad5517c961090dfc679df6402a57de62d97703e2880a1a46147bb0dc1639eb"}, {file = "graphviz-0.16.zip", hash = "sha256:d2d25af1c199cad567ce4806f0449cb74eb30cf451fd7597251e1da099ac6e57"}, ] great-expectations = [ - {file = "great_expectations-0.15.20-py3-none-any.whl", hash = "sha256:a976ae8025dddb93f86de5541524b50f1b6ef1da310cff7950f7e3b296580ae7"}, - {file = "great_expectations-0.15.20.tar.gz", hash = "sha256:2e5434219044a9640d3508ed1f0cb00aac34ca125a24370c4fc15d0e82ce7290"}, + {file = "great_expectations-0.15.34-py3-none-any.whl", hash = "sha256:82fbdb113dd5158f5236469ba352094df10f5faf9498517f2809440ca8689239"}, + {file = "great_expectations-0.15.34.tar.gz", hash = "sha256:09a4a3cb8d4648a410bc89fa349b16c885dcbcbffd3ff7808357d8bf7399b621"}, ] httplib2 = [ - {file = "httplib2-0.20.4-py3-none-any.whl", hash = "sha256:8b6a905cb1c79eefd03f8669fd993c36dc341f7c558f056cb5a33b5c2f458543"}, - {file = "httplib2-0.20.4.tar.gz", hash = "sha256:58a98e45b4b1a48273073f905d2961666ecf0fbac4250ea5b47aef259eb5c585"}, + {file = "httplib2-0.21.0-py3-none-any.whl", hash = "sha256:987c8bb3eb82d3fa60c68699510a692aa2ad9c4bd4f123e51dfb1488c14cdd01"}, + {file = "httplib2-0.21.0.tar.gz", hash = "sha256:fc144f091c7286b82bec71bdbd9b27323ba709cc612568d3000893bfd9cb4b34"}, ] idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] imagesize = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.12.0-py3-none-any.whl", hash = "sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23"}, - {file = "importlib_metadata-4.12.0.tar.gz", hash = "sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670"}, + {file = "importlib_metadata-5.1.0-py3-none-any.whl", hash = "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"}, + {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"}, ] inflection = [ {file = "inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"}, @@ -2422,8 +2605,8 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] ipykernel = [ - {file = "ipykernel-6.15.2-py3-none-any.whl", hash = "sha256:59183ef833b82c72211aace3fb48fd20eae8e2d0cae475f3d5c39d4a688e81ec"}, - {file = "ipykernel-6.15.2.tar.gz", hash = "sha256:e7481083b438609c9c8a22d6362e8e1bc6ec94ba0741b666941e634f2d61bdf3"}, + {file = "ipykernel-6.16.2-py3-none-any.whl", hash = "sha256:67daf93e5b52456cd8eea87a8b59405d2bb80ae411864a1ea206c3631d8179af"}, + {file = "ipykernel-6.16.2.tar.gz", hash = "sha256:463f3d87a92e99969b1605cb7a5b4d7b36b7145a0e72d06e65918a6ddefbe630"}, ] ipython = [ {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, @@ -2434,8 +2617,8 @@ ipython-genutils = [ {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, ] ipywidgets = [ - {file = "ipywidgets-8.0.1-py3-none-any.whl", hash = "sha256:fc0744df3a964ecfd68a6d2debe547fe89db252b8d7bb3db5740aba72edb0e6c"}, - {file = "ipywidgets-8.0.1.tar.gz", hash = "sha256:1a296094203309e834f2781a275214d255ac5d266bbfa602f9f6915e1806614c"}, + {file = "ipywidgets-8.0.2-py3-none-any.whl", hash = "sha256:1dc3dd4ee19ded045ea7c86eb273033d238d8e43f9e7872c52d092683f263891"}, + {file = "ipywidgets-8.0.2.tar.gz", hash = "sha256:08cb75c6e0a96836147cbfdc55580ae04d13e05d26ffbc377b4e1c68baa28b1f"}, ] isodate = [ {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, @@ -2446,8 +2629,8 @@ itsdangerous = [ {file = "itsdangerous-1.1.0.tar.gz", hash = "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"}, ] jedi = [ - {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, - {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, + {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, + {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, ] jeepney = [ {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, @@ -2470,16 +2653,20 @@ jsonschema = [ {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, ] jupyter-client = [ - {file = "jupyter_client-7.3.5-py3-none-any.whl", hash = "sha256:b33222bdc9dd1714228bd286af006533a0abe2bbc093e8f3d29dc0b91bdc2be4"}, - {file = "jupyter_client-7.3.5.tar.gz", hash = "sha256:3c58466a1b8d55dba0bf3ce0834e4f5b7760baf98d1d73db0add6f19de9ecd1d"}, + {file = "jupyter_client-7.4.7-py3-none-any.whl", hash = "sha256:df56ae23b8e1da1b66f89dee1368e948b24a7f780fa822c5735187589fc4c157"}, + {file = "jupyter_client-7.4.7.tar.gz", hash = "sha256:330f6b627e0b4bf2f54a3a0dd9e4a22d2b649c8518168afedce2c96a1ceb2860"}, ] jupyter-core = [ - {file = "jupyter_core-4.11.1-py3-none-any.whl", hash = "sha256:715e22bb6cc7db3718fddfac1f69f1c7e899ca00e42bdfd4bf3705452b9fd84a"}, - {file = "jupyter_core-4.11.1.tar.gz", hash = "sha256:2e5f244d44894c4154d06aeae3419dd7f1b0ef4494dc5584929b398c61cfd314"}, + {file = "jupyter_core-4.12.0-py3-none-any.whl", hash = "sha256:a54672c539333258495579f6964144924e0aa7b07f7069947bef76d7ea5cb4c1"}, + {file = "jupyter_core-4.12.0.tar.gz", hash = "sha256:87f39d7642412ae8a52291cc68e71ac01dfa2c735df2701f8108251d51b4f460"}, +] +jupyter-server = [ + {file = "jupyter_server-1.15.6-py3-none-any.whl", hash = "sha256:e393934c19fcc324a7fca77f811eacd91201440f04c6fbb15c959c463baaa9c5"}, + {file = "jupyter_server-1.15.6.tar.gz", hash = "sha256:56bd6f580d1f46b62294990e8e78651025729f5d3fc798f10f2c03f0cdcbf28d"}, ] jupyterlab-widgets = [ - {file = "jupyterlab_widgets-3.0.2-py3-none-any.whl", hash = "sha256:98303a281f4004670cdcea2ef4aecba19c580adc297664c593f967025625c8c5"}, - {file = "jupyterlab_widgets-3.0.2.tar.gz", hash = "sha256:47ab54cd165aa0cb3bcef1232d77471580cd2c36bbe2153fc5ba31e26ad87320"}, + {file = "jupyterlab_widgets-3.0.3-py3-none-any.whl", hash = "sha256:6aa1bc0045470d54d76b9c0b7609a8f8f0087573bae25700a370c11f82cb38c8"}, + {file = "jupyterlab_widgets-3.0.3.tar.gz", hash = "sha256:c767181399b4ca8b647befe2d913b1260f51bf9d8ef9b7a14632d4c1a7b536bd"}, ] keyring = [ {file = "keyring-23.4.1-py3-none-any.whl", hash = "sha256:17e49fb0d6883c2b4445359434dba95aad84aabb29bbff044ad0ed7100232eca"}, @@ -2490,8 +2677,8 @@ keyrings-alt = [ {file = "keyrings.alt-3.1.tar.gz", hash = "sha256:b59c86b67b9027a86e841a49efc41025bcc3b1b0308629617b66b7011e52db5a"}, ] makefun = [ - {file = "makefun-1.14.0-py2.py3-none-any.whl", hash = "sha256:7431941c736f33948aa438f1bfb5795957470d7246801d8c06c84b88997502b6"}, - {file = "makefun-1.14.0.tar.gz", hash = "sha256:770c6e458f1ef47304185334f1d686ee201755d06152a878e2646275340c181d"}, + {file = "makefun-1.15.0-py2.py3-none-any.whl", hash = "sha256:d79319f9e71b6825ca163be0afa45cbc5b1215e682efa35b2d355a03c594279c"}, + {file = "makefun-1.15.0.tar.gz", hash = "sha256:5b110e733d94f7a49d8ac27b1e2d40f2bb0501e98c1d825e0d932d26920dd5df"}, ] markupsafe = [ {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, @@ -2564,6 +2751,10 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, ] +marshmallow = [ + {file = "marshmallow-3.19.0-py3-none-any.whl", hash = "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b"}, + {file = "marshmallow-3.19.0.tar.gz", hash = "sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78"}, +] matplotlib-inline = [ {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, @@ -2580,25 +2771,33 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] +nbclassic = [ + {file = "nbclassic-0.4.8-py3-none-any.whl", hash = "sha256:cbf05df5842b420d5cece0143462380ea9d308ff57c2dc0eb4d6e035b18fbfb3"}, + {file = "nbclassic-0.4.8.tar.gz", hash = "sha256:c74d8a500f8e058d46b576a41e5bc640711e1032cf7541dde5f73ea49497e283"}, +] nbconvert = [ {file = "nbconvert-5.5.0-py2.py3-none-any.whl", hash = "sha256:4a978548d8383f6b2cfca4a3b0543afb77bc7cb5a96e8b424337ab58c12da9bc"}, {file = "nbconvert-5.5.0.tar.gz", hash = "sha256:138381baa41d83584459b5cfecfc38c800ccf1f37d9ddd0bd440783346a4c39c"}, ] nbformat = [ - {file = "nbformat-5.4.0-py3-none-any.whl", hash = "sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad"}, - {file = "nbformat-5.4.0.tar.gz", hash = "sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"}, + {file = "nbformat-5.7.0-py3-none-any.whl", hash = "sha256:1b05ec2c552c2f1adc745f4eddce1eac8ca9ffd59bb9fd859e827eaa031319f9"}, + {file = "nbformat-5.7.0.tar.gz", hash = "sha256:1d4760c15c1a04269ef5caf375be8b98dd2f696e5eb9e603ec2bf091f9b0d3f3"}, ] nest-asyncio = [ - {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, - {file = "nest_asyncio-1.5.5.tar.gz", hash = "sha256:e442291cd942698be619823a17a86a5759eabe1f8613084790de189fe9e16d65"}, + {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, + {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, ] networkx = [ {file = "networkx-2.6.3-py3-none-any.whl", hash = "sha256:80b6b89c77d1dfb64a4c7854981b60aeea6360ac02c6d4e4913319e0a313abef"}, {file = "networkx-2.6.3.tar.gz", hash = "sha256:c0946ed31d71f1b732b5aaa6da5a0388a345019af232ce2f49c766e2d6795c51"}, ] notebook = [ - {file = "notebook-6.4.12-py3-none-any.whl", hash = "sha256:8c07a3bb7640e371f8a609bdbb2366a1976c6a2589da8ef917f761a61e3ad8b1"}, - {file = "notebook-6.4.12.tar.gz", hash = "sha256:6268c9ec9048cff7a45405c990c29ac9ca40b0bc3ec29263d218c5e01f2b4e86"}, + {file = "notebook-6.5.2-py3-none-any.whl", hash = "sha256:e04f9018ceb86e4fa841e92ea8fb214f8d23c1cedfde530cc96f92446924f0e4"}, + {file = "notebook-6.5.2.tar.gz", hash = "sha256:c1897e5317e225fc78b45549a6ab4b668e4c996fd03a04e938fe5e7af2bfffd0"}, +] +notebook-shim = [ + {file = "notebook_shim-0.2.2-py3-none-any.whl", hash = "sha256:9c6c30f74c4fbea6fce55c1be58e7fd0409b1c681b075dcedceb005db5026949"}, + {file = "notebook_shim-0.2.2.tar.gz", hash = "sha256:090e0baf9a5582ff59b607af523ca2db68ff216da0c69956b62cab2ef4fc9c3f"}, ] numpy = [ {file = "numpy-1.21.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8737609c3bbdd48e380d463134a35ffad3b22dc56295eff6f79fd85bd0eeeb25"}, @@ -2637,8 +2836,8 @@ oauth2client = [ {file = "oauth2client-3.0.0.tar.gz", hash = "sha256:5b5b056ec6f2304e7920b632885bd157fa71d1a7f3ddd00a43b1541a8d1a2460"}, ] oauthlib = [ - {file = "oauthlib-3.2.0-py3-none-any.whl", hash = "sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe"}, - {file = "oauthlib-3.2.0.tar.gz", hash = "sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2"}, + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, ] openpyxl = [ {file = "openpyxl-3.0.10-py2.py3-none-any.whl", hash = "sha256:0ab6d25d01799f97a9464630abacbb34aafecdcaa0ef3cba6d6b3499867d0355"}, @@ -2684,12 +2883,12 @@ parso = [ {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, + {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, + {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, ] pdoc = [ - {file = "pdoc-12.2.0-py3-none-any.whl", hash = "sha256:043ab59983ea166ba15c9950eca3683194e5fbc7bbcdd61595f95d18fdc5c05c"}, - {file = "pdoc-12.2.0.tar.gz", hash = "sha256:1a4f2ca3f02772941b7b7fe85cb50b9b0c86ed4c2417bcf7d0bd7ad189ae1ba8"}, + {file = "pdoc-12.3.0-py3-none-any.whl", hash = "sha256:0c520a6af892863b8712abb6abaad2c928366d7dee727715177774623c30405d"}, + {file = "pdoc-12.3.0.tar.gz", hash = "sha256:b245903dd8fb515b99d838bb1ad3efeb706fa0efd925a886c4624bf946afaab5"}, ] pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, @@ -2704,62 +2903,44 @@ pluggy = [ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] prometheus-client = [ - {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, - {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, + {file = "prometheus_client-0.15.0-py3-none-any.whl", hash = "sha256:db7c05cbd13a0f79975592d112320f2605a325969b270a94b71dcabc47b931d2"}, + {file = "prometheus_client-0.15.0.tar.gz", hash = "sha256:be26aa452490cfcf6da953f9436e95a9f2b4d578ca80094b4458930e5f584ab1"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.30-py3-none-any.whl", hash = "sha256:d8916d3f62a7b67ab353a952ce4ced6a1d2587dfe9ef8ebc30dd7c386751f289"}, - {file = "prompt_toolkit-3.0.30.tar.gz", hash = "sha256:859b283c50bde45f5f97829f77a4674d1c1fcd88539364f1b28a37805cfd89c0"}, + {file = "prompt_toolkit-3.0.33-py3-none-any.whl", hash = "sha256:ced598b222f6f4029c0800cefaa6a17373fb580cd093223003475ce32805c35b"}, + {file = "prompt_toolkit-3.0.33.tar.gz", hash = "sha256:535c29c31216c77302877d5120aef6c94ff573748a5b5ca5b1b1f76f5e700c73"}, ] protobuf = [ - {file = "protobuf-4.21.5-cp310-abi3-win32.whl", hash = "sha256:5310cbe761e87f0c1decce019d23f2101521d4dfff46034f8a12a53546036ec7"}, - {file = "protobuf-4.21.5-cp310-abi3-win_amd64.whl", hash = "sha256:e5c5a2886ae48d22a9d32fbb9b6636a089af3cd26b706750258ce1ca96cc0116"}, - {file = "protobuf-4.21.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:ee04f5823ed98bb9a8c3b1dc503c49515e0172650875c3f76e225b223793a1f2"}, - {file = "protobuf-4.21.5-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:b04484d6f42f48c57dd2737a72692f4c6987529cdd148fb5b8e5f616862a2e37"}, - {file = "protobuf-4.21.5-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:5e0b272217aad8971763960238c1a1e6a65d50ef7824e23300da97569a251c55"}, - {file = "protobuf-4.21.5-cp37-cp37m-win32.whl", hash = "sha256:5eb0724615e90075f1d763983e708e1cef08e66b1891d8b8b6c33bc3b2f1a02b"}, - {file = "protobuf-4.21.5-cp37-cp37m-win_amd64.whl", hash = "sha256:011c0f267e85f5d73750b6c25f0155d5db1e9443cd3590ab669a6221dd8fcdb0"}, - {file = "protobuf-4.21.5-cp38-cp38-win32.whl", hash = "sha256:7b6f22463e2d1053d03058b7b4ceca6e4ed4c14f8c286c32824df751137bf8e7"}, - {file = "protobuf-4.21.5-cp38-cp38-win_amd64.whl", hash = "sha256:b52e7a522911a40445a5f588bd5b5e584291bfc5545e09b7060685e4b2ff814f"}, - {file = "protobuf-4.21.5-cp39-cp39-win32.whl", hash = "sha256:a7faa62b183d6a928e3daffd06af843b4287d16ef6e40f331575ecd236a7974d"}, - {file = "protobuf-4.21.5-cp39-cp39-win_amd64.whl", hash = "sha256:5e0ce02418ef03d7657a420ae8fd6fec4995ac713a3cb09164e95f694dbcf085"}, - {file = "protobuf-4.21.5-py2.py3-none-any.whl", hash = "sha256:bf711b451212dc5b0fa45ae7dada07d8e71a4b0ff0bc8e4783ee145f47ac4f82"}, - {file = "protobuf-4.21.5-py3-none-any.whl", hash = "sha256:3ec6f5b37935406bb9df9b277e79f8ed81d697146e07ef2ba8a5a272fb24b2c9"}, - {file = "protobuf-4.21.5.tar.gz", hash = "sha256:eb1106e87e095628e96884a877a51cdb90087106ee693925ec0a300468a9be3a"}, + {file = "protobuf-4.21.9-cp310-abi3-win32.whl", hash = "sha256:6e0be9f09bf9b6cf497b27425487706fa48c6d1632ddd94dab1a5fe11a422392"}, + {file = "protobuf-4.21.9-cp310-abi3-win_amd64.whl", hash = "sha256:a7d0ea43949d45b836234f4ebb5ba0b22e7432d065394b532cdca8f98415e3cf"}, + {file = "protobuf-4.21.9-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b5ab0b8918c136345ff045d4b3d5f719b505b7c8af45092d7f45e304f55e50a1"}, + {file = "protobuf-4.21.9-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:2c9c2ed7466ad565f18668aa4731c535511c5d9a40c6da39524bccf43e441719"}, + {file = "protobuf-4.21.9-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:e575c57dc8b5b2b2caa436c16d44ef6981f2235eb7179bfc847557886376d740"}, + {file = "protobuf-4.21.9-cp37-cp37m-win32.whl", hash = "sha256:9227c14010acd9ae7702d6467b4625b6fe853175a6b150e539b21d2b2f2b409c"}, + {file = "protobuf-4.21.9-cp37-cp37m-win_amd64.whl", hash = "sha256:a419cc95fca8694804709b8c4f2326266d29659b126a93befe210f5bbc772536"}, + {file = "protobuf-4.21.9-cp38-cp38-win32.whl", hash = "sha256:5b0834e61fb38f34ba8840d7dcb2e5a2f03de0c714e0293b3963b79db26de8ce"}, + {file = "protobuf-4.21.9-cp38-cp38-win_amd64.whl", hash = "sha256:84ea107016244dfc1eecae7684f7ce13c788b9a644cd3fca5b77871366556444"}, + {file = "protobuf-4.21.9-cp39-cp39-win32.whl", hash = "sha256:f9eae277dd240ae19bb06ff4e2346e771252b0e619421965504bd1b1bba7c5fa"}, + {file = "protobuf-4.21.9-cp39-cp39-win_amd64.whl", hash = "sha256:6e312e280fbe3c74ea9e080d9e6080b636798b5e3939242298b591064470b06b"}, + {file = "protobuf-4.21.9-py2.py3-none-any.whl", hash = "sha256:7eb8f2cc41a34e9c956c256e3ac766cf4e1a4c9c925dc757a41a01be3e852965"}, + {file = "protobuf-4.21.9-py3-none-any.whl", hash = "sha256:48e2cd6b88c6ed3d5877a3ea40df79d08374088e89bedc32557348848dff250b"}, + {file = "protobuf-4.21.9.tar.gz", hash = "sha256:61f21493d96d2a77f9ca84fefa105872550ab5ef71d21c458eb80edcf4885a99"}, ] psutil = [ - {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"}, - {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"}, - {file = "psutil-5.9.1-cp27-cp27m-win32.whl", hash = "sha256:0904727e0b0a038830b019551cf3204dd48ef5c6868adc776e06e93d615fc5fc"}, - {file = "psutil-5.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e7e10454cb1ab62cc6ce776e1c135a64045a11ec4c6d254d3f7689c16eb3efd2"}, - {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:56960b9e8edcca1456f8c86a196f0c3d8e3e361320071c93378d41445ffd28b0"}, - {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:44d1826150d49ffd62035785a9e2c56afcea66e55b43b8b630d7706276e87f22"}, - {file = "psutil-5.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7be9d7f5b0d206f0bbc3794b8e16fb7dbc53ec9e40bbe8787c6f2d38efcf6c9"}, - {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd9246e4cdd5b554a2ddd97c157e292ac11ef3e7af25ac56b08b455c829dca8"}, - {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29a442e25fab1f4d05e2655bb1b8ab6887981838d22effa2396d584b740194de"}, - {file = "psutil-5.9.1-cp310-cp310-win32.whl", hash = "sha256:20b27771b077dcaa0de1de3ad52d22538fe101f9946d6dc7869e6f694f079329"}, - {file = "psutil-5.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:58678bbadae12e0db55186dc58f2888839228ac9f41cc7848853539b70490021"}, - {file = "psutil-5.9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3a76ad658641172d9c6e593de6fe248ddde825b5866464c3b2ee26c35da9d237"}, - {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6a11e48cb93a5fa606306493f439b4aa7c56cb03fc9ace7f6bfa21aaf07c453"}, - {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:068935df39055bf27a29824b95c801c7a5130f118b806eee663cad28dca97685"}, - {file = "psutil-5.9.1-cp36-cp36m-win32.whl", hash = "sha256:0f15a19a05f39a09327345bc279c1ba4a8cfb0172cc0d3c7f7d16c813b2e7d36"}, - {file = "psutil-5.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:db417f0865f90bdc07fa30e1aadc69b6f4cad7f86324b02aa842034efe8d8c4d"}, - {file = "psutil-5.9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:91c7ff2a40c373d0cc9121d54bc5f31c4fa09c346528e6a08d1845bce5771ffc"}, - {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fea896b54f3a4ae6f790ac1d017101252c93f6fe075d0e7571543510f11d2676"}, - {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3054e923204b8e9c23a55b23b6df73a8089ae1d075cb0bf711d3e9da1724ded4"}, - {file = "psutil-5.9.1-cp37-cp37m-win32.whl", hash = "sha256:d2d006286fbcb60f0b391741f520862e9b69f4019b4d738a2a45728c7e952f1b"}, - {file = "psutil-5.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b14ee12da9338f5e5b3a3ef7ca58b3cba30f5b66f7662159762932e6d0b8f680"}, - {file = "psutil-5.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:19f36c16012ba9cfc742604df189f2f28d2720e23ff7d1e81602dbe066be9fd1"}, - {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:944c4b4b82dc4a1b805329c980f270f170fdc9945464223f2ec8e57563139cf4"}, - {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b6750a73a9c4a4e689490ccb862d53c7b976a2a35c4e1846d049dcc3f17d83b"}, - {file = "psutil-5.9.1-cp38-cp38-win32.whl", hash = "sha256:a8746bfe4e8f659528c5c7e9af5090c5a7d252f32b2e859c584ef7d8efb1e689"}, - {file = "psutil-5.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:79c9108d9aa7fa6fba6e668b61b82facc067a6b81517cab34d07a84aa89f3df0"}, - {file = "psutil-5.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28976df6c64ddd6320d281128817f32c29b539a52bdae5e192537bc338a9ec81"}, - {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b88f75005586131276634027f4219d06e0561292be8bd6bc7f2f00bdabd63c4e"}, - {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:645bd4f7bb5b8633803e0b6746ff1628724668681a434482546887d22c7a9537"}, - {file = "psutil-5.9.1-cp39-cp39-win32.whl", hash = "sha256:32c52611756096ae91f5d1499fe6c53b86f4a9ada147ee42db4991ba1520e574"}, - {file = "psutil-5.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:f65f9a46d984b8cd9b3750c2bdb419b2996895b005aefa6cbaba9a143b1ce2c5"}, - {file = "psutil-5.9.1.tar.gz", hash = "sha256:57f1819b5d9e95cdfb0c881a8a5b7d542ed0b7c522d575706a80bedc848c8954"}, + {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"}, + {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"}, + {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3ff89f9b835100a825b14c2808a106b6fdcc4b15483141482a12c725e7f78549"}, + {file = "psutil-5.9.4-cp27-cp27m-win32.whl", hash = "sha256:852dd5d9f8a47169fe62fd4a971aa07859476c2ba22c2254d4a1baa4e10b95ad"}, + {file = "psutil-5.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:9120cd39dca5c5e1c54b59a41d205023d436799b1c8c4d3ff71af18535728e94"}, + {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6b92c532979bafc2df23ddc785ed116fced1f492ad90a6830cf24f4d1ea27d24"}, + {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:efeae04f9516907be44904cc7ce08defb6b665128992a56957abc9b61dca94b7"}, + {file = "psutil-5.9.4-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7"}, + {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1"}, + {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08"}, + {file = "psutil-5.9.4-cp36-abi3-win32.whl", hash = "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff"}, + {file = "psutil-5.9.4-cp36-abi3-win_amd64.whl", hash = "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4"}, + {file = "psutil-5.9.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e"}, + {file = "psutil-5.9.4.tar.gz", hash = "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62"}, ] ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, @@ -2770,34 +2951,12 @@ py = [ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] pyasn1 = [ - {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, - {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"}, - {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"}, - {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"}, {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, - {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"}, - {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"}, - {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"}, - {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"}, - {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"}, - {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"}, - {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"}, {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, ] pyasn1-modules = [ {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, - {file = "pyasn1_modules-0.2.8-py2.4.egg", hash = "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199"}, - {file = "pyasn1_modules-0.2.8-py2.5.egg", hash = "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405"}, - {file = "pyasn1_modules-0.2.8-py2.6.egg", hash = "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb"}, - {file = "pyasn1_modules-0.2.8-py2.7.egg", hash = "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8"}, {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, - {file = "pyasn1_modules-0.2.8-py3.1.egg", hash = "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d"}, - {file = "pyasn1_modules-0.2.8-py3.2.egg", hash = "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45"}, - {file = "pyasn1_modules-0.2.8-py3.3.egg", hash = "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4"}, - {file = "pyasn1_modules-0.2.8-py3.4.egg", hash = "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811"}, - {file = "pyasn1_modules-0.2.8-py3.5.egg", hash = "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed"}, - {file = "pyasn1_modules-0.2.8-py3.6.egg", hash = "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0"}, - {file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"}, ] pycodestyle = [ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, @@ -2807,6 +2966,44 @@ pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] +pydantic = [ + {file = "pydantic-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb6ad4489af1bac6955d38ebcb95079a836af31e4c4f74aba1ca05bb9f6027bd"}, + {file = "pydantic-1.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1f5a63a6dfe19d719b1b6e6106561869d2efaca6167f84f5ab9347887d78b98"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352aedb1d71b8b0736c6d56ad2bd34c6982720644b0624462059ab29bd6e5912"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19b3b9ccf97af2b7519c42032441a891a5e05c68368f40865a90eb88833c2559"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9069e1b01525a96e6ff49e25876d90d5a563bc31c658289a8772ae186552236"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:355639d9afc76bcb9b0c3000ddcd08472ae75318a6eb67a15866b87e2efa168c"}, + {file = "pydantic-1.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae544c47bec47a86bc7d350f965d8b15540e27e5aa4f55170ac6a75e5f73b644"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4c805731c33a8db4b6ace45ce440c4ef5336e712508b4d9e1aafa617dc9907f"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d49f3db871575e0426b12e2f32fdb25e579dea16486a26e5a0474af87cb1ab0a"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c90345ec7dd2f1bcef82ce49b6235b40f282b94d3eec47e801baf864d15525"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b5ba54d026c2bd2cb769d3468885f23f43710f651688e91f5fb1edcf0ee9283"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05e00dbebbe810b33c7a7362f231893183bcc4251f3f2ff991c31d5c08240c42"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2d0567e60eb01bccda3a4df01df677adf6b437958d35c12a3ac3e0f078b0ee52"}, + {file = "pydantic-1.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6f981882aea41e021f72779ce2a4e87267458cc4d39ea990729e21ef18f0f8c"}, + {file = "pydantic-1.10.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4aac8e7103bf598373208f6299fa9a5cfd1fc571f2d40bf1dd1955a63d6eeb5"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bedf309630209e78582ffacda64a21f96f3ed2e51fbf3962d4d488e503420254"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9300fcbebf85f6339a02c6994b2eb3ff1b9c8c14f502058b5bf349d42447dcf5"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:216f3bcbf19c726b1cc22b099dd409aa371f55c08800bcea4c44c8f74b73478d"}, + {file = "pydantic-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:dd3f9a40c16daf323cf913593083698caee97df2804aa36c4b3175d5ac1b92a2"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b97890e56a694486f772d36efd2ba31612739bc6f3caeee50e9e7e3ebd2fdd13"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9cabf4a7f05a776e7793e72793cd92cc865ea0e83a819f9ae4ecccb1b8aa6116"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06094d18dd5e6f2bbf93efa54991c3240964bb663b87729ac340eb5014310624"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc78cc83110d2f275ec1970e7a831f4e371ee92405332ebfe9860a715f8336e1"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c2abc4393dea97a4ccbb4ec7d8658d4e22c4765b7b9b9445588f16c71ad9965"}, + {file = "pydantic-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:0b959f4d8211fc964772b595ebb25f7652da3f22322c007b6fed26846a40685e"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c33602f93bfb67779f9c507e4d69451664524389546bacfe1bee13cae6dc7488"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5760e164b807a48a8f25f8aa1a6d857e6ce62e7ec83ea5d5c5a802eac81bad41"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eb843dcc411b6a2237a694f5e1d649fc66c6064d02b204a7e9d194dff81eb4b"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b8795290deaae348c4eba0cebb196e1c6b98bdbe7f50b2d0d9a4a99716342fe"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0bedafe4bc165ad0a56ac0bd7695df25c50f76961da29c050712596cf092d6d"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e05aed07fa02231dbf03d0adb1be1d79cabb09025dd45aa094aa8b4e7b9dcda"}, + {file = "pydantic-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:c1ba1afb396148bbc70e9eaa8c06c1716fdddabaf86e7027c5988bae2a829ab6"}, + {file = "pydantic-1.10.2-py3-none-any.whl", hash = "sha256:1b6ee725bd6e83ec78b1aa32c5b1fa67a3a65badddde3976bca5fe4568f27709"}, + {file = "pydantic-1.10.2.tar.gz", hash = "sha256:91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410"}, +] pyflakes = [ {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, @@ -2820,31 +3017,32 @@ pygsheets = [ {file = "pygsheets-2.0.5.tar.gz", hash = "sha256:ea6ce75dabd1359e49fd36920ff0d25ff9428ccc3d5d2474bdba80fb8653ad80"}, ] pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] pyrsistent = [ - {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, - {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, - {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, - {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, + {file = "pyrsistent-0.19.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a"}, + {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a"}, + {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed"}, + {file = "pyrsistent-0.19.2-cp310-cp310-win32.whl", hash = "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41"}, + {file = "pyrsistent-0.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-win32.whl", hash = "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73"}, + {file = "pyrsistent-0.19.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308"}, + {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584"}, + {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb"}, + {file = "pyrsistent-0.19.2-cp38-cp38-win32.whl", hash = "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a"}, + {file = "pyrsistent-0.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab"}, + {file = "pyrsistent-0.19.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770"}, + {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95"}, + {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e"}, + {file = "pyrsistent-0.19.2-cp39-cp39-win32.whl", hash = "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b"}, + {file = "pyrsistent-0.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291"}, + {file = "pyrsistent-0.19.2-py3-none-any.whl", hash = "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0"}, + {file = "pyrsistent-0.19.2.tar.gz", hash = "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2"}, ] pytest = [ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, @@ -2855,8 +3053,8 @@ pytest-cov = [ {file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"}, ] pytest-mock = [ - {file = "pytest-mock-3.8.2.tar.gz", hash = "sha256:77f03f4554392558700295e05aed0b1096a20d4a60a4f3ddcde58b0c31c8fca2"}, - {file = "pytest_mock-3.8.2-py3-none-any.whl", hash = "sha256:8a9e226d6c0ef09fcf20c94eb3405c388af438a90f3e39687f84166da82d5948"}, + {file = "pytest-mock-3.10.0.tar.gz", hash = "sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f"}, + {file = "pytest_mock-3.10.0-py3-none-any.whl", hash = "sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b"}, ] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, @@ -2867,39 +3065,40 @@ python-dotenv = [ {file = "python_dotenv-0.15.0-py2.py3-none-any.whl", hash = "sha256:0c8d1b80d1a1e91717ea7d526178e3882732420b03f08afea0406db6402e220e"}, ] pytz = [ - {file = "pytz-2022.2.1-py2.py3-none-any.whl", hash = "sha256:220f481bdafa09c3955dfbdddb7b57780e9a94f5127e35456a48589b9e0c0197"}, - {file = "pytz-2022.2.1.tar.gz", hash = "sha256:cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5"}, + {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, + {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, ] pytz-deprecation-shim = [ {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"}, {file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"}, ] pywin32 = [ - {file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"}, - {file = "pywin32-304-cp310-cp310-win_amd64.whl", hash = "sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48"}, - {file = "pywin32-304-cp310-cp310-win_arm64.whl", hash = "sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f"}, - {file = "pywin32-304-cp311-cp311-win32.whl", hash = "sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269"}, - {file = "pywin32-304-cp311-cp311-win_amd64.whl", hash = "sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4"}, - {file = "pywin32-304-cp311-cp311-win_arm64.whl", hash = "sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43"}, - {file = "pywin32-304-cp36-cp36m-win32.whl", hash = "sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1"}, - {file = "pywin32-304-cp36-cp36m-win_amd64.whl", hash = "sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988"}, - {file = "pywin32-304-cp37-cp37m-win32.whl", hash = "sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5"}, - {file = "pywin32-304-cp37-cp37m-win_amd64.whl", hash = "sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df"}, - {file = "pywin32-304-cp38-cp38-win32.whl", hash = "sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96"}, - {file = "pywin32-304-cp38-cp38-win_amd64.whl", hash = "sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e"}, - {file = "pywin32-304-cp39-cp39-win32.whl", hash = "sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc"}, - {file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"}, + {file = "pywin32-305-cp310-cp310-win32.whl", hash = "sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116"}, + {file = "pywin32-305-cp310-cp310-win_amd64.whl", hash = "sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478"}, + {file = "pywin32-305-cp310-cp310-win_arm64.whl", hash = "sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4"}, + {file = "pywin32-305-cp311-cp311-win32.whl", hash = "sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2"}, + {file = "pywin32-305-cp311-cp311-win_amd64.whl", hash = "sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990"}, + {file = "pywin32-305-cp311-cp311-win_arm64.whl", hash = "sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db"}, + {file = "pywin32-305-cp36-cp36m-win32.whl", hash = "sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863"}, + {file = "pywin32-305-cp36-cp36m-win_amd64.whl", hash = "sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1"}, + {file = "pywin32-305-cp37-cp37m-win32.whl", hash = "sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496"}, + {file = "pywin32-305-cp37-cp37m-win_amd64.whl", hash = "sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d"}, + {file = "pywin32-305-cp38-cp38-win32.whl", hash = "sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504"}, + {file = "pywin32-305-cp38-cp38-win_amd64.whl", hash = "sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7"}, + {file = "pywin32-305-cp39-cp39-win32.whl", hash = "sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918"}, + {file = "pywin32-305-cp39-cp39-win_amd64.whl", hash = "sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271"}, ] pywin32-ctypes = [ {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, ] pywinpty = [ - {file = "pywinpty-2.0.7-cp310-none-win_amd64.whl", hash = "sha256:d56361ed2bd3395347882a7a4e6246359e745a233e89c91786ab3d9421323c17"}, - {file = "pywinpty-2.0.7-cp37-none-win_amd64.whl", hash = "sha256:2d62ede3ed10feb0901b3b4667201766a741b6a2c69f27be623ba9fe9348447b"}, - {file = "pywinpty-2.0.7-cp38-none-win_amd64.whl", hash = "sha256:c3b7e6a2f0e5f86e0dc5cb5e4fec7de19adacc6900232e4a48a2ecf04bae447f"}, - {file = "pywinpty-2.0.7-cp39-none-win_amd64.whl", hash = "sha256:80a6713a586401c2a19efd2969ffd019eb85f18442611a3880e3d618887d2f84"}, - {file = "pywinpty-2.0.7.tar.gz", hash = "sha256:f52b2e51c46dac40708ede1d42577f3ddb9d7cf8acaa36c8e27b3d3b975f4c95"}, + {file = "pywinpty-2.0.9-cp310-none-win_amd64.whl", hash = "sha256:30a7b371446a694a6ce5ef906d70ac04e569de5308c42a2bdc9c3bc9275ec51f"}, + {file = "pywinpty-2.0.9-cp311-none-win_amd64.whl", hash = "sha256:d78ef6f4bd7a6c6f94dc1a39ba8fb028540cc39f5cb593e756506db17843125f"}, + {file = "pywinpty-2.0.9-cp37-none-win_amd64.whl", hash = "sha256:5ed36aa087e35a3a183f833631b3e4c1ae92fe2faabfce0fa91b77ed3f0f1382"}, + {file = "pywinpty-2.0.9-cp38-none-win_amd64.whl", hash = "sha256:2352f44ee913faaec0a02d3c112595e56b8af7feeb8100efc6dc1a8685044199"}, + {file = "pywinpty-2.0.9-cp39-none-win_amd64.whl", hash = "sha256:ba75ec55f46c9e17db961d26485b033deb20758b1731e8e208e1e8a387fcf70c"}, + {file = "pywinpty-2.0.9.tar.gz", hash = "sha256:01b6400dd79212f50a2f01af1c65b781290ff39610853db99bf03962eb9a615f"}, ] pyyaml = [ {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, @@ -2933,159 +3132,174 @@ pyyaml = [ {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] pyzmq = [ - {file = "pyzmq-23.2.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:a3fd44b5046d247e7f0f1660bcafe7b5fb0db55d0934c05dd57dda9e1f823ce7"}, - {file = "pyzmq-23.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2141e6798d5981be04c08996d27962086a1aa3ea536fe9cf7e89817fd4523f86"}, - {file = "pyzmq-23.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a39ddb0431a68954bd318b923230fa5b649c9c62b0e8340388820c5f1b15bd2"}, - {file = "pyzmq-23.2.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e06747014a5ad1b28cebf5bc1ddcdaccfb44e9b441d35e6feb1286c8a72e54be"}, - {file = "pyzmq-23.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e0113d70b095339e99bb522fe7294f5ae6a7f3b2b8f52f659469a74b5cc7661"}, - {file = "pyzmq-23.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:71b32a1e827bdcbf73750e60370d3b07685816ff3d8695f450f0f8c3226503f8"}, - {file = "pyzmq-23.2.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:55568a020ad2cae9ae36da6058e7ca332a56df968f601cbdb7cf6efb2a77579a"}, - {file = "pyzmq-23.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8c02a0cd39dc01659b3d6cb70bb3a41aebd9885fd78239acdd8d9c91351c4568"}, - {file = "pyzmq-23.2.1-cp310-cp310-win32.whl", hash = "sha256:e1fe30bcd5aea5948c42685fad910cd285eacb2518ea4dc6c170d6b535bee95d"}, - {file = "pyzmq-23.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:650389bbfca73955b262b2230423d89992f38ec48033307ae80e700eaa2fbb63"}, - {file = "pyzmq-23.2.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:e753eee6d3b93c5354e8ba0a1d62956ee49355f0a36e00570823ef64e66183f5"}, - {file = "pyzmq-23.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f07016e3cf088dbfc6e7c5a7b3f540db5c23b0190d539e4fd3e2b5e6beffa4b5"}, - {file = "pyzmq-23.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4805af9614b0b41b7e57d17673459facf85604dac502a5a9244f6e8c9a4de658"}, - {file = "pyzmq-23.2.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39dd252b683816935702825e5bf775df16090619ced9bb4ba68c2d0b6f0c9b18"}, - {file = "pyzmq-23.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:84678153432241bcdca2210cf4ff83560b200556867aea913ffbb960f5d5f340"}, - {file = "pyzmq-23.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:90d88f9d9a2ae6cfb1dc4ea2d1710cdf6456bc1b9a06dd1bb485c5d298f2517e"}, - {file = "pyzmq-23.2.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:794871988c34727c7f79bdfe2546e6854ae1fa2e1feb382784f23a9c6c63ecb3"}, - {file = "pyzmq-23.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c56b1a62a1fb87565343c57b6743fd5da6e138b8c6562361d7d9b5ce4acf399a"}, - {file = "pyzmq-23.2.1-cp311-cp311-win32.whl", hash = "sha256:c3ebf1668664d20c8f7d468955f18379b7d1f7bc8946b13243d050fa3888c7ff"}, - {file = "pyzmq-23.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:ec9803aca9491fd6f0d853d2a6147f19f8deaaa23b1b713d05c5d09e56ea7142"}, - {file = "pyzmq-23.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:385609812eafd9970c3752c51f2f6c4f224807e3e441bcfd8c8273877d00c8a8"}, - {file = "pyzmq-23.2.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b861db65f6b8906c8d6db51dde2448f266f0c66bf28db2c37aea50f58a849859"}, - {file = "pyzmq-23.2.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6b1e79bba24f6df1712e3188d5c32c480d8eda03e8ecff44dc8ecb0805fa62f3"}, - {file = "pyzmq-23.2.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8dc66f109a245653b19df0f44a5af7a3f14cb8ad6c780ead506158a057bd36ce"}, - {file = "pyzmq-23.2.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b815991c7d024bf461f358ad871f2be1135576274caed5749c4828859e40354e"}, - {file = "pyzmq-23.2.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:29b74774a0bfd3c4d98ac853f0bdca55bd9ec89d5b0def5486407cca54472ef8"}, - {file = "pyzmq-23.2.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4bb798bef181648827019001f6be43e1c48b34b477763b37a8d27d8c06d197b8"}, - {file = "pyzmq-23.2.1-cp36-cp36m-win32.whl", hash = "sha256:565bd5ab81f6964fc4067ccf2e00877ad0fa917308975694bbb54378389215f8"}, - {file = "pyzmq-23.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:1f368a82b29f80071781b20663c0fc0c8f6b13273f9f5abe1526af939534f90f"}, - {file = "pyzmq-23.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c9cfaf530e6a7ff65f0afe275e99f983f68b54dfb23ea401f0bc297a632766b6"}, - {file = "pyzmq-23.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c558b50402fca1acc94329c5d8f12aa429738904a5cfb32b9ed3c61235221bb"}, - {file = "pyzmq-23.2.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:20bafc4095eab00f41a510579363a3f5e1f5c69d7ee10f1d88895c4df0259183"}, - {file = "pyzmq-23.2.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f619fd38fc2641abfb53cca719c165182500600b82c695cc548a0f05f764be05"}, - {file = "pyzmq-23.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:044447ae4b2016a6b8697571fd633f799f860b19b76c4a2fd9b1140d52ee6745"}, - {file = "pyzmq-23.2.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:49d30ba7074f469e8167917abf9eb854c6503ae10153034a6d4df33618f1db5f"}, - {file = "pyzmq-23.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:48400b96788cdaca647021bf19a9cd668384f46e4d9c55cf045bdd17f65299c8"}, - {file = "pyzmq-23.2.1-cp37-cp37m-win32.whl", hash = "sha256:8a68f57b7a3f7b6b52ada79876be1efb97c8c0952423436e84d70cc139f16f0d"}, - {file = "pyzmq-23.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9e5bf6e7239fc9687239de7a283aa8b801ab85371116045b33ae20132a1325d6"}, - {file = "pyzmq-23.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ffc6b1623d0f9affb351db4ca61f432dca3628a5ee015f9bf2bfbe9c6836881c"}, - {file = "pyzmq-23.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4d6f110c56f7d5b4d64dde3a382ae61b6d48174e30742859d8e971b18b6c9e5c"}, - {file = "pyzmq-23.2.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9269fbfe3a4eb2009199120861c4571ef1655fdf6951c3e7f233567c94e8c602"}, - {file = "pyzmq-23.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12e62ff0d5223ec09b597ab6d73858b9f64a51221399f3cb08aa495e1dff7935"}, - {file = "pyzmq-23.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6fd5d0d50cbcf4bc376861529a907bed026a4cbe8c22a500ff8243231ef02433"}, - {file = "pyzmq-23.2.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9d0ab2936085c85a1fc6f9fd8f89d5235ae99b051e90ec5baa5e73ad44346e1f"}, - {file = "pyzmq-23.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:022cf5ea7bcaa8a06a03c2706e0ae66904b6138b2155577cd34c64bc7cc637ab"}, - {file = "pyzmq-23.2.1-cp38-cp38-win32.whl", hash = "sha256:28dbdb90b2f6b131f8f10e6081012e4e25234213433420e67e0c1162de537113"}, - {file = "pyzmq-23.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:10d1910ec381b851aeb024a042a13db178cb1edf125e76a4e9d2548ad103aadb"}, - {file = "pyzmq-23.2.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:99a5a77a10863493a1ee8dece02578c6b32025fb3afff91b40476bc489e81648"}, - {file = "pyzmq-23.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:aecd6ceaccc4b594e0092d6513ef3f1c0fa678dd89f86bb8ff1a47014b8fca35"}, - {file = "pyzmq-23.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:415ff62ac525d9add1e3550430a09b9928d2d24a20cc4ce809e67caac41219ab"}, - {file = "pyzmq-23.2.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67975a9e1237b9ccc78f457bef17691bbdd2055a9d26e81ee914ba376846d0ce"}, - {file = "pyzmq-23.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38e106b64bad744fe469dc3dd864f2764d66399178c1bf39d45294cc7980f14f"}, - {file = "pyzmq-23.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8c842109d31a9281d678f668629241c405928afbebd913c48a5a8e7aee61f63d"}, - {file = "pyzmq-23.2.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fefdf9b685fda4141b95ebec975946076a5e0723ff70b037032b2085c5317684"}, - {file = "pyzmq-23.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:79a87831b47a9f6161ad23fa5e89d5469dc585abc49f90b9b07fea8905ae1234"}, - {file = "pyzmq-23.2.1-cp39-cp39-win32.whl", hash = "sha256:342ca3077f47ec2ee41b9825142b614e03e026347167cbc72a59b618c4f6106c"}, - {file = "pyzmq-23.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:5e05492be125dce279721d6b54fd1b956546ecc4bcdfcf8e7b4c413bc0874c10"}, - {file = "pyzmq-23.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:07ed8aaf7ffe150af873269690cc654ffeca7491f62aae0f3821baa181f8d5fe"}, - {file = "pyzmq-23.2.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ad28ddb40db8e450d7d4bf8a1d765d3f87b63b10e7e9a825a3c130c6371a8c03"}, - {file = "pyzmq-23.2.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2f67b63f53c6994d601404fd1a329e6d940ac3dd1d92946a93b2b9c70df67b9f"}, - {file = "pyzmq-23.2.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c890309296f53f9aa32ffcfc51d805705e1982bffd27c9692a8f1e1b8de279f4"}, - {file = "pyzmq-23.2.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:624fd38071a817644acdae075b92a23ea0bdd126a58148288e8284d23ec361ce"}, - {file = "pyzmq-23.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a114992a193577cb62233abf8cb2832970f9975805a64740e325d2f895e7f85a"}, - {file = "pyzmq-23.2.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c780acddd2934c6831ff832ecbf78a45a7b62d4eb216480f863854a8b7d54fa7"}, - {file = "pyzmq-23.2.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d904f6595acfaaf99a1a61881fea068500c40374d263e5e073aa4005e5f9c28a"}, - {file = "pyzmq-23.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:929d548b74c0f82f7f95b54e4a43f9e4ce2523cfb8a54d3f7141e45652304b2a"}, - {file = "pyzmq-23.2.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f392cbea531b7142d1958c0d4a0c9c8d760dc451e5848d8dd3387804d3e3e62c"}, - {file = "pyzmq-23.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a0f09d85c45f58aa8e715b42f8b26beba68b3b63a8f7049113478aca26efbc30"}, - {file = "pyzmq-23.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e708fbfdf4ee3107422b69ca65da1b9f056b431fc0888096a8c1d6cd908e8f"}, - {file = "pyzmq-23.2.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35e635343ff367f697d00fa1484262bb68e36bc74c9b80737eac5a1e04c4e1b1"}, - {file = "pyzmq-23.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efb9e38b2a590282704269585de7eb33bf43dc294cad092e1b172e23d4c217e5"}, - {file = "pyzmq-23.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:407f909c4e8fde62fbdad9ebd448319792258cc0550c2815567a4d9d8d9e6d18"}, - {file = "pyzmq-23.2.1.tar.gz", hash = "sha256:2b381aa867ece7d0a82f30a0c7f3d4387b7cf2e0697e33efaa5bed6c5784abcd"}, + {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:28b119ba97129d3001673a697b7cce47fe6de1f7255d104c2f01108a5179a066"}, + {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bcbebd369493d68162cddb74a9c1fcebd139dfbb7ddb23d8f8e43e6c87bac3a6"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae61446166983c663cee42c852ed63899e43e484abf080089f771df4b9d272ef"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f7ac99b15270db8d53f28c3c7b968612993a90a5cf359da354efe96f5372b4"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dca7c3956b03b7663fac4d150f5e6d4f6f38b2462c1e9afd83bcf7019f17913"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8c78bfe20d4c890cb5580a3b9290f700c570e167d4cdcc55feec07030297a5e3"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:48f721f070726cd2a6e44f3c33f8ee4b24188e4b816e6dd8ba542c8c3bb5b246"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afe1f3bc486d0ce40abb0a0c9adb39aed3bbac36ebdc596487b0cceba55c21c1"}, + {file = "pyzmq-24.0.1-cp310-cp310-win32.whl", hash = "sha256:3e6192dbcefaaa52ed81be88525a54a445f4b4fe2fffcae7fe40ebb58bd06bfd"}, + {file = "pyzmq-24.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:86de64468cad9c6d269f32a6390e210ca5ada568c7a55de8e681ca3b897bb340"}, + {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:838812c65ed5f7c2bd11f7b098d2e5d01685a3f6d1f82849423b570bae698c00"}, + {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfb992dbcd88d8254471760879d48fb20836d91baa90f181c957122f9592b3dc"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7abddb2bd5489d30ffeb4b93a428130886c171b4d355ccd226e83254fcb6b9ef"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94010bd61bc168c103a5b3b0f56ed3b616688192db7cd5b1d626e49f28ff51b3"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8242543c522d84d033fe79be04cb559b80d7eb98ad81b137ff7e0a9020f00ace"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ccb94342d13e3bf3ffa6e62f95b5e3f0bc6bfa94558cb37f4b3d09d6feb536ff"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6640f83df0ae4ae1104d4c62b77e9ef39be85ebe53f636388707d532bee2b7b8"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a180dbd5ea5d47c2d3b716d5c19cc3fb162d1c8db93b21a1295d69585bfddac1"}, + {file = "pyzmq-24.0.1-cp311-cp311-win32.whl", hash = "sha256:624321120f7e60336be8ec74a172ae7fba5c3ed5bf787cc85f7e9986c9e0ebc2"}, + {file = "pyzmq-24.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:1724117bae69e091309ffb8255412c4651d3f6355560d9af312d547f6c5bc8b8"}, + {file = "pyzmq-24.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:15975747462ec49fdc863af906bab87c43b2491403ab37a6d88410635786b0f4"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b947e264f0e77d30dcbccbb00f49f900b204b922eb0c3a9f0afd61aaa1cedc3d"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ec91f1bad66f3ee8c6deb65fa1fe418e8ad803efedd69c35f3b5502f43bd1dc"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:db03704b3506455d86ec72c3358a779e9b1d07b61220dfb43702b7b668edcd0d"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e7e66b4e403c2836ac74f26c4b65d8ac0ca1eef41dfcac2d013b7482befaad83"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7a23ccc1083c260fa9685c93e3b170baba45aeed4b524deb3f426b0c40c11639"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fa0ae3275ef706c0309556061185dd0e4c4cd3b7d6f67ae617e4e677c7a41e2e"}, + {file = "pyzmq-24.0.1-cp36-cp36m-win32.whl", hash = "sha256:f01de4ec083daebf210531e2cca3bdb1608dbbbe00a9723e261d92087a1f6ebc"}, + {file = "pyzmq-24.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:de4217b9eb8b541cf2b7fde4401ce9d9a411cc0af85d410f9d6f4333f43640be"}, + {file = "pyzmq-24.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:78068e8678ca023594e4a0ab558905c1033b2d3e806a0ad9e3094e231e115a33"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77c2713faf25a953c69cf0f723d1b7dd83827b0834e6c41e3fb3bbc6765914a1"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bb4af15f305056e95ca1bd086239b9ebc6ad55e9f49076d27d80027f72752f6"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0f14cffd32e9c4c73da66db97853a6aeceaac34acdc0fae9e5bbc9370281864c"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0108358dab8c6b27ff6b985c2af4b12665c1bc659648284153ee501000f5c107"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d66689e840e75221b0b290b0befa86f059fb35e1ee6443bce51516d4d61b6b99"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae08ac90aa8fa14caafc7a6251bd218bf6dac518b7bff09caaa5e781119ba3f2"}, + {file = "pyzmq-24.0.1-cp37-cp37m-win32.whl", hash = "sha256:8421aa8c9b45ea608c205db9e1c0c855c7e54d0e9c2c2f337ce024f6843cab3b"}, + {file = "pyzmq-24.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54d8b9c5e288362ec8595c1d98666d36f2070fd0c2f76e2b3c60fbad9bd76227"}, + {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:acbd0a6d61cc954b9f535daaa9ec26b0a60a0d4353c5f7c1438ebc88a359a47e"}, + {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:47b11a729d61a47df56346283a4a800fa379ae6a85870d5a2e1e4956c828eedc"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abe6eb10122f0d746a0d510c2039ae8edb27bc9af29f6d1b05a66cc2401353ff"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:07bec1a1b22dacf718f2c0e71b49600bb6a31a88f06527dfd0b5aababe3fa3f7"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d945a85b70da97ae86113faf9f1b9294efe66bd4a5d6f82f2676d567338b66"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1b7928bb7580736ffac5baf814097be342ba08d3cfdfb48e52773ec959572287"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b946da90dc2799bcafa682692c1d2139b2a96ec3c24fa9fc6f5b0da782675330"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c8840f064b1fb377cffd3efeaad2b190c14d4c8da02316dae07571252d20b31f"}, + {file = "pyzmq-24.0.1-cp38-cp38-win32.whl", hash = "sha256:4854f9edc5208f63f0841c0c667260ae8d6846cfa233c479e29fdc85d42ebd58"}, + {file = "pyzmq-24.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:42d4f97b9795a7aafa152a36fe2ad44549b83a743fd3e77011136def512e6c2a"}, + {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:52afb0ac962963fff30cf1be775bc51ae083ef4c1e354266ab20e5382057dd62"}, + {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bad8210ad4df68c44ff3685cca3cda448ee46e20d13edcff8909eba6ec01ca4"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dabf1a05318d95b1537fd61d9330ef4313ea1216eea128a17615038859da3b3b"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5bd3d7dfd9cd058eb68d9a905dec854f86649f64d4ddf21f3ec289341386c44b"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8012bce6836d3f20a6c9599f81dfa945f433dab4dbd0c4917a6fb1f998ab33d"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c31805d2c8ade9b11feca4674eee2b9cce1fec3e8ddb7bbdd961a09dc76a80ea"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3104f4b084ad5d9c0cb87445cc8cfd96bba710bef4a66c2674910127044df209"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df0841f94928f8af9c7a1f0aaaffba1fb74607af023a152f59379c01c53aee58"}, + {file = "pyzmq-24.0.1-cp39-cp39-win32.whl", hash = "sha256:a435ef8a3bd95c8a2d316d6e0ff70d0db524f6037411652803e118871d703333"}, + {file = "pyzmq-24.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:2032d9cb994ce3b4cba2b8dfae08c7e25bc14ba484c770d4d3be33c27de8c45b"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bb5635c851eef3a7a54becde6da99485eecf7d068bd885ac8e6d173c4ecd68b0"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:83ea1a398f192957cb986d9206ce229efe0ee75e3c6635baff53ddf39bd718d5"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:941fab0073f0a54dc33d1a0460cb04e0d85893cb0c5e1476c785000f8b359409"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8f482c44ccb5884bf3f638f29bea0f8dc68c97e38b2061769c4cb697f6140d"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:613010b5d17906c4367609e6f52e9a2595e35d5cc27d36ff3f1b6fa6e954d944"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:65c94410b5a8355cfcf12fd600a313efee46ce96a09e911ea92cf2acf6708804"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:20e7eeb1166087db636c06cae04a1ef59298627f56fb17da10528ab52a14c87f"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2712aee7b3834ace51738c15d9ee152cc5a98dc7d57dd93300461b792ab7b43"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a7c280185c4da99e0cc06c63bdf91f5b0b71deb70d8717f0ab870a43e376db8"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:858375573c9225cc8e5b49bfac846a77b696b8d5e815711b8d4ba3141e6e8879"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:80093b595921eed1a2cead546a683b9e2ae7f4a4592bb2ab22f70d30174f003a"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f3f3154fde2b1ff3aa7b4f9326347ebc89c8ef425ca1db8f665175e6d3bd42f"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abb756147314430bee5d10919b8493c0ccb109ddb7f5dfd2fcd7441266a25b75"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e706bac34e9f50779cb8c39f10b53a4d15aebb97235643d3112ac20bd577b4"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:687700f8371643916a1d2c61f3fdaa630407dd205c38afff936545d7b7466066"}, + {file = "pyzmq-24.0.1.tar.gz", hash = "sha256:216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77"}, ] rdflib = [ {file = "rdflib-5.0.0-py3-none-any.whl", hash = "sha256:88208ea971a87886d60ae2b1a4b2cdc263527af0454c422118d43fe64b357877"}, {file = "rdflib-5.0.0.tar.gz", hash = "sha256:78149dd49d385efec3b3adfbd61c87afaf1281c30d3fcaf1b323b34f603fb155"}, ] regex = [ - {file = "regex-2022.8.17-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:840063aa8eeb1dda07d7d7dee15648838bffef1d415f5f79061854a182a429aa"}, - {file = "regex-2022.8.17-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1df31eaf147ecff3665ba861acb8f78221cd5501df072c9151dfa341dd24599f"}, - {file = "regex-2022.8.17-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:085ca3dc9360c0210e0a70e5d34d66454a06077644e7679fef6358b1f053e62e"}, - {file = "regex-2022.8.17-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21b6f939916aa61beea56393ebc8a9999060632ac22b8193c2cb67d6fd7cb2c3"}, - {file = "regex-2022.8.17-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a9d5a64e974bc5f160f30f76aaf993d49eeddb405676be6bf76a5a2c131e185"}, - {file = "regex-2022.8.17-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d13bd83284b46c304eb10de93f8a3f2c80361f91f4e8a4e1273caf83e16c4409"}, - {file = "regex-2022.8.17-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a52d547259495a53e61e37ffc6d5cecf8d298aeb1bc0d9b25289d65ddb31183"}, - {file = "regex-2022.8.17-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:be6f5b453f7ed2219a9555bb6840663950b9ab1dc034216f68eac64db66633c2"}, - {file = "regex-2022.8.17-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a1e283ad918df44bad3ccf042c2fe283c63d17617570eb91b8c370ef677b0b83"}, - {file = "regex-2022.8.17-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5d541bc430a74c787684d1ebcd205a5212a88c3de73848143e77489b2c25b911"}, - {file = "regex-2022.8.17-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c78c72f7878071a78337510ec78ab856d60b4bdcd3a95fd68b939e7cb30434b3"}, - {file = "regex-2022.8.17-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6b30c8d299ba48ee919064628fd8bc296bdc6e4827d315491bea39437130d3e1"}, - {file = "regex-2022.8.17-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02b6dc102123f5178796dcdb5a90f6e88895607fd1a1d115d8de1af8161ca2b4"}, - {file = "regex-2022.8.17-cp310-cp310-win32.whl", hash = "sha256:5f14430535645712f546f1e07013507d1cc0c8abd851811dacce8c7fb584bf52"}, - {file = "regex-2022.8.17-cp310-cp310-win_amd64.whl", hash = "sha256:c4f6609f6e867a58cdf173e1cbe1f3736d25962108bd5cb01ad5a130875ff2c8"}, - {file = "regex-2022.8.17-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4dad9d68574e93e1e23be53b4ecfb0f083bd5cc08cc7f1984a4ee3ebf12aa446"}, - {file = "regex-2022.8.17-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62d56a9d3c1e5a83076db4da060dad7ea35ac2f3cbd3c53ba5a51fe0caedb500"}, - {file = "regex-2022.8.17-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61f6966371fa1cbf26c6209771a02bef80336cdaca0c0af4dfa33d51019c0b93"}, - {file = "regex-2022.8.17-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76dd2c0615a28de21c97f9f6862e84faef58ff4d700196b4e395ef6a52291e4"}, - {file = "regex-2022.8.17-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:370b1d7aed26e29915c3fb3e72e327f194824a76cedb60c0b9f6c6af53e89d72"}, - {file = "regex-2022.8.17-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:634f090a388351eadf1dcc1d168a190718fb68efb4b8fdc1b119cf837ca01905"}, - {file = "regex-2022.8.17-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:79f34d5833cd0d53ecf48bc030e4da3216bd4846224d17eeb64509be5cb098fd"}, - {file = "regex-2022.8.17-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ddecc80e87acf12c2cf12bf3721def47188c403f04e706f104b5e71fed2f31"}, - {file = "regex-2022.8.17-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6f62c8a59f6b8e608880c61b138ae22668184bc266b025d33200dcf2cebe0872"}, - {file = "regex-2022.8.17-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:95fb62a3980cf43e76c2fe95edab06ec70dc495b8aa660975eb9f0b2ffdae1e1"}, - {file = "regex-2022.8.17-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:0de0ce11c0835e1117eacbfe8fa6fa98dc0e8e746b486735cb0fdebe46a02222"}, - {file = "regex-2022.8.17-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:abe1adb32e2535aaa171e8b2b2d3f083f863c9974a3e6e7dae6bf4827fc8b983"}, - {file = "regex-2022.8.17-cp36-cp36m-win32.whl", hash = "sha256:6059ae91667932d256d9dc03abd3512ebcade322b3a42d1b8354bd1db7f66dcc"}, - {file = "regex-2022.8.17-cp36-cp36m-win_amd64.whl", hash = "sha256:6af38997f178889d417851bae8fb5c00448f7405cfcab38734d771f1dd5d5973"}, - {file = "regex-2022.8.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cfa62063c5eafb04e4435459ce15746b4ae6c14efeae8f16bd0e3d2895dad698"}, - {file = "regex-2022.8.17-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64ecfcc386420192fbe98fdde777d993f7f2dfec9552e4f4024d3447d3a3e637"}, - {file = "regex-2022.8.17-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5910bb355f9517309f77101238dbacb7151ede3434a2f1fad26ecc62f13d8324"}, - {file = "regex-2022.8.17-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae85112da2d826b65aa7c7369c56ca41d9a89644312172979cbee5cf788e0b09"}, - {file = "regex-2022.8.17-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f0c8807bac16984901c0573725bad786f2f004f9bd5df8476c6431097b6c5b3"}, - {file = "regex-2022.8.17-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53c9eca0d6070a8a3de42182ad26daf90ba12132eb74a2f45702332762aff84e"}, - {file = "regex-2022.8.17-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e37886929ee83a5fa5c73164abada00e7f3cc1cbf3f8f6e1e8cfecae9d6cfc47"}, - {file = "regex-2022.8.17-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b3379a83dc63fe06538c751961f9ed730b5d7f08f96a57bbad8d52db5820df1f"}, - {file = "regex-2022.8.17-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d3d769b3d485b28d6a591b46723dbacc696e6503f48a3ef52e6fc2c90edb482"}, - {file = "regex-2022.8.17-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fafed60103132e74cdfbd651abe94801eb87a9765ce275b3dca9af8f3e06622a"}, - {file = "regex-2022.8.17-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:14750172c0a616140a8f496dfef28ed24080e87d06d5838e008f959ad307a8c5"}, - {file = "regex-2022.8.17-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3aafbbf5076f2a48bcf31ceb42b410323daaa0ddb42544640592957bc906ace6"}, - {file = "regex-2022.8.17-cp37-cp37m-win32.whl", hash = "sha256:74d4aabd612d32282f3cb3ebb4436046fb840d25c754157a755bc9f66e7cd307"}, - {file = "regex-2022.8.17-cp37-cp37m-win_amd64.whl", hash = "sha256:4bd9443f7ff6e6288dd4496215c5d903f851e55cbc09d5963587af0c6d565a0a"}, - {file = "regex-2022.8.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b3c7c6c4aac19b964c1d12784aecae7f0315314640b0f41dd6f0d4e2bf439072"}, - {file = "regex-2022.8.17-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bbaf6785d3f1cd3e617b9d0fb3c5528023ef7bc7cc1356234801dc1941df8ce9"}, - {file = "regex-2022.8.17-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d83fd6dd4263595d0e4f595d4abd54397cbed52c0147f7dd148a7b72910301e"}, - {file = "regex-2022.8.17-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b6d2c579ffdcbb3d93f63b6a7f697364594e1c1b6856958b3e61e3ca22c140a"}, - {file = "regex-2022.8.17-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e8ec94d1b1a0a297c2c69a0bf000baf9a79607ca0c084f577f811a9b447c319"}, - {file = "regex-2022.8.17-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bdfd016ab12c4075ef93f025b3cf4c8962b9b7a5e52bb7039ab64cb7755930c"}, - {file = "regex-2022.8.17-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb0c9a1476d279524538ba9a00ecec9eadcef31a6a60b2c8bd2f29f62044a559"}, - {file = "regex-2022.8.17-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25bffa248b99b53a61b1f20fc7d19f711e38e9f0bc90d44c26670f8dc282ad7d"}, - {file = "regex-2022.8.17-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0843cc977b9cc00eb2299b624db6481d25e7f5b093f7a7c2bb727028d4a26eda"}, - {file = "regex-2022.8.17-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4e12a3c2d4781ee5d03f229c940934fa1e4ea4f4995e68ab97a2815b139e0804"}, - {file = "regex-2022.8.17-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dc32029b9cc784a529f9201289d4f841cc24a2ae3126a112cd467bc41bbc2f10"}, - {file = "regex-2022.8.17-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4c6554073e3e554fbb3dff88376ada3da32ca789ea1b9e381f684d49ddb61199"}, - {file = "regex-2022.8.17-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2ada67e02fa3fcca9e3b90cf24c2c6bc77f0abc126209937956aea10eeba40c7"}, - {file = "regex-2022.8.17-cp38-cp38-win32.whl", hash = "sha256:1418d3506a9582b23a27373f125ea2b0da523c581e7cf678a6f036254d134faa"}, - {file = "regex-2022.8.17-cp38-cp38-win_amd64.whl", hash = "sha256:2c198921afc811bc0f105c6e5150fbdebf9520c9b7d43cfc0ab156ca97f506d7"}, - {file = "regex-2022.8.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7658d2dfc1dabfb008ffe12ae47b98559e2aedd8237bee12f5aafb74d90479e3"}, - {file = "regex-2022.8.17-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:242f546fc5e49bb7395624ac3b4fc168bf454e11ace9804c58c4c3a90d84e38f"}, - {file = "regex-2022.8.17-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7b88bc7306136b123fd1a9beed16ca02900ee31d1c36e73fa33d9e525a5562d"}, - {file = "regex-2022.8.17-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2240fce3af236e4586a045c1be8bbf16c4f8831e68b7df918b72fc31a80143be"}, - {file = "regex-2022.8.17-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0b55651db770b4b5a6c7d015f24d1a6ede307296bbdf0c47fc5f6a6adc7abee"}, - {file = "regex-2022.8.17-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9668da78bcc219542467f51c2cd01894222be6aceec4b5efb806705900b794d8"}, - {file = "regex-2022.8.17-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e7c8f9f8824143c219dd93cdc733c20d2c12f154034c89bcb4911db8e45bd92"}, - {file = "regex-2022.8.17-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c2b6404631b22617b5127c6de2355393ccda693ca733a098b6802e7dabb3457a"}, - {file = "regex-2022.8.17-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:45cb798095b886e4df6ff4a1f7661eb70620ccdef127e3c3e00a1aaa22d30e53"}, - {file = "regex-2022.8.17-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:777ceea2860a48e9e362a4e2a9a691782ea97bd05c24627c92e876fdd2c22e61"}, - {file = "regex-2022.8.17-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:99a7c5786de9e92ff5ffee2e8bed745f5d25495206f3f14656c379031e518334"}, - {file = "regex-2022.8.17-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d76e585368388d99ddd2f95989e6ac80a8fe23115e93931faad99fa34550612f"}, - {file = "regex-2022.8.17-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a25d251546acb5edb1635631c4ae0e330fa4ec7c6316c01d256728fbfb9bbff2"}, - {file = "regex-2022.8.17-cp39-cp39-win32.whl", hash = "sha256:fac611bde2609a46fcbd92da7171286faa2f5c191f84d22f61cd7dc27213f51d"}, - {file = "regex-2022.8.17-cp39-cp39-win_amd64.whl", hash = "sha256:ccb986e80674c929f198464bce55e995178dea26833421e2479ff04a6956afac"}, - {file = "regex-2022.8.17.tar.gz", hash = "sha256:5c77eab46f3a2b2cd8bbe06467df783543bf7396df431eb4a144cc4b89e9fb3c"}, + {file = "regex-2022.10.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a8ff454ef0bb061e37df03557afda9d785c905dab15584860f982e88be73015f"}, + {file = "regex-2022.10.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eba476b1b242620c266edf6325b443a2e22b633217a9835a52d8da2b5c051f9"}, + {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0e5af9a9effb88535a472e19169e09ce750c3d442fb222254a276d77808620b"}, + {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d03fe67b2325cb3f09be029fd5da8df9e6974f0cde2c2ac6a79d2634e791dd57"}, + {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9d0b68ac1743964755ae2d89772c7e6fb0118acd4d0b7464eaf3921c6b49dd4"}, + {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a45b6514861916c429e6059a55cf7db74670eaed2052a648e3e4d04f070e001"}, + {file = "regex-2022.10.31-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b0886885f7323beea6f552c28bff62cbe0983b9fbb94126531693ea6c5ebb90"}, + {file = "regex-2022.10.31-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5aefb84a301327ad115e9d346c8e2760009131d9d4b4c6b213648d02e2abe144"}, + {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:702d8fc6f25bbf412ee706bd73019da5e44a8400861dfff7ff31eb5b4a1276dc"}, + {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a3c1ebd4ed8e76e886507c9eddb1a891673686c813adf889b864a17fafcf6d66"}, + {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:50921c140561d3db2ab9f5b11c5184846cde686bb5a9dc64cae442926e86f3af"}, + {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7db345956ecce0c99b97b042b4ca7326feeec6b75facd8390af73b18e2650ffc"}, + {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:763b64853b0a8f4f9cfb41a76a4a85a9bcda7fdda5cb057016e7706fde928e66"}, + {file = "regex-2022.10.31-cp310-cp310-win32.whl", hash = "sha256:44136355e2f5e06bf6b23d337a75386371ba742ffa771440b85bed367c1318d1"}, + {file = "regex-2022.10.31-cp310-cp310-win_amd64.whl", hash = "sha256:bfff48c7bd23c6e2aec6454aaf6edc44444b229e94743b34bdcdda2e35126cf5"}, + {file = "regex-2022.10.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b4b1fe58cd102d75ef0552cf17242705ce0759f9695334a56644ad2d83903fe"}, + {file = "regex-2022.10.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:542e3e306d1669b25936b64917285cdffcd4f5c6f0247636fec037187bd93542"}, + {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c27cc1e4b197092e50ddbf0118c788d9977f3f8f35bfbbd3e76c1846a3443df7"}, + {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8e38472739028e5f2c3a4aded0ab7eadc447f0d84f310c7a8bb697ec417229e"}, + {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76c598ca73ec73a2f568e2a72ba46c3b6c8690ad9a07092b18e48ceb936e9f0c"}, + {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c28d3309ebd6d6b2cf82969b5179bed5fefe6142c70f354ece94324fa11bf6a1"}, + {file = "regex-2022.10.31-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9af69f6746120998cd9c355e9c3c6aec7dff70d47247188feb4f829502be8ab4"}, + {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a5f9505efd574d1e5b4a76ac9dd92a12acb2b309551e9aa874c13c11caefbe4f"}, + {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5ff525698de226c0ca743bfa71fc6b378cda2ddcf0d22d7c37b1cc925c9650a5"}, + {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4fe7fda2fe7c8890d454f2cbc91d6c01baf206fbc96d89a80241a02985118c0c"}, + {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2cdc55ca07b4e70dda898d2ab7150ecf17c990076d3acd7a5f3b25cb23a69f1c"}, + {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:44a6c2f6374e0033873e9ed577a54a3602b4f609867794c1a3ebba65e4c93ee7"}, + {file = "regex-2022.10.31-cp311-cp311-win32.whl", hash = "sha256:d8716f82502997b3d0895d1c64c3b834181b1eaca28f3f6336a71777e437c2af"}, + {file = "regex-2022.10.31-cp311-cp311-win_amd64.whl", hash = "sha256:61edbca89aa3f5ef7ecac8c23d975fe7261c12665f1d90a6b1af527bba86ce61"}, + {file = "regex-2022.10.31-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd"}, + {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d26166acf62f731f50bdd885b04b38828436d74e8e362bfcb8df221d868b5d9b"}, + {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac741bf78b9bb432e2d314439275235f41656e189856b11fb4e774d9f7246d81"}, + {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75f591b2055523fc02a4bbe598aa867df9e953255f0b7f7715d2a36a9c30065c"}, + {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bddd61d2a3261f025ad0f9ee2586988c6a00c780a2fb0a92cea2aa702c54"}, + {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5"}, + {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7b280948d00bd3973c1998f92e22aa3ecb76682e3a4255f33e1020bd32adf443"}, + {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:d0213671691e341f6849bf33cd9fad21f7b1cb88b89e024f33370733fec58742"}, + {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:22e7ebc231d28393dfdc19b185d97e14a0f178bedd78e85aad660e93b646604e"}, + {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:8ad241da7fac963d7573cc67a064c57c58766b62a9a20c452ca1f21050868dfa"}, + {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:586b36ebda81e6c1a9c5a5d0bfdc236399ba6595e1397842fd4a45648c30f35e"}, + {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4"}, + {file = "regex-2022.10.31-cp36-cp36m-win32.whl", hash = "sha256:144486e029793a733e43b2e37df16a16df4ceb62102636ff3db6033994711066"}, + {file = "regex-2022.10.31-cp36-cp36m-win_amd64.whl", hash = "sha256:c14b63c9d7bab795d17392c7c1f9aaabbffd4cf4387725a0ac69109fb3b550c6"}, + {file = "regex-2022.10.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4cac3405d8dda8bc6ed499557625585544dd5cbf32072dcc72b5a176cb1271c8"}, + {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23cbb932cc53a86ebde0fb72e7e645f9a5eec1a5af7aa9ce333e46286caef783"}, + {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74bcab50a13960f2a610cdcd066e25f1fd59e23b69637c92ad470784a51b1347"}, + {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78d680ef3e4d405f36f0d6d1ea54e740366f061645930072d39bca16a10d8c93"}, + {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce6910b56b700bea7be82c54ddf2e0ed792a577dfaa4a76b9af07d550af435c6"}, + {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:659175b2144d199560d99a8d13b2228b85e6019b6e09e556209dfb8c37b78a11"}, + {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1ddf14031a3882f684b8642cb74eea3af93a2be68893901b2b387c5fd92a03ec"}, + {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b683e5fd7f74fb66e89a1ed16076dbab3f8e9f34c18b1979ded614fe10cdc4d9"}, + {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2bde29cc44fa81c0a0c8686992c3080b37c488df167a371500b2a43ce9f026d1"}, + {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4919899577ba37f505aaebdf6e7dc812d55e8f097331312db7f1aab18767cce8"}, + {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:9c94f7cc91ab16b36ba5ce476f1904c91d6c92441f01cd61a8e2729442d6fcf5"}, + {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae1e96785696b543394a4e3f15f3f225d44f3c55dafe3f206493031419fedf95"}, + {file = "regex-2022.10.31-cp37-cp37m-win32.whl", hash = "sha256:c670f4773f2f6f1957ff8a3962c7dd12e4be54d05839b216cb7fd70b5a1df394"}, + {file = "regex-2022.10.31-cp37-cp37m-win_amd64.whl", hash = "sha256:8e0caeff18b96ea90fc0eb6e3bdb2b10ab5b01a95128dfeccb64a7238decf5f0"}, + {file = "regex-2022.10.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:131d4be09bea7ce2577f9623e415cab287a3c8e0624f778c1d955ec7c281bd4d"}, + {file = "regex-2022.10.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8"}, + {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad"}, + {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa62a07ac93b7cb6b7d0389d8ef57ffc321d78f60c037b19dfa78d6b17c928ee"}, + {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5352bea8a8f84b89d45ccc503f390a6be77917932b1c98c4cdc3565137acc714"}, + {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20f61c9944f0be2dc2b75689ba409938c14876c19d02f7585af4460b6a21403e"}, + {file = "regex-2022.10.31-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29c04741b9ae13d1e94cf93fca257730b97ce6ea64cfe1eba11cf9ac4e85afb6"}, + {file = "regex-2022.10.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:543883e3496c8b6d58bd036c99486c3c8387c2fc01f7a342b760c1ea3158a318"}, + {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7a8b43ee64ca8f4befa2bea4083f7c52c92864d8518244bfa6e88c751fa8fff"}, + {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6a9a19bea8495bb419dc5d38c4519567781cd8d571c72efc6aa959473d10221a"}, + {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6ffd55b5aedc6f25fd8d9f905c9376ca44fcf768673ffb9d160dd6f409bfda73"}, + {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4bdd56ee719a8f751cf5a593476a441c4e56c9b64dc1f0f30902858c4ef8771d"}, + {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ca88da1bd78990b536c4a7765f719803eb4f8f9971cc22d6ca965c10a7f2c4c"}, + {file = "regex-2022.10.31-cp38-cp38-win32.whl", hash = "sha256:5a260758454580f11dd8743fa98319bb046037dfab4f7828008909d0aa5292bc"}, + {file = "regex-2022.10.31-cp38-cp38-win_amd64.whl", hash = "sha256:5e6a5567078b3eaed93558842346c9d678e116ab0135e22eb72db8325e90b453"}, + {file = "regex-2022.10.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5217c25229b6a85049416a5c1e6451e9060a1edcf988641e309dbe3ab26d3e49"}, + {file = "regex-2022.10.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4bf41b8b0a80708f7e0384519795e80dcb44d7199a35d52c15cc674d10b3081b"}, + {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf0da36a212978be2c2e2e2d04bdff46f850108fccc1851332bcae51c8907cc"}, + {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d403d781b0e06d2922435ce3b8d2376579f0c217ae491e273bab8d092727d244"}, + {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a37d51fa9a00d265cf73f3de3930fa9c41548177ba4f0faf76e61d512c774690"}, + {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185"}, + {file = "regex-2022.10.31-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d243b36fbf3d73c25e48014961e83c19c9cc92530516ce3c43050ea6276a2ab7"}, + {file = "regex-2022.10.31-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:370f6e97d02bf2dd20d7468ce4f38e173a124e769762d00beadec3bc2f4b3bc4"}, + {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:597f899f4ed42a38df7b0e46714880fb4e19a25c2f66e5c908805466721760f5"}, + {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7dbdce0c534bbf52274b94768b3498abdf675a691fec5f751b6057b3030f34c1"}, + {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:22960019a842777a9fa5134c2364efaed5fbf9610ddc5c904bd3a400973b0eb8"}, + {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7f5a3ffc731494f1a57bd91c47dc483a1e10048131ffb52d901bfe2beb6102e8"}, + {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7ef6b5942e6bfc5706301a18a62300c60db9af7f6368042227ccb7eeb22d0892"}, + {file = "regex-2022.10.31-cp39-cp39-win32.whl", hash = "sha256:395161bbdbd04a8333b9ff9763a05e9ceb4fe210e3c7690f5e68cedd3d65d8e1"}, + {file = "regex-2022.10.31-cp39-cp39-win_amd64.whl", hash = "sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692"}, + {file = "regex-2022.10.31.tar.gz", hash = "sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83"}, ] requests = [ {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, @@ -3104,36 +3318,39 @@ ruamel-yaml = [ {file = "ruamel.yaml-0.17.17.tar.gz", hash = "sha256:9751de4cbb57d4bfbf8fc394e125ed4a2f170fbff3dc3d78abf50be85924f8be"}, ] ruamel-yaml-clib = [ - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e7be2c5bcb297f5b82fee9c665eb2eb7001d1050deaba8471842979293a80b0"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:066f886bc90cc2ce44df8b5f7acfc6a7e2b2e672713f027136464492b0c34d7c"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:221eca6f35076c6ae472a531afa1c223b9c29377e62936f61bc8e6e8bdc5f9e7"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win32.whl", hash = "sha256:1070ba9dd7f9370d0513d649420c3b362ac2d687fe78c6e888f5b12bf8bc7bee"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:77df077d32921ad46f34816a9a16e6356d8100374579bc35e15bab5d4e9377de"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:cfdb9389d888c5b74af297e51ce357b800dd844898af9d4a547ffc143fa56751"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win32.whl", hash = "sha256:ada3f400d9923a190ea8b59c8f60680c4ef8a4b0dfae134d2f2ff68429adfab5"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win_amd64.whl", hash = "sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d67f273097c368265a7b81e152e07fb90ed395df6e552b9fa858c6d2c9f42502"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:72a2b8b2ff0a627496aad76f37a652bcef400fd861721744201ef1b45199ab78"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d3c620a54748a3d4cf0bcfe623e388407c8e85a4b06b8188e126302bcab93ea8"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-win32.whl", hash = "sha256:9efef4aab5353387b07f6b22ace0867032b900d8e91674b5d8ea9150db5cae94"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-win_amd64.whl", hash = "sha256:846fc8336443106fe23f9b6d6b8c14a53d38cef9a375149d61f99d78782ea468"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:78988ed190206672da0f5d50c61afef8f67daa718d614377dcd5e3ed85ab4a99"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:210c8fcfeff90514b7133010bf14e3bad652c8efde6b20e00c43854bf94fa5a6"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-win32.whl", hash = "sha256:a49e0161897901d1ac9c4a79984b8410f450565bbad64dbfcbf76152743a0cdb"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-win_amd64.whl", hash = "sha256:bf75d28fa071645c529b5474a550a44686821decebdd00e21127ef1fd566eabe"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a32f8d81ea0c6173ab1b3da956869114cae53ba1e9f72374032e33ba3118c233"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7f7ecb53ae6848f959db6ae93bdff1740e651809780822270eab111500842a84"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:61bc5e5ca632d95925907c569daa559ea194a4d16084ba86084be98ab1cec1c6"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-win32.whl", hash = "sha256:89221ec6d6026f8ae859c09b9718799fea22c0e8da8b766b0b2c9a9ba2db326b"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-win_amd64.whl", hash = "sha256:31ea73e564a7b5fbbe8188ab8b334393e06d997914a4e184975348f204790277"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1866cf2c284a03b9524a5cc00daca56d80057c5ce3cdc86a52020f4c720856f0"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1b4139a6ffbca8ef60fdaf9b33dec05143ba746a6f0ae0f9d11d38239211d335"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-win32.whl", hash = "sha256:3fb9575a5acd13031c57a62cc7823e5d2ff8bc3835ba4d94b921b4e6ee664104"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-win_amd64.whl", hash = "sha256:825d5fccef6da42f3c8eccd4281af399f21c02b32d98e113dbc631ea6a6ecbc7"}, - {file = "ruamel.yaml.clib-0.2.6.tar.gz", hash = "sha256:4ff604ce439abb20794f05613c374759ce10e3595d1867764dd1ae675b85acbd"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, + {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, ] scipy = [ {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"}, @@ -3182,6 +3399,10 @@ six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +sniffio = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, @@ -3223,19 +3444,16 @@ swagger-ui-bundle = [ {file = "swagger_ui_bundle-0.0.9.tar.gz", hash = "sha256:b462aa1460261796ab78fd4663961a7f6f347ce01760f1303bbbdf630f11f516"}, ] synapseclient = [ - {file = "synapseclient-2.6.0-py3-none-any.whl", hash = "sha256:4dae5cac78c2d5d88dc54796b403c55db7808488ffad4e1e8569fde9d1650a61"}, - {file = "synapseclient-2.6.0.tar.gz", hash = "sha256:ab204f88199eb4260473083a176e5546d2ef7f37bb28772810d3081e27a63565"}, + {file = "synapseclient-2.7.0-py3-none-any.whl", hash = "sha256:29f5e3c87474cb2629e9ce77c97e81e80a08f24ec2c5889f9fba14530b8c4bf7"}, + {file = "synapseclient-2.7.0.tar.gz", hash = "sha256:241f170f0e8c8c3735cd73f81711e592a581c55f7a5c4566be7bee82d72a56bc"}, ] tenacity = [ - {file = "tenacity-8.0.1-py3-none-any.whl", hash = "sha256:f78f4ea81b0fabc06728c11dc2a8c01277bfc5181b321a4770471902e3eb844a"}, - {file = "tenacity-8.0.1.tar.gz", hash = "sha256:43242a20e3e73291a28bcbcacfd6e000b02d3857a9a9fff56b297a27afdc932f"}, -] -termcolor = [ - {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, + {file = "tenacity-8.1.0-py3-none-any.whl", hash = "sha256:35525cd47f82830069f0d6b73f7eb83bc5b73ee2fff0437952cedf98b27653ac"}, + {file = "tenacity-8.1.0.tar.gz", hash = "sha256:e48c437fdf9340f5666b92cd7990e96bc5fc955e1298baf4a907e3972067a445"}, ] terminado = [ - {file = "terminado-0.15.0-py3-none-any.whl", hash = "sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197"}, - {file = "terminado-0.15.0.tar.gz", hash = "sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"}, + {file = "terminado-0.17.0-py3-none-any.whl", hash = "sha256:bf6fe52accd06d0661d7611cc73202121ec6ee51e46d8185d489ac074ca457c2"}, + {file = "terminado-0.17.0.tar.gz", hash = "sha256:520feaa3aeab8ad64a69ca779be54be9234edb2d0d6567e76c93c2c9a4e6e43f"}, ] testpath = [ {file = "testpath-0.6.0-py3-none-any.whl", hash = "sha256:8ada9f80a2ac6fb0391aa7cdb1a7d11cfa8429f693eda83f74dde570fe6fa639"}, @@ -3263,12 +3481,12 @@ tornado = [ {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, ] tqdm = [ - {file = "tqdm-4.64.0-py2.py3-none-any.whl", hash = "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6"}, - {file = "tqdm-4.64.0.tar.gz", hash = "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d"}, + {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"}, + {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, ] traitlets = [ - {file = "traitlets-5.3.0-py3-none-any.whl", hash = "sha256:65fa18961659635933100db8ca120ef6220555286949774b9cfc106f941d1c7a"}, - {file = "traitlets-5.3.0.tar.gz", hash = "sha256:0bb9f1f9f017aa8ec187d8b1b2a7a6626a2a1d877116baba52a129bfa124f8e2"}, + {file = "traitlets-5.6.0-py3-none-any.whl", hash = "sha256:1410755385d778aed847d68deb99b3ba30fbbf489e17a1e8cbb753060d5cce73"}, + {file = "traitlets-5.6.0.tar.gz", hash = "sha256:10b6ed1c9cedee83e795db70a8b9c2db157bb3778ec4587a349ecb7ef3b1033b"}, ] typed-ast = [ {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, @@ -3297,12 +3515,12 @@ typed-ast = [ {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, ] typing-extensions = [ - {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, - {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, ] tzdata = [ - {file = "tzdata-2022.2-py2.py3-none-any.whl", hash = "sha256:c3119520447d68ef3eb8187a55a4f44fa455f30eb1b4238fa5691ba094f2b05b"}, - {file = "tzdata-2022.2.tar.gz", hash = "sha256:21f4f0d7241572efa7f7a4fdabb052e61b55dc48274e6842697ccdf5253e5451"}, + {file = "tzdata-2022.6-py2.py3-none-any.whl", hash = "sha256:04a680bdc5b15750c39c12a448885a51134a27ec9af83667663f0b3a1bf3f342"}, + {file = "tzdata-2022.6.tar.gz", hash = "sha256:91f11db4503385928c15598c98573e3af07e7229181bee5375bd30f1695ddcae"}, ] tzlocal = [ {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"}, @@ -3313,8 +3531,8 @@ uritemplate = [ {file = "uritemplate-3.0.1.tar.gz", hash = "sha256:5af8ad10cec94f215e3f48112de2022e1d5a37ed427fbd88652fa908f2ab7cae"}, ] urllib3 = [ - {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, - {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, + {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, + {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, ] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, @@ -3324,17 +3542,21 @@ webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] +websocket-client = [ + {file = "websocket-client-1.4.2.tar.gz", hash = "sha256:d6e8f90ca8e2dd4e8027c4561adeb9456b54044312dba655e7cae652ceb9ae59"}, + {file = "websocket_client-1.4.2-py3-none-any.whl", hash = "sha256:d6b06432f184438d99ac1f456eaf22fe1ade524c3dd16e661142dc54e9cba574"}, +] werkzeug = [ {file = "Werkzeug-1.0.1-py2.py3-none-any.whl", hash = "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43"}, {file = "Werkzeug-1.0.1.tar.gz", hash = "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"}, ] wheel = [ - {file = "wheel-0.37.1-py2.py3-none-any.whl", hash = "sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a"}, - {file = "wheel-0.37.1.tar.gz", hash = "sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4"}, + {file = "wheel-0.38.4-py3-none-any.whl", hash = "sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8"}, + {file = "wheel-0.38.4.tar.gz", hash = "sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac"}, ] widgetsnbextension = [ - {file = "widgetsnbextension-4.0.2-py3-none-any.whl", hash = "sha256:966bd61443926b6adcc0abef9f499c48bdeda181c333b0f49842d7385d440579"}, - {file = "widgetsnbextension-4.0.2.tar.gz", hash = "sha256:07f0e8582f920b24316cef16490f1aeb498f2c875d48980540e5c5dbf0ff5e2d"}, + {file = "widgetsnbextension-4.0.3-py3-none-any.whl", hash = "sha256:7f3b0de8fda692d31ef03743b598620e31c2668b835edbd3962d080ccecf31eb"}, + {file = "widgetsnbextension-4.0.3.tar.gz", hash = "sha256:34824864c062b0b3030ad78210db5ae6a3960dfb61d5b27562d6631774de0286"}, ] wrapt = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, @@ -3403,6 +3625,6 @@ wrapt = [ {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] zipp = [ - {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, - {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, + {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"}, + {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"}, ] diff --git a/pyproject.toml b/pyproject.toml index ef6932db7..9ca4d70e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,6 +67,7 @@ openpyxl = "^3.0.9" "backports.zoneinfo" = {markers = "python_version < \"3.9\"", version = "^0.2.1"} Flask-Cors = "^3.0.10" pdoc = "^12.2.0" +dateparser = "^1.1.4" [tool.poetry.dev-dependencies] From 6c23312795942b4430f4bda7c02fee8186fe29ac Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 30 Nov 2022 13:34:57 -0500 Subject: [PATCH 025/114] remove print --- schematic/manifest/commands.py | 1 - 1 file changed, 1 deletion(-) diff --git a/schematic/manifest/commands.py b/schematic/manifest/commands.py index d0b265c49..7107a0aff 100644 --- a/schematic/manifest/commands.py +++ b/schematic/manifest/commands.py @@ -157,7 +157,6 @@ def create_single_manifest(data_type, output_csv=None, output_xlsx=None): output_format = None output_path = None - print('dataset_id', dataset_id) result = manifest_generator.get_manifest( dataset_id=dataset_id, sheet_url=sheet_url, json_schema=json_schema, output_format = output_format, output_path = output_path ) From cba0565d236d9344330b19b4a807a4f6f5d02bfe Mon Sep 17 00:00:00 2001 From: linglp Date: Wed, 30 Nov 2022 14:20:33 -0500 Subject: [PATCH 026/114] add tab --- schematic/manifest/generator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/schematic/manifest/generator.py b/schematic/manifest/generator.py index 9f738d79b..4aa493faa 100644 --- a/schematic/manifest/generator.py +++ b/schematic/manifest/generator.py @@ -1132,8 +1132,8 @@ def _create_requests_body( create_dropdown = self._request_dropdown( i, req_vals, spreadsheet_id, validation_rules, valid_values ) - if create_dropdown: - requests_body["requests"].append(create_dropdown) + if create_dropdown: + requests_body["requests"].append(create_dropdown) # generate a conditional format rule for each required value (i.e. valid value) # for this field (i.e. if this field is set to a valid value that may require additional From 645dd61dcc2f8e5d3f7668fcbe2e64ada5e33a14 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 30 Nov 2022 12:26:00 -0700 Subject: [PATCH 027/114] Revert "add new rule to model" This reverts commit 162adde352b7a9ddad5e581e1b5367ca1d0d0a52. --- tests/data/example.model.csv | 2 +- tests/data/example.model.jsonld | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/data/example.model.csv b/tests/data/example.model.csv index 3a6aaacda..cfe08da33 100644 --- a/tests/data/example.model.csv +++ b/tests/data/example.model.csv @@ -36,4 +36,4 @@ Check Recommended,,,,,FALSE,DataProperty,,,recommended Check Ages,,,,,TRUE,DataProperty,,,protectAges Check Unique,,,,,TRUE,DataProperty,,,unique error Check Range,,,,,TRUE,DataProperty,,,inRange 50 100 error -Check Date,,,,,TRUE,DataProperty,,,date +Check Date,,,,,TRUE,DataProperty,,, diff --git a/tests/data/example.model.jsonld b/tests/data/example.model.jsonld index b12ed1f6a..b7396e479 100644 --- a/tests/data/example.model.jsonld +++ b/tests/data/example.model.jsonld @@ -2893,9 +2893,7 @@ }, "sms:displayName": "Check Date", "sms:required": "sms:true", - "sms:validationRules": [ - "date" - ] + "sms:validationRules": [] }, { "@id": "bts:Component", From 4a70124b162d0b22d0306728233f4568576c6525 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 30 Nov 2022 12:27:49 -0700 Subject: [PATCH 028/114] revert rule addition to GE --- schematic/models/GE_Helpers.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/schematic/models/GE_Helpers.py b/schematic/models/GE_Helpers.py index f7d10c587..2ddb7ff28 100644 --- a/schematic/models/GE_Helpers.py +++ b/schematic/models/GE_Helpers.py @@ -14,7 +14,6 @@ from urllib import error from attr import attr -from datetime import date from ruamel import yaml import great_expectations as ge @@ -127,7 +126,6 @@ def build_expectation_suite(self,): "int": "expect_column_values_to_be_in_type_list", "float": "expect_column_values_to_be_in_type_list", "str": "expect_column_values_to_be_of_type", - "date": "expect_column_values_to_be_of_type", "num": "expect_column_values_to_be_in_type_list", "recommended": "expect_column_values_to_not_match_regex_list", "protectAges": "expect_column_values_to_be_between", @@ -220,17 +218,6 @@ def build_expectation_suite(self,): }, "validation_rule": rule } - #Validate date - elif base_rule=='date': - args["mostly"]=1.0 - args["type_"]='datetime' - meta={ - "notes": { - "format": "markdown", - "content": "Expect column values to be of date or datetime type. **Markdown** `Supported`", - }, - "validation_rule": rule - } elif base_rule==("recommended"): args["mostly"]=0.0000000001 args["regex_list"]=['^$'] From 0da88a7f1021622de4bc3f77a30eec0fdcaea9fa Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 30 Nov 2022 12:38:08 -0700 Subject: [PATCH 029/114] add check Date to invalid manifest --- tests/data/mock_manifests/Invalid_Test_Manifest.csv | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/data/mock_manifests/Invalid_Test_Manifest.csv b/tests/data/mock_manifests/Invalid_Test_Manifest.csv index c8b09b006..43a90873b 100644 --- a/tests/data/mock_manifests/Invalid_Test_Manifest.csv +++ b/tests/data/mock_manifests/Invalid_Test_Manifest.csv @@ -1,4 +1,4 @@ -Component,Check List,Check Regex List,Check Regex Format,Check Regex Single,Check Num,Check Float,Check Int,Check String,Check URL,Check Match at Least,Check Match at Least values,Check Match Exactly,Check Match Exactly values,Check Recommended,Check Ages,Check Unique,Check Range -MockComponent,"ab,cd","ab,cd,ef",a,a,6,99.65,7,valid,https://www.google.com/,1738,1738,8085,98085,,6549,str1,70 -MockComponent,invalid list values,ab cd ef,m,q,c,99,5.63,94,http://googlef.com/,7163,51100,9965,71738,,32851,str1,30 -MockComponent,"ab,cd","ab,cd,ef",b,b,6.5,62.3,2,valid,https://github.com/Sage-Bionetworks/schematic,8085,8085,1738,210065,,6550,str1,90 +Component,Check List,Check Regex List,Check Regex Format,Check Regex Single,Check Num,Check Float,Check Int,Check String,Check URL,Check Match at Least,Check Match at Least values,Check Match Exactly,Check Match Exactly values,Check Recommended,Check Ages,Check Unique,Check Range,Check Date +MockComponent,"ab,cd","ab,cd,ef",a,a,6,99.65,7,valid,https://www.google.com/,1738,1738,8085,98085,,6549,str1,70,32984 +MockComponent,invalid list values,ab cd ef,m,q,c,99,5.63,94,http://googlef.com/,7163,51100,9965,71738,,32851,str1,30,notADate +MockComponent,"ab,cd","ab,cd,ef",b,b,6.5,62.3,2,valid,https://github.com/Sage-Bionetworks/schematic,8085,8085,1738,210065,,6550,str1,90,8443094 From 341ccb052517dbd940cea94709129135cda1ccbb Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 30 Nov 2022 12:39:56 -0700 Subject: [PATCH 030/114] Revert "add date validation rule" This reverts commit b9333170234cde51319ef073e6c8c9c10152b42e. --- schematic/utils/validate_rules_utils.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/schematic/utils/validate_rules_utils.py b/schematic/utils/validate_rules_utils.py index 196d20607..3edcc358b 100644 --- a/schematic/utils/validate_rules_utils.py +++ b/schematic/utils/validate_rules_utils.py @@ -42,12 +42,6 @@ def validation_rule_info(): 'type': "type_validation", 'complementary_rules': None, 'default_message_level': 'error'}, - - "date": { - 'arguments':(1, 0), - 'type': "type_validation", - 'complementary_rules': None, - 'default_message_level': 'error'}, "regex": { 'arguments':(3, 2), From 18cf9ae4d43cd7101a2896914b81200a8423cd7c Mon Sep 17 00:00:00 2001 From: linglp Date: Thu, 1 Dec 2022 11:41:31 -0500 Subject: [PATCH 031/114] wrap store valid values in second sheet as a function --- schematic/manifest/generator.py | 83 +++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/schematic/manifest/generator.py b/schematic/manifest/generator.py index 4aa493faa..da8a500d6 100644 --- a/schematic/manifest/generator.py +++ b/schematic/manifest/generator.py @@ -233,6 +233,47 @@ def callback(request_id, response, exception): ) batch.execute() + def _store_valid_values_as_data_dictionary(self, column_id:int, valid_values:list, spreadsheet_id:str) -> list: + '''store valid values in google sheet (sheet 2). This step is required for "ONE OF RANGE" validation + Args: + column_id: id of column + valid_values: a list of valid values for a given attribute (i.e. for diagnosis, this looks like: [{'userEnteredValue': 'Cancer'}, {'userEnteredValue': 'Healthy'}]) + spreadsheet_id: google spreadsheet id + + return: range of valid values (i.e. for diagnosis, [{'userEnteredValue': '=Sheet2!D2:D3'}]) + ''' + # get valid values w/o google sheet header + values = [valid_value["userEnteredValue"] for valid_value in valid_values] + + if self.alphabetize and self.alphabetize.lower().startswith('a'): + values.sort(reverse=False, key=str.lower) + elif self.alphabetize and self.alphabetize.lower().startswith('d'): + values.sort(reverse=True, key=str.lower) + + # store valid values explicitly in workbook at the provided range to use as validation values + target_col_letter = self._column_to_letter(column_id) + body = {"majorDimension": "COLUMNS", "values": [values]} + target_range = ( + "Sheet2!" + + target_col_letter + + "2:" + + target_col_letter + + str(len(values) + 1) + ) + valid_values = [{"userEnteredValue": "=" + target_range}] + response = ( + self.sheet_service.spreadsheets() + .values() + .update( + spreadsheetId=spreadsheet_id, + range=target_range, + valueInputOption="RAW", + body=body, + ) + .execute() + ) + return valid_values + def _get_column_data_validation_values( self, spreadsheet_id, @@ -247,40 +288,10 @@ def _get_column_data_validation_values( # set validation strictness to config file default if None indicated. if strict == None: strict = CONFIG["style"]["google_manifest"].get("strict_validation", True) - - # get valid values w/o google sheet header - values = [valid_value["userEnteredValue"] for valid_value in valid_values] - - if self.alphabetize and self.alphabetize.lower().startswith('a'): - values.sort(reverse=False, key=str.lower) - elif self.alphabetize and self.alphabetize.lower().startswith('d'): - values.sort(reverse=True, key=str.lower) - + #store valid values explicitly in workbook at the provided range to use as validation values if validation_type == "ONE_OF_RANGE": - - # store valid values explicitly in workbook at the provided range to use as validation values - target_col_letter = self._column_to_letter(column_id) - body = {"majorDimension": "COLUMNS", "values": [values]} - target_range = ( - "Sheet2!" - + target_col_letter - + "2:" - + target_col_letter - + str(len(values) + 1) - ) - valid_values = [{"userEnteredValue": "=" + target_range}] - response = ( - self.sheet_service.spreadsheets() - .values() - .update( - spreadsheetId=spreadsheet_id, - range=target_range, - valueInputOption="RAW", - body=body, - ) - .execute() - ) + valid_values=self._store_valid_values_as_data_dictionary(column_id, valid_values, spreadsheet_id) # setup validation data request body validation_body = { @@ -942,7 +953,7 @@ def _request_dropdown( Returns: validation_body: dict """ - if len(req_vals) > 0 and not rule_in_rule_list("list", validation_rules): + if len(req_vals) > 0: # if more than 0 values in dropdown use ONE_OF_RANGE type of validation # since excel and openoffice # do not support other kinds of data validation for @@ -1127,7 +1138,7 @@ def _create_requests_body( if not req_vals: continue - # Create dropdown or multi-select options, where called for + # for attributes that don't require "list", create dropdown options and set up data validation rules if not rule_in_rule_list("list", validation_rules): create_dropdown = self._request_dropdown( i, req_vals, spreadsheet_id, validation_rules, valid_values @@ -1135,6 +1146,10 @@ def _create_requests_body( if create_dropdown: requests_body["requests"].append(create_dropdown) + # for attributes that require "list", simply store valid values (if any) in second sheet + elif len(req_vals)>0 and rule_in_rule_list("list", validation_rules): + self._store_valid_values_as_data_dictionary(i, req_vals, spreadsheet_id) + # generate a conditional format rule for each required value (i.e. valid value) # for this field (i.e. if this field is set to a valid value that may require additional # fields to be filled in, these additional fields will be formatted in a custom style (e.g. red background) From 132303512f677c1870e3270c761c6670601311df Mon Sep 17 00:00:00 2001 From: linglp Date: Thu, 1 Dec 2022 11:57:16 -0500 Subject: [PATCH 032/114] remove token_creds --- config.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/config.yml b/config.yml index ba6b5da6b..b71839aeb 100644 --- a/config.yml +++ b/config.yml @@ -7,7 +7,6 @@ synapse: master_fileview: 'syn23643253' manifest_folder: 'manifests' manifest_basename: 'synapse_storage_manifest' - token_creds: 'syn23643259' service_acct_creds: 'syn25171627' manifest: From 300fbfae9db07aa8e15e48df28a34504ab16c46b Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 1 Dec 2022 10:06:56 -0700 Subject: [PATCH 033/114] add date order, separate settings dict --- schematic/utils/df_utils.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/schematic/utils/df_utils.py b/schematic/utils/df_utils.py index 9db13b3f9..8e8802f7c 100644 --- a/schematic/utils/df_utils.py +++ b/schematic/utils/df_utils.py @@ -59,6 +59,10 @@ def load_df(file_path, preserve_raw_input=True, data_model=False, **load_args): def _parse_dates(date_string): + parse_settings={ + 'STRICT_PARSING': True, + 'DATE_ORDER': 'DMY', + } try: date = dp.parse(date_string = date_string, settings = {'STRICT_PARSING': True}) return date if date else False From 090bc482880c8c99c580f176e0eef8805e4eaa3e Mon Sep 17 00:00:00 2001 From: linglp Date: Thu, 1 Dec 2022 12:32:56 -0500 Subject: [PATCH 034/114] update config in ReadMe --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f23a87d21..b3fccd45e 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,6 @@ Description of `config.yml` attributes master_fileview: "syn23643253" # fileview of project with datasets on Synapse manifest_folder: "~/path/to/manifest_folder/" # manifests will be downloaded to this folder manifest_basename: "filename" # base name of the manifest file in the project dataset, without extension - token_creds: "syn23643259" # synapse ID of credentials.json file service_acct_creds: "syn25171627" # synapse ID of service_account_creds.json file manifest: From a15cf3752fb9522718c241c34431fd7f8ec5d11f Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 1 Dec 2022 10:48:16 -0700 Subject: [PATCH 035/114] Revert "add date order, separate settings dict" This reverts commit 300fbfae9db07aa8e15e48df28a34504ab16c46b. --- schematic/utils/df_utils.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/schematic/utils/df_utils.py b/schematic/utils/df_utils.py index 8e8802f7c..9db13b3f9 100644 --- a/schematic/utils/df_utils.py +++ b/schematic/utils/df_utils.py @@ -59,10 +59,6 @@ def load_df(file_path, preserve_raw_input=True, data_model=False, **load_args): def _parse_dates(date_string): - parse_settings={ - 'STRICT_PARSING': True, - 'DATE_ORDER': 'DMY', - } try: date = dp.parse(date_string = date_string, settings = {'STRICT_PARSING': True}) return date if date else False From 7ceccca4fd7a750cc5fb5b1c1eab2a52ae99c91f Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 1 Dec 2022 13:43:16 -0700 Subject: [PATCH 036/114] add skeleton tests for table operations --- tests/test_store.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/test_store.py b/tests/test_store.py index b33d8e1e3..450e7b98b 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -9,6 +9,7 @@ import pandas as pd from synapseclient import EntityViewSchema +from schematic.models.metadata import MetadataModel from schematic.store.base import BaseStorage from schematic.store.synapse import SynapseStorage, DatasetFileView from schematic.utils.cli_utils import get_from_config @@ -47,6 +48,15 @@ def dataset_fileview_table_tidy(dataset_fileview, dataset_fileview_table): table = dataset_fileview.tidy_table() yield table +@pytest.fixture +def metadata_model(helpers): + + metadata_model = MetadataModel( + inputMModelLocation=helpers.get_data_path("example.model.jsonld"), + inputMModelLocationType="local", + ) + + yield metadata_model def raise_final_error(retry_state): return retry_state.outcome.result() @@ -243,3 +253,14 @@ def test_tidy_table(self, dataset_fileview_table_tidy): year_value = table.loc[sample_a_row, "YearofBirth"][0] assert isinstance(year_value, str) assert year_value == "1980" + +class TestTableOperations: + + def test_createTable(): + assert True + + def test_replaceTable(): + assert True + + def test_updateTable(): + assert True From 40cc8231bf1c736cdf122e8608532191f1f9d5d3 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 1 Dec 2022 14:30:48 -0700 Subject: [PATCH 037/114] update docstring --- schematic/utils/df_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/schematic/utils/df_utils.py b/schematic/utils/df_utils.py index 9db13b3f9..5e6ca1190 100644 --- a/schematic/utils/df_utils.py +++ b/schematic/utils/df_utils.py @@ -12,6 +12,7 @@ def load_df(file_path, preserve_raw_input=True, data_model=False, **load_args): """ Universal function to load CSVs and return DataFrames + Parses string entries to convert as appropriate to type int, float, and pandas timestamp Args: file_path: path of csv to open preserve_raw_input: Bool. If false, convert cell datatypes to an inferred type From 3c23e55c32042b3018669cd1328fe5e84e202818 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Fri, 2 Dec 2022 10:46:03 -0700 Subject: [PATCH 038/114] rm metadata model fixture --- tests/test_store.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index 450e7b98b..11d273a10 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -48,16 +48,6 @@ def dataset_fileview_table_tidy(dataset_fileview, dataset_fileview_table): table = dataset_fileview.tidy_table() yield table -@pytest.fixture -def metadata_model(helpers): - - metadata_model = MetadataModel( - inputMModelLocation=helpers.get_data_path("example.model.jsonld"), - inputMModelLocationType="local", - ) - - yield metadata_model - def raise_final_error(retry_state): return retry_state.outcome.result() From 7cf0cb60bcbbf60fb27e5f2ca4ea234a30e5a51f Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Fri, 2 Dec 2022 11:05:20 -0700 Subject: [PATCH 039/114] add method to get version specific syn project --- tests/conftest.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index 0c0d1c716..62a15e360 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -70,6 +70,21 @@ def get_python_version(self): base_version=".".join(version.split('.')[0:2]) return base_version + + @staticmethod + def get_python_project(self): + + version = self.get_python_version(Helpers) + + python_projects = { + "3.7": "syn47217926", + "3.8": "syn47217967", + "3.9": "syn47218127", + "3.10": "syn47218347", + } + + return python_projects[version] + @pytest.fixture(scope="session") def helpers(): yield Helpers From 4104c9ae4e7ec902bab1cb0885c461a1de18ba93 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Fri, 2 Dec 2022 11:38:01 -0700 Subject: [PATCH 040/114] add test outlines for creation and replacement --- tests/test_store.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index 11d273a10..22a3543f3 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -246,10 +246,36 @@ def test_tidy_table(self, dataset_fileview_table_tidy): class TestTableOperations: - def test_createTable(): + def test_createTable(self, helpers, synapse_store): + print(helpers.get_python_project(helpers)) + + # Check if FollowUp table exists + # if so delete + + # assert no table + + # associate metadata with files + + # assert table exists + + # delete table assert True def test_replaceTable(): + + # Check if FollowUp table exists + # if so delete + + # assert no table + # Associate barebones FollowUp manifest with files + # Query table for certain column + # assert empty/no results + # import filled FollowUp Manifest + # Associate filled manifest with files + # query table + # assert results exist + # delete table + assert True def test_updateTable(): From 332e7e54eb59c7267be22f5b3bbf172219a7b97b Mon Sep 17 00:00:00 2001 From: linglp Date: Fri, 2 Dec 2022 15:23:18 -0500 Subject: [PATCH 041/114] modify description of endpoint --- api/openapi/api.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/openapi/api.yaml b/api/openapi/api.yaml index bbd4845c1..f46d9e828 100644 --- a/api/openapi/api.yaml +++ b/api/openapi/api.yaml @@ -413,8 +413,8 @@ paths: - Manifest Operations /get/datatype/manifest: get: - summary: Retrieve asset view table as a dataframe. - description: Retrieve asset view table as a dataframe. + summary: Get datatype of attributes in manifest + description: Get datatype of attributes in manifest operationId: api.routes.get_manifest_datatype parameters: - in: query From 0f96e0784091ede3d1709cd4d828fe1ab0de0b27 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Fri, 2 Dec 2022 13:48:23 -0700 Subject: [PATCH 042/114] remove comment --- schematic/utils/df_utils.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/schematic/utils/df_utils.py b/schematic/utils/df_utils.py index 5e6ca1190..800c2e6e8 100644 --- a/schematic/utils/df_utils.py +++ b/schematic/utils/df_utils.py @@ -51,9 +51,6 @@ def load_df(file_path, preserve_raw_input=True, data_model=False, **load_args): #Store values that were entered as ints and dates processed_df=processed_df.mask(ints != False, other = ints) - - #dates = processed_df.applymap(lambda x: _parse_dates(x), na_action='ignore').fillna(False) - processed_df=processed_df.mask(dates != False, other = dates) return processed_df From 8dd908b946b39803e6c8ef0c57dccd173f2dd8b5 Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 5 Dec 2022 11:05:34 -0500 Subject: [PATCH 043/114] add develop-docs --- .readthedocs.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .readthedocs.yml diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 000000000..b0ff74136 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,29 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-20.04 + tools: + python: "3.9" + # You can also specify other tool versions: + # nodejs: "16" + # rust: "1.55" + # golang: "1.17" + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: docs/source/conf.py + +# If using Sphinx, optionally build your docs in additional formats such as PDF +# formats: +# - pdf + +# Optionally declare the Python requirements required to build your docs +python: + install: + - requirements: docs/requirements.txt \ No newline at end of file From 510124d4c272a54f0a1be9a5f803bfdb24e7bf95 Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 5 Dec 2022 11:10:33 -0500 Subject: [PATCH 044/114] update jinja version number --- docs/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/requirements.txt b/docs/requirements.txt index 30567e505..f406aa49e 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1 +1,2 @@ sphinx-click==2.5.0 +jinja2==2.11.3 From a9d888d574f8797859979fddaa5e97c4db5fc699 Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 5 Dec 2022 11:13:31 -0500 Subject: [PATCH 045/114] update version of markupsafe --- docs/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/requirements.txt b/docs/requirements.txt index f406aa49e..ee111f710 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,3 @@ sphinx-click==2.5.0 jinja2==2.11.3 +markupsafe==2.0.1 \ No newline at end of file From 0a57f123aab7ace74154eee862191cbcdf659604 Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 5 Dec 2022 11:21:02 -0500 Subject: [PATCH 046/114] update requirements.txt --- docs/requirements.txt | 188 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 185 insertions(+), 3 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index ee111f710..bea0d8b78 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,185 @@ -sphinx-click==2.5.0 -jinja2==2.11.3 -markupsafe==2.0.1 \ No newline at end of file +# sphinx-click==2.5.0 +# jinja2==2.11.3 +# markupsafe==2.0.1 +alabaster==0.7.12 +altair==4.2.0 +aniso8601==9.0.1 +anyio==3.6.2 +appdirs @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/68/c7/33/ef0f6af8d1aa906f1a5641762fe5d6f47d565c5a4b3482f1c6fb0f5f20/appdirs-1.4.4-py2.py3-none-any.whl +appnope==0.1.2 +argon2-cffi==21.3.0 +argon2-cffi-bindings==21.2.0 +asttokens==2.0.5 +astunparse==1.6.3 +attrs @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/1a/aa/39/10d6d07084f186f8cf6963cb033440402ad5088bb94d712239170f2ef6/attrs-21.2.0-py2.py3-none-any.whl +Babel==2.11.0 +backcall==0.2.0 +backports.zoneinfo==0.2.1 +beautifulsoup4==4.11.1 +black @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/38/f4/61/550fd050005dc1c64850374a7f98dd941a4633d72e87f147bebf26bdc3/black-20.8b1.tar.gz +bleach==5.0.1 +cachetools @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/b8/bb/dd/ab39d5344a1eb90a476cc415065f1c5e74daecaf87821e82c925ca6aaa/cachetools-4.2.2-py3-none-any.whl +certifi @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/c4/85/84/f095fd90533096a81def971743d14081337c62ded3cddd449e8774e3e8/certifi-2021.5.30-py2.py3-none-any.whl +cffi==1.15.1 +charset-normalizer @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/af/21/e0/394eca0bc176bd50fe9d57eb9c7e664887e6f89c5dd99d1bfbe92742e3/charset_normalizer-2.0.3-py3-none-any.whl +click @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/30/bc/bf/e00ffd8f0edf0294942e70e80e42a839bd2649d2c5b864e6389e526d2a/click-7.1.2-py2.py3-none-any.whl +click-log==0.3.2 +clickclick==20.10.2 +colorama==0.4.6 +connexion @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/d6/3f/2f/af783580f4255f5a7c440c997822b8583a2eee082fe38bef2f7effc8a4/connexion-2.12.0-py2.py3-none-any.whl +coverage @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/d3/f4/ca/6004804564ead51cc8b073d378fe3771c9d06bfe64e1e0e243517f74e6/coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl +cryptography==38.0.4 +cycler==0.11.0 +debugpy==1.5.1 +decorator==5.1.1 +defusedxml==0.7.1 +Deprecated @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/c8/55/4b/7ffbbb6ed2b121feca4b46af4a4bb9528d4ba10461ea3e669fd3cf1c82/Deprecated-1.2.12-py2.py3-none-any.whl +docutils==0.19 +entrypoints @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/27/67/42/5ca7438658f76c8700ff6c44ea1cf9dc128cf0862adb7de53d3a35266c/entrypoints-0.3-py2.py3-none-any.whl +et-xmlfile==1.1.0 +executing==0.8.2 +fastjsonschema==2.16.2 +flake8 @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/93/78/ae/ee75d1b46827f8892defc2a710979cc71803d2da75a049bdabd3adad70/flake8-3.9.2-py2.py3-none-any.whl +Flask @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/0b/5a/9e/38b1bab936ade7d1bccb7f5c39bdbe0215cb26c1d40260765099e5af4c/Flask-1.1.4-py2.py3-none-any.whl +Flask-Cors==3.0.10 +flask-restplus==0.13.0 +fonttools==4.29.1 +google-api-core @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/7f/20/e3/99ff3a482bb839fc8f75cef280f4b69f1d7aab2e18b16e916f56c18896/google_api_core-1.31.1-py2.py3-none-any.whl +google-api-python-client @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/18/39/cc/ae14d00430416f91782696b0f4a074fcbc5d029eed35e2de63ec4698ee/google_api_python_client-1.12.8-py2.py3-none-any.whl +google-auth @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/7e/44/c7/3072298936274f4e00795508ba2f23c8b7996b02cf284eae120a0978b4/google_auth-1.34.0-py2.py3-none-any.whl +google-auth-httplib2==0.0.4 +google-auth-oauthlib @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/43/db/0e/7c1987fbfd5e18ab2d18fa3209c9520f2984a65264f157f37e40300e91/google_auth_oauthlib-0.4.5-py2.py3-none-any.whl +googleapis-common-protos @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/8c/2e/ad/efdce99c62dbe56fda156dd62f807ea79a43f83dea45bd9f9ff4bc6240/googleapis_common_protos-1.53.0-py2.py3-none-any.whl +graphviz==0.16 +great-expectations==0.15.36 +httplib2 @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/e1/48/31/404ee96ef34e07fa1f47f090d45a45a66b0e21783505165929d375b23b/httplib2-0.19.1-py3-none-any.whl +idna @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/a5/7d/f0/56f2a34c99da4534f97d70ca8ce7eace4ad5581a10938c3be412783add/idna-3.2-py3-none-any.whl +imagesize==1.4.1 +importlib-metadata==5.1.0 +inflection==0.5.1 +iniconfig @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/ac/f9/da/e990ffcd9ec361a68676a5916e391286e1ea5d1b8907ae887e141a71f5/iniconfig-1.1.1-py2.py3-none-any.whl +ipykernel==6.9.1 +ipython==8.0.1 +ipython-genutils==0.2.0 +ipywidgets==8.0.2 +isodate @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/f9/84/2b/239acd74596d9bfb3072d84b045fdc268b0f1be869c297f32a4f62dd8f/isodate-0.6.0-py2.py3-none-any.whl +itsdangerous @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/ed/be/b7/3afa53339fde1838049443e48288a0348e1c636069b0c90f199510d48a/itsdangerous-1.1.0-py2.py3-none-any.whl +jedi==0.18.1 +Jinja2 @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/1e/19/63/9b4675e143abad59de60e0e667815fd5e19dd0b28fc2815f9f957726d3/Jinja2-2.11.3-py2.py3-none-any.whl +jsonpatch==1.32 +jsonpickle==2.1.0 +jsonpointer==2.3 +jsonschema==3.2.0 +jupyter-client==7.1.2 +jupyter-core==4.9.2 +jupyter-server==1.23.3 +jupyterlab-pygments==0.2.2 +jupyterlab-widgets==3.0.3 +keyring==23.4.1 +kiwisolver==1.3.2 +makefun==1.15.0 +MarkupSafe @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/cd/11/54/fd481eec49cddc06876e526483e7ee8675d0910fed2aa7668a9fc88e62/MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl +marshmallow==3.19.0 +matplotlib==3.5.1 +matplotlib-inline==0.1.3 +mccabe @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/37/6e/69/4a33a4d6c80c775b1ee205face2c6e07b762c8602bb0f0d236ebe790c5/mccabe-0.6.1-py2.py3-none-any.whl +mistune==0.8.4 +mypy-extensions==0.4.3 +nbclassic==0.4.8 +nbclient==0.5.13 +nbconvert==6.4.5 +nbformat==5.7.0 +nest-asyncio==1.5.4 +networkx @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/85/00/98/24e20da9891d34c106c875d863be591ea95ddadaf34f7d0ee00ad9bfa2/networkx-2.6.2-py3-none-any.whl +notebook==6.5.2 +notebook_shim==0.2.2 +numpy @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/da/3c/db/6f799cf4a5e87e3d4e53ac7a1b5a9f6638f4b6cc5122ccf3286d2ac802/numpy-1.21.1-cp38-cp38-macosx_10_9_x86_64.whl +oauth2client==3.0.0 +oauthlib @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/e6/64/ef/a43b939f04c9ee17174fb3657dba149ed15ba473ef44adf939f5032b85/oauthlib-3.1.1-py2.py3-none-any.whl +openapi-schema-validator==0.1.6 +openapi-spec-validator==0.3.3 +openpyxl==3.0.10 +packaging @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/6e/de/e5/e3e7e60b359c616435089a1dd11b101dc553fae21fca74bbe98d0c323e/packaging-21.0-py3-none-any.whl +pandas @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/2a/0b/a3/165bc3b198518688e312395443391a7fd6f02547166db300dda8fddf01/pandas-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl +pandocfilters==1.5.0 +parso==0.8.3 +pathspec==0.9.0 +pdoc==12.3.0 +pexpect==4.8.0 +pickleshare==0.7.5 +Pillow==9.0.1 +platformdirs==2.5.1 +pluggy @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/9c/e5/0b/2d64d03361a081edeb5d2ec5f286ccf9719587781fbf6822e1b6384c27/pluggy-0.13.1-py2.py3-none-any.whl +prometheus-client==0.15.0 +prompt-toolkit==3.0.28 +protobuf @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/da/16/58/39025383d35aa8857945fb78e0716001e527e7dee801db8994234468da/protobuf-3.17.3-cp38-cp38-macosx_10_9_x86_64.whl +ptyprocess==0.7.0 +pure-eval==0.2.2 +py @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/6b/b2/2b/e6686e7d0183dbd36bd66921efa3e77ce26260a3671524cd86614290e0/py-1.10.0-py2.py3-none-any.whl +pyasn1==0.4.8 +pyasn1-modules==0.2.8 +pycodestyle @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/ea/27/4a/ce8e18f033aae28e47dc2895901dce76e10e7c9efc48bcd95ab4443c47/pycodestyle-2.7.0-py2.py3-none-any.whl +pycparser==2.21 +pydantic==1.10.2 +pyflakes @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/b0/73/41/34d4d02987e40ffa6ee0292425303a75b4178476bf134ceaf0585a9faf/pyflakes-2.3.1-py2.py3-none-any.whl +Pygments==2.13.0 +pygsheets==2.0.5 +pyparsing @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/da/e7/3d/1780282f558e5fd157bf708b28b8ba0d08323ef6bc5b6396139ce38a0b/pyparsing-2.4.7-py2.py3-none-any.whl +pyrsistent @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/72/05/80/43e73cc485a2fd76c8e9ba4d5e41b31ef57e6f90bf82079ad3a49fa0b8/pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl +pytest @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/8a/b9/90/4514a24414e38b20d118ef142b175d429a18dba120914e9e0dffc5fa56/pytest-6.2.4-py3-none-any.whl +pytest-cov @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/76/e2/82/f23b5974a4cd88bfa04c1b81f6b17cc573839a7aa04a5fc9f9607e2585/pytest_cov-2.12.1-py2.py3-none-any.whl +pytest-mock @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/d8/83/e2/41ba91cc386d43e348b5e8b7b8e70f91ba38918c7524644419becd244d/pytest_mock-3.6.1-py3-none-any.whl +python-dateutil==2.8.2 +python-dotenv @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/bf/e2/32/a8162049eb27a891919d21d76446fd01711014b43c809ceef66925e85b/python_dotenv-0.15.0-py2.py3-none-any.whl +pytz==2022.6 +pytz-deprecation-shim==0.1.0.post0 +PyYAML==5.4.1 +pyzmq==22.3.0 +rdflib==5.0.0 +regex @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/e9/b4/98/11fa0ebc859aac641e4ddb6b6140f5807147bd1df003b609625992e5a7/regex-2021.7.6-cp38-cp38-macosx_10_9_x86_64.whl +requests @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/97/12/e1/3c2e2b7f315a912e2da1b1465a23c3f14d51a3bd4696e14e0f2796adde/requests-2.26.0-py2.py3-none-any.whl +requests-oauthlib @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/93/9e/43/0dbe21742ed37c1ceeb4f2533e99279ab723f0982020584d6133946ad5/requests_oauthlib-1.3.0-py2.py3-none-any.whl +rsa @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/3a/ab/43/a67c8d818350593872a5713ca125b95f465d62eee5ba7895de1194add1/rsa-4.7.2-py3-none-any.whl +ruamel.yaml==0.17.17 +ruamel.yaml.clib==0.2.7 +schematicpy==22.11.3 +scipy==1.8.0 +Send2Trash==1.8.0 +six==1.16.0 +sniffio==1.3.0 +snowballstemmer==2.2.0 +soupsieve==2.3.2.post1 +Sphinx==5.1.1 +sphinx-click==3.1.0 +sphinxcontrib-applehelp==1.0.2 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.0 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +stack-data==0.2.0 +swagger-ui==0.1.2 +swagger-ui-bundle @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/2b/0b/03/f7db9d63e7730379be28fb6e0ef937b039e95a4e9f858bed2c4deb9687/swagger_ui_bundle-0.0.8-py3-none-any.whl +synapseclient==2.7.0 +tenacity==8.1.0 +terminado==0.17.1 +testpath==0.6.0 +toml==0.10.2 +tomli==2.0.1 +toolz==0.12.0 +tornado==6.1 +tqdm==4.64.1 +traitlets==5.1.1 +typed-ast @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/2a/97/67/6a4e444fede37f31a09025fea88c54d4a40d739c4640e72d4c8d355661/typed_ast-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl +typing_extensions==4.4.0 +tzdata==2022.7 +tzlocal==4.2 +uritemplate==3.0.1 +urllib3 @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/26/0c/13/6d56b3040728f11222f4621ff0e3d8684bf3642a42452614400a5feaf2/urllib3-1.26.6-py2.py3-none-any.whl +wcwidth==0.2.5 +webencodings==0.5.1 +websocket-client==1.4.2 +Werkzeug @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/71/cb/8f/ea556c118c51e63201517bf1ce46027e851bef2077e67f333349deacf1/Werkzeug-1.0.1-py2.py3-none-any.whl +widgetsnbextension==4.0.3 +wrapt==1.12.1 +zipp==3.11.0 From 8731e51468299d6ac12b1b6f397eeddf19c3da4c Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 5 Dec 2022 11:24:59 -0500 Subject: [PATCH 047/114] update requirement.txt show version --- docs/requirements.txt | 105 ++++++++++++++++++++++-------------------- 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index bea0d8b78..17c2690af 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -5,67 +5,67 @@ alabaster==0.7.12 altair==4.2.0 aniso8601==9.0.1 anyio==3.6.2 -appdirs @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/68/c7/33/ef0f6af8d1aa906f1a5641762fe5d6f47d565c5a4b3482f1c6fb0f5f20/appdirs-1.4.4-py2.py3-none-any.whl +appdirs==1.4.4 appnope==0.1.2 argon2-cffi==21.3.0 argon2-cffi-bindings==21.2.0 asttokens==2.0.5 astunparse==1.6.3 -attrs @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/1a/aa/39/10d6d07084f186f8cf6963cb033440402ad5088bb94d712239170f2ef6/attrs-21.2.0-py2.py3-none-any.whl +attrs==21.2.0 Babel==2.11.0 backcall==0.2.0 backports.zoneinfo==0.2.1 beautifulsoup4==4.11.1 -black @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/38/f4/61/550fd050005dc1c64850374a7f98dd941a4633d72e87f147bebf26bdc3/black-20.8b1.tar.gz +black==20.8b1 bleach==5.0.1 -cachetools @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/b8/bb/dd/ab39d5344a1eb90a476cc415065f1c5e74daecaf87821e82c925ca6aaa/cachetools-4.2.2-py3-none-any.whl -certifi @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/c4/85/84/f095fd90533096a81def971743d14081337c62ded3cddd449e8774e3e8/certifi-2021.5.30-py2.py3-none-any.whl +cachetools==4.2.2 +certifi==2021.5.30 cffi==1.15.1 -charset-normalizer @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/af/21/e0/394eca0bc176bd50fe9d57eb9c7e664887e6f89c5dd99d1bfbe92742e3/charset_normalizer-2.0.3-py3-none-any.whl -click @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/30/bc/bf/e00ffd8f0edf0294942e70e80e42a839bd2649d2c5b864e6389e526d2a/click-7.1.2-py2.py3-none-any.whl +charset-normalizer==2.0.3 +click==7.1.2 click-log==0.3.2 clickclick==20.10.2 colorama==0.4.6 -connexion @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/d6/3f/2f/af783580f4255f5a7c440c997822b8583a2eee082fe38bef2f7effc8a4/connexion-2.12.0-py2.py3-none-any.whl -coverage @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/d3/f4/ca/6004804564ead51cc8b073d378fe3771c9d06bfe64e1e0e243517f74e6/coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl +connexion==2.12.0 +coverage==5.5 cryptography==38.0.4 cycler==0.11.0 debugpy==1.5.1 decorator==5.1.1 defusedxml==0.7.1 -Deprecated @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/c8/55/4b/7ffbbb6ed2b121feca4b46af4a4bb9528d4ba10461ea3e669fd3cf1c82/Deprecated-1.2.12-py2.py3-none-any.whl +Deprecated==1.2.12 docutils==0.19 -entrypoints @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/27/67/42/5ca7438658f76c8700ff6c44ea1cf9dc128cf0862adb7de53d3a35266c/entrypoints-0.3-py2.py3-none-any.whl +entrypoints==0.3 et-xmlfile==1.1.0 executing==0.8.2 fastjsonschema==2.16.2 -flake8 @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/93/78/ae/ee75d1b46827f8892defc2a710979cc71803d2da75a049bdabd3adad70/flake8-3.9.2-py2.py3-none-any.whl -Flask @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/0b/5a/9e/38b1bab936ade7d1bccb7f5c39bdbe0215cb26c1d40260765099e5af4c/Flask-1.1.4-py2.py3-none-any.whl +flake8==3.9.2 +Flask==1.1.4 Flask-Cors==3.0.10 flask-restplus==0.13.0 fonttools==4.29.1 -google-api-core @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/7f/20/e3/99ff3a482bb839fc8f75cef280f4b69f1d7aab2e18b16e916f56c18896/google_api_core-1.31.1-py2.py3-none-any.whl -google-api-python-client @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/18/39/cc/ae14d00430416f91782696b0f4a074fcbc5d029eed35e2de63ec4698ee/google_api_python_client-1.12.8-py2.py3-none-any.whl -google-auth @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/7e/44/c7/3072298936274f4e00795508ba2f23c8b7996b02cf284eae120a0978b4/google_auth-1.34.0-py2.py3-none-any.whl +google-api-core==1.31.1 +google-api-python-client==1.12.8 +google-auth==1.34.0 google-auth-httplib2==0.0.4 -google-auth-oauthlib @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/43/db/0e/7c1987fbfd5e18ab2d18fa3209c9520f2984a65264f157f37e40300e91/google_auth_oauthlib-0.4.5-py2.py3-none-any.whl -googleapis-common-protos @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/8c/2e/ad/efdce99c62dbe56fda156dd62f807ea79a43f83dea45bd9f9ff4bc6240/googleapis_common_protos-1.53.0-py2.py3-none-any.whl +google-auth-oauthlib==0.4.5 +googleapis-common-protos==1.53.0 graphviz==0.16 great-expectations==0.15.36 -httplib2 @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/e1/48/31/404ee96ef34e07fa1f47f090d45a45a66b0e21783505165929d375b23b/httplib2-0.19.1-py3-none-any.whl -idna @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/a5/7d/f0/56f2a34c99da4534f97d70ca8ce7eace4ad5581a10938c3be412783add/idna-3.2-py3-none-any.whl +httplib2==0.19.1 +idna==3.2 imagesize==1.4.1 importlib-metadata==5.1.0 inflection==0.5.1 -iniconfig @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/ac/f9/da/e990ffcd9ec361a68676a5916e391286e1ea5d1b8907ae887e141a71f5/iniconfig-1.1.1-py2.py3-none-any.whl +iniconfig==1.1.1 ipykernel==6.9.1 ipython==8.0.1 ipython-genutils==0.2.0 ipywidgets==8.0.2 -isodate @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/f9/84/2b/239acd74596d9bfb3072d84b045fdc268b0f1be869c297f32a4f62dd8f/isodate-0.6.0-py2.py3-none-any.whl -itsdangerous @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/ed/be/b7/3afa53339fde1838049443e48288a0348e1c636069b0c90f199510d48a/itsdangerous-1.1.0-py2.py3-none-any.whl +isodate==0.6.0 +itsdangerous==1.1.0 jedi==0.18.1 -Jinja2 @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/1e/19/63/9b4675e143abad59de60e0e667815fd5e19dd0b28fc2815f9f957726d3/Jinja2-2.11.3-py2.py3-none-any.whl +Jinja2==2.11.3 jsonpatch==1.32 jsonpickle==2.1.0 jsonpointer==2.3 @@ -78,11 +78,11 @@ jupyterlab-widgets==3.0.3 keyring==23.4.1 kiwisolver==1.3.2 makefun==1.15.0 -MarkupSafe @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/cd/11/54/fd481eec49cddc06876e526483e7ee8675d0910fed2aa7668a9fc88e62/MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl +MarkupSafe==2.0.1 marshmallow==3.19.0 matplotlib==3.5.1 matplotlib-inline==0.1.3 -mccabe @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/37/6e/69/4a33a4d6c80c775b1ee205face2c6e07b762c8602bb0f0d236ebe790c5/mccabe-0.6.1-py2.py3-none-any.whl +mccabe==0.6.1 mistune==0.8.4 mypy-extensions==0.4.3 nbclassic==0.4.8 @@ -90,17 +90,17 @@ nbclient==0.5.13 nbconvert==6.4.5 nbformat==5.7.0 nest-asyncio==1.5.4 -networkx @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/85/00/98/24e20da9891d34c106c875d863be591ea95ddadaf34f7d0ee00ad9bfa2/networkx-2.6.2-py3-none-any.whl +networkx==2.6.2 notebook==6.5.2 notebook_shim==0.2.2 -numpy @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/da/3c/db/6f799cf4a5e87e3d4e53ac7a1b5a9f6638f4b6cc5122ccf3286d2ac802/numpy-1.21.1-cp38-cp38-macosx_10_9_x86_64.whl +numpy==1.21.1 oauth2client==3.0.0 -oauthlib @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/e6/64/ef/a43b939f04c9ee17174fb3657dba149ed15ba473ef44adf939f5032b85/oauthlib-3.1.1-py2.py3-none-any.whl +oauthlib==3.1.1 openapi-schema-validator==0.1.6 openapi-spec-validator==0.3.3 openpyxl==3.0.10 -packaging @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/6e/de/e5/e3e7e60b359c616435089a1dd11b101dc553fae21fca74bbe98d0c323e/packaging-21.0-py3-none-any.whl -pandas @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/2a/0b/a3/165bc3b198518688e312395443391a7fd6f02547166db300dda8fddf01/pandas-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl +packaging==21.0 +pandas==1.3.1 pandocfilters==1.5.0 parso==0.8.3 pathspec==0.9.0 @@ -108,43 +108,45 @@ pdoc==12.3.0 pexpect==4.8.0 pickleshare==0.7.5 Pillow==9.0.1 +pip==22.0.3 platformdirs==2.5.1 -pluggy @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/9c/e5/0b/2d64d03361a081edeb5d2ec5f286ccf9719587781fbf6822e1b6384c27/pluggy-0.13.1-py2.py3-none-any.whl +pluggy==0.13.1 prometheus-client==0.15.0 prompt-toolkit==3.0.28 -protobuf @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/da/16/58/39025383d35aa8857945fb78e0716001e527e7dee801db8994234468da/protobuf-3.17.3-cp38-cp38-macosx_10_9_x86_64.whl +protobuf==3.17.3 ptyprocess==0.7.0 pure-eval==0.2.2 -py @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/6b/b2/2b/e6686e7d0183dbd36bd66921efa3e77ce26260a3671524cd86614290e0/py-1.10.0-py2.py3-none-any.whl +py==1.10.0 pyasn1==0.4.8 pyasn1-modules==0.2.8 -pycodestyle @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/ea/27/4a/ce8e18f033aae28e47dc2895901dce76e10e7c9efc48bcd95ab4443c47/pycodestyle-2.7.0-py2.py3-none-any.whl +pycodestyle==2.7.0 pycparser==2.21 pydantic==1.10.2 -pyflakes @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/b0/73/41/34d4d02987e40ffa6ee0292425303a75b4178476bf134ceaf0585a9faf/pyflakes-2.3.1-py2.py3-none-any.whl +pyflakes==2.3.1 Pygments==2.13.0 pygsheets==2.0.5 -pyparsing @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/da/e7/3d/1780282f558e5fd157bf708b28b8ba0d08323ef6bc5b6396139ce38a0b/pyparsing-2.4.7-py2.py3-none-any.whl -pyrsistent @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/72/05/80/43e73cc485a2fd76c8e9ba4d5e41b31ef57e6f90bf82079ad3a49fa0b8/pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl -pytest @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/8a/b9/90/4514a24414e38b20d118ef142b175d429a18dba120914e9e0dffc5fa56/pytest-6.2.4-py3-none-any.whl -pytest-cov @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/76/e2/82/f23b5974a4cd88bfa04c1b81f6b17cc573839a7aa04a5fc9f9607e2585/pytest_cov-2.12.1-py2.py3-none-any.whl -pytest-mock @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/d8/83/e2/41ba91cc386d43e348b5e8b7b8e70f91ba38918c7524644419becd244d/pytest_mock-3.6.1-py3-none-any.whl +pyparsing==2.4.7 +pyrsistent==0.18.0 +pytest==6.2.4 +pytest-cov==2.12.1 +pytest-mock==3.6.1 python-dateutil==2.8.2 -python-dotenv @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/bf/e2/32/a8162049eb27a891919d21d76446fd01711014b43c809ceef66925e85b/python_dotenv-0.15.0-py2.py3-none-any.whl +python-dotenv==0.15.0 pytz==2022.6 pytz-deprecation-shim==0.1.0.post0 PyYAML==5.4.1 pyzmq==22.3.0 rdflib==5.0.0 -regex @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/e9/b4/98/11fa0ebc859aac641e4ddb6b6140f5807147bd1df003b609625992e5a7/regex-2021.7.6-cp38-cp38-macosx_10_9_x86_64.whl -requests @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/97/12/e1/3c2e2b7f315a912e2da1b1465a23c3f14d51a3bd4696e14e0f2796adde/requests-2.26.0-py2.py3-none-any.whl -requests-oauthlib @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/93/9e/43/0dbe21742ed37c1ceeb4f2533e99279ab723f0982020584d6133946ad5/requests_oauthlib-1.3.0-py2.py3-none-any.whl -rsa @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/3a/ab/43/a67c8d818350593872a5713ca125b95f465d62eee5ba7895de1194add1/rsa-4.7.2-py3-none-any.whl +regex==2021.7.6 +requests==2.26.0 +requests-oauthlib==1.3.0 +rsa==4.7.2 ruamel.yaml==0.17.17 ruamel.yaml.clib==0.2.7 schematicpy==22.11.3 scipy==1.8.0 Send2Trash==1.8.0 +setuptools==52.0.0 six==1.16.0 sniffio==1.3.0 snowballstemmer==2.2.0 @@ -159,7 +161,7 @@ sphinxcontrib-qthelp==1.0.3 sphinxcontrib-serializinghtml==1.1.5 stack-data==0.2.0 swagger-ui==0.1.2 -swagger-ui-bundle @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/2b/0b/03/f7db9d63e7730379be28fb6e0ef937b039e95a4e9f858bed2c4deb9687/swagger_ui_bundle-0.0.8-py3-none-any.whl +swagger-ui-bundle==0.0.8 synapseclient==2.7.0 tenacity==8.1.0 terminado==0.17.1 @@ -170,16 +172,17 @@ toolz==0.12.0 tornado==6.1 tqdm==4.64.1 traitlets==5.1.1 -typed-ast @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/2a/97/67/6a4e444fede37f31a09025fea88c54d4a40d739c4640e72d4c8d355661/typed_ast-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl +typed-ast==1.4.3 typing_extensions==4.4.0 tzdata==2022.7 tzlocal==4.2 uritemplate==3.0.1 -urllib3 @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/26/0c/13/6d56b3040728f11222f4621ff0e3d8684bf3642a42452614400a5feaf2/urllib3-1.26.6-py2.py3-none-any.whl +urllib3==1.26.6 wcwidth==0.2.5 webencodings==0.5.1 websocket-client==1.4.2 -Werkzeug @ file:///Users/lpeng/Library/Caches/pypoetry/artifacts/71/cb/8f/ea556c118c51e63201517bf1ce46027e851bef2077e67f333349deacf1/Werkzeug-1.0.1-py2.py3-none-any.whl +Werkzeug==1.0.1 +wheel==0.38.4 widgetsnbextension==4.0.3 wrapt==1.12.1 -zipp==3.11.0 +zipp==3.11.0 \ No newline at end of file From aa4073a16653eee414f8287ef5736719b7c91283 Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 5 Dec 2022 11:35:14 -0500 Subject: [PATCH 048/114] use poetry to install dependencies --- .readthedocs.yml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index b0ff74136..d66780890 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,7 +1,7 @@ # .readthedocs.yaml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - +# Borrowed idea from: https://github.com/readthedocs/readthedocs.org/issues/4912 # Required version: 2 @@ -10,6 +10,14 @@ build: os: ubuntu-20.04 tools: python: "3.9" + jobs: + pre_create_environment: + - asdf plugin add poetry + - asdf install poetry latest + - asdf global poetry latest + - poetry config virtualenvs.create false #Poetry will install my dependencies into the virtualenv created by readthedocs if I set virtualenvs.create=false + post_install: + - poetry install # You can also specify other tool versions: # nodejs: "16" # rust: "1.55" @@ -24,6 +32,6 @@ sphinx: # - pdf # Optionally declare the Python requirements required to build your docs -python: - install: - - requirements: docs/requirements.txt \ No newline at end of file +# python: +# install: +# - requirements: docs/requirements.txt \ No newline at end of file From b8ba1135e76b2ad7f9ae146d498ba955f2c3a4c8 Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 5 Dec 2022 11:43:15 -0500 Subject: [PATCH 049/114] update using poetry --- .readthedocs.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index d66780890..7d17414e6 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -11,13 +11,11 @@ build: tools: python: "3.9" jobs: - pre_create_environment: - - asdf plugin add poetry - - asdf install poetry latest - - asdf global poetry latest - - poetry config virtualenvs.create false #Poetry will install my dependencies into the virtualenv created by readthedocs if I set virtualenvs.create=false post_install: - - poetry install + - pip install poetry==1.2.0b1 + - poetry config virtualenvs.create false + - poetry install --with doc + #Poetry will install my dependencies into the virtualenv created by readthedocs if I set virtualenvs.create=false # You can also specify other tool versions: # nodejs: "16" # rust: "1.55" From 7625f2c909681f6c7d1196f61162171b3e67f83c Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Mon, 5 Dec 2022 09:48:47 -0700 Subject: [PATCH 050/114] add inputs to empty tests --- tests/test_store.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index 22a3543f3..94e6bda2d 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -261,7 +261,7 @@ def test_createTable(self, helpers, synapse_store): # delete table assert True - def test_replaceTable(): + def test_replaceTable(self, helpers): # Check if FollowUp table exists # if so delete @@ -278,5 +278,5 @@ def test_replaceTable(): assert True - def test_updateTable(): + def test_updateTable(self, helpers): assert True From 5948fa43b225bc62956e1add29a0de27edd6662f Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 5 Dec 2022 12:02:56 -0500 Subject: [PATCH 051/114] test; see if doc get updated --- schematic/help.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schematic/help.py b/schematic/help.py index de402b183..e0b00fdf1 100644 --- a/schematic/help.py +++ b/schematic/help.py @@ -36,7 +36,7 @@ "to the metadata manifest file. If not it will produce a pandas dataframe for the same." ), "output_csv": ("Path to where the CSV manifest template should be stored."), - "output_xlsx": ("Path to where the Excel manifest template should be stored."), + "output_xlsx": ("Path to where the Excel manifest template should be stored. Testing testing testing testing"), "use_annotations": ( "This is a boolean flag. If flag is provided when command line utility is executed, it will prepopulate template " "with existing annotations from Synapse." From e0cbcd7b06ffb0103ed10b2e8464238c0f899990 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Mon, 5 Dec 2022 10:05:16 -0700 Subject: [PATCH 052/114] rework `get_table_info` to accept dataset or project IDs --- schematic/store/synapse.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index 1673cfdde..039e53ba3 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -725,16 +725,21 @@ def get_synapse_table(self, synapse_id: str) -> Tuple[pd.DataFrame, CsvFileTable return df, results - def _get_tables(self, datasetId: str = None) -> List[Table]: - project = self.syn.get(self.getDatasetProject(datasetId)) + def _get_tables(self, datasetId: str = None, projectId: str = None) -> List[Table]: + if projectId: + project = projectId + elif datasetId: + project = self.syn.get(self.getDatasetProject(datasetId)) + return list(self.syn.getChildren(project, includeTypes=["table"])) - def get_table_info(self, datasetId: str = None) -> List[str]: + def get_table_info(self, datasetId: str = None, projectId: str = None) -> List[str]: """Gets the names of the tables in the schema + Can pass in a synID for a dataset or project Returns: list[str]: A list of table names """ - tables = self._get_tables(datasetId) + tables = self._get_tables(datasetId = datasetId, projectId = projectId) if tables: return {table["name"]: table["id"] for table in tables} else: @@ -743,7 +748,7 @@ def get_table_info(self, datasetId: str = None) -> List[str]: @missing_entity_handler def upload_format_manifest_table(self, se, manifest, datasetId, table_name, restrict, useSchemaLabel): # Rename the manifest columns to display names to match fileview - table_info = self.get_table_info(datasetId) + table_info = self.get_table_info(datasetId = datasetId) blacklist_chars = ['(', ')', '.', ' ', '-'] manifest_columns = manifest.columns.tolist() From 58a8487ffdfca6ef7956c010edd26dd260e4d2a9 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Mon, 5 Dec 2022 10:12:18 -0700 Subject: [PATCH 053/114] create: ensure no table exists or delete --- tests/test_store.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index 94e6bda2d..41d353d4f 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -3,7 +3,7 @@ import math import logging import pytest -import time +from time import sleep from tenacity import Retrying, RetryError, stop_after_attempt, wait_random_exponential import pandas as pd @@ -248,11 +248,17 @@ class TestTableOperations: def test_createTable(self, helpers, synapse_store): print(helpers.get_python_project(helpers)) + + # Check if FollowUp table exists if so delete + projectId = helpers.get_python_project(helpers) + existing_tables = synapse_store.get_table_info(projectId = projectId) + + if "followup_synapse_storage_manifest_table" in existing_tables.keys(): + synapse_store.syn.delete(existing_tables["followup_synapse_storage_manifest_table"]) + sleep(1) + # assert no table + assert "followup_synapse_storage_manifest_table" not in synapse_store.get_table_info(projectId = projectId).keys() - # Check if FollowUp table exists - # if so delete - - # assert no table # associate metadata with files From 8ea9ee5604bdf896d74ec6d698550602e98c7673 Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 5 Dec 2022 12:14:27 -0500 Subject: [PATCH 054/114] remove testing --- schematic/help.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schematic/help.py b/schematic/help.py index e0b00fdf1..de402b183 100644 --- a/schematic/help.py +++ b/schematic/help.py @@ -36,7 +36,7 @@ "to the metadata manifest file. If not it will produce a pandas dataframe for the same." ), "output_csv": ("Path to where the CSV manifest template should be stored."), - "output_xlsx": ("Path to where the Excel manifest template should be stored. Testing testing testing testing"), + "output_xlsx": ("Path to where the Excel manifest template should be stored."), "use_annotations": ( "This is a boolean flag. If flag is provided when command line utility is executed, it will prepopulate template " "with existing annotations from Synapse." From 9180e493647b2348f63e0bc42c12ce77184bba99 Mon Sep 17 00:00:00 2001 From: linglp Date: Mon, 5 Dec 2022 12:18:50 -0500 Subject: [PATCH 055/114] remove requirement.txt --- docs/requirements.txt | 188 ------------------------------------------ 1 file changed, 188 deletions(-) delete mode 100644 docs/requirements.txt diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 17c2690af..000000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,188 +0,0 @@ -# sphinx-click==2.5.0 -# jinja2==2.11.3 -# markupsafe==2.0.1 -alabaster==0.7.12 -altair==4.2.0 -aniso8601==9.0.1 -anyio==3.6.2 -appdirs==1.4.4 -appnope==0.1.2 -argon2-cffi==21.3.0 -argon2-cffi-bindings==21.2.0 -asttokens==2.0.5 -astunparse==1.6.3 -attrs==21.2.0 -Babel==2.11.0 -backcall==0.2.0 -backports.zoneinfo==0.2.1 -beautifulsoup4==4.11.1 -black==20.8b1 -bleach==5.0.1 -cachetools==4.2.2 -certifi==2021.5.30 -cffi==1.15.1 -charset-normalizer==2.0.3 -click==7.1.2 -click-log==0.3.2 -clickclick==20.10.2 -colorama==0.4.6 -connexion==2.12.0 -coverage==5.5 -cryptography==38.0.4 -cycler==0.11.0 -debugpy==1.5.1 -decorator==5.1.1 -defusedxml==0.7.1 -Deprecated==1.2.12 -docutils==0.19 -entrypoints==0.3 -et-xmlfile==1.1.0 -executing==0.8.2 -fastjsonschema==2.16.2 -flake8==3.9.2 -Flask==1.1.4 -Flask-Cors==3.0.10 -flask-restplus==0.13.0 -fonttools==4.29.1 -google-api-core==1.31.1 -google-api-python-client==1.12.8 -google-auth==1.34.0 -google-auth-httplib2==0.0.4 -google-auth-oauthlib==0.4.5 -googleapis-common-protos==1.53.0 -graphviz==0.16 -great-expectations==0.15.36 -httplib2==0.19.1 -idna==3.2 -imagesize==1.4.1 -importlib-metadata==5.1.0 -inflection==0.5.1 -iniconfig==1.1.1 -ipykernel==6.9.1 -ipython==8.0.1 -ipython-genutils==0.2.0 -ipywidgets==8.0.2 -isodate==0.6.0 -itsdangerous==1.1.0 -jedi==0.18.1 -Jinja2==2.11.3 -jsonpatch==1.32 -jsonpickle==2.1.0 -jsonpointer==2.3 -jsonschema==3.2.0 -jupyter-client==7.1.2 -jupyter-core==4.9.2 -jupyter-server==1.23.3 -jupyterlab-pygments==0.2.2 -jupyterlab-widgets==3.0.3 -keyring==23.4.1 -kiwisolver==1.3.2 -makefun==1.15.0 -MarkupSafe==2.0.1 -marshmallow==3.19.0 -matplotlib==3.5.1 -matplotlib-inline==0.1.3 -mccabe==0.6.1 -mistune==0.8.4 -mypy-extensions==0.4.3 -nbclassic==0.4.8 -nbclient==0.5.13 -nbconvert==6.4.5 -nbformat==5.7.0 -nest-asyncio==1.5.4 -networkx==2.6.2 -notebook==6.5.2 -notebook_shim==0.2.2 -numpy==1.21.1 -oauth2client==3.0.0 -oauthlib==3.1.1 -openapi-schema-validator==0.1.6 -openapi-spec-validator==0.3.3 -openpyxl==3.0.10 -packaging==21.0 -pandas==1.3.1 -pandocfilters==1.5.0 -parso==0.8.3 -pathspec==0.9.0 -pdoc==12.3.0 -pexpect==4.8.0 -pickleshare==0.7.5 -Pillow==9.0.1 -pip==22.0.3 -platformdirs==2.5.1 -pluggy==0.13.1 -prometheus-client==0.15.0 -prompt-toolkit==3.0.28 -protobuf==3.17.3 -ptyprocess==0.7.0 -pure-eval==0.2.2 -py==1.10.0 -pyasn1==0.4.8 -pyasn1-modules==0.2.8 -pycodestyle==2.7.0 -pycparser==2.21 -pydantic==1.10.2 -pyflakes==2.3.1 -Pygments==2.13.0 -pygsheets==2.0.5 -pyparsing==2.4.7 -pyrsistent==0.18.0 -pytest==6.2.4 -pytest-cov==2.12.1 -pytest-mock==3.6.1 -python-dateutil==2.8.2 -python-dotenv==0.15.0 -pytz==2022.6 -pytz-deprecation-shim==0.1.0.post0 -PyYAML==5.4.1 -pyzmq==22.3.0 -rdflib==5.0.0 -regex==2021.7.6 -requests==2.26.0 -requests-oauthlib==1.3.0 -rsa==4.7.2 -ruamel.yaml==0.17.17 -ruamel.yaml.clib==0.2.7 -schematicpy==22.11.3 -scipy==1.8.0 -Send2Trash==1.8.0 -setuptools==52.0.0 -six==1.16.0 -sniffio==1.3.0 -snowballstemmer==2.2.0 -soupsieve==2.3.2.post1 -Sphinx==5.1.1 -sphinx-click==3.1.0 -sphinxcontrib-applehelp==1.0.2 -sphinxcontrib-devhelp==1.0.2 -sphinxcontrib-htmlhelp==2.0.0 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.3 -sphinxcontrib-serializinghtml==1.1.5 -stack-data==0.2.0 -swagger-ui==0.1.2 -swagger-ui-bundle==0.0.8 -synapseclient==2.7.0 -tenacity==8.1.0 -terminado==0.17.1 -testpath==0.6.0 -toml==0.10.2 -tomli==2.0.1 -toolz==0.12.0 -tornado==6.1 -tqdm==4.64.1 -traitlets==5.1.1 -typed-ast==1.4.3 -typing_extensions==4.4.0 -tzdata==2022.7 -tzlocal==4.2 -uritemplate==3.0.1 -urllib3==1.26.6 -wcwidth==0.2.5 -webencodings==0.5.1 -websocket-client==1.4.2 -Werkzeug==1.0.1 -wheel==0.38.4 -widgetsnbextension==4.0.3 -wrapt==1.12.1 -zipp==3.11.0 \ No newline at end of file From c54dab377e974c55d9b6e06792c1a655a6545b46 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Mon, 5 Dec 2022 11:21:13 -0700 Subject: [PATCH 056/114] pull fileview query into own method --- schematic/store/synapse.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index 039e53ba3..caa0a7bed 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -93,6 +93,9 @@ def __init__( except KeyError: raise MissingConfigValueError(("synapse", "manifest_basename")) + self._query_fileview() + + def _query_fileview(self): try: self.storageFileview = CONFIG["synapse"]["master_fileview"] self.manifest = CONFIG["synapse"]["manifest_basename"] @@ -108,7 +111,7 @@ def __init__( except AttributeError: raise AttributeError("storageFileview attribute has not been set.") except SynapseHTTPError: - raise AccessCredentialsError(self.storageFileview) + raise AccessCredentialsError(self.storageFileview) @staticmethod def login(token=None, access_token=None, input_token=None): @@ -1311,6 +1314,9 @@ def getDatasetProject(self, datasetId: str) -> str: Returns: str: The Synapse ID for the parent project. """ + + self._query_fileview() + # Subset main file view dataset_index = self.storageFileviewTable["id"] == datasetId dataset_row = self.storageFileviewTable[dataset_index] From da3d7b7b1ee3e45bce947c4a0580227053347dbd Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Mon, 5 Dec 2022 11:21:56 -0700 Subject: [PATCH 057/114] create table test: upload assertions and cleanup --- tests/test_store.py | 60 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index 41d353d4f..fcbcd62fc 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -7,7 +7,7 @@ from tenacity import Retrying, RetryError, stop_after_attempt, wait_random_exponential import pandas as pd -from synapseclient import EntityViewSchema +from synapseclient import EntityViewSchema, Folder from schematic.models.metadata import MetadataModel from schematic.store.base import BaseStorage @@ -48,6 +48,23 @@ def dataset_fileview_table_tidy(dataset_fileview, dataset_fileview_table): table = dataset_fileview.tidy_table() yield table +@pytest.fixture +def projectId(synapse_store, helpers): + projectId = helpers.get_python_project(helpers) + yield projectId + +@pytest.fixture +def datasetId(synapse_store, projectId): + dataset = Folder( + name = 'Test Dataset', + parent = projectId, + ) + + datasetId = synapse_store.syn.store(dataset).id + yield datasetId + synapse_store.syn.delete(datasetId) + + def raise_final_error(retry_state): return retry_state.outcome.result() @@ -246,11 +263,20 @@ def test_tidy_table(self, dataset_fileview_table_tidy): class TestTableOperations: - def test_createTable(self, helpers, synapse_store): - print(helpers.get_python_project(helpers)) - + def test_createTable(self, helpers, synapse_store, config, projectId, datasetId): + # print(helpers.get_python_project(helpers)) + + # # create dataset + # projectId = helpers.get_python_project(helpers) + # dataset = Folder( + # name = 'Test Dataset', + # parent = projectId, + # ) + + # datasetId = synapse_store.syn.store(dataset).id + # sleep(20) + # Check if FollowUp table exists if so delete - projectId = helpers.get_python_project(helpers) existing_tables = synapse_store.get_table_info(projectId = projectId) if "followup_synapse_storage_manifest_table" in existing_tables.keys(): @@ -259,12 +285,30 @@ def test_createTable(self, helpers, synapse_store): # assert no table assert "followup_synapse_storage_manifest_table" not in synapse_store.get_table_info(projectId = projectId).keys() - # associate metadata with files + manifest_path = "mock_manifests/local_manifest.csv" + inputModelLocaiton = helpers.get_data_path(get_from_config(config.DATA, ("model", "input", "location"))) + sg = SchemaGenerator(inputModelLocaiton) + sleep(45) + manifestId = synapse_store.associateMetadataWithFiles( + schemaGenerator = sg, + metadataManifestPath = helpers.get_data_path(manifest_path), + datasetId = datasetId, + manifest_record_type = 'table', + useSchemaLabel = True, + hideBlanks = True, + restrict_manifest = False, + ) + existing_tables = synapse_store.get_table_info(projectId = projectId) + + # clean Up + synapse_store.syn.delete(manifestId) + #synapse_store.syn.delete(datasetId) # assert table exists - - # delete table + + assert "followup_synapse_storage_manifest_table" in existing_tables.keys() + assert True def test_replaceTable(self, helpers): From f374bc4b2a1a6defe44a8568d600bc11b5ce52de Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Mon, 5 Dec 2022 11:22:47 -0700 Subject: [PATCH 058/114] clean test --- tests/test_store.py | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index fcbcd62fc..e497d392c 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -264,17 +264,6 @@ def test_tidy_table(self, dataset_fileview_table_tidy): class TestTableOperations: def test_createTable(self, helpers, synapse_store, config, projectId, datasetId): - # print(helpers.get_python_project(helpers)) - - # # create dataset - # projectId = helpers.get_python_project(helpers) - # dataset = Folder( - # name = 'Test Dataset', - # parent = projectId, - # ) - - # datasetId = synapse_store.syn.store(dataset).id - # sleep(20) # Check if FollowUp table exists if so delete existing_tables = synapse_store.get_table_info(projectId = projectId) @@ -290,6 +279,7 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) inputModelLocaiton = helpers.get_data_path(get_from_config(config.DATA, ("model", "input", "location"))) sg = SchemaGenerator(inputModelLocaiton) + # updating file view on synapse takes a long time sleep(45) manifestId = synapse_store.associateMetadataWithFiles( schemaGenerator = sg, @@ -304,12 +294,9 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) # clean Up synapse_store.syn.delete(manifestId) - #synapse_store.syn.delete(datasetId) # assert table exists - assert "followup_synapse_storage_manifest_table" in existing_tables.keys() - - assert True + def test_replaceTable(self, helpers): From fbae2c46ca63c3389d789aae3437782750946681 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Mon, 5 Dec 2022 13:32:06 -0700 Subject: [PATCH 059/114] add replacement followup test manifest --- .../data/mock_manifests/local_manifest_replacement.csv | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tests/data/mock_manifests/local_manifest_replacement.csv diff --git a/tests/data/mock_manifests/local_manifest_replacement.csv b/tests/data/mock_manifests/local_manifest_replacement.csv new file mode 100644 index 000000000..71fd13e30 --- /dev/null +++ b/tests/data/mock_manifests/local_manifest_replacement.csv @@ -0,0 +1,10 @@ +Component,Days to Follow Up,Adverse Event,Progression or Recurrence,Barretts Esophagus Goblet Cells Present,BMI,Cause of Response,Comorbidity,Comorbidity Method of Diagnosis,Days to Adverse Event,Days to Comorbidity,Diabetes Treatment Type,Disease Response,DLCO Ref Predictive Percent,ECOG Performance Status,FEV1 FVC Post Bronch Percent,FEV 1 FVC Pre Bronch Percent,FEV1 Ref Post Bronch Percent,FEV1 Ref Pre Bronch Percent,Height,Hepatitis Sustained Virological Response,HPV Positive Type,Karnofsky Performance Status,Menopause Status,Pancreatitis Onset Year,Reflux Treatment Type,Risk Factor,Risk Factor Treatment,Viral Hepatitis Serologies,Weight,Days to Progression,Days to Progression Free,Days to Recurrence,Progression or Recurrence Anatomic Site,Progression or Recurrence Type,entityId,HTAN Participant ID,Uuid +FollowUp,89,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22249015,455,318e2d8c-83be-4b19-9a9f-5e97ce9c9cf7 +FollowUp,89,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22249915,456,600666ee-1f96-49f8-b848-2be751cb59f9 +FollowUp,89,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22687161,457,1fb32068-7b6c-4d12-8031-96d91229dda0 +FollowUp,89,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22688035,458,964949f3-efe1-47cd-8113-dedb909fd312 +FollowUp,89,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22978930,459,c562590f-359a-4ff5-bbd7-47e7ad840a32 +FollowUp,89,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22978946,460,a77e0882-7b6f-42a9-9e60-c4d2bfd72bb7 +FollowUp,89,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22978975,461,e7705ed5-ade4-4451-ae26-9c790e35e878 +FollowUp,89,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22979177,462,2897b73c-e225-4dc3-a093-96f645332ea3 +FollowUp,89,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn21989551,454,26a1cdba-dd37-483a-be6e-d1a4f5a9521b From a3d7c9b25ee49c836076359fa7b49704446e6757 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Mon, 5 Dec 2022 13:40:09 -0700 Subject: [PATCH 060/114] lower synapse wait time --- tests/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index e497d392c..4c51433fb 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -280,7 +280,7 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) sg = SchemaGenerator(inputModelLocaiton) # updating file view on synapse takes a long time - sleep(45) + sleep(30) manifestId = synapse_store.associateMetadataWithFiles( schemaGenerator = sg, metadataManifestPath = helpers.get_data_path(manifest_path), From b1dac420b1ceec59d7d48d31d48217fe25eb88c5 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 10:18:32 -0700 Subject: [PATCH 061/114] implement tenacity for view queries for datasets --- schematic/store/synapse.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index caa0a7bed..d676f7f00 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -9,6 +9,7 @@ # allows specifying explicit variable types from typing import Dict, List, Tuple, Sequence, Union from collections import OrderedDict +from tenacity import Retrying, stop_after_attempt, wait_chain, wait_fixed import numpy as np import pandas as pd @@ -1315,12 +1316,28 @@ def getDatasetProject(self, datasetId: str) -> str: str: The Synapse ID for the parent project. """ - self._query_fileview() - - # Subset main file view + # Subset Existing main file view dataset_index = self.storageFileviewTable["id"] == datasetId dataset_row = self.storageFileviewTable[dataset_index] + # If not dataset is found in view, try querying again since it may just need more time to reflect recent changes + # implement retrying since fileviews on synapse take variable amounts of time to update after operations + if dataset_row.empty: + for attempt in Retrying( + stop = stop_after_attempt(6), + wait = wait_chain(*[wait_fixed(5) for i in range (2)] + + [wait_fixed(10) for i in range(2)] + + [wait_fixed(15) for i in range (2)]), + ): + + self._query_fileview() + + # Subset new main file view + dataset_index = self.storageFileviewTable["id"] == datasetId + dataset_row = self.storageFileviewTable[dataset_index] + if not dataset_row.empty: + break + # Return `projectId` for given row if only one found if len(dataset_row) == 1: dataset_project = dataset_row["projectId"].values[0] From a75e0b5a68b5406008297a796d3a2f2115a3909f Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 10:18:51 -0700 Subject: [PATCH 062/114] remove sleeps in createTable test --- tests/test_store.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index 4c51433fb..b7a7efe8b 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -270,7 +270,6 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) if "followup_synapse_storage_manifest_table" in existing_tables.keys(): synapse_store.syn.delete(existing_tables["followup_synapse_storage_manifest_table"]) - sleep(1) # assert no table assert "followup_synapse_storage_manifest_table" not in synapse_store.get_table_info(projectId = projectId).keys() @@ -280,7 +279,6 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) sg = SchemaGenerator(inputModelLocaiton) # updating file view on synapse takes a long time - sleep(30) manifestId = synapse_store.associateMetadataWithFiles( schemaGenerator = sg, metadataManifestPath = helpers.get_data_path(manifest_path), From 88c68c9ae466047c9437afa76c5ed522d7c9abe6 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 11:54:18 -0700 Subject: [PATCH 063/114] Revert "implement tenacity for view queries for datasets" This reverts commit b1dac420b1ceec59d7d48d31d48217fe25eb88c5. --- schematic/store/synapse.py | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index d676f7f00..caa0a7bed 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -9,7 +9,6 @@ # allows specifying explicit variable types from typing import Dict, List, Tuple, Sequence, Union from collections import OrderedDict -from tenacity import Retrying, stop_after_attempt, wait_chain, wait_fixed import numpy as np import pandas as pd @@ -1316,28 +1315,12 @@ def getDatasetProject(self, datasetId: str) -> str: str: The Synapse ID for the parent project. """ - # Subset Existing main file view + self._query_fileview() + + # Subset main file view dataset_index = self.storageFileviewTable["id"] == datasetId dataset_row = self.storageFileviewTable[dataset_index] - # If not dataset is found in view, try querying again since it may just need more time to reflect recent changes - # implement retrying since fileviews on synapse take variable amounts of time to update after operations - if dataset_row.empty: - for attempt in Retrying( - stop = stop_after_attempt(6), - wait = wait_chain(*[wait_fixed(5) for i in range (2)] + - [wait_fixed(10) for i in range(2)] + - [wait_fixed(15) for i in range (2)]), - ): - - self._query_fileview() - - # Subset new main file view - dataset_index = self.storageFileviewTable["id"] == datasetId - dataset_row = self.storageFileviewTable[dataset_index] - if not dataset_row.empty: - break - # Return `projectId` for given row if only one found if len(dataset_row) == 1: dataset_project = dataset_row["projectId"].values[0] From 5ee6cfa40fe420a0e758dc68223c4d282d077360 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 12:00:50 -0700 Subject: [PATCH 064/114] implement tenacity at method level --- schematic/store/synapse.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index caa0a7bed..63e56e95e 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -9,6 +9,7 @@ # allows specifying explicit variable types from typing import Dict, List, Tuple, Sequence, Union from collections import OrderedDict +from tenacity import retry, stop_after_attempt, wait_chain, wait_fixed import numpy as np import pandas as pd @@ -1301,6 +1302,9 @@ def getDatasetAnnotations( # Force all values as strings return table.astype(str) + @retry(stop = stop_after_attempt(5), wait = wait_chain(*[wait_fixed(5) for i in range (2)] + + [wait_fixed(10) for i in range(2)] + + [wait_fixed(15)])) def getDatasetProject(self, datasetId: str) -> str: """Get parent project for a given dataset ID. From f90db9b5bdb062ee99fe1606ca91bdb5a0f149db Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 12:07:13 -0700 Subject: [PATCH 065/114] increase waiting time between tries --- schematic/store/synapse.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index 63e56e95e..2898911fc 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -1302,9 +1302,9 @@ def getDatasetAnnotations( # Force all values as strings return table.astype(str) - @retry(stop = stop_after_attempt(5), wait = wait_chain(*[wait_fixed(5) for i in range (2)] + - [wait_fixed(10) for i in range(2)] + - [wait_fixed(15)])) + @retry(stop = stop_after_attempt(5), wait = wait_chain(*[wait_fixed(10) for i in range (2)] + + [wait_fixed(15) for i in range(2)] + + [wait_fixed(20)])) def getDatasetProject(self, datasetId: str) -> str: """Get parent project for a given dataset ID. From 89c0ede0ff8ec6b4d2beb80484f017832ef400b0 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 12:09:47 -0700 Subject: [PATCH 066/114] update dataset name --- tests/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index b7a7efe8b..34130a870 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -56,7 +56,7 @@ def projectId(synapse_store, helpers): @pytest.fixture def datasetId(synapse_store, projectId): dataset = Folder( - name = 'Test Dataset', + name = 'Table Test Dataset', parent = projectId, ) From 78fc604d57075cd16d4d7839bb7833e4632c38aa Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 13:02:59 -0700 Subject: [PATCH 067/114] wait after creating dataset folder --- tests/test_store.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_store.py b/tests/test_store.py index 34130a870..065cf038d 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -61,6 +61,7 @@ def datasetId(synapse_store, projectId): ) datasetId = synapse_store.syn.store(dataset).id + sleep(5) yield datasetId synapse_store.syn.delete(datasetId) From dacb0690e3b1b2acc0773aa3165a4df2a1bff241 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 13:12:24 -0700 Subject: [PATCH 068/114] raise final error after retrying --- schematic/store/synapse.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index 2898911fc..771dd1d20 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -1302,9 +1302,14 @@ def getDatasetAnnotations( # Force all values as strings return table.astype(str) - @retry(stop = stop_after_attempt(5), wait = wait_chain(*[wait_fixed(10) for i in range (2)] + - [wait_fixed(15) for i in range(2)] + - [wait_fixed(20)])) + def raise_final_error(retry_state): + return retry_state.outcome.result() + + @retry(stop = stop_after_attempt(5), + wait = wait_chain(*[wait_fixed(10) for i in range (2)] + + [wait_fixed(15) for i in range(2)] + + [wait_fixed(20)]), + retry_error_callback = raise_final_error) def getDatasetProject(self, datasetId: str) -> str: """Get parent project for a given dataset ID. From 812ee58c75b74c246a7a79332b76910e1694e427 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 14:30:29 -0700 Subject: [PATCH 069/114] increase wait time for storing new tables --- schematic/store/synapse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index 771dd1d20..adf6c1e60 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -1487,7 +1487,7 @@ def make_synapse_table(self, self.syn.store(current_table, isRestricted = restrict) # wait for synapse store to finish - sleep(1) + sleep(10) # build schema and table from columns and store with necessary restrictions schema = Schema(name=table_name, columns=cols, parent=datasetParentProject) From 28638ee8a19a3c8237911131305def2142ba9753 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 14:50:00 -0700 Subject: [PATCH 070/114] TEMP add print statement for tests --- schematic/store/synapse.py | 1 + 1 file changed, 1 insertion(+) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index adf6c1e60..daf563fd5 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -805,6 +805,7 @@ def upload_format_manifest_table(self, se, manifest, datasetId, table_name, rest manipulation = 'replace') + print(manifest_table_id, manifest, table_manifest) return manifest_table_id, manifest, table_manifest def uplodad_manifest_file(self, manifest, metadataManifestPath, datasetId, restrict_manifest, component_name = ''): From 69d56b0e7913e891ff8d919ff0715a6457982f7c Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Tue, 6 Dec 2022 14:58:44 -0700 Subject: [PATCH 071/114] increase synapse wait time HIGH --- schematic/store/synapse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index daf563fd5..b2edf9733 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -1488,7 +1488,7 @@ def make_synapse_table(self, self.syn.store(current_table, isRestricted = restrict) # wait for synapse store to finish - sleep(10) + sleep(30) # build schema and table from columns and store with necessary restrictions schema = Schema(name=table_name, columns=cols, parent=datasetParentProject) From 5138b6726bbc8b7ad5ea6b1d9a74c5a54abb49b3 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 09:34:57 -0700 Subject: [PATCH 072/114] TEMP remove missing entity handler --- schematic/store/synapse.py | 1 - 1 file changed, 1 deletion(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index b2edf9733..4a52f32f7 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -749,7 +749,6 @@ def get_table_info(self, datasetId: str = None, projectId: str = None) -> List[s else: return {None:None} - @missing_entity_handler def upload_format_manifest_table(self, se, manifest, datasetId, table_name, restrict, useSchemaLabel): # Rename the manifest columns to display names to match fileview table_info = self.get_table_info(datasetId = datasetId) From 6bc4879356c781a1178601bc81514a9baa150367 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 10:05:04 -0700 Subject: [PATCH 073/114] TEMP remove dataset deletion --- tests/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index 065cf038d..3f900dc26 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -63,7 +63,7 @@ def datasetId(synapse_store, projectId): datasetId = synapse_store.syn.store(dataset).id sleep(5) yield datasetId - synapse_store.syn.delete(datasetId) + #synapse_store.syn.delete(datasetId) def raise_final_error(retry_state): From 0d1a2a228e5a9a5df8b8b9746d87768d97a7f2f5 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 10:12:59 -0700 Subject: [PATCH 074/114] Revert "TEMP remove dataset deletion" This reverts commit 6bc4879356c781a1178601bc81514a9baa150367. --- tests/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index 3f900dc26..065cf038d 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -63,7 +63,7 @@ def datasetId(synapse_store, projectId): datasetId = synapse_store.syn.store(dataset).id sleep(5) yield datasetId - #synapse_store.syn.delete(datasetId) + synapse_store.syn.delete(datasetId) def raise_final_error(retry_state): From 637d2b2b09868bc572487ad6ed57ed966f7d6e7f Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 10:54:13 -0700 Subject: [PATCH 075/114] switch to mockcomponent, use table name var --- tests/test_store.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index 065cf038d..a55f88004 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -266,16 +266,19 @@ class TestTableOperations: def test_createTable(self, helpers, synapse_store, config, projectId, datasetId): - # Check if FollowUp table exists if so delete + # Check if MockComponent table exists if so delete existing_tables = synapse_store.get_table_info(projectId = projectId) + + table_name='MockComponent_synapse_storage_manifest_table' - if "followup_synapse_storage_manifest_table" in existing_tables.keys(): synapse_store.syn.delete(existing_tables["followup_synapse_storage_manifest_table"]) + if table_name in existing_tables.keys(): + synapse_store.syn.delete(existing_tables[table_name]) # assert no table - assert "followup_synapse_storage_manifest_table" not in synapse_store.get_table_info(projectId = projectId).keys() + assert table_name not in synapse_store.get_table_info(projectId = projectId).keys() # associate metadata with files - manifest_path = "mock_manifests/local_manifest.csv" + manifest_path = "mock_manifests/Valid_Test_Manifest.csv" inputModelLocaiton = helpers.get_data_path(get_from_config(config.DATA, ("model", "input", "location"))) sg = SchemaGenerator(inputModelLocaiton) @@ -294,10 +297,7 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) # clean Up synapse_store.syn.delete(manifestId) # assert table exists - assert "followup_synapse_storage_manifest_table" in existing_tables.keys() - - - def test_replaceTable(self, helpers): + assert table_name in existing_tables.keys() # Check if FollowUp table exists # if so delete From e1ae500c0b577b7c98353a165789a9824f4d80e3 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 10:55:23 -0700 Subject: [PATCH 076/114] re add method def --- tests/test_store.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_store.py b/tests/test_store.py index a55f88004..90597fbd6 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -299,6 +299,7 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) # assert table exists assert table_name in existing_tables.keys() + def test_replaceTable(self, helpers) # Check if FollowUp table exists # if so delete From 77dbb45a60e675f2a9b4f16ccbb5c5a43d5840d8 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 10:55:48 -0700 Subject: [PATCH 077/114] fix typo --- tests/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index 90597fbd6..aeb6597c1 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -299,7 +299,7 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) # assert table exists assert table_name in existing_tables.keys() - def test_replaceTable(self, helpers) + def test_replaceTable(self, helpers): # Check if FollowUp table exists # if so delete From 9b8d531b884be1c6c9b5296a744b11faf1225951 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 10:58:22 -0700 Subject: [PATCH 078/114] remove extra line --- tests/test_store.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index aeb6597c1..a3f0f4d91 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -271,7 +271,6 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) table_name='MockComponent_synapse_storage_manifest_table' - synapse_store.syn.delete(existing_tables["followup_synapse_storage_manifest_table"]) if table_name in existing_tables.keys(): synapse_store.syn.delete(existing_tables[table_name]) # assert no table From 7b35cc24f91e774d48ab2efdf0aa3bc87cee7f4e Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 11:10:04 -0700 Subject: [PATCH 079/114] switch case --- tests/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index a3f0f4d91..c7eba660f 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -269,7 +269,7 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) # Check if MockComponent table exists if so delete existing_tables = synapse_store.get_table_info(projectId = projectId) - table_name='MockComponent_synapse_storage_manifest_table' + table_name='mockcomponent_synapse_storage_manifest_table' if table_name in existing_tables.keys(): synapse_store.syn.delete(existing_tables[table_name]) From 67ed7df465c8357de9438500fb2f8f0a93dfd139 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 11:19:31 -0700 Subject: [PATCH 080/114] switch manifest used --- tests/data/mock_manifests/table_manifest.csv | 10 ++++++++++ ..._replacement.csv => table_manifest_replacement.csv} | 0 tests/test_store.py | 4 ++-- 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 tests/data/mock_manifests/table_manifest.csv rename tests/data/mock_manifests/{local_manifest_replacement.csv => table_manifest_replacement.csv} (100%) diff --git a/tests/data/mock_manifests/table_manifest.csv b/tests/data/mock_manifests/table_manifest.csv new file mode 100644 index 000000000..c64988577 --- /dev/null +++ b/tests/data/mock_manifests/table_manifest.csv @@ -0,0 +1,10 @@ +Component,Days to Follow Up,Adverse Event,Progression or Recurrence,Barretts Esophagus Goblet Cells Present,BMI,Cause of Response,Comorbidity,Comorbidity Method of Diagnosis,Days to Adverse Event,Days to Comorbidity,Diabetes Treatment Type,Disease Response,DLCO Ref Predictive Percent,ECOG Performance Status,FEV1 FVC Post Bronch Percent,FEV 1 FVC Pre Bronch Percent,FEV1 Ref Post Bronch Percent,FEV1 Ref Pre Bronch Percent,Height,Hepatitis Sustained Virological Response,HPV Positive Type,Karnofsky Performance Status,Menopause Status,Pancreatitis Onset Year,Reflux Treatment Type,Risk Factor,Risk Factor Treatment,Viral Hepatitis Serologies,Weight,Days to Progression,Days to Progression Free,Days to Recurrence,Progression or Recurrence Anatomic Site,Progression or Recurrence Type,entityId,HTAN Participant ID +FollowUp,73.0,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22249015,455.0 +FollowUp,73.0,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22249915,456.0 +FollowUp,73.0,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22687161,457.0 +FollowUp,73.0,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22688035,458.0 +FollowUp,73.0,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22978930,459.0 +FollowUp,73.0,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22978946,460.0 +FollowUp,73.0,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22978975,461.0 +FollowUp,73.0,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn22979177,462.0 +FollowUp,73.0,,Not Reported,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,syn21989551,454.0 diff --git a/tests/data/mock_manifests/local_manifest_replacement.csv b/tests/data/mock_manifests/table_manifest_replacement.csv similarity index 100% rename from tests/data/mock_manifests/local_manifest_replacement.csv rename to tests/data/mock_manifests/table_manifest_replacement.csv diff --git a/tests/test_store.py b/tests/test_store.py index c7eba660f..9e44c7810 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -269,7 +269,7 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) # Check if MockComponent table exists if so delete existing_tables = synapse_store.get_table_info(projectId = projectId) - table_name='mockcomponent_synapse_storage_manifest_table' + table_name='followup_synapse_storage_manifest_table' if table_name in existing_tables.keys(): synapse_store.syn.delete(existing_tables[table_name]) @@ -277,7 +277,7 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) assert table_name not in synapse_store.get_table_info(projectId = projectId).keys() # associate metadata with files - manifest_path = "mock_manifests/Valid_Test_Manifest.csv" + manifest_path = "mock_manifests/table_manifest.csv" inputModelLocaiton = helpers.get_data_path(get_from_config(config.DATA, ("model", "input", "location"))) sg = SchemaGenerator(inputModelLocaiton) From 594d638eb20be98fc48b429f7a3d40b3c5bd5b03 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 11:36:40 -0700 Subject: [PATCH 081/114] Revert "TEMP remove missing entity handler" This reverts commit 5138b6726bbc8b7ad5ea6b1d9a74c5a54abb49b3. --- schematic/store/synapse.py | 1 + 1 file changed, 1 insertion(+) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index 4a52f32f7..b2edf9733 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -749,6 +749,7 @@ def get_table_info(self, datasetId: str = None, projectId: str = None) -> List[s else: return {None:None} + @missing_entity_handler def upload_format_manifest_table(self, se, manifest, datasetId, table_name, restrict, useSchemaLabel): # Rename the manifest columns to display names to match fileview table_info = self.get_table_info(datasetId = datasetId) From 47a8d15f0255f6c6dbed6b5c4b1214ac1a3d1f8a Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 13:07:43 -0700 Subject: [PATCH 082/114] TEMP add sleep for table creation --- schematic/store/synapse.py | 1 + 1 file changed, 1 insertion(+) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index b2edf9733..f5a9a31f8 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -1532,6 +1532,7 @@ def make_synapse_table(self, cols.append(Column(name=col, columnType='STRING', maximumSize=100)) schema = Schema(name=table_name, columns=cols, parent=datasetParentProject) table = Table(schema, table_to_load) + sleep(30) table = self.syn.store(table, isRestricted = restrict) return table.schema.id else: From d1d342ed4d9255d505142723799e25e9830ab75e Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 13:15:31 -0700 Subject: [PATCH 083/114] Revert "TEMP add sleep for table creation" This reverts commit 47a8d15f0255f6c6dbed6b5c4b1214ac1a3d1f8a. --- schematic/store/synapse.py | 1 - 1 file changed, 1 deletion(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index f5a9a31f8..b2edf9733 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -1532,7 +1532,6 @@ def make_synapse_table(self, cols.append(Column(name=col, columnType='STRING', maximumSize=100)) schema = Schema(name=table_name, columns=cols, parent=datasetParentProject) table = Table(schema, table_to_load) - sleep(30) table = self.syn.store(table, isRestricted = restrict) return table.schema.id else: From 1061f065c18b1b74cf37671a71fd779e039b408c Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 13:28:21 -0700 Subject: [PATCH 084/114] wait after making table --- schematic/store/synapse.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index b2edf9733..782a9a57f 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -1092,7 +1092,8 @@ def associateMetadataWithFiles( if manifest_record_type == 'table' or manifest_record_type == 'both': manifest_synapse_table_id, manifest, table_manifest = self.upload_format_manifest_table( se, manifest, datasetId, table_name, restrict = restrict_manifest, useSchemaLabel=useSchemaLabel) - + sleep(30) + # Iterate over manifest rows, create Synapse entities and store corresponding entity IDs in manifest if needed # also set metadata for each synapse entity as Synapse annotations for idx, row in manifest.iterrows(): From 9763823dd74b7f257584ddb121a940d88da3e0cd Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 7 Dec 2022 14:04:33 -0700 Subject: [PATCH 085/114] Revert "TEMP add print statement for tests" This reverts commit 28638ee8a19a3c8237911131305def2142ba9753. --- schematic/store/synapse.py | 1 - 1 file changed, 1 deletion(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index 782a9a57f..a860bcc14 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -805,7 +805,6 @@ def upload_format_manifest_table(self, se, manifest, datasetId, table_name, rest manipulation = 'replace') - print(manifest_table_id, manifest, table_manifest) return manifest_table_id, manifest, table_manifest def uplodad_manifest_file(self, manifest, metadataManifestPath, datasetId, restrict_manifest, component_name = ''): From a173d44258ebeb10835efd6c93df487ca1baede9 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 09:39:23 -0700 Subject: [PATCH 086/114] sleep after table deletion --- tests/test_store.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_store.py b/tests/test_store.py index 9e44c7810..5a61be1ff 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -273,6 +273,7 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) if table_name in existing_tables.keys(): synapse_store.syn.delete(existing_tables[table_name]) + sleep(10) # assert no table assert table_name not in synapse_store.get_table_info(projectId = projectId).keys() From d1216c224bdabd494b7bc0a9652bea4a5ba634ca Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 09:56:22 -0700 Subject: [PATCH 087/114] do not cancel other python instances on test failure --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 131f751af..f25f8b4e3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,6 +29,7 @@ jobs: env: POETRY_VERSION: 1.2.0rc1 strategy: + fail-fast: false matrix: python-version: ["3.7", "3.8", "3.9", "3.10"] From 10284103dfdda53cf14ba8f2cc5a41cd221de80f Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 10:10:54 -0700 Subject: [PATCH 088/114] switch version specify project assignment --- tests/conftest.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 62a15e360..b37cfb59d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -76,14 +76,20 @@ def get_python_project(self): version = self.get_python_version(Helpers) - python_projects = { - "3.7": "syn47217926", - "3.8": "syn47217967", - "3.9": "syn47218127", - "3.10": "syn47218347", - } - - return python_projects[version] + if version == "3.7": + projectId = "syn47217926" + elif version == "3.8": + projectId = "syn47217967" + elif version == "3.9": + projectId = "syn47218127" + elif version == "3.10": + projectId = "syn47218347" + else: + raise ValueError( + "Python version not supported" + ) + + return projectId @pytest.fixture(scope="session") def helpers(): From d8f748795686d50e578d85b0f25b67002900134a Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 10:31:42 -0700 Subject: [PATCH 089/114] add version to dataset name --- tests/test_store.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index 5a61be1ff..f87d430ab 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -54,9 +54,9 @@ def projectId(synapse_store, helpers): yield projectId @pytest.fixture -def datasetId(synapse_store, projectId): +def datasetId(synapse_store, projectId, helpers): dataset = Folder( - name = 'Table Test Dataset', + name = 'Table Test Dataset ' + helpers.get_python_version(helpers), parent = projectId, ) From e9b266218d62f217d01391ed8661c655515564f2 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 10:43:59 -0700 Subject: [PATCH 090/114] configure dataset and project within test --- tests/test_store.py | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index f87d430ab..2ffc86d06 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -48,24 +48,6 @@ def dataset_fileview_table_tidy(dataset_fileview, dataset_fileview_table): table = dataset_fileview.tidy_table() yield table -@pytest.fixture -def projectId(synapse_store, helpers): - projectId = helpers.get_python_project(helpers) - yield projectId - -@pytest.fixture -def datasetId(synapse_store, projectId, helpers): - dataset = Folder( - name = 'Table Test Dataset ' + helpers.get_python_version(helpers), - parent = projectId, - ) - - datasetId = synapse_store.syn.store(dataset).id - sleep(5) - yield datasetId - synapse_store.syn.delete(datasetId) - - def raise_final_error(retry_state): return retry_state.outcome.result() @@ -264,7 +246,31 @@ def test_tidy_table(self, dataset_fileview_table_tidy): class TestTableOperations: - def test_createTable(self, helpers, synapse_store, config, projectId, datasetId): + def test_createTable(self, helpers, synapse_store, config): + + version = helpers.get_pytyhon_version(helpers) + + if version == "3.7": + projectId = "syn47217926" + elif version == "3.8": + projectId = "syn47217967" + elif version == "3.9": + projectId = "syn47218127" + elif version == "3.10": + projectId = "syn47218347" + else: + raise ValueError( + "Python version not supported" + ) + + dataset = Folder( + name = 'Table Test Dataset ' + version, + parent = projectId, + ) + + datasetId = synapse_store.syn.store(dataset).id + sleep(5) + # Check if MockComponent table exists if so delete existing_tables = synapse_store.get_table_info(projectId = projectId) From 9f919351acfb6b67d639323cfd7300805b2f200c Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 10:52:02 -0700 Subject: [PATCH 091/114] delete table --- tests/test_store.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_store.py b/tests/test_store.py index 2ffc86d06..b2939b9ba 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -302,6 +302,7 @@ def test_createTable(self, helpers, synapse_store, config): # clean Up synapse_store.syn.delete(manifestId) + synapse_store.syn.delete(datasetId) # assert table exists assert table_name in existing_tables.keys() From f2152ddf1d905f0a50613ab68a9ba034ede63b44 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 11:02:50 -0700 Subject: [PATCH 092/114] fix typo --- tests/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index b2939b9ba..2134eb4f3 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -248,7 +248,7 @@ class TestTableOperations: def test_createTable(self, helpers, synapse_store, config): - version = helpers.get_pytyhon_version(helpers) + version = helpers.get_python_version(helpers) if version == "3.7": projectId = "syn47217926" From 61b3500b00ed4db12c19ca45bed7e44801f0beda Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 11:55:27 -0700 Subject: [PATCH 093/114] Revert "fix typo" This reverts commit f2152ddf1d905f0a50613ab68a9ba034ede63b44. --- tests/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index 2134eb4f3..b2939b9ba 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -248,7 +248,7 @@ class TestTableOperations: def test_createTable(self, helpers, synapse_store, config): - version = helpers.get_python_version(helpers) + version = helpers.get_pytyhon_version(helpers) if version == "3.7": projectId = "syn47217926" From 085172dd1019441f423aeb5f36e24ba0015a0ef8 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 11:55:30 -0700 Subject: [PATCH 094/114] Revert "delete table" This reverts commit 9f919351acfb6b67d639323cfd7300805b2f200c. --- tests/test_store.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index b2939b9ba..2ffc86d06 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -302,7 +302,6 @@ def test_createTable(self, helpers, synapse_store, config): # clean Up synapse_store.syn.delete(manifestId) - synapse_store.syn.delete(datasetId) # assert table exists assert table_name in existing_tables.keys() From 7e8d43fb8008fe1ffc455c59c1479b579b7e4c89 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 11:55:33 -0700 Subject: [PATCH 095/114] Revert "configure dataset and project within test" This reverts commit e9b266218d62f217d01391ed8661c655515564f2. --- tests/test_store.py | 44 +++++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index 2ffc86d06..f87d430ab 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -48,6 +48,24 @@ def dataset_fileview_table_tidy(dataset_fileview, dataset_fileview_table): table = dataset_fileview.tidy_table() yield table +@pytest.fixture +def projectId(synapse_store, helpers): + projectId = helpers.get_python_project(helpers) + yield projectId + +@pytest.fixture +def datasetId(synapse_store, projectId, helpers): + dataset = Folder( + name = 'Table Test Dataset ' + helpers.get_python_version(helpers), + parent = projectId, + ) + + datasetId = synapse_store.syn.store(dataset).id + sleep(5) + yield datasetId + synapse_store.syn.delete(datasetId) + + def raise_final_error(retry_state): return retry_state.outcome.result() @@ -246,31 +264,7 @@ def test_tidy_table(self, dataset_fileview_table_tidy): class TestTableOperations: - def test_createTable(self, helpers, synapse_store, config): - - version = helpers.get_pytyhon_version(helpers) - - if version == "3.7": - projectId = "syn47217926" - elif version == "3.8": - projectId = "syn47217967" - elif version == "3.9": - projectId = "syn47218127" - elif version == "3.10": - projectId = "syn47218347" - else: - raise ValueError( - "Python version not supported" - ) - - dataset = Folder( - name = 'Table Test Dataset ' + version, - parent = projectId, - ) - - datasetId = synapse_store.syn.store(dataset).id - sleep(5) - + def test_createTable(self, helpers, synapse_store, config, projectId, datasetId): # Check if MockComponent table exists if so delete existing_tables = synapse_store.get_table_info(projectId = projectId) From aa82264285800797d9a69c0be9ac97b76b1791e8 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:10:03 -0700 Subject: [PATCH 096/114] temp add version as input --- tests/test_store.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index f87d430ab..8b4e71155 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -48,6 +48,11 @@ def dataset_fileview_table_tidy(dataset_fileview, dataset_fileview_table): table = dataset_fileview.tidy_table() yield table +@pytest.fixture +def version(synapse_store, helpers): + + yield helpers.get_python_version(helpers) + @pytest.fixture def projectId(synapse_store, helpers): projectId = helpers.get_python_project(helpers) @@ -264,7 +269,7 @@ def test_tidy_table(self, dataset_fileview_table_tidy): class TestTableOperations: - def test_createTable(self, helpers, synapse_store, config, projectId, datasetId): + def test_createTable(self, helpers, synapse_store, config, projectId, datasetId, version): # Check if MockComponent table exists if so delete existing_tables = synapse_store.get_table_info(projectId = projectId) From 914e85f0e4b194352d8104c37ff288d7cd30ec75 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:32:25 -0700 Subject: [PATCH 097/114] temp display python version in actions --- .github/workflows/test.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f25f8b4e3..46c6d50a0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -100,6 +100,11 @@ jobs: # # if files are not formatted correctly, the build will not go through # black . --check #---------------------------------------------- + # Display Python Version + #---------------------------------------------- + - name: Display Python version + run: python -c "import sys; print(sys.version)" + #---------------------------------------------- # run test suite #---------------------------------------------- - name: Run regular tests and rule combination tests From d3b30bf5fd8c5a9d70326f0df28cffd99704e43b Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:37:52 -0700 Subject: [PATCH 098/114] get version differently --- tests/conftest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index b37cfb59d..6ee76cd3c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ from multiprocessing.sharedctypes import Value import os import logging -import platform +import sys import shutil import pytest @@ -66,7 +66,7 @@ def get_schema_explorer(path=None, *paths): @staticmethod def get_python_version(self): - version=platform.python_version() + version=sys.version base_version=".".join(version.split('.')[0:2]) return base_version From 31f6bdaf5182205b925d5bd42a0a7fba5f0757b1 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:48:31 -0700 Subject: [PATCH 099/114] temp print statement --- tests/test_store.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_store.py b/tests/test_store.py index 8b4e71155..500ea704f 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -271,6 +271,9 @@ class TestTableOperations: def test_createTable(self, helpers, synapse_store, config, projectId, datasetId, version): + + print(version, helpers.get_python_version(helpers)) + # Check if MockComponent table exists if so delete existing_tables = synapse_store.get_table_info(projectId = projectId) From e1fddb7a90bc8320202986ecc8e8b6668dc94c91 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:49:09 -0700 Subject: [PATCH 100/114] temp display test output --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 46c6d50a0..f6357bf3b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -124,7 +124,7 @@ jobs: run: > source .venv/bin/activate; pytest --cov-report=term --cov-report=html:htmlcov --cov=schematic/ - -m "not (google_credentials_needed or rule_combos or schematic_api)" + -m "not (google_credentials_needed or rule_combos or schematic_api)" -s - name: Upload pytest test results uses: actions/upload-artifact@v2 From 3a08038d146e79f71eba2b9579b6acf807298518 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Wed, 14 Dec 2022 14:02:16 -0700 Subject: [PATCH 101/114] Revert "switch version specify project assignment" This reverts commit 10284103dfdda53cf14ba8f2cc5a41cd221de80f. --- tests/conftest.py | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 6ee76cd3c..7af6eb9a5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -76,20 +76,14 @@ def get_python_project(self): version = self.get_python_version(Helpers) - if version == "3.7": - projectId = "syn47217926" - elif version == "3.8": - projectId = "syn47217967" - elif version == "3.9": - projectId = "syn47218127" - elif version == "3.10": - projectId = "syn47218347" - else: - raise ValueError( - "Python version not supported" - ) - - return projectId + python_projects = { + "3.7": "syn47217926", + "3.8": "syn47217967", + "3.9": "syn47218127", + "3.10": "syn47218347", + } + + return python_projects[version] @pytest.fixture(scope="session") def helpers(): From 90c900f4607d776141d7ce2c8160a70d25f425a8 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 5 Jan 2023 11:19:30 -0700 Subject: [PATCH 102/114] Revert "temp display test output" This reverts commit e1fddb7a90bc8320202986ecc8e8b6668dc94c91. --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f6357bf3b..46c6d50a0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -124,7 +124,7 @@ jobs: run: > source .venv/bin/activate; pytest --cov-report=term --cov-report=html:htmlcov --cov=schematic/ - -m "not (google_credentials_needed or rule_combos or schematic_api)" -s + -m "not (google_credentials_needed or rule_combos or schematic_api)" - name: Upload pytest test results uses: actions/upload-artifact@v2 From 010990013b95a4a473aa53f985b98453ec0c2f52 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 5 Jan 2023 11:45:29 -0700 Subject: [PATCH 103/114] mark table operations test and register --- pyproject.toml | 5 +++++ tests/test_store.py | 1 + 2 files changed, 6 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 9ca4d70e1..14783a9f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -119,4 +119,9 @@ markers = [ schematic_api: marks tests requiring \ running API locally (skipped on GitHub CI) """ + """\ + table_operations: marks tests covering \ + table operations that pass locally \ + but fail on CI due to interactions with Synapse(skipped on GitHub CI) + """ ] diff --git a/tests/test_store.py b/tests/test_store.py index 500ea704f..e822270ee 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -267,6 +267,7 @@ def test_tidy_table(self, dataset_fileview_table_tidy): assert isinstance(year_value, str) assert year_value == "1980" +@pytest.mark.table_operations class TestTableOperations: def test_createTable(self, helpers, synapse_store, config, projectId, datasetId, version): From 9fb0c27664b4a38285051ec823410d0128217af3 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 5 Jan 2023 11:47:20 -0700 Subject: [PATCH 104/114] register rule_combos --- pyproject.toml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 14783a9f7..36ff6ad32 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -120,8 +120,13 @@ markers = [ running API locally (skipped on GitHub CI) """ """\ + rule_combos: marks tests covering \ + combinations of rules that aren't always necessary \ + and can add significantly to CI runtime (skipped on GitHub CI unless prompted to run in commit message) + """ + """\ table_operations: marks tests covering \ table operations that pass locally \ - but fail on CI due to interactions with Synapse(skipped on GitHub CI) + but fail on CI due to interactions with Synapse (skipped on GitHub CI) """ ] From d846ab12db173045702c2e0f41a6f275144b3987 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 5 Jan 2023 11:48:55 -0700 Subject: [PATCH 105/114] skip table operations tests in CI --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 46c6d50a0..0430f8291 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -114,7 +114,7 @@ jobs: run: > source .venv/bin/activate; pytest --cov-report=term --cov-report=html:htmlcov --cov=schematic/ - -m "not google_credentials_needed" + -m "not (google_credentials_needed or table_operations)" - name: Run tests env: @@ -124,7 +124,7 @@ jobs: run: > source .venv/bin/activate; pytest --cov-report=term --cov-report=html:htmlcov --cov=schematic/ - -m "not (google_credentials_needed or rule_combos or schematic_api)" + -m "not (google_credentials_needed or rule_combos or schematic_api or table_operations)" - name: Upload pytest test results uses: actions/upload-artifact@v2 From 4cdeb9344857bd3bc0e9696d32967bf3771d4367 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 5 Jan 2023 11:49:49 -0700 Subject: [PATCH 106/114] fix typo in .toml --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 36ff6ad32..b3289d2c2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -118,12 +118,12 @@ markers = [ """\ schematic_api: marks tests requiring \ running API locally (skipped on GitHub CI) - """ + """, """\ rule_combos: marks tests covering \ combinations of rules that aren't always necessary \ and can add significantly to CI runtime (skipped on GitHub CI unless prompted to run in commit message) - """ + """, """\ table_operations: marks tests covering \ table operations that pass locally \ From fe189767bd1f16b9039033eb53ae50ad011253a9 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 5 Jan 2023 13:57:50 -0700 Subject: [PATCH 107/114] rm print statement --- tests/test_store.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index e822270ee..a6ac2058e 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -270,11 +270,9 @@ def test_tidy_table(self, dataset_fileview_table_tidy): @pytest.mark.table_operations class TestTableOperations: - def test_createTable(self, helpers, synapse_store, config, projectId, datasetId, version): + def test_createTable(self, helpers, synapse_store, config, projectId, datasetId): - print(version, helpers.get_python_version(helpers)) - # Check if MockComponent table exists if so delete existing_tables = synapse_store.get_table_info(projectId = projectId) From 858a860923e976223e27510bddc18386c25a5ec6 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 5 Jan 2023 13:59:52 -0700 Subject: [PATCH 108/114] update table name in comment --- tests/test_store.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_store.py b/tests/test_store.py index a6ac2058e..1ab26f18b 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -273,7 +273,7 @@ class TestTableOperations: def test_createTable(self, helpers, synapse_store, config, projectId, datasetId): - # Check if MockComponent table exists if so delete + # Check if FollowUp table exists if so delete existing_tables = synapse_store.get_table_info(projectId = projectId) table_name='followup_synapse_storage_manifest_table' From 99ec2723b0e545626a578cb927b0d7b1a2d5fcbf Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Thu, 5 Jan 2023 15:07:48 -0700 Subject: [PATCH 109/114] add replace_table test --- tests/test_store.py | 75 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 61 insertions(+), 14 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index 1ab26f18b..13416221a 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -306,21 +306,68 @@ def test_createTable(self, helpers, synapse_store, config, projectId, datasetId) # assert table exists assert table_name in existing_tables.keys() - def test_replaceTable(self, helpers): - # Check if FollowUp table exists - # if so delete - - # assert no table - # Associate barebones FollowUp manifest with files - # Query table for certain column - # assert empty/no results - # import filled FollowUp Manifest - # Associate filled manifest with files - # query table - # assert results exist - # delete table + def test_replaceTable(self, helpers, synapse_store, config, projectId, datasetId): + table_name='followup_synapse_storage_manifest_table' + manifest_path = "mock_manifests/table_manifest.csv" + replacement_manifest_path = "mock_manifests/table_manifest_replacement.csv" + column_of_interest="DaystoFollowUp" + + # Check if FollowUp table exists if so delete + existing_tables = synapse_store.get_table_info(projectId = projectId) + + if table_name in existing_tables.keys(): + synapse_store.syn.delete(existing_tables[table_name]) + sleep(10) + # assert no table + assert table_name not in synapse_store.get_table_info(projectId = projectId).keys() - assert True + # associate org FollowUp metadata with files + inputModelLocaiton = helpers.get_data_path(get_from_config(config.DATA, ("model", "input", "location"))) + sg = SchemaGenerator(inputModelLocaiton) + + # updating file view on synapse takes a long time + manifestId = synapse_store.associateMetadataWithFiles( + schemaGenerator = sg, + metadataManifestPath = helpers.get_data_path(manifest_path), + datasetId = datasetId, + manifest_record_type = 'table', + useSchemaLabel = True, + hideBlanks = True, + restrict_manifest = False, + ) + existing_tables = synapse_store.get_table_info(projectId = projectId) + + # Query table for DaystoFollowUp column + tableId = existing_tables[table_name] + daysToFollowUp = synapse_store.syn.tableQuery( + f"SELECT {column_of_interest} FROM {tableId}" + ).asDataFrame().squeeze() + + # assert Days to FollowUp == 73 + assert (daysToFollowUp == '73.0').all() + + # Associate replacement manifest with files + manifestId = synapse_store.associateMetadataWithFiles( + schemaGenerator = sg, + metadataManifestPath = helpers.get_data_path(replacement_manifest_path), + datasetId = datasetId, + manifest_record_type = 'table', + useSchemaLabel = True, + hideBlanks = True, + restrict_manifest = False, + ) + existing_tables = synapse_store.get_table_info(projectId = projectId) + + # Query table for DaystoFollowUp column + tableId = existing_tables[table_name] + daysToFollowUp = synapse_store.syn.tableQuery( + f"SELECT {column_of_interest} FROM {tableId}" + ).asDataFrame().squeeze() + + # assert Days to FollowUp == 89 now and not 73 + assert (daysToFollowUp == '89').all() + # delete table + synapse_store.syn.delete(tableId) def test_updateTable(self, helpers): assert True From 1f0ec008d466f72810eed3c046d5faad4c3aad07 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Fri, 6 Jan 2023 09:20:07 -0700 Subject: [PATCH 110/114] Revert "temp display python version in actions" This reverts commit 914e85f0e4b194352d8104c37ff288d7cd30ec75. --- .github/workflows/test.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0430f8291..012369891 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -100,11 +100,6 @@ jobs: # # if files are not formatted correctly, the build will not go through # black . --check #---------------------------------------------- - # Display Python Version - #---------------------------------------------- - - name: Display Python version - run: python -c "import sys; print(sys.version)" - #---------------------------------------------- # run test suite #---------------------------------------------- - name: Run regular tests and rule combination tests From 8cb88500739c34e2145bea32b7c19306512bcaab Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Fri, 6 Jan 2023 09:26:40 -0700 Subject: [PATCH 111/114] decrease sleep time in make_synapse_table --- schematic/store/synapse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index a860bcc14..e7f983300 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -1488,7 +1488,7 @@ def make_synapse_table(self, self.syn.store(current_table, isRestricted = restrict) # wait for synapse store to finish - sleep(30) + sleep(1) # build schema and table from columns and store with necessary restrictions schema = Schema(name=table_name, columns=cols, parent=datasetParentProject) From c039c9e4d2bbf80b8cb44052bff1c9a37f4d16a0 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Fri, 6 Jan 2023 09:29:16 -0700 Subject: [PATCH 112/114] remove sleep in associateMetadataWithFiles --- schematic/store/synapse.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index e7f983300..771dd1d20 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -1091,8 +1091,7 @@ def associateMetadataWithFiles( if manifest_record_type == 'table' or manifest_record_type == 'both': manifest_synapse_table_id, manifest, table_manifest = self.upload_format_manifest_table( se, manifest, datasetId, table_name, restrict = restrict_manifest, useSchemaLabel=useSchemaLabel) - sleep(30) - + # Iterate over manifest rows, create Synapse entities and store corresponding entity IDs in manifest if needed # also set metadata for each synapse entity as Synapse annotations for idx, row in manifest.iterrows(): From 3ca933fbb9d88054228034b5f4643611beab7270 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Fri, 6 Jan 2023 09:36:52 -0700 Subject: [PATCH 113/114] remove unnecessary placeholder test --- tests/test_store.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/test_store.py b/tests/test_store.py index 13416221a..7ecbdb33c 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -368,6 +368,3 @@ def test_replaceTable(self, helpers, synapse_store, config, projectId, datasetId assert (daysToFollowUp == '89').all() # delete table synapse_store.syn.delete(tableId) - - def test_updateTable(self, helpers): - assert True From d268af14dba0e3d070fbca821c66245ed33493d2 Mon Sep 17 00:00:00 2001 From: Gianna Jordan <61707471+GiaJordan@users.noreply.github.com> Date: Mon, 9 Jan 2023 13:17:08 -0700 Subject: [PATCH 114/114] only retry when LookupError is raised --- schematic/store/synapse.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/schematic/store/synapse.py b/schematic/store/synapse.py index 771dd1d20..86603932d 100644 --- a/schematic/store/synapse.py +++ b/schematic/store/synapse.py @@ -9,7 +9,7 @@ # allows specifying explicit variable types from typing import Dict, List, Tuple, Sequence, Union from collections import OrderedDict -from tenacity import retry, stop_after_attempt, wait_chain, wait_fixed +from tenacity import retry, stop_after_attempt, wait_chain, wait_fixed, retry_if_exception_type import numpy as np import pandas as pd @@ -1309,6 +1309,7 @@ def raise_final_error(retry_state): wait = wait_chain(*[wait_fixed(10) for i in range (2)] + [wait_fixed(15) for i in range(2)] + [wait_fixed(20)]), + retry=retry_if_exception_type(LookupError), retry_error_callback = raise_final_error) def getDatasetProject(self, datasetId: str) -> str: """Get parent project for a given dataset ID.