diff --git a/.flake8 b/.flake8 deleted file mode 100644 index 8a618974..00000000 --- a/.flake8 +++ /dev/null @@ -1,3 +0,0 @@ -[flake8] -# taken from github actions ignore -ignore = E1, E2, E3, E5, W1, W2, W3, W5 diff --git a/.github/actions/terraform-deploy-sm2a/action.yml b/.github/actions/terraform-deploy-sm2a/action.yml index bc98d2bf..8f13a73f 100644 --- a/.github/actions/terraform-deploy-sm2a/action.yml +++ b/.github/actions/terraform-deploy-sm2a/action.yml @@ -33,11 +33,10 @@ runs: using: "composite" steps: - - name: Set up Python - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 + - name: Set up uv + uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 with: - python-version: "3.11" - cache: "pip" + enable-cache: true - name: Setup Terraform uses: hashicorp/setup-terraform@ed3a0531877aca392eb870f440d9ae7aba83a6bd #v1.4.0 diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 3041e182..bdce2260 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,8 +1,8 @@ version: 2 updates: - - package-ecosystem: "uv" - directory: "/" + - package-ecosystem: uv + directory: / cooldown: default-days: 5 semver-major-days: 30 @@ -10,43 +10,60 @@ updates: schedule: interval: weekly groups: - all: + python-dependencies: patterns: - "*" commit-message: prefix: "chore(deps):" - - package-ecosystem: "terraform" - directory: "/" + - package-ecosystem: terraform + directory: / cooldown: default-days: 7 schedule: interval: weekly groups: - all: + terraform: patterns: - "*" commit-message: prefix: "build(deps):" - - package-ecosystem: "docker" - directory: "/" + - package-ecosystem: docker + directory: / cooldown: default-days: 7 schedule: interval: weekly + groups: + docker: + patterns: + - "*" commit-message: prefix: "chore(deps):" - - package-ecosystem: "github-actions" - directory: "/" + - package-ecosystem: github-actions + directory: / cooldown: default-days: 7 schedule: interval: "weekly" groups: - all: + github-actions: patterns: - "*" commit-message: prefix: "ci(deps):" + + - package-ecosystem: pre-commit + directory: / + cooldown: + default-days: 7 + schedule: + interval: "weekly" + groups: + pre-commit: + patterns: + - "*" + commit-message: + prefix: "chore(deps):" diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 924d0a5e..c39d53c8 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -30,22 +30,22 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out Git repository - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 #v3.6.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 #v5.4.2 + - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 name: Setup uv with: - python-version: 3.12 - + enable-cache: true + - name: Run uv sync - run: uv sync --all-groups + run: uv sync --locked --all-groups - name: Test Airflow DAGs run: | export AIRFLOW_HOME=/tmp uv run airflow db migrate uv run pytest - + define-environment: name: Set ✨ environment ✨ needs: [gitflow-enforcer, test-dags] @@ -75,13 +75,14 @@ jobs: steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 #v3.6.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: lfs: "true" submodules: "recursive" + persist-credentials: false - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@5fd3084fc36e372ff1fff382a39b10d03659f355 #v2.2.0 + uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c #v6.2.3 with: role-to-assume: ${{ secrets.DEPLOYMENT_ROLE_ARN }} role-session-name: "veda-airflow-github-development-planner" @@ -108,13 +109,14 @@ jobs: steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 #v3.6.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: lfs: "true" submodules: "recursive" + persist-credentials: false - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@5fd3084fc36e372ff1fff382a39b10d03659f355 #v2.2.0 + uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c #v6.2.3 with: role-to-assume: ${{ secrets.DEPLOYMENT_ROLE_ARN }} role-session-name: "veda-airflow-github-${{ needs.define-environment.outputs.env_name }}-deployment" diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 5c57a0d2..d42ee8ac 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false diff --git a/.github/workflows/tags.yml b/.github/workflows/tags.yml index 4cdc6001..30c5ab55 100644 --- a/.github/workflows/tags.yml +++ b/.github/workflows/tags.yml @@ -13,7 +13,7 @@ jobs: contents: write # Required to create release steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Bump version and push tag id: tag_version uses: mathieudutour/github-tag-action@a22cf08638b34d5badda920f9daf6e72c477b07b #v6.2 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e8a2bddc..b8c5a51c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,25 @@ repos: - - repo: https://github.com/psf/black - rev: 23.3.0 - hooks: - - id: black - args: [--target-version=py38] - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.0.0 + rev: v6.0.0 + hooks: + - id: check-yaml + - id: trailing-whitespace + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.16.1 + hooks: + - id: ruff-check + args: [--fix] + - id: ruff-format + types_or: [python, pyi, pyproject] + + - repo: https://github.com/DavidAnson/markdownlint-cli2 + rev: v0.23.2 hooks: - - id: flake8 + - id: markdownlint-cli2 + args: + - "--fix" + - "--config" + - "pyproject.toml" + - "--configPointer" + - "/tool/markdownlint-cli2" diff --git a/Makefile b/Makefile index 686407ac..49475fd4 100644 --- a/Makefile +++ b/Makefile @@ -52,9 +52,9 @@ sm2a-local-build: sm2a-deploy: ifeq ($(GITHUB_ACTIONS_ENV),true) @echo "Installing the deployment dependency" - pip install -r ./deploy_requirements.txt + uv sync --locked --group deploy @echo "Deploying SM2A" - python scripts/generate_env_file.py --secret-id ${SECRET_NAME} --env-file ${ENV_FILE} + uv run scripts/generate_env_file.py --secret-id ${SECRET_NAME} --env-file ${ENV_FILE} @bash -c './scripts/deploy.sh ${ENV_FILE} <<< init' @bash -c './scripts/deploy.sh ${ENV_FILE} <<< deploy' else @@ -63,9 +63,9 @@ endif sm2a-plan: @echo "Installing the deployment dependency" - pip install -r ./deploy_requirements.txt + uv sync --locked --group deploy @echo "Shopwing Plan for Deploying SM2A" - python scripts/generate_env_file.py --secret-id ${SECRET_NAME} --env-file ${ENV_FILE} + uv run scripts/generate_env_file.py --secret-id ${SECRET_NAME} --env-file ${ENV_FILE} @bash -c './scripts/deploy.sh ${ENV_FILE} <<< init' @bash -c './scripts/deploy.sh ${ENV_FILE} <<< plan' diff --git a/dags/requirements-constraints.txt b/dags/requirements-constraints.txt deleted file mode 100644 index b5e15590..00000000 --- a/dags/requirements-constraints.txt +++ /dev/null @@ -1,662 +0,0 @@ -# -# This constraints file was automatically generated on 2023-01-18T18:46:04Z -# via "eager-upgrade" mechanism of PIP. For the "v2-5-test" branch of Airflow. -# This variant of constraints install uses the HEAD of the branch version for 'apache-airflow' but installs -# the providers from PIP-released packages at the moment of the constraint generation. -# -# Those constraints are actually those that regular users use to install released version of Airflow. -# We also use those constraints after "apache-airflow" is released and the constraints are tagged with -# "constraints-X.Y.Z" tag to build the production image for that version. -# -# -# This constraints file is meant to be used only in the "apache-airflow" installation command and not -# in all subsequent pip commands. By using a constraints.txt file, we ensure that solely the Airflow -# installation step is reproducible. Subsequent pip commands may install packages that would have -# been incompatible with the constraints used in Airflow reproducible installation step. Finally, pip -# commands that might change the installed version of apache-airflow should include "apache-airflow==X.Y.Z" -# in the list of install targets to prevent Airflow accidental upgrade or downgrade. -# -# Typical installation process of airflow for Python 3.8 is (with random selection of extras and custom -# dependencies added), usually consists of two steps: -# -# 1. Reproducible installation of airflow with selected providers (note constraints are used): -# -# pip install "apache-airflow[celery,cncf.kubernetes,google,amazon,snowflake]==X.Y.Z" \ -# --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-X.Y.Z/constraints-3.8.txt" -# -# 2. Installing own dependencies that are potentially not matching the constraints (note constraints are not -# used, and apache-airflow==X.Y.Z is used to make sure there is no accidental airflow upgrade/downgrade. -# -# pip install "apache-airflow==X.Y.Z" "snowflake-connector-python[pandas]==2.9.0" -# -APScheduler==3.6.3 -Authlib==1.2.0 -Babel==2.11.0 -ConfigUpdater==3.1.1 -Deprecated==1.2.13 -Flask-AppBuilder==4.1.4 -Flask-Babel==2.0.0 -Flask-Bcrypt==1.0.1 -Flask-Caching==2.0.2 -Flask-JWT-Extended==4.4.4 -Flask-Login==0.6.2 -Flask-SQLAlchemy==2.5.1 -Flask-Session==0.4.0 -Flask-WTF==1.1.1 -Flask==2.2.2 -GitPython==3.1.30 -HeapDict==1.0.1 -JPype1==1.4.1 -JayDeBeApi==1.2.3 -Jinja2==3.1.2 -Mako==1.2.4 -Markdown==3.4.1 -MarkupSafe==2.1.2 -PyGithub==1.57 -PyHive==0.6.5 -PyJWT==2.6.0 -PyNaCl==1.5.0 -PyYAML==6.0 -Pygments==2.14.0 -SQLAlchemy-JSONField==1.0.1.post0 -SQLAlchemy-Utils==0.39.0 -SQLAlchemy==1.4.46 -SecretStorage==3.3.3 -Sphinx==5.3.0 -Unidecode==1.3.6 -WTForms==3.0.1 -Werkzeug==2.2.2 -adal==1.2.7 -aiofiles==22.1.0 -aiohttp==3.8.3 -aiosignal==1.3.1 -alabaster==0.7.13 -alembic==1.9.2 -aliyun-python-sdk-core==2.13.36 -aliyun-python-sdk-kms==2.16.0 -amqp==5.1.1 -analytics-python==1.4.0 -ansiwrap==0.8.4 -anyio==3.6.2 -apache-airflow-providers-airbyte==3.2.0 -apache-airflow-providers-alibaba==2.2.0 -apache-airflow-providers-amazon==7.1.0 -apache-airflow-providers-apache-beam==4.1.1 -apache-airflow-providers-apache-cassandra==3.1.0 -apache-airflow-providers-apache-drill==2.3.1 -apache-airflow-providers-apache-druid==3.3.1 -apache-airflow-providers-apache-hdfs==3.2.0 -apache-airflow-providers-apache-hive==5.1.1 -apache-airflow-providers-apache-kylin==3.1.0 -apache-airflow-providers-apache-livy==3.2.0 -apache-airflow-providers-apache-pig==4.0.0 -apache-airflow-providers-apache-pinot==4.0.1 -apache-airflow-providers-apache-spark==4.0.0 -apache-airflow-providers-apache-sqoop==3.1.0 -apache-airflow-providers-arangodb==2.1.0 -apache-airflow-providers-asana==2.1.0 -apache-airflow-providers-atlassian-jira==2.0.0 -apache-airflow-providers-celery==3.1.0 -apache-airflow-providers-cloudant==3.1.0 -apache-airflow-providers-cncf-kubernetes==5.1.1 -apache-airflow-providers-common-sql==1.3.3 -apache-airflow-providers-databricks==4.0.0 -apache-airflow-providers-datadog==3.1.0 -apache-airflow-providers-dbt-cloud==2.3.1 -apache-airflow-providers-dingding==3.1.0 -apache-airflow-providers-discord==3.1.0 -apache-airflow-providers-docker==3.4.0 -apache-airflow-providers-elasticsearch==4.3.3 -apache-airflow-providers-exasol==4.1.3 -apache-airflow-providers-facebook==3.1.0 -apache-airflow-providers-ftp==3.3.0 -apache-airflow-providers-github==2.2.0 -apache-airflow-providers-google==8.8.0 -apache-airflow-providers-grpc==3.1.0 -apache-airflow-providers-hashicorp==3.2.0 -apache-airflow-providers-http==4.1.1 -apache-airflow-providers-imap==3.1.1 -apache-airflow-providers-influxdb==2.1.0 -apache-airflow-providers-jdbc==3.3.0 -apache-airflow-providers-jenkins==3.2.0 -apache-airflow-providers-microsoft-azure==5.1.0 -apache-airflow-providers-microsoft-mssql==3.3.2 -apache-airflow-providers-microsoft-psrp==2.2.0 -apache-airflow-providers-microsoft-winrm==3.1.1 -apache-airflow-providers-mongo==3.1.1 -apache-airflow-providers-mysql==4.0.0 -apache-airflow-providers-neo4j==3.2.1 -apache-airflow-providers-odbc==3.2.1 -apache-airflow-providers-openfaas==3.1.0 -apache-airflow-providers-opsgenie==5.0.0 -apache-airflow-providers-oracle==3.6.0 -apache-airflow-providers-pagerduty==3.1.0 -apache-airflow-providers-papermill==3.1.0 -apache-airflow-providers-plexus==3.1.0 -apache-airflow-providers-postgres==5.4.0 -apache-airflow-providers-presto==4.2.1 -apache-airflow-providers-qubole==3.3.1 -apache-airflow-providers-redis==3.1.0 -apache-airflow-providers-salesforce==5.3.0 -apache-airflow-providers-samba==4.1.0 -apache-airflow-providers-segment==3.1.0 -apache-airflow-providers-sendgrid==3.1.0 -apache-airflow-providers-sftp==4.2.1 -apache-airflow-providers-singularity==3.1.0 -apache-airflow-providers-slack==7.2.0 -apache-airflow-providers-snowflake==4.0.2 -apache-airflow-providers-sqlite==3.3.1 -apache-airflow-providers-ssh==3.4.0 -apache-airflow-providers-tableau==4.0.0 -apache-airflow-providers-tabular==1.1.0 -apache-airflow-providers-telegram==3.1.1 -apache-airflow-providers-trino==4.3.1 -apache-airflow-providers-vertica==3.3.1 -apache-airflow-providers-yandex==3.2.0 -apache-airflow-providers-zendesk==4.2.0 -apache-beam==2.44.0 -apispec==3.3.2 -appdirs==1.4.4 -argcomplete==2.0.0 -arrow==1.2.3 -asana==3.0.0 -asgiref==3.6.0 -asn1crypto==1.5.1 -astroid==2.11.7 -asttokens==2.2.1 -async-timeout==4.0.2 -asynctest==0.13.0 -atlasclient==1.0.0 -atlassian-python-api==3.32.2 -attrs==22.2.0 -aws-sam-translator==1.57.0 -aws-xray-sdk==2.11.0 -azure-batch==13.0.0 -azure-common==1.1.28 -azure-core==1.26.2 -azure-cosmos==4.3.0 -azure-datalake-store==0.0.52 -azure-identity==1.12.0 -azure-keyvault-secrets==4.6.0 -azure-kusto-data==0.0.45 -azure-mgmt-containerinstance==1.5.0 -azure-mgmt-core==1.3.2 -azure-mgmt-datafactory==1.1.0 -azure-mgmt-datalake-nspkg==3.0.1 -azure-mgmt-datalake-store==0.5.0 -azure-mgmt-nspkg==3.0.2 -azure-mgmt-resource==22.0.0 -azure-nspkg==3.0.2 -azure-servicebus==7.8.2 -azure-storage-blob==12.14.1 -azure-storage-common==2.1.0 -azure-storage-file-datalake==12.9.1 -azure-storage-file==2.1.0 -azure-synapse-spark==0.7.0 -backcall==0.2.0 -backoff==1.10.0 -bcrypt==4.0.1 -beautifulsoup4==4.11.1 -billiard==3.6.4.0 -black==23.1a1 -bleach==5.0.1 -blinker==1.5 -boto3==1.26.51 -boto==2.49.0 -botocore==1.29.51 -bowler==0.9.0 -cachelib==0.9.0 -cassandra-driver==3.25.0 -cattrs==22.2.0 -celery==5.2.7 -certifi==2022.12.7 -cffi==1.15.1 -cfgv==3.3.1 -cfn-lint==0.72.9 -cgroupspy==0.2.2 -chardet==4.0.0 -charset-normalizer==2.1.1 -checksumdir==1.2.0 -ciso8601==2.3.0 -click-default-group==1.2.2 -click-didyoumean==0.3.0 -click-plugins==1.1.1 -click-repl==0.2.0 -click==8.1.3 -clickclick==20.10.2 -cloudant==2.15.0 -cloudpickle==2.2.0 -colorama==0.4.6 -colorlog==4.8.0 -commonmark==0.9.1 -connexion==2.14.1 -coverage==7.0.5 -crcmod==1.7 -cron-descriptor==1.2.32 -croniter==1.3.8 -cryptography==38.0.4 -curlify==2.2.1 -dask==2023.1.0 -databricks-sql-connector==2.2.0 -datadog==0.44.0 -db-dtypes==1.0.5 -decorator==5.1.1 -defusedxml==0.7.1 -dill==0.3.1.1 -distlib==0.3.6 -distributed==2023.1.0 -dnspython==2.3.0 -docker==6.0.1 -docopt==0.6.2 -docutils==0.19 -ecdsa==0.18.0 -elasticsearch-dbapi==0.2.9 -elasticsearch-dsl==7.4.0 -elasticsearch==7.13.4 -email-validator==1.3.0 -entrypoints==0.4 -eralchemy2==1.3.6 -eventlet==0.33.3 -exceptiongroup==1.1.0 -execnet==1.9.0 -executing==1.2.0 -facebook-business==15.0.2 -fastavro==1.7.0 -fasteners==0.18 -fastjsonschema==2.16.2 -filelock==3.9.0 -fissix==21.11.13 -flake8-colors==0.1.9 -flake8==6.0.0 -flake8_implicit_str_concat==0.3.0 -flaky==3.7.0 -flower==1.2.0 -freezegun==1.2.2 -frozenlist==1.3.3 -fsspec==2022.11.0 -future==0.18.3 -gcloud-aio-auth==4.1.5 -gcloud-aio-bigquery==6.2.0 -gcloud-aio-storage==8.0.0 -gcsfs==2022.11.0 -geomet==0.2.1.post1 -gevent==22.10.2 -gitdb==4.0.10 -google-ads==18.0.0 -google-api-core==2.8.2 -google-api-python-client==1.12.11 -google-auth-httplib2==0.1.0 -google-auth-oauthlib==0.8.0 -google-auth==2.16.0 -google-cloud-aiplatform==1.16.1 -google-cloud-appengine-logging==1.1.3 -google-cloud-audit-log==0.2.4 -google-cloud-automl==2.8.0 -google-cloud-bigquery-datatransfer==3.7.0 -google-cloud-bigquery-storage==2.14.1 -google-cloud-bigquery==2.34.4 -google-cloud-bigtable==1.7.3 -google-cloud-build==3.9.0 -google-cloud-compute==0.7.0 -google-cloud-container==2.11.1 -google-cloud-core==2.3.2 -google-cloud-datacatalog==3.9.0 -google-cloud-dataform==0.2.0 -google-cloud-dataplex==1.1.0 -google-cloud-dataproc-metastore==1.6.0 -google-cloud-dataproc==5.0.0 -google-cloud-dlp==1.0.2 -google-cloud-kms==2.12.0 -google-cloud-language==1.3.2 -google-cloud-logging==3.2.1 -google-cloud-memcache==1.4.1 -google-cloud-monitoring==2.11.0 -google-cloud-orchestration-airflow==1.4.1 -google-cloud-os-login==2.7.1 -google-cloud-pubsub==2.13.5 -google-cloud-redis==2.9.0 -google-cloud-resource-manager==1.6.0 -google-cloud-secret-manager==1.0.2 -google-cloud-spanner==1.19.3 -google-cloud-speech==1.3.4 -google-cloud-storage==2.7.0 -google-cloud-tasks==2.10.1 -google-cloud-texttospeech==1.0.3 -google-cloud-translate==1.7.2 -google-cloud-videointelligence==1.16.3 -google-cloud-vision==1.0.2 -google-cloud-workflows==1.7.1 -google-crc32c==1.5.0 -google-resumable-media==2.4.0 -googleapis-common-protos==1.56.4 -graphql-core==3.2.3 -graphviz==0.20.1 -greenlet==2.0.1 -grpc-google-iam-v1==0.12.4 -grpcio-gcp==0.2.2 -grpcio-status==1.48.2 -grpcio==1.51.1 -gssapi==1.8.2 -gunicorn==20.1.0 -h11==0.14.0 -hdfs==2.7.0 -hmsclient==0.1.1 -httpcore==0.16.3 -httplib2==0.20.4 -httpx==0.23.3 -humanize==4.4.0 -hvac==1.0.2 -identify==2.5.13 -idna==3.4 -ijson==3.2.0.post0 -imagesize==1.4.1 -importlib-metadata==6.0.0 -incremental==22.10.0 -inflection==0.5.1 -influxdb-client==1.35.0 -iniconfig==2.0.0 -ipdb==0.13.11 -ipython==8.8.0 -isodate==0.6.1 -isort==5.11.2 -itsdangerous==2.1.2 -jaraco.classes==3.2.3 -jedi==0.18.2 -jeepney==0.8.0 -jira==3.4.1 -jmespath==0.10.0 -jschema-to-python==1.2.3 -json-merge-patch==0.2 -jsondiff==2.0.0 -jsonpatch==1.32 -jsonpath-ng==1.5.3 -jsonpickle==3.0.1 -jsonpointer==2.3 -jsonschema-spec==0.1.2 -jsonschema==4.17.3 -junit-xml==1.9 -jupyter-client==7.3.4 -jupyter_core==5.1.3 -keyring==23.13.1 -kombu==5.2.4 -krb5==0.4.1 -kubernetes==23.6.0 -kylinpy==2.8.4 -lazy-object-proxy==1.9.0 -ldap3==2.9.1 -linkify-it-py==2.0.0 -locket==1.0.0 -lockfile==0.12.2 -looker-sdk==22.20.0 -lxml==4.9.2 -lz4==4.3.2 -markdown-it-py==2.1.0 -marshmallow-enum==1.5.1 -marshmallow-oneofschema==3.0.1 -marshmallow-sqlalchemy==0.26.1 -marshmallow==3.19.0 -matplotlib-inline==0.1.6 -mccabe==0.7.0 -mdit-py-plugins==0.3.3 -mdurl==0.1.2 -mongomock==4.1.2 -monotonic==1.6 -more-itertools==8.14.0 -moreorless==0.4.0 -moto==4.1.0 -msal-extensions==1.0.0 -msal==1.20.0 -msgpack==1.0.4 -msrest==0.7.1 -msrestazure==0.6.4 -multi-key-dict==2.0.3 -multidict==6.0.4 -mypy-boto3-appflow==1.26.32 -mypy-boto3-rds==1.26.47 -mypy-boto3-redshift-data==1.26.30 -mypy-extensions==0.4.3 -mypy==0.971 -mysql-connector-python==8.0.32 -mysqlclient==2.1.1 -nbclient==0.7.2 -nbformat==5.7.3 -neo4j==5.4.0 -nest-asyncio==1.5.6 -networkx==2.8.8 -nodeenv==1.7.0 -ntlm-auth==1.5.0 -numpy==1.22.4 -oauthlib==3.2.2 -objsize==0.6.1 -openapi-schema-validator==0.4.0 -openapi-spec-validator==0.5.2 -opsgenie-sdk==2.1.5 -oracledb==1.2.1 -orjson==3.8.5 -oscrypto==1.3.0 -oss2==2.16.0 -packaging==21.3 -pandas-gbq==0.17.9 -pandas==1.5.2 -papermill==2.4.0 -parameterized==0.8.1 -paramiko==2.12.0 -parso==0.8.3 -partd==1.3.0 -pathable==0.4.3 -pathspec==0.9.0 -pbr==5.11.1 -pdpyras==4.5.2 -pendulum==2.1.2 -pexpect==4.8.0 -pickleshare==0.7.5 -pinotdb==0.4.12 -pipdeptree==2.3.3 -pipx==1.1.0 -pkginfo==1.9.6 -platformdirs==2.6.2 -pluggy==1.0.0 -ply==3.11 -plyvel==1.5.0 -portalocker==2.6.0 -pre-commit==2.21.0 -presto-python-client==0.8.3 -prison==0.2.1 -prometheus-client==0.15.0 -prompt-toolkit==3.0.36 -proto-plus==1.19.6 -protobuf==3.20.0 -psutil==5.9.4 -psycopg2-binary==2.9.5 -psycopg2==2.9.5 -ptyprocess==0.7.0 -pure-eval==0.2.2 -pure-sasl==0.6.2 -py4j==0.10.9.5 -py==1.11.0 -pyOpenSSL==22.1.0 -pyarrow==9.0.0 -pyasn1-modules==0.2.8 -pyasn1==0.4.8 -pycodestyle==2.10.0 -pycountry==22.3.5 -pycparser==2.21 -pycryptodome==3.16.0 -pycryptodomex==3.16.0 -pydantic==1.10.4 -pydata-google-auth==1.5.0 -pydot==1.4.2 -pydruid==0.6.5 -pyenchant==3.2.2 -pyexasol==0.25.1 -pyflakes==3.0.1 -pygraphviz==1.10 -pyhcl==0.4.4 -pykerberos==1.2.4 -pymongo==3.13.0 -pymssql==2.2.8 -pyodbc==4.0.35 -pyparsing==3.0.9 -pypsrp==0.8.1 -pyrsistent==0.19.3 -pyspark==3.3.1 -pyspnego==0.7.0 -pytest-asyncio==0.20.3 -pytest-capture-warnings==0.0.4 -pytest-cov==4.0.0 -pytest-httpx==0.21.2 -pytest-instafail==0.4.2 -pytest-rerunfailures==9.1.1 -pytest-timeouts==1.2.1 -pytest-xdist==3.1.0 -pytest==6.2.5 -python-arango==7.5.5 -python-daemon==2.3.2 -python-dateutil==2.8.2 -python-dotenv==0.21.0 -python-http-client==3.3.7 -python-jenkins==1.7.0 -python-jose==3.3.0 -python-ldap==3.4.3 -python-nvd3==0.15.0 -python-slugify==7.0.0 -python-telegram-bot==13.15 -pytz-deprecation-shim==0.1.0.post0 -pytz==2022.7.1 -pytzdata==2020.1 -pywinrm==0.4.3 -pyzmq==25.0.0 -qds-sdk==1.16.1 -reactivex==4.0.4 -readme-renderer==37.3 -redis==3.5.3 -redshift-connector==2.0.909 -regex==2022.10.31 -requests-file==1.5.1 -requests-kerberos==0.14.0 -requests-mock==1.10.0 -requests-ntlm==1.1.0 -requests-oauthlib==1.3.1 -requests-toolbelt==0.10.1 -requests==2.28.2 -responses==0.22.0 -rfc3986==1.5.0 -rich-click==1.6.0 -rich==13.1.0 -rsa==4.9 -s3transfer==0.6.0 -sarif-om==1.0.4 -sasl==0.3.1 -scramp==1.4.4 -scrapbook==0.5.0 -semver==2.13.0 -sendgrid==6.9.7 -sentinels==1.0.0 -sentry-sdk==1.13.0 -setproctitle==1.3.2 -simple-salesforce==1.12.3 -six==1.16.0 -slack-sdk==3.19.5 -smbprotocol==1.10.1 -smmap==5.0.0 -snakebite-py3==3.0.5 -sniffio==1.3.0 -snowballstemmer==2.2.0 -snowflake-connector-python==2.9.0 -snowflake-sqlalchemy==1.4.4 -sortedcontainers==2.4.0 -soupsieve==2.3.2.post1 -sphinx-airflow-theme==0.0.11 -sphinx-argparse==0.4.0 -sphinx-autoapi==2.0.1 -sphinx-copybutton==0.5.1 -sphinx-jinja==2.0.2 -sphinx-rtd-theme==1.1.1 -sphinxcontrib-devhelp==1.0.2 -sphinxcontrib-htmlhelp==2.0.0 -sphinxcontrib-httpdomain==1.8.1 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.3 -sphinxcontrib-redoc==1.6.0 -sphinxcontrib-serializinghtml==1.1.5 -sphinxcontrib-spelling==7.7.0 -sphinxcontrib.applehelp==1.0.3 -spython==0.3.0 -sqlalchemy-bigquery==1.5.0 -sqlalchemy-drill==1.1.2 -sqlalchemy-redshift==0.8.12 -sqlparse==0.4.3 -sshpubkeys==3.3.1 -sshtunnel==0.4.0 -stack-data==0.6.2 -starkbank-ecdsa==2.2.0 -statsd==4.0.1 -tableauserverclient==0.23.4 -tabulate==0.9.0 -tblib==1.7.0 -tenacity==8.1.0 -termcolor==2.2.0 -text-unidecode==1.3 -textwrap3==0.9.2 -thrift-sasl==0.4.3 -thrift==0.16.0 -toml==0.10.2 -tomli==2.0.1 -toolz==0.12.0 -tornado==6.1 -towncrier==22.12.0 -tqdm==4.64.1 -traitlets==5.8.1 -trino==0.321.0 -twine==4.0.2 -types-Deprecated==1.2.9 -types-Markdown==3.4.2.2 -types-PyMySQL==1.0.19.2 -types-PyYAML==6.0.12.3 -types-boto==2.49.18.5 -types-certifi==2021.10.8.3 -types-croniter==1.3.2.2 -types-docutils==0.19.1.2 -types-freezegun==1.1.10 -types-paramiko==2.12.0.3 -types-protobuf==4.21.0.3 -types-pyOpenSSL==23.0.0.1 -types-python-dateutil==2.8.19.6 -types-python-slugify==7.0.0.1 -types-pytz==2022.7.1.0 -types-redis==4.4.0.2 -types-requests==2.28.11.8 -types-setuptools==65.7.0.2 -types-tabulate==0.9.0.0 -types-termcolor==1.1.6 -types-toml==0.10.8.1 -types-urllib3==1.26.25.4 -typing_extensions==4.4.0 -tzdata==2022.7 -tzlocal==4.2 -uamqp==1.6.3 -uc-micro-py==1.0.1 -unicodecsv==0.14.1 -uritemplate==3.0.1 -urllib3==1.26.14 -userpath==1.8.0 -vertica-python==1.2.0 -vine==5.0.0 -virtualenv==20.17.1 -volatile==2.1.0 -watchtower==2.0.1 -wcwidth==0.2.6 -webencodings==0.5.1 -websocket-client==1.4.2 -wrapt==1.14.1 -xmltodict==0.13.0 -yamllint==1.29.0 -yandexcloud==0.194.0 -yarl==1.8.2 -zeep==4.2.1 -zenpy==2.0.25 -zict==2.2.0 -zipp==3.11.0 -zope.event==4.6 -zope.interface==5.5.2 -zstandard==0.19.0 \ No newline at end of file diff --git a/dags/requirements.txt b/dags/requirements.txt deleted file mode 100644 index 981eb861..00000000 --- a/dags/requirements.txt +++ /dev/null @@ -1,19 +0,0 @@ -#--constraint /usr/local/airflow/dags/requirements-constraints.txt -affine==2.4.0 -netCDF4==1.6.2 -pydantic==1.10.4 -rio-cogeo==3.5.0 -smart-open==6.3.0 -apache-airflow-providers-docker==3.4.0 -apache-airflow-providers-postgres==5.4.0 -apache-airflow-providers-common-sql==1.3.3 -typing-extensions==4.4.0 -psycopg2-binary==2.9.5 -pyOpenSSL==22.0.0 -stac-pydantic -fsspec -s3fs -xarray -xstac -stactools-noaa-hrrr -stactools diff --git a/deploy_requirements.txt b/deploy_requirements.txt deleted file mode 100644 index b1f6c3bc..00000000 --- a/deploy_requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -boto3==1.26.62 -requests==2.28.2 \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index bd2a91a2..b6dfb965 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,18 +12,16 @@ dependencies = [ [dependency-groups] dev = [ - "pytest", - "ruff", - "isort" + "pre-commit==4.6.2" ] deploy = [ - "boto3", - "requests" + "boto3==1.37.0", + "requests==2.31.0" ] test = [ "coverage", "moto>=4.2.13", - "boto3>=1.26.62", + "boto3>=1.37.0", "smart-open>=7.1.0", "requests-mock", "xarray", @@ -98,3 +96,34 @@ airflow-service = [ [tool.uv] default-groups = ["dev", "deploy", "test"] +[tool.ruff] +line-length = 88 + +[tool.ruff.lint] +select = [ + "AIR", # apache-airflow + "E", # pycodestyle errors + "W", # pycodestyle warnings + "F", # Pyflakes + "I", # isort + "UP", # pyupgrade + "B", # flake8-bugbear + "C4", # flake8-comprehensions + "SIM", # flake8-simplify + "PTH", # flake8-use-pathlib + "RET", # flake8-return + "TID", # flake8-tidy-imports + "TC", # flake8-type-checking + "ISC", # flake8-implicit-str-concat + "ICN", # flake8-import-conventions +] +ignore = [ + "BLE001", # Blind Exceptions +] + +[tool.ruff.format] +docstring-code-format = true +docstring-code-line-length = "dynamic" + +[tool.markdownlint-cli2.config] +MD013 = false diff --git a/scripts/generate_env_file.py b/scripts/generate_env_file.py index da60b376..db60800e 100644 --- a/scripts/generate_env_file.py +++ b/scripts/generate_env_file.py @@ -1,13 +1,15 @@ -import boto3 import json from argparse import ArgumentParser +from pathlib import Path + +import boto3 def get_secrets_as_env(secret_id, out_file): sm_client = boto3.client("secretsmanager") response = sm_client.get_secret_value(SecretId=secret_id) secrets = json.loads(response["SecretString"]) - with open(out_file, "w") as _env: + with Path(out_file).open("w") as _env: for out_key in secrets: out_value = secrets[out_key] _env.write(f"{out_key}={out_value}\n") diff --git a/uv.lock b/uv.lock index da880895..11d6eba2 100644 --- a/uv.lock +++ b/uv.lock @@ -561,30 +561,30 @@ wheels = [ [[package]] name = "boto3" -version = "1.43.64" +version = "1.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "botocore" }, { name = "jmespath" }, { name = "s3transfer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/da/d5ca15f34a567f2d027df23395315983bd7ee35011e93c1cca12b7f89823/boto3-1.43.64.tar.gz", hash = "sha256:fc7522c3ed97d38176e0b1366406bca0fc8c888ae8d416bf953477b3f015a7b2", size = 112655, upload-time = "2026-08-04T20:12:42.45Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/94/161981b33bbe6869af1e6061e61c5c60b11d47490af53c5c6e8e34a663dc/boto3-1.37.0.tar.gz", hash = "sha256:01015b38017876d79efd7273f35d9a4adfba505237159621365bed21b9b65eca", size = 111156, upload-time = "2025-02-24T21:45:43.569Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/94/14cf3ec553edf78e5196289087ac52862c87ac179fa1cfdf1022ec366b79/boto3-1.43.64-py3-none-any.whl", hash = "sha256:2b555e63ece57cffb1ab1666fa6c23a0957e61f9d19ea8424d6c884124c3fd98", size = 140024, upload-time = "2026-08-04T20:12:41.147Z" }, + { url = "https://files.pythonhosted.org/packages/ed/bd/d9c4b01383e656bfa1b04c7a67b23bcc2f877778227987f032fb0f141ade/boto3-1.37.0-py3-none-any.whl", hash = "sha256:03bd8c93b226f07d944fd6b022e11a307bff94ab6a21d51675d7e3ea81ee8424", size = 139344, upload-time = "2025-02-24T21:45:39.943Z" }, ] [[package]] name = "botocore" -version = "1.43.64" +version = "1.37.38" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jmespath" }, { name = "python-dateutil" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3b/67/0e39203c5c67f750874478cf89124486044580ec5cb391eec8eb13cf25b8/botocore-1.43.64.tar.gz", hash = "sha256:a2bb131f48111094fae0a2c896b42593797e935d9c22abb2ebae4290c6dbb5ea", size = 15842274, upload-time = "2026-08-04T20:12:31.598Z" } +sdist = { url = "https://files.pythonhosted.org/packages/34/79/4e072e614339727f79afef704e5993b5b4d2667c1671c757cc4deb954744/botocore-1.37.38.tar.gz", hash = "sha256:c3ea386177171f2259b284db6afc971c959ec103fa2115911c4368bea7cbbc5d", size = 13832365, upload-time = "2025-04-21T19:27:05.245Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/d1/f27d1a4fb571e102828a4672cb3d19e0409275eb92c701b67a85879c0b04/botocore-1.43.64-py3-none-any.whl", hash = "sha256:f0a01c47d631ab95589c244566bca971294724b21862de1c12c7c3b0de236272", size = 15525459, upload-time = "2026-08-04T20:12:28.58Z" }, + { url = "https://files.pythonhosted.org/packages/55/1b/93f3504afc7c523dcaa8a8147cfc75421983e30b08d9f93a533929589630/botocore-1.37.38-py3-none-any.whl", hash = "sha256:23b4097780e156a4dcaadfc1ed156ce25cb95b6087d010c4bb7f7f5d9bc9d219", size = 13499391, upload-time = "2025-04-21T19:27:00.869Z" }, ] [[package]] @@ -671,6 +671,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, ] +[[package]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, +] + [[package]] name = "cftime" version = "1.6.4.post1" @@ -1509,6 +1518,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/55/c7/6f89082f619c76165feb633446bd0fee32b0e0cbad00d22480e5aea26ade/humanize-4.12.2-py3-none-any.whl", hash = "sha256:e4e44dced598b7e03487f3b1c6fd5b1146c30ea55a110e71d5d4bca3e094259e", size = 128305, upload-time = "2025-03-24T17:12:37.059Z" }, ] +[[package]] +name = "identify" +version = "2.6.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, +] + [[package]] name = "idna" version = "3.10" @@ -1557,15 +1575,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload-time = "2024-10-08T23:04:09.501Z" }, ] -[[package]] -name = "isort" -version = "6.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b8/21/1e2a441f74a653a144224d7d21afe8f4169e6c7c20bb13aec3a2dc3815e0/isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450", size = 821955, upload-time = "2025-02-26T21:13:16.955Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/11/114d0a5f4dabbdcedc1125dee0888514c3c3b16d3e9facad87ed96fad97c/isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615", size = 94186, upload-time = "2025-02-26T21:13:14.911Z" }, -] - [[package]] name = "itsdangerous" version = "2.2.0" @@ -1957,6 +1966,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cd/10/c52f12297965938d9b9be666ea1f9d8340c2aea31d6909d90aa650847248/netcdf4-1.7.2-cp311-abi3-win_amd64.whl", hash = "sha256:999bfc4acebf400ed724d5e7329e2e768accc7ee1fa1d82d505da782f730301b", size = 7148514, upload-time = "2025-10-13T18:32:33.121Z" }, ] +[[package]] +name = "nodeenv" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, +] + [[package]] name = "numcodecs" version = "0.16.0" @@ -2239,6 +2257,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload-time = "2018-02-15T19:01:27.172Z" }, ] +[[package]] +name = "pre-commit" +version = "4.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/89/1f3e8e1fc3e97de0fa963495832f581f025f29471602a309e48808244292/pre_commit-4.6.2.tar.gz", hash = "sha256:8f5d7bfb021ecdbcd9d49d89847082dd24172ccde534390081a679ad046e2441", size = 198670, upload-time = "2026-08-10T22:07:18.421Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/e2/bbb7129c9e7999a6b8ee9cca3b66486c25c423ab5a75f34071798b74ce94/pre_commit-4.6.2-py2.py3-none-any.whl", hash = "sha256:e2dde9a75d3bce11bd3831c26d134df00a2803c1d818be6a0383c3dcda25dc4e", size = 226202, upload-time = "2026-08-10T22:07:16.942Z" }, +] + [[package]] name = "prison" version = "0.2.1" @@ -2348,7 +2382,7 @@ wheels = [ [[package]] name = "pyathena" -version = "3.35.4" +version = "3.30.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "boto3" }, @@ -2357,9 +2391,9 @@ dependencies = [ { name = "python-dateutil" }, { name = "tenacity" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/45/30/9f4fd9cfd3e0bad8fcdb98a2e27b53bd6e09ff9fab59429d34f4034f807f/pyathena-3.35.4.tar.gz", hash = "sha256:583007b566d1346a4d2486faab0e22858f1942c46064ab71b8e7e93146e2c53d", size = 151680, upload-time = "2026-07-31T12:39:53.012Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/f1/41cc66a42a581cbd463baa429f003dd999f3c544d6d136eef9a58d66642a/pyathena-3.30.1.tar.gz", hash = "sha256:012dacf4e5205dce705bbdc70a88025a8aeadc114bc9d2d0ac4fcb122afa0457", size = 135253, upload-time = "2026-03-26T14:41:57.767Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/73/9ad1a97c6fb96d296b9f8c2a43da9cbae1698c02a422a63355d48489c80a/pyathena-3.35.4-py3-none-any.whl", hash = "sha256:8c5798f33878ce406bdbc0d1c8cd06d9d15181cb10e7e50f6a527f2e2b17a23c", size = 211273, upload-time = "2026-07-31T12:39:51.381Z" }, + { url = "https://files.pythonhosted.org/packages/87/c7/7cea4629a8d9973c39b718e17566b1554a362c4c86b96296f94bb3ea8d77/pyathena-3.30.1-py3-none-any.whl", hash = "sha256:d7980de8ae1a57054251a371c8b4d1994b3411784b87965f83cc262a86d12f70", size = 191039, upload-time = "2026-03-26T14:41:55.949Z" }, ] [[package]] @@ -2709,7 +2743,7 @@ wheels = [ [[package]] name = "requests" -version = "2.34.2" +version = "2.31.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, @@ -2717,9 +2751,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/be/10918a2eac4ae9f02f6cfe6414b7a155ccd8f7f9d4380d62fd5b955065c3/requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1", size = 110794, upload-time = "2023-05-22T15:12:44.175Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, + { url = "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", size = 62574, upload-time = "2023-05-22T15:12:42.313Z" }, ] [[package]] @@ -2902,31 +2936,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bb/46/b8b5424d1d21f2f2f3f2d468660085318d4f74a8df8289e3dd6ad224d488/rpds_py-0.24.0-cp312-cp312-win_amd64.whl", hash = "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034", size = 239719, upload-time = "2025-03-26T14:53:47.187Z" }, ] -[[package]] -name = "ruff" -version = "0.11.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/45/71/5759b2a6b2279bb77fe15b1435b89473631c2cd6374d45ccdb6b785810be/ruff-0.11.5.tar.gz", hash = "sha256:cae2e2439cb88853e421901ec040a758960b576126dab520fa08e9de431d1bef", size = 3976488, upload-time = "2025-04-10T17:13:29.369Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/23/db/6efda6381778eec7f35875b5cbefd194904832a1153d68d36d6b269d81a8/ruff-0.11.5-py3-none-linux_armv6l.whl", hash = "sha256:2561294e108eb648e50f210671cc56aee590fb6167b594144401532138c66c7b", size = 10103150, upload-time = "2025-04-10T17:12:37.886Z" }, - { url = "https://files.pythonhosted.org/packages/44/f2/06cd9006077a8db61956768bc200a8e52515bf33a8f9b671ee527bb10d77/ruff-0.11.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ac12884b9e005c12d0bd121f56ccf8033e1614f736f766c118ad60780882a077", size = 10898637, upload-time = "2025-04-10T17:12:41.602Z" }, - { url = "https://files.pythonhosted.org/packages/18/f5/af390a013c56022fe6f72b95c86eb7b2585c89cc25d63882d3bfe411ecf1/ruff-0.11.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4bfd80a6ec559a5eeb96c33f832418bf0fb96752de0539905cf7b0cc1d31d779", size = 10236012, upload-time = "2025-04-10T17:12:44.584Z" }, - { url = "https://files.pythonhosted.org/packages/b8/ca/b9bf954cfed165e1a0c24b86305d5c8ea75def256707f2448439ac5e0d8b/ruff-0.11.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0947c0a1afa75dcb5db4b34b070ec2bccee869d40e6cc8ab25aca11a7d527794", size = 10415338, upload-time = "2025-04-10T17:12:47.172Z" }, - { url = "https://files.pythonhosted.org/packages/d9/4d/2522dde4e790f1b59885283f8786ab0046958dfd39959c81acc75d347467/ruff-0.11.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ad871ff74b5ec9caa66cb725b85d4ef89b53f8170f47c3406e32ef040400b038", size = 9965277, upload-time = "2025-04-10T17:12:50.628Z" }, - { url = "https://files.pythonhosted.org/packages/e5/7a/749f56f150eef71ce2f626a2f6988446c620af2f9ba2a7804295ca450397/ruff-0.11.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6cf918390cfe46d240732d4d72fa6e18e528ca1f60e318a10835cf2fa3dc19f", size = 11541614, upload-time = "2025-04-10T17:12:53.783Z" }, - { url = "https://files.pythonhosted.org/packages/89/b2/7d9b8435222485b6aac627d9c29793ba89be40b5de11584ca604b829e960/ruff-0.11.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56145ee1478582f61c08f21076dc59153310d606ad663acc00ea3ab5b2125f82", size = 12198873, upload-time = "2025-04-10T17:12:56.956Z" }, - { url = "https://files.pythonhosted.org/packages/00/e0/a1a69ef5ffb5c5f9c31554b27e030a9c468fc6f57055886d27d316dfbabd/ruff-0.11.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5f66f8f1e8c9fc594cbd66fbc5f246a8d91f916cb9667e80208663ec3728304", size = 11670190, upload-time = "2025-04-10T17:13:00.194Z" }, - { url = "https://files.pythonhosted.org/packages/05/61/c1c16df6e92975072c07f8b20dad35cd858e8462b8865bc856fe5d6ccb63/ruff-0.11.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80b4df4d335a80315ab9afc81ed1cff62be112bd165e162b5eed8ac55bfc8470", size = 13902301, upload-time = "2025-04-10T17:13:03.246Z" }, - { url = "https://files.pythonhosted.org/packages/79/89/0af10c8af4363304fd8cb833bd407a2850c760b71edf742c18d5a87bb3ad/ruff-0.11.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3068befab73620b8a0cc2431bd46b3cd619bc17d6f7695a3e1bb166b652c382a", size = 11350132, upload-time = "2025-04-10T17:13:06.209Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e1/ecb4c687cbf15164dd00e38cf62cbab238cad05dd8b6b0fc68b0c2785e15/ruff-0.11.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f5da2e710a9641828e09aa98b92c9ebbc60518fdf3921241326ca3e8f8e55b8b", size = 10312937, upload-time = "2025-04-10T17:13:08.855Z" }, - { url = "https://files.pythonhosted.org/packages/cf/4f/0e53fe5e500b65934500949361e3cd290c5ba60f0324ed59d15f46479c06/ruff-0.11.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ef39f19cb8ec98cbc762344921e216f3857a06c47412030374fffd413fb8fd3a", size = 9936683, upload-time = "2025-04-10T17:13:11.378Z" }, - { url = "https://files.pythonhosted.org/packages/04/a8/8183c4da6d35794ae7f76f96261ef5960853cd3f899c2671961f97a27d8e/ruff-0.11.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b2a7cedf47244f431fd11aa5a7e2806dda2e0c365873bda7834e8f7d785ae159", size = 10950217, upload-time = "2025-04-10T17:13:14.565Z" }, - { url = "https://files.pythonhosted.org/packages/26/88/9b85a5a8af21e46a0639b107fcf9bfc31da4f1d263f2fc7fbe7199b47f0a/ruff-0.11.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:81be52e7519f3d1a0beadcf8e974715b2dfc808ae8ec729ecfc79bddf8dbb783", size = 11404521, upload-time = "2025-04-10T17:13:17.8Z" }, - { url = "https://files.pythonhosted.org/packages/fc/52/047f35d3b20fd1ae9ccfe28791ef0f3ca0ef0b3e6c1a58badd97d450131b/ruff-0.11.5-py3-none-win32.whl", hash = "sha256:e268da7b40f56e3eca571508a7e567e794f9bfcc0f412c4b607931d3af9c4afe", size = 10320697, upload-time = "2025-04-10T17:13:20.582Z" }, - { url = "https://files.pythonhosted.org/packages/b9/fe/00c78010e3332a6e92762424cf4c1919065707e962232797d0b57fd8267e/ruff-0.11.5-py3-none-win_amd64.whl", hash = "sha256:6c6dc38af3cfe2863213ea25b6dc616d679205732dc0fb673356c2d69608f800", size = 11378665, upload-time = "2025-04-10T17:13:23.349Z" }, - { url = "https://files.pythonhosted.org/packages/43/7c/c83fe5cbb70ff017612ff36654edfebec4b1ef79b558b8e5fd933bab836b/ruff-0.11.5-py3-none-win_arm64.whl", hash = "sha256:67e241b4314f4eacf14a601d586026a962f4002a475aa702c69980a38087aa4e", size = 10460287, upload-time = "2025-04-10T17:13:26.538Z" }, -] - [[package]] name = "s3fs" version = "0.4.2" @@ -2942,14 +2951,14 @@ wheels = [ [[package]] name = "s3transfer" -version = "0.19.2" +version = "0.11.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "botocore" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/43/35e4d8aa320bffe8287fe8f65f578fa2d2db0a64212f0e710dce58267854/s3transfer-0.19.2.tar.gz", hash = "sha256:ba0309fd86be3c27dbf78cdd813c13c5e1df16e5874b99d2535ebbdfb9892993", size = 165592, upload-time = "2026-07-22T19:30:44.432Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/2b/5c9562795c2eb2b5f63536961754760c25bf0f34af93d36aa28dea2fb303/s3transfer-0.11.5.tar.gz", hash = "sha256:8c8aad92784779ab8688a61aefff3e28e9ebdce43142808eaa3f0b0f402f68b7", size = 149107, upload-time = "2025-04-17T19:23:19.051Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/e7/5c595c75e9f41a44f30e526eda465ea0b4eec93470e074e4a111b253f13a/s3transfer-0.19.2-py3-none-any.whl", hash = "sha256:d8168eccca828cbb2cd573675333f3bddd254313a9c42494b84c76b539e8ba25", size = 90216, upload-time = "2026-07-22T19:30:43.251Z" }, + { url = "https://files.pythonhosted.org/packages/45/39/13402e323666d17850eca87e4cd6ecfcf9fd7809cac9efdcce10272fc29d/s3transfer-0.11.5-py3-none-any.whl", hash = "sha256:757af0f2ac150d3c75bc4177a32355c3862a98d20447b69a0161812992fe0bd4", size = 84782, upload-time = "2025-04-17T19:23:17.516Z" }, ] [[package]] @@ -3544,9 +3553,7 @@ deploy = [ { name = "requests" }, ] dev = [ - { name = "isort" }, - { name = "pytest" }, - { name = "ruff" }, + { name = "pre-commit" }, ] test = [ { name = "boto3" }, @@ -3632,16 +3639,12 @@ airflow-worker = [ { name = "xstac" }, ] deploy = [ - { name = "boto3" }, - { name = "requests" }, -] -dev = [ - { name = "isort" }, - { name = "pytest" }, - { name = "ruff" }, + { name = "boto3", specifier = "==1.37.0" }, + { name = "requests", specifier = "==2.31.0" }, ] +dev = [{ name = "pre-commit", specifier = "==4.6.2" }] test = [ - { name = "boto3", specifier = ">=1.26.62" }, + { name = "boto3", specifier = ">=1.37.0" }, { name = "coverage" }, { name = "moto", specifier = ">=4.2.13" }, { name = "mypy-boto3-s3" },