From e61704cdf2c6e0cfedd751c01191db9dfc73a4b2 Mon Sep 17 00:00:00 2001 From: pieterlukasse Date: Thu, 17 Aug 2023 17:39:05 +0200 Subject: [PATCH] feat: added basic dev mode support scripts ... including some fixes / patches to make the code work (fixed outdated lib and disabled a part of the code that was crashing) --- .gitignore | 1 + README.md | 59 ++++- docker-compose.yml | 19 ++ fence-config.yaml | 273 +++++++++++++++++++++ fence/config.py | 3 +- fence/resources/user/__init__.py | 9 +- fence/resources/user/user_session.py | 6 +- init_client_in_db.sh | 46 ++++ init_dev.sh | 20 ++ poetry.lock | 349 ++++----------------------- pyproject.toml | 2 +- 11 files changed, 470 insertions(+), 317 deletions(-) create mode 100644 docker-compose.yml create mode 100644 fence-config.yaml create mode 100755 init_client_in_db.sh create mode 100755 init_dev.sh diff --git a/.gitignore b/.gitignore index 4a76c3a3e..c49d79d77 100644 --- a/.gitignore +++ b/.gitignore @@ -108,3 +108,4 @@ tests/resources/keys/*.pem .DS_Store .vscode .idea +VENV_PATH diff --git a/README.md b/README.md index 33f6ce091..52ee816b2 100644 --- a/README.md +++ b/README.md @@ -219,15 +219,6 @@ See [Fence and Google](docs/google_architecture.md) for more details on data acc ## Setup -#### Install Requirements and Fence - -Install [Poetry](https://python-poetry.org/docs/#installation). - -```bash -# Install Fence and dependencies -poetry install -``` - #### Create Configuration File Fence requires a configuration file to run. We have a command line @@ -242,7 +233,7 @@ To create a new configuration file from the default configuration: python cfg_help.py create ``` -This file will be placed in one of the default search directories for Fence. +This file will be placed in one of the default search directories for Fence (e.g. `~/.gen3/fence/fence-config.yaml`). To get the exact path where the new configuration file was created, use: @@ -253,6 +244,54 @@ python cfg_help.py get The file should have detailed information about each of the configuration variables. **Remember to fill out the new configuration file!** +#### Using Docker + +Build image using: + +```bash +docker build . -t fence +``` + +:information_source: before running the command below, +make sure you have the desired configuration in the .yaml and +the necessary .pem files (see section **"Keypair Configuration"**) . + +Run with: + +```bash +docker run --rm \ +-v /path/to/fence-config.yaml:/var/www/fence/fence-config.yaml:ro \ +-v /path/to/keys-folder-with-pem-files/:/fence/keys/folder/:ro \ +--name=fence \ +-p 80:80 \ +fence +``` + +Setup `fence_test` DB with: + +```bash + ./init_dev_db.sh +``` + +#### Using Poetry + +Install [Poetry](https://python-poetry.org/docs/#installation). + +Build with: + +```bash +# Enter virtual environment +poetry shell +# Install Fence and dependencies +poetry install +``` + +Run with: + +```bash +And `run.py` +``` + ##### Other Configuration Notes * Fence will look for configuration files from a list of search directories ( diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..76891922b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,19 @@ +version: '3.9' + + +services: + # MEANT FOR LOCAL DEV ONLY + fence: + image: fence + container_name: fence + ports: + - "80:80" + volumes: + - $PWD/fence-config.yaml:/var/www/fence/fence-config.yaml:ro + - $PWD/keys/:/fence/keys:ro + + fence_db: + image: postgres:12.10-bullseye + container_name: fence_db + environment: + POSTGRES_PASSWORD: mysecretpassword # pragma: allowlist secret diff --git a/fence-config.yaml b/fence-config.yaml new file mode 100644 index 000000000..722168bb9 --- /dev/null +++ b/fence-config.yaml @@ -0,0 +1,273 @@ +--- +############################### Fence Configuration #################################### +# This file contains various configurations for the Fence microservice. +# +# README: +# - This is initially configured for minimal local development with reasonable defaults. +# - Descriptions for each of the configurations (if any) will be *above* the variable as +# comments. +# - Some configuration variables will have examples commented out below them. +# - This is broken up into 2 main sections for REQUIRED and OPTIONAL configurations. +# - Optional configs will note what features or endpoints they support +# - Underneath each main section the variables are logically grouped under named +# sections. +# +# NOTE: Login is NOT ready out of the box. Fill out REQUIRED configurations first + +######################################################################################## +# REQUIRED CONFIGURATIONS # +######################################################################################## +APP_NAME: 'Gen3 Data Commons' +# Where fence microservice is deployed +BASE_URL: 'http://fence' +# postgres db to connect to +# connection url format: +# postgresql://[user[:password]@][netloc][:port][/dbname] +# can also be set via env var DB +DB: 'postgresql://postgres:mysecretpassword@fence_db:5432/fence_test' # pragma: allowlist secret + +ENCRYPTION_KEY: '' + +DEBUG: true +MOCK_AUTH: true +MOCK_GOOGLE_AUTH: true +DEV_LOGIN_COOKIE_NAME: "dev_login" + +MOCK_STORAGE: true +AUTHLIB_INSECURE_TRANSPORT: true +ENABLE_PROMETHEUS_METRICS: false +SESSION_COOKIE_SECURE: true + +ENABLE_CSRF_PROTECTION: true +WTF_CSRF_SECRET_KEY: '{{ENCRYPTION_KEY}}' + +ENABLE_DB_MIGRATION: true +DB_MIGRATION_POSTGRES_LOCK_KEY: 100 + + +# ////////////////////////////////////////////////////////////////////////////////////// +# OPEN ID CONNECT (OIDC) +# - Fully configure at least one client so login works +# - WARNING: Be careful changing the *_ALLOWED_SCOPES as you can break basic +# and optional functionality +# ////////////////////////////////////////////////////////////////////////////////////// +OPENID_CONNECT: + fence: + # this api_base_url should be the root url for the OTHER fence + # something like: https://example.com + api_base_url: '' + # this client_id and client_secret should be obtained by registering THIS fence as + # a new client of the OTHER fence + client_id: '' + client_secret: '' + client_kwargs: + # openid is required to use OIDC flow + scope: 'openid' + # callback after logging in through the other fence + redirect_uri: '{{BASE_URL}}/login/fence/login' + # The next 3 should not need to be changed if the provider is following + # Oauth2 endpoint naming conventions + authorize_url: '{{api_base_url}}/oauth2/authorize' + access_token_url: '{{api_base_url}}/oauth2/token' + refresh_token_url: '{{api_base_url}}/oauth2/token' + name: '' + # if mock is true, will fake a successful login response for login + # WARNING: DO NOT ENABLE IN PRODUCTION (for testing purposes only) + mock: true + mock_default_user: 'test@example.com' + # this is needed to enable InCommon login, if some LOGIN_OPTIONS are configured with idp=fence and a list of shib_idps: + shibboleth_discovery_url: '' + +# these are the *possible* scopes a client can be given, NOT scopes that are +# given to all clients. You can be more restrictive during client creation +CLIENT_ALLOWED_SCOPES: + - "openid" + - "user" + - "data" + - "google_credentials" + - "google_service_account" + - "google_link" + - "ga4gh_passport_v1" + +# these are the scopes that CAN be included in a user's own access_token +USER_ALLOWED_SCOPES: + - "fence" + - "openid" + - "user" + - "data" + - "admin" + - "google_credentials" + - "google_service_account" + - "google_link" + - "ga4gh_passport_v1" +SESSION_ALLOWED_SCOPES: + - "openid" + - "user" + - "credentials" + - "data" + - "admin" + - "google_credentials" + - "google_service_account" + - "google_link" + - "ga4gh_passport_v1" + +LOGIN_OPTIONS: [] + +DEFAULT_LOGIN_IDP: null + +DEFAULT_LOGIN_URL: '{{BASE_URL}}/login/google' +LOGIN_REDIRECT_WHITELIST: [] +ENABLED_IDENTITY_PROVIDERS: {} + +OAUTH2_JWT_ALG: 'RS256' +OAUTH2_JWT_ENABLED: true +OAUTH2_JWT_ISS: '{{BASE_URL}}' +OAUTH2_PROVIDER_ERROR_URI: '/api/oauth2/errors' +APPLICATION_ROOT: '/user' + +ACCESS_TOKEN_COOKIE_NAME: "access_token" +SESSION_COOKIE_NAME: "fence" + +SESSION_COOKIE_DOMAIN: + +OAUTH2_TOKEN_EXPIRES_IN: + "authorization_code": 1200 + "implicit": 1200 +ACCESS_TOKEN_EXPIRES_IN: 1200 +REFRESH_TOKEN_EXPIRES_IN: 2592000 +SESSION_TIMEOUT: 900 +SESSION_LIFETIME: 28800 +GOOGLE_SERVICE_ACCOUNT_KEY_FOR_URL_SIGNING_EXPIRES_IN: 2592000 +GOOGLE_USER_SERVICE_ACCOUNT_ACCESS_EXPIRES_IN: 604800 + +GOOGLE_ACCOUNT_ACCESS_EXPIRES_IN: 86400 +MAX_PRESIGNED_URL_TTL: 3600 +MAX_API_KEY_TTL: 2592000 +MAX_ACCESS_TOKEN_TTL: 3600 +TOKEN_PROJECTS_CUTOFF: 10 +RENEW_ACCESS_TOKEN_BEFORE_EXPIRATION: false +GEN3_PASSPORT_EXPIRES_IN: 43200 + +GA4GH_DRS_POSTED_PASSPORT_FIELD: "passports" +PRIVACY_POLICY_URL: null +OVERRIDE_NGINX_RATE_LIMIT: 18 + +DEFAULT_BACKOFF_SETTINGS_MAX_TRIES: 3 +SUPPORT_EMAIL_FOR_ERRORS: null + +SHIBBOLETH_HEADER: '' +SSO_URL: '' +ITRUST_GLOBAL_LOGOUT: '' +GOOGLE_BULK_UPDATES: false + +STORAGE_CREDENTIALS: {} + +AWS_CREDENTIALS: {} +S3_BUCKETS: {} + +GS_BUCKETS: {} +ALLOWED_DATA_UPLOAD_BUCKETS: [] + +DATA_UPLOAD_BUCKET: '' + +HTTP_PROXY: + host: null + port: 3128 +INDEXD: null +INDEXD_USERNAME: 'fence' +INDEXD_PASSWORD: '' +AZ_BLOB_CREDENTIALS: +AZ_BLOB_CONTAINER_URL: 'https://myfakeblob.blob.core.net/my-fake-container/' +ARBORIST: null +AUDIT_SERVICE: 'http://audit-service' +ENABLE_AUDIT_LOGS: + presigned_url: false + login: false + +PUSH_AUDIT_LOGS_CONFIG: + type: aws_sqs + aws_sqs_config: + sqs_url: + region: + aws_cred: + +CIRRUS_CFG: + GOOGLE_API_KEY: '' + GOOGLE_PROJECT_ID: '' + GOOGLE_APPLICATION_CREDENTIALS: '' + GOOGLE_STORAGE_CREDS: '' + GOOGLE_ADMIN_EMAIL: '' + GOOGLE_IDENTITY_DOMAIN: '' + GOOGLE_CLOUD_IDENTITY_ADMIN_EMAIL: '' +GOOGLE_GROUP_PREFIX: '' + +GOOGLE_SERVICE_ACCOUNT_PREFIX: '' +BILLING_PROJECT_FOR_SIGNED_URLS: +BILLING_PROJECT_FOR_SA_CREDS: +ENABLE_AUTOMATIC_BILLING_PERMISSION_SIGNED_URLS: false +ENABLE_AUTOMATIC_BILLING_PERMISSION_SA_CREDS: false + +GUN_MAIL: + 'datacommons': + smtp_hostname: 'smtp.some.org' + api_key: '' + default_login: 'postmaster@some.example.com' + api_url: 'https://api.some.net/v3/some.example.com' + smtp_password: '' +EMAIL_SERVER: 'localhost' +SEND_FROM: 'example@some.com' +SEND_TO: 'example@some.com' +ALLOW_GOOGLE_LINKING: true +WHITE_LISTED_GOOGLE_PARENT_ORGS: [] + +WHITE_LISTED_SERVICE_ACCOUNT_EMAILS: [] + +REMOVE_SERVICE_ACCOUNT_EMAIL_NOTIFICATION: + enable: false + # this domain MUST exist in GUN_MAIL config + domain: 'example.com' + from: 'do-not-reply@example.com' + subject: 'User service account removal notification' + # the {} gets replaced dynamically in the Python code to be the Project ID + content: > + Some content. + # + # WARNING: This is NOT a bcc so the email is visible to the end-user + admin: + - 'admin@example.edu' + +PROBLEM_USER_EMAIL_NOTIFICATION: + # this domain MUST exist in GUN_MAIL config + domain: 'example.com' + from: 'do-not-reply@example.com' + subject: 'Account access error notification' + # the {} gets replaced dynamically in the Python code to be the Project ID + content: > + Some content. + # + # WARNING: This is NOT a bcc so the email is visible to the end-user + admin: + - 'admin@example.edu' +GOOGLE_MANAGED_SERVICE_ACCOUNT_DOMAINS: [] + +ALLOWED_USER_SERVICE_ACCOUNT_DOMAINS: [] + +MAX_ROLE_SESSION_INCREASE: false +ASSUME_ROLE_CACHE_SECONDS: 1800 +REGISTER_USERS_ON: false +REGISTERED_USERS_GROUP: '' +SERVICE_ACCOUNT_LIMIT: 6 + +GA4GH_PASSPORTS_TO_DRS_ENABLED: false +RAS_REFRESH_EXPIRATION: 1296000 + +EXPIRED_AUTHZ_REMOVAL_JOB_FREQ_IN_SECONDS: 300 + +GLOBAL_PARSE_VISAS_ON_LOGIN: false + +ENABLE_VISA_UPDATE_CRON: false +USERSYNC: + visa_types: + ras: [] +RAS_USERINFO_ENDPOINT: '' +CLIENT_CREDENTIALS_ON_DOWNLOAD_ENABLED: false diff --git a/fence/config.py b/fence/config.py index c7455e935..8ceb011a5 100644 --- a/fence/config.py +++ b/fence/config.py @@ -143,7 +143,8 @@ def post_process(self): "Visa parsing on login is enabled but `ENABLE_VISA_UPDATE_CRON` is disabled!" ) - self._validate_parent_child_studies(self._configs["dbGaP"]) + # if self._configs["dbGaP"]: + # self._validate_parent_child_studies(self._configs["dbGaP"]) @staticmethod def _validate_parent_child_studies(dbgap_configs): diff --git a/fence/resources/user/__init__.py b/fence/resources/user/__init__.py index c4c1647aa..71c04d026 100644 --- a/fence/resources/user/__init__.py +++ b/fence/resources/user/__init__.py @@ -105,10 +105,11 @@ def get_user_info(current_session, username): info["shib_idp"] = flask.session["shib_idp"] # User SAs are stored in db with client_id = None - primary_service_account = ( - get_service_account(client_id=None, user_id=user.id, username=user.username) - or {} - ) + # primary_service_account = ( + # get_service_account(client_id=None, user_id=user.id, username=user.username) + # or {} + # ) + primary_service_account = {} primary_service_account_email = getattr(primary_service_account, "email", None) info["primary_google_service_account"] = primary_service_account_email diff --git a/fence/resources/user/user_session.py b/fence/resources/user/user_session.py index b17ffb775..73669b459 100644 --- a/fence/resources/user/user_session.py +++ b/fence/resources/user/user_session.py @@ -321,9 +321,9 @@ def _create_access_token_cookie(app, session, response, user): expiration = now + config.get("ACCESS_TOKEN_EXPIRES_IN") # try to get from current session, if it's not there, we have to hit db - linked_google_email = session.get("linked_google_email") - if not linked_google_email: - linked_google_email = get_linked_google_account_email(user.id) + linked_google_email = "a@a" # session.get("linked_google_email") + # if not linked_google_email: + # linked_google_email = get_linked_google_account_email(user.id) access_token = generate_signed_access_token( keypair.kid, diff --git a/init_client_in_db.sh b/init_client_in_db.sh new file mode 100755 index 000000000..8f5b6ce7a --- /dev/null +++ b/init_client_in_db.sh @@ -0,0 +1,46 @@ +#/bin/bash + +# MEANT FOR LOCAL DEV ONLY + +# Run this script to setup a new test database on an already running +# postgres container (set DB_CONTAINER_NAME below) + +#### Setting up a database for local development + +DB_CONTAINER_NAME="fence_db" +FENCE_CONTAINER_NAME="fence" + + + +# Create DB, add test user: +docker exec -i \ +$DB_CONTAINER_NAME \ +psql -U postgres -d postgres -c 'create database fence_test' + +docker exec -i \ +$DB_CONTAINER_NAME \ +psql -U postgres -d postgres -c "create user test with password 'test' superuser" + + +sleep 6 + +# init DB: +# docker exec -i \ +# $FENCE_CONTAINER_NAME \ +# userdatamodel-init --host "$DB_CONTAINER_NAME" --db fence_test --username test --password test + +docker exec -i -w /fence/ \ +$FENCE_CONTAINER_NAME \ +alembic upgrade head + + +docker exec -i \ +$DB_CONTAINER_NAME \ +psql -U postgres -d fence_test -c "insert into \"User\" (id, username, email) values (10, 'test', 'test@test.uchicago.edu'); commit;" + +sleep 6 + +# add Atlas as client: +docker exec -i \ +$FENCE_CONTAINER_NAME \ +fence-create client-create --client ATLAS --urls http://127.0.0.1/WebAPI/user/oauth/callback?client_name=OidcClient --username ATLAS diff --git a/init_dev.sh b/init_dev.sh new file mode 100755 index 000000000..e9f3fd95e --- /dev/null +++ b/init_dev.sh @@ -0,0 +1,20 @@ +#/bin/bash + +# MEANT FOR LOCAL DEV ONLY + + +# Run: +# 1. this script +# 2. docker-compose up -d +# 3. ./init_client_in_db.sh + + +mkdir keys/v1 + +cd keys/v1 + +# Generate the private key. +openssl genpkey -algorithm RSA -out jwt_private_key.pem -pkeyopt rsa_keygen_bits:2048 + +# Generate the public key. +openssl rsa -pubout -in jwt_private_key.pem -out jwt_public_key.pem diff --git a/poetry.lock b/poetry.lock index e4bf0fe1b..354a9198a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "addict" version = "2.4.0" description = "Addict is a dictionary whose items can be set using both attribute and item syntax." -category = "dev" optional = false python-versions = "*" files = [ @@ -16,7 +15,6 @@ files = [ name = "alembic" version = "1.11.2" description = "A database migration tool for SQLAlchemy." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -36,7 +34,6 @@ tz = ["python-dateutil"] name = "aniso8601" version = "9.0.1" description = "A library for parsing ISO 8601 strings." -category = "main" optional = false python-versions = "*" files = [ @@ -51,7 +48,6 @@ dev = ["black", "coverage", "isort", "pre-commit", "pyenchant", "pylint"] name = "anyio" version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -73,7 +69,6 @@ trio = ["trio (<0.22)"] name = "atomicwrites" version = "1.4.1" description = "Atomic file writes." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -84,7 +79,6 @@ files = [ name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -103,7 +97,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "Authlib" version = "0.11" description = "The ultimate Python library in building OAuth and OpenID Connect servers." -category = "main" optional = false python-versions = "*" files = [] @@ -123,7 +116,6 @@ resolved_reference = "80345f2877ec2a1a29468aa465c07623347c3ef6" name = "authutils" version = "6.2.2" description = "Gen3 auth utility functions" -category = "main" optional = false python-versions = ">=3.9,<4.0" files = [ @@ -147,7 +139,6 @@ flask = ["Flask (>=0.10.1)"] name = "aws-xray-sdk" version = "0.95" description = "The AWS X-Ray SDK for Python (the SDK) enables Python developers to record and emit information from within their applications to the AWS X-Ray service." -category = "dev" optional = false python-versions = "*" files = [ @@ -162,20 +153,19 @@ wrapt = "*" [[package]] name = "azure-core" -version = "1.28.0" +version = "1.29.2" description = "Microsoft Azure Core Library for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "azure-core-1.28.0.zip", hash = "sha256:e9eefc66fc1fde56dab6f04d4e5d12c60754d5a9fa49bdcfd8534fc96ed936bd"}, - {file = "azure_core-1.28.0-py3-none-any.whl", hash = "sha256:dec36dfc8eb0b052a853f30c07437effec2f9e3e1fc8f703d9bdaa5cfc0043d9"}, + {file = "azure-core-1.29.2.zip", hash = "sha256:beb0fe88d1043d8457318e8fb841d9caa648211092eda213c16b376401f3710d"}, + {file = "azure_core-1.29.2-py3-none-any.whl", hash = "sha256:8e6602f322dc1070caf7e17754beb53b69ffa09df0f4786009a3107e9a00c793"}, ] [package.dependencies] requests = ">=2.18.4" six = ">=1.11.0" -typing-extensions = ">=4.3.0" +typing-extensions = ">=4.6.0" [package.extras] aio = ["aiohttp (>=3.0)"] @@ -184,7 +174,6 @@ aio = ["aiohttp (>=3.0)"] name = "azure-storage-blob" version = "12.17.0" description = "Microsoft Azure Blob Storage Client Library for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -205,7 +194,6 @@ aio = ["azure-core[aio] (>=1.28.0,<2.0.0)"] name = "backoff" version = "1.11.1" description = "Function decoration for backoff and retry" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -217,7 +205,6 @@ files = [ name = "bcrypt" version = "3.2.2" description = "Modern password hashing for your software and your servers" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -245,7 +232,6 @@ typecheck = ["mypy"] name = "blinker" version = "1.6.2" description = "Fast, simple object-to-object and broadcast signaling" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -257,7 +243,6 @@ files = [ name = "boto" version = "2.49.0" description = "Amazon Web Services Library" -category = "main" optional = false python-versions = "*" files = [ @@ -269,7 +254,6 @@ files = [ name = "boto3" version = "1.9.253" description = "The AWS SDK for Python" -category = "main" optional = false python-versions = "*" files = [ @@ -286,7 +270,6 @@ s3transfer = ">=0.2.0,<0.3.0" name = "botocore" version = "1.12.253" description = "Low-level, data-driven core of boto 3." -category = "main" optional = false python-versions = "*" files = [ @@ -304,7 +287,6 @@ urllib3 = {version = ">=1.20,<1.26", markers = "python_version >= \"3.4\""} name = "cached-property" version = "1.5.2" description = "A decorator for caching properties in classes." -category = "main" optional = false python-versions = "*" files = [ @@ -316,7 +298,6 @@ files = [ name = "cachelib" version = "0.2.0" description = "A collection of cache libraries in the same API interface." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -328,7 +309,6 @@ files = [ name = "cachetools" version = "4.2.4" description = "Extensible memoizing collections and decorators" -category = "main" optional = false python-versions = "~=3.5" files = [ @@ -340,7 +320,6 @@ files = [ name = "cdiserrors" version = "1.0.0" description = "Gen3 shared exceptions and utilities." -category = "main" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -358,7 +337,6 @@ flask = ["Flask (>=1.1.2,<2.0.0)"] name = "cdislogging" version = "1.0.0" description = "Standardized logging tool and format for cdis applications" -category = "main" optional = false python-versions = "*" files = [ @@ -369,7 +347,6 @@ files = [ name = "cdispyutils" version = "2.0.1" description = "This package includes several utility Python tools for the Gen3 stack." -category = "main" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -388,7 +365,6 @@ requests = "*" name = "cdisutilstest" version = "0.2.4" description = "Collection of test data and tools" -category = "dev" optional = false python-versions = "*" files = [] @@ -404,7 +380,6 @@ resolved_reference = "bdfdeb05e45407e839fd954ce6d195d847cd8024" name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -416,7 +391,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = "*" files = [ @@ -493,7 +467,6 @@ pycparser = "*" name = "charset-normalizer" version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -578,7 +551,6 @@ files = [ name = "click" version = "8.1.6" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -593,7 +565,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "codacy-coverage" version = "1.3.11" description = "Codacy coverage reporter for Python" -category = "dev" optional = false python-versions = "*" files = [ @@ -612,7 +583,6 @@ test = ["coverage", "nosetests"] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -624,7 +594,6 @@ files = [ name = "coverage" version = "5.5" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" files = [ @@ -689,7 +658,6 @@ toml = ["toml"] name = "coveralls" version = "2.2.0" description = "Show coverage stats online via coveralls.io" -category = "dev" optional = false python-versions = ">= 3.5" files = [ @@ -709,7 +677,6 @@ yaml = ["PyYAML (>=3.10)"] name = "cryptography" version = "41.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -755,7 +722,6 @@ test-randomorder = ["pytest-randomly"] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -765,14 +731,13 @@ files = [ [[package]] name = "dnspython" -version = "2.4.1" +version = "2.4.2" description = "DNS toolkit" -category = "main" optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "dnspython-2.4.1-py3-none-any.whl", hash = "sha256:5b7488477388b8c0b70a8ce93b227c5603bc7b77f1565afe8e729c36c51447d7"}, - {file = "dnspython-2.4.1.tar.gz", hash = "sha256:c33971c79af5be968bb897e95c2448e11a645ee84d93b265ce0b7aabe5dfdca8"}, + {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"}, + {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"}, ] [package.extras] @@ -787,7 +752,6 @@ wmi = ["wmi (>=1.5.1,<2.0.0)"] name = "docker" version = "5.0.3" description = "A Python library for the Docker Engine API." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -808,7 +772,6 @@ tls = ["cryptography (>=3.4.7)", "idna (>=2.0.0)", "pyOpenSSL (>=17.5.0)"] name = "docopt" version = "0.6.2" description = "Pythonic argument parser, that will make you smile" -category = "dev" optional = false python-versions = "*" files = [ @@ -819,7 +782,6 @@ files = [ name = "docutils" version = "0.15.2" description = "Docutils -- Python Documentation Utilities" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -832,7 +794,6 @@ files = [ name = "ecdsa" version = "0.18.0" description = "ECDSA cryptographic signature library (pure python)" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -851,7 +812,6 @@ gmpy2 = ["gmpy2"] name = "email-validator" version = "1.3.1" description = "A robust email address syntax and deliverability validation library." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -865,14 +825,13 @@ idna = ">=2.0.0" [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.1.3" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] [package.extras] @@ -882,7 +841,6 @@ test = ["pytest (>=6)"] name = "flask" version = "2.3.2" description = "A simple framework for building complex web applications." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -906,7 +864,6 @@ dotenv = ["python-dotenv"] name = "flask-cors" version = "4.0.0" description = "A Flask extension adding a decorator for CORS support" -category = "main" optional = false python-versions = "*" files = [ @@ -921,7 +878,6 @@ Flask = ">=0.9" name = "flask-restful" version = "0.3.10" description = "Simple framework for creating REST APIs" -category = "main" optional = false python-versions = "*" files = [ @@ -942,7 +898,6 @@ docs = ["sphinx"] name = "flask-wtf" version = "1.1.1" description = "Form rendering, validation, and CSRF protection for Flask with WTForms." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -962,7 +917,6 @@ email = ["email-validator"] name = "future" version = "0.18.3" description = "Clean single-source support for Python 3 and 2" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -973,7 +927,6 @@ files = [ name = "gen3authz" version = "1.5.1" description = "Gen3 authz client" -category = "main" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -991,7 +944,6 @@ six = ">=1.16.0,<2.0.0" name = "gen3cirrus" version = "2.0.0" description = "" -category = "main" optional = false python-versions = "*" files = [ @@ -1011,7 +963,6 @@ oauth2client = ">=2.0.0,<4.0dev" name = "gen3config" version = "1.1.0" description = "Gen3 Configuration Library" -category = "main" optional = false python-versions = "^3.9" files = [ @@ -1029,7 +980,6 @@ six = "*" name = "gen3users" version = "0.6.0" description = "Utils for Gen3 commons user management" -category = "main" optional = false python-versions = "*" files = [ @@ -1045,7 +995,6 @@ PyYAML = ">=5.1,<6.0" name = "google-api-core" version = "1.34.0" description = "Google API client core library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1068,7 +1017,6 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] name = "google-api-python-client" version = "1.11.0" description = "Google API Client Library for Python" -category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" files = [ @@ -1088,7 +1036,6 @@ uritemplate = ">=3.0.0,<4dev" name = "google-auth" version = "1.35.0" description = "Google Authentication Library" -category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" files = [ @@ -1112,7 +1059,6 @@ reauth = ["pyu2f (>=0.1.5)"] name = "google-auth-httplib2" version = "0.1.0" description = "Google Authentication Library: httplib2 transport" -category = "main" optional = false python-versions = "*" files = [ @@ -1129,7 +1075,6 @@ six = "*" name = "google-cloud-core" version = "2.3.3" description = "Google Cloud API client core library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1138,7 +1083,7 @@ files = [ ] [package.dependencies] -google-api-core = ">=1.31.6,<2.0.0 || >2.3.0,<3.0.0dev" +google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0dev" google-auth = ">=1.25.0,<3.0dev" [package.extras] @@ -1148,7 +1093,6 @@ grpc = ["grpcio (>=1.38.0,<2.0dev)"] name = "google-cloud-storage" version = "1.44.0" description = "Google Cloud Storage API client library" -category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" files = [ @@ -1169,7 +1113,6 @@ six = "*" name = "google-crc32c" version = "1.5.0" description = "A python wrapper of the C library 'Google CRC32C'" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1250,7 +1193,6 @@ testing = ["pytest"] name = "google-resumable-media" version = "2.5.0" description = "Utilities for Google Media Downloads and Resumable Uploads" -category = "main" optional = false python-versions = ">= 3.7" files = [ @@ -1269,7 +1211,6 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"] name = "googleapis-common-protos" version = "1.60.0" description = "Common protobufs used in Google APIs" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1283,85 +1224,10 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4 [package.extras] grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] -[[package]] -name = "greenlet" -version = "2.0.2" -description = "Lightweight in-process concurrent programming" -category = "main" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" -files = [ - {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, - {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, - {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, - {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, - {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, - {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"}, - {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"}, - {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, - {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, - {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, - {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"}, - {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"}, - {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"}, - {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"}, - {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"}, - {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"}, - {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"}, - {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"}, - {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"}, - {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"}, - {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"}, - {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"}, - {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"}, - {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"}, - {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"}, - {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, - {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, - {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"}, - {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"}, - {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, - {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, - {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, - {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"}, - {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"}, - {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"}, - {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"}, - {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"}, - {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"}, -] - -[package.extras] -docs = ["Sphinx", "docutils (<0.18)"] -test = ["objgraph", "psutil"] - [[package]] name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1373,7 +1239,6 @@ files = [ name = "httpcore" version = "0.17.3" description = "A minimal low-level HTTP client." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1385,17 +1250,16 @@ files = [ anyio = ">=3.0,<5.0" certifi = "*" h11 = ">=0.13,<0.15" -sniffio = ">=1.0.0,<2.0.0" +sniffio = "==1.*" [package.extras] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] [[package]] name = "httplib2" version = "0.22.0" description = "A comprehensive HTTP client library." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1410,7 +1274,6 @@ pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0 name = "httpx" version = "0.24.1" description = "The next generation HTTP client." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1426,15 +1289,14 @@ sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] -cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] [[package]] name = "idna" version = "2.10" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1446,7 +1308,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1466,7 +1327,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "isodate" version = "0.6.1" description = "An ISO 8601 date/time/duration parser and formatter" -category = "main" optional = false python-versions = "*" files = [ @@ -1481,7 +1341,6 @@ six = "*" name = "itsdangerous" version = "2.1.2" description = "Safely pass data to untrusted environments and back." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1493,7 +1352,6 @@ files = [ name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1511,7 +1369,6 @@ i18n = ["Babel (>=2.7)"] name = "jmespath" version = "0.9.2" description = "JSON Matching Expressions" -category = "main" optional = false python-versions = "*" files = [ @@ -1523,7 +1380,6 @@ files = [ name = "jsondiff" version = "1.1.1" description = "Diff JSON and JSON-like structures in Python" -category = "dev" optional = false python-versions = "*" files = [ @@ -1532,14 +1388,13 @@ files = [ [[package]] name = "jsonpickle" -version = "3.0.1" +version = "3.0.2" description = "Python library for serializing any arbitrary object graph into JSON" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jsonpickle-3.0.1-py2.py3-none-any.whl", hash = "sha256:130d8b293ea0add3845de311aaba55e6d706d0bb17bc123bd2c8baf8a39ac77c"}, - {file = "jsonpickle-3.0.1.tar.gz", hash = "sha256:032538804795e73b94ead410800ac387fdb6de98f8882ac957fcd247e3a85200"}, + {file = "jsonpickle-3.0.2-py3-none-any.whl", hash = "sha256:4a8442d97ca3f77978afa58068768dba7bff2dbabe79a9647bc3cdafd4ef019f"}, + {file = "jsonpickle-3.0.2.tar.gz", hash = "sha256:e37abba4bfb3ca4a4647d28bb9f4706436f7b46c8a8333b4a718abafa8e46b37"}, ] [package.extras] @@ -1551,7 +1406,6 @@ testing-libs = ["simplejson", "ujson"] name = "mako" version = "1.2.4" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1571,7 +1425,6 @@ testing = ["pytest"] name = "markdown" version = "3.4.4" description = "Python implementation of John Gruber's Markdown." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1590,7 +1443,6 @@ testing = ["coverage", "pyyaml"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1650,7 +1502,6 @@ files = [ name = "mock" version = "2.0.0" description = "Rolling backport of unittest.mock for all Pythons" -category = "dev" optional = false python-versions = "*" files = [ @@ -1670,7 +1521,6 @@ test = ["unittest2 (>=1.1.0)"] name = "more-itertools" version = "10.1.0" description = "More routines for operating on iterables, beyond itertools" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1682,7 +1532,6 @@ files = [ name = "moto" version = "1.3.7" description = "A library that allows your python tests to easily mock out the boto library" -category = "dev" optional = false python-versions = "*" files = [ @@ -1717,7 +1566,6 @@ server = ["flask"] name = "oauth2client" version = "3.0.0" description = "OAuth 2.0 client library" -category = "main" optional = false python-versions = "*" files = [ @@ -1735,7 +1583,6 @@ six = ">=1.6.1" name = "paramiko" version = "2.12.0" description = "SSH2 protocol library" -category = "main" optional = false python-versions = "*" files = [ @@ -1759,7 +1606,6 @@ invoke = ["invoke (>=1.3)"] name = "pbr" version = "2.0.0" description = "Python Build Reasonableness" -category = "main" optional = false python-versions = "*" files = [ @@ -1771,7 +1617,6 @@ files = [ name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1787,7 +1632,6 @@ testing = ["pytest", "pytest-benchmark"] name = "prometheus-client" version = "0.9.0" description = "Python client for the Prometheus monitoring system." -category = "main" optional = false python-versions = "*" files = [ @@ -1802,7 +1646,6 @@ twisted = ["twisted"] name = "protobuf" version = "3.20.3" description = "Protocol Buffers" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1832,32 +1675,28 @@ files = [ [[package]] name = "psycopg2" -version = "2.9.6" +version = "2.9.7" description = "psycopg2 - Python-PostgreSQL Database Adapter" -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "psycopg2-2.9.6-cp310-cp310-win32.whl", hash = "sha256:f7a7a5ee78ba7dc74265ba69e010ae89dae635eea0e97b055fb641a01a31d2b1"}, - {file = "psycopg2-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:f75001a1cbbe523e00b0ef896a5a1ada2da93ccd752b7636db5a99bc57c44494"}, - {file = "psycopg2-2.9.6-cp311-cp311-win32.whl", hash = "sha256:53f4ad0a3988f983e9b49a5d9765d663bbe84f508ed655affdb810af9d0972ad"}, - {file = "psycopg2-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b81fcb9ecfc584f661b71c889edeae70bae30d3ef74fa0ca388ecda50b1222b7"}, - {file = "psycopg2-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:11aca705ec888e4f4cea97289a0bf0f22a067a32614f6ef64fcf7b8bfbc53744"}, - {file = "psycopg2-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:36c941a767341d11549c0fbdbb2bf5be2eda4caf87f65dfcd7d146828bd27f39"}, - {file = "psycopg2-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:869776630c04f335d4124f120b7fb377fe44b0a7645ab3c34b4ba42516951889"}, - {file = "psycopg2-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:a8ad4a47f42aa6aec8d061fdae21eaed8d864d4bb0f0cade5ad32ca16fcd6258"}, - {file = "psycopg2-2.9.6-cp38-cp38-win32.whl", hash = "sha256:2362ee4d07ac85ff0ad93e22c693d0f37ff63e28f0615a16b6635a645f4b9214"}, - {file = "psycopg2-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:d24ead3716a7d093b90b27b3d73459fe8cd90fd7065cf43b3c40966221d8c394"}, - {file = "psycopg2-2.9.6-cp39-cp39-win32.whl", hash = "sha256:1861a53a6a0fd248e42ea37c957d36950da00266378746588eab4f4b5649e95f"}, - {file = "psycopg2-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:ded2faa2e6dfb430af7713d87ab4abbfc764d8d7fb73eafe96a24155f906ebf5"}, - {file = "psycopg2-2.9.6.tar.gz", hash = "sha256:f15158418fd826831b28585e2ab48ed8df2d0d98f502a2b4fe619e7d5ca29011"}, + {file = "psycopg2-2.9.7-cp310-cp310-win32.whl", hash = "sha256:1a6a2d609bce44f78af4556bea0c62a5e7f05c23e5ea9c599e07678995609084"}, + {file = "psycopg2-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:b22ed9c66da2589a664e0f1ca2465c29b75aaab36fa209d4fb916025fb9119e5"}, + {file = "psycopg2-2.9.7-cp311-cp311-win32.whl", hash = "sha256:44d93a0109dfdf22fe399b419bcd7fa589d86895d3931b01fb321d74dadc68f1"}, + {file = "psycopg2-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:91e81a8333a0037babfc9fe6d11e997a9d4dac0f38c43074886b0d9dead94fe9"}, + {file = "psycopg2-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:d1210fcf99aae6f728812d1d2240afc1dc44b9e6cba526a06fb8134f969957c2"}, + {file = "psycopg2-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:e9b04cbef584310a1ac0f0d55bb623ca3244c87c51187645432e342de9ae81a8"}, + {file = "psycopg2-2.9.7-cp38-cp38-win32.whl", hash = "sha256:d5c5297e2fbc8068d4255f1e606bfc9291f06f91ec31b2a0d4c536210ac5c0a2"}, + {file = "psycopg2-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:8275abf628c6dc7ec834ea63f6f3846bf33518907a2b9b693d41fd063767a866"}, + {file = "psycopg2-2.9.7-cp39-cp39-win32.whl", hash = "sha256:c7949770cafbd2f12cecc97dea410c514368908a103acf519f2a346134caa4d5"}, + {file = "psycopg2-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:b6bd7d9d3a7a63faae6edf365f0ed0e9b0a1aaf1da3ca146e6b043fb3eb5d723"}, + {file = "psycopg2-2.9.7.tar.gz", hash = "sha256:f00cc35bd7119f1fed17b85bd1007855194dde2cbd8de01ab8ebb17487440ad8"}, ] [[package]] name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1869,7 +1708,6 @@ files = [ name = "pyaml" version = "23.7.0" description = "PyYAML-based module to produce a bit more pretty and readable YAML-serialized data" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1887,7 +1725,6 @@ anchors = ["unidecode"] name = "pyasn1" version = "0.5.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -1899,7 +1736,6 @@ files = [ name = "pyasn1-modules" version = "0.3.0" description = "A collection of ASN.1-based protocols modules" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -1914,7 +1750,6 @@ pyasn1 = ">=0.4.6,<0.6.0" name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1926,7 +1761,6 @@ files = [ name = "pycryptodome" version = "3.18.0" description = "Cryptographic library for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1968,7 +1802,6 @@ files = [ name = "pyjwt" version = "2.8.0" description = "JSON Web Token implementation in Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1989,7 +1822,6 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2016,7 +1848,6 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyparsing" version = "3.1.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false python-versions = ">=3.6.8" files = [ @@ -2031,7 +1862,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pytest" version = "3.10.1" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2053,7 +1883,6 @@ six = ">=1.10.0" name = "pytest-cov" version = "2.9.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2072,7 +1901,6 @@ testing = ["fields", "hunter", "process-tests (==2.0.2)", "pytest-xdist", "six", name = "pytest-flask" version = "0.15.1" description = "A set of py.test fixtures to test Flask applications." -category = "dev" optional = false python-versions = "*" files = [ @@ -2092,7 +1920,6 @@ docs = ["Sphinx", "sphinx-rtd-theme"] name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -2107,7 +1934,6 @@ six = ">=1.5" name = "python-jose" version = "2.0.2" description = "JOSE implementation in Python" -category = "main" optional = false python-versions = "*" files = [ @@ -2129,7 +1955,6 @@ pycrypto = ["pycrypto (>=2.6.0,<2.7.0)"] name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -2141,7 +1966,6 @@ files = [ name = "pywin32" version = "227" description = "Python for Window Extensions" -category = "dev" optional = false python-versions = "*" files = [ @@ -2163,7 +1987,6 @@ files = [ name = "pyyaml" version = "5.4.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -2202,7 +2025,6 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2224,7 +2046,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "responses" version = "0.23.3" description = "A utility library for mocking out the `requests` Python library." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2245,7 +2066,6 @@ tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asy name = "retry" version = "0.9.2" description = "Easy to use retry decorator." -category = "main" optional = false python-versions = "*" files = [ @@ -2261,7 +2081,6 @@ py = ">=1.4.26,<2.0.0" name = "rsa" version = "4.9" description = "Pure-Python RSA implementation" -category = "main" optional = false python-versions = ">=3.6,<4" files = [ @@ -2276,7 +2095,6 @@ pyasn1 = ">=0.1.3" name = "s3transfer" version = "0.2.1" description = "An Amazon S3 Transfer Manager" -category = "main" optional = false python-versions = "*" files = [ @@ -2289,26 +2107,24 @@ botocore = ">=1.12.36,<2.0.0" [[package]] name = "setuptools" -version = "68.0.0" +version = "68.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-68.1.0-py3-none-any.whl", hash = "sha256:e13e1b0bc760e9b0127eda042845999b2f913e12437046e663b833aa96d89715"}, + {file = "setuptools-68.1.0.tar.gz", hash = "sha256:d59c97e7b774979a5ccb96388efc9eb65518004537e85d52e81eaee89ab6dd91"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2320,7 +2136,6 @@ files = [ 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" files = [ @@ -2330,81 +2145,30 @@ files = [ [[package]] name = "sqlalchemy" -version = "1.4.49" +version = "1.3.3" description = "Database Abstraction Library" -category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "SQLAlchemy-1.4.49-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e126cf98b7fd38f1e33c64484406b78e937b1a280e078ef558b95bf5b6895f6"}, - {file = "SQLAlchemy-1.4.49-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:03db81b89fe7ef3857b4a00b63dedd632d6183d4ea5a31c5d8a92e000a41fc71"}, - {file = "SQLAlchemy-1.4.49-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:95b9df9afd680b7a3b13b38adf6e3a38995da5e162cc7524ef08e3be4e5ed3e1"}, - {file = "SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a63e43bf3f668c11bb0444ce6e809c1227b8f067ca1068898f3008a273f52b09"}, - {file = "SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f835c050ebaa4e48b18403bed2c0fda986525896efd76c245bdd4db995e51a4c"}, - {file = "SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c21b172dfb22e0db303ff6419451f0cac891d2e911bb9fbf8003d717f1bcf91"}, - {file = "SQLAlchemy-1.4.49-cp310-cp310-win32.whl", hash = "sha256:5fb1ebdfc8373b5a291485757bd6431de8d7ed42c27439f543c81f6c8febd729"}, - {file = "SQLAlchemy-1.4.49-cp310-cp310-win_amd64.whl", hash = "sha256:f8a65990c9c490f4651b5c02abccc9f113a7f56fa482031ac8cb88b70bc8ccaa"}, - {file = "SQLAlchemy-1.4.49-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8923dfdf24d5aa8a3adb59723f54118dd4fe62cf59ed0d0d65d940579c1170a4"}, - {file = "SQLAlchemy-1.4.49-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9ab2c507a7a439f13ca4499db6d3f50423d1d65dc9b5ed897e70941d9e135b0"}, - {file = "SQLAlchemy-1.4.49-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5debe7d49b8acf1f3035317e63d9ec8d5e4d904c6e75a2a9246a119f5f2fdf3d"}, - {file = "SQLAlchemy-1.4.49-cp311-cp311-win32.whl", hash = "sha256:82b08e82da3756765c2e75f327b9bf6b0f043c9c3925fb95fb51e1567fa4ee87"}, - {file = "SQLAlchemy-1.4.49-cp311-cp311-win_amd64.whl", hash = "sha256:171e04eeb5d1c0d96a544caf982621a1711d078dbc5c96f11d6469169bd003f1"}, - {file = "SQLAlchemy-1.4.49-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:36e58f8c4fe43984384e3fbe6341ac99b6b4e083de2fe838f0fdb91cebe9e9cb"}, - {file = "SQLAlchemy-1.4.49-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b31e67ff419013f99ad6f8fc73ee19ea31585e1e9fe773744c0f3ce58c039c30"}, - {file = "SQLAlchemy-1.4.49-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c14b29d9e1529f99efd550cd04dbb6db6ba5d690abb96d52de2bff4ed518bc95"}, - {file = "SQLAlchemy-1.4.49-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c40f3470e084d31247aea228aa1c39bbc0904c2b9ccbf5d3cfa2ea2dac06f26d"}, - {file = "SQLAlchemy-1.4.49-cp36-cp36m-win32.whl", hash = "sha256:706bfa02157b97c136547c406f263e4c6274a7b061b3eb9742915dd774bbc264"}, - {file = "SQLAlchemy-1.4.49-cp36-cp36m-win_amd64.whl", hash = "sha256:a7f7b5c07ae5c0cfd24c2db86071fb2a3d947da7bd487e359cc91e67ac1c6d2e"}, - {file = "SQLAlchemy-1.4.49-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:4afbbf5ef41ac18e02c8dc1f86c04b22b7a2125f2a030e25bbb4aff31abb224b"}, - {file = "SQLAlchemy-1.4.49-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24e300c0c2147484a002b175f4e1361f102e82c345bf263242f0449672a4bccf"}, - {file = "SQLAlchemy-1.4.49-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:201de072b818f8ad55c80d18d1a788729cccf9be6d9dc3b9d8613b053cd4836d"}, - {file = "SQLAlchemy-1.4.49-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7653ed6817c710d0c95558232aba799307d14ae084cc9b1f4c389157ec50df5c"}, - {file = "SQLAlchemy-1.4.49-cp37-cp37m-win32.whl", hash = "sha256:647e0b309cb4512b1f1b78471fdaf72921b6fa6e750b9f891e09c6e2f0e5326f"}, - {file = "SQLAlchemy-1.4.49-cp37-cp37m-win_amd64.whl", hash = "sha256:ab73ed1a05ff539afc4a7f8cf371764cdf79768ecb7d2ec691e3ff89abbc541e"}, - {file = "SQLAlchemy-1.4.49-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:37ce517c011560d68f1ffb28af65d7e06f873f191eb3a73af5671e9c3fada08a"}, - {file = "SQLAlchemy-1.4.49-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1878ce508edea4a879015ab5215546c444233881301e97ca16fe251e89f1c55"}, - {file = "SQLAlchemy-1.4.49-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e8e608983e6f85d0852ca61f97e521b62e67969e6e640fe6c6b575d4db68557"}, - {file = "SQLAlchemy-1.4.49-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccf956da45290df6e809ea12c54c02ace7f8ff4d765d6d3dfb3655ee876ce58d"}, - {file = "SQLAlchemy-1.4.49-cp38-cp38-win32.whl", hash = "sha256:f167c8175ab908ce48bd6550679cc6ea20ae169379e73c7720a28f89e53aa532"}, - {file = "SQLAlchemy-1.4.49-cp38-cp38-win_amd64.whl", hash = "sha256:45806315aae81a0c202752558f0df52b42d11dd7ba0097bf71e253b4215f34f4"}, - {file = "SQLAlchemy-1.4.49-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:b6d0c4b15d65087738a6e22e0ff461b407533ff65a73b818089efc8eb2b3e1de"}, - {file = "SQLAlchemy-1.4.49-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a843e34abfd4c797018fd8d00ffffa99fd5184c421f190b6ca99def4087689bd"}, - {file = "SQLAlchemy-1.4.49-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1c890421651b45a681181301b3497e4d57c0d01dc001e10438a40e9a9c25ee77"}, - {file = "SQLAlchemy-1.4.49-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d26f280b8f0a8f497bc10573849ad6dc62e671d2468826e5c748d04ed9e670d5"}, - {file = "SQLAlchemy-1.4.49-cp39-cp39-win32.whl", hash = "sha256:ec2268de67f73b43320383947e74700e95c6770d0c68c4e615e9897e46296294"}, - {file = "SQLAlchemy-1.4.49-cp39-cp39-win_amd64.whl", hash = "sha256:bbdf16372859b8ed3f4d05f925a984771cd2abd18bd187042f24be4886c2a15f"}, - {file = "SQLAlchemy-1.4.49.tar.gz", hash = "sha256:06ff25cbae30c396c4b7737464f2a7fc37a67b7da409993b182b024cec80aed9"}, -] - -[package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and platform_machine == \"aarch64\" or python_version >= \"3\" and platform_machine == \"ppc64le\" or python_version >= \"3\" and platform_machine == \"x86_64\" or python_version >= \"3\" and platform_machine == \"amd64\" or python_version >= \"3\" and platform_machine == \"AMD64\" or python_version >= \"3\" and platform_machine == \"win32\" or python_version >= \"3\" and platform_machine == \"WIN32\""} + {file = "SQLAlchemy-1.3.3.tar.gz", hash = "sha256:91c54ca8345008fceaec987e10924bf07dcab36c442925357e5a467b36a38319"}, +] [package.extras] -aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] -aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] -asyncio = ["greenlet (!=0.4.17)"] -asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"] -mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2)"] mssql = ["pyodbc"] mssql-pymssql = ["pymssql"] mssql-pyodbc = ["pyodbc"] -mypy = ["mypy (>=0.910)", "sqlalchemy2-stubs"] -mysql = ["mysqlclient (>=1.4.0)", "mysqlclient (>=1.4.0,<2)"] -mysql-connector = ["mysql-connector-python"] -oracle = ["cx-oracle (>=7)", "cx-oracle (>=7,<8)"] -postgresql = ["psycopg2 (>=2.7)"] -postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] -postgresql-pg8000 = ["pg8000 (>=1.16.6,!=1.29.0)"] +mysql = ["mysqlclient"] +oracle = ["cx_oracle"] +postgresql = ["psycopg2"] +postgresql-pg8000 = ["pg8000"] postgresql-psycopg2binary = ["psycopg2-binary"] postgresql-psycopg2cffi = ["psycopg2cffi"] -pymysql = ["pymysql", "pymysql (<1)"] -sqlcipher = ["sqlcipher3-binary"] +pymysql = ["pymysql"] [[package]] name = "storageclient" version = "0.1.0" -description = "" -category = "main" +description = "Python client to interact with ceph/cleversafe backend" optional = false python-versions = "*" files = [] @@ -2432,7 +2196,6 @@ resolved_reference = "4d39265d6e478acd5e1afe6e5dc722418f887d78" name = "types-pyyaml" version = "6.0.12.11" description = "Typing stubs for PyYAML" -category = "dev" optional = false python-versions = "*" files = [ @@ -2444,7 +2207,6 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2456,7 +2218,6 @@ files = [ name = "uritemplate" version = "3.0.1" description = "URI templates" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2468,7 +2229,6 @@ files = [ name = "urllib3" version = "1.25.11" 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.*, <4" files = [ @@ -2485,7 +2245,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "userdatamodel" version = "2.4.3" description = "" -category = "main" optional = false python-versions = "*" files = [ @@ -2500,7 +2259,6 @@ sqlalchemy = ">=1.3.3" name = "websocket-client" version = "1.6.1" description = "WebSocket client for Python with low level API options" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2515,14 +2273,13 @@ test = ["websockets"] [[package]] name = "werkzeug" -version = "2.3.6" +version = "2.3.7" description = "The comprehensive WSGI web application library." -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "Werkzeug-2.3.6-py3-none-any.whl", hash = "sha256:935539fa1413afbb9195b24880778422ed620c0fc09670945185cce4d91a8890"}, - {file = "Werkzeug-2.3.6.tar.gz", hash = "sha256:98c774df2f91b05550078891dee5f0eb0cb797a522c757a2452b9cee5b202330"}, + {file = "werkzeug-2.3.7-py3-none-any.whl", hash = "sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528"}, + {file = "werkzeug-2.3.7.tar.gz", hash = "sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8"}, ] [package.dependencies] @@ -2535,7 +2292,6 @@ watchdog = ["watchdog (>=2.3)"] name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -2620,7 +2376,6 @@ files = [ name = "wtforms" version = "3.0.1" description = "Form validation and rendering for Python web development." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2638,7 +2393,6 @@ email = ["email-validator"] name = "xmltodict" version = "0.13.0" description = "Makes working with XML feel like you are working with JSON" -category = "main" optional = false python-versions = ">=3.4" files = [ @@ -2650,7 +2404,6 @@ files = [ name = "zipp" version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2665,4 +2418,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0.0" -content-hash = "51de5ee8af009da748bd7304d5266648018eb755a9644cad295c053b7b250344" +content-hash = "e083b2f07df1a0dc37da9c1d6b637a47b23c3fbe2840c92ccff902d34df13c53" diff --git a/pyproject.toml b/pyproject.toml index 699fcfd96..a7d367c1b 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ python-jose = "^2.0.2" pyyaml = "^5.1" requests = ">=2.18.0" retry = "^0.9.2" -sqlalchemy = "^1.3.3" +sqlalchemy = "1.3.3" storageclient = {git = "https://github.com/uc-cdis/storage-client", rev = "1.0.2"} userdatamodel = ">=2.4.3" werkzeug = ">=2.2.3"