diff --git a/.github/actions/ansible/Dockerfile b/.github/actions/ansible/Dockerfile deleted file mode 100644 index ad9558dbc7..0000000000 --- a/.github/actions/ansible/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM alpine:3.19.0 -LABEL app=kg-prototypes - -ENV ANSIBLE_HOST_KEY_CHECKING=False - -RUN apk add ansible python3-dev gcc openssh-client - -COPY entrypoint.sh ./entrypoint.sh - -ENTRYPOINT [ "/entrypoint.sh" ] diff --git a/.github/actions/ansible/action.yml b/.github/actions/ansible/action.yml deleted file mode 100644 index 1dc81d1b02..0000000000 --- a/.github/actions/ansible/action.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Ansible Runner -description: Runs Ansible Playbooks using Github Actions - -inputs: - workspace_dir: - description: Root directory of the Ansible workspace. - required: true - playbook_file_path: - description: Playook path relative to the workspace directory. - required: true - inventory_file_path: - description: Inventory path relative to the workspace directory - required: true - ssh_key: - description: SSH key for remote Ansible connections - required: false - vault_password: - description: Password used for Ansible vault encrypted files - required: false - options: - description: Additional options for Ansible playbook - required: false - -runs: - using: docker - image: Dockerfile - args: - - ${{ inputs.workspace_dir }} - - ${{ inputs.playbook_file_path }} - - ${{ inputs.inventory_file_path }} - - ${{ inputs.ssh_key }} - - ${{ inputs.vault_password }} - - ${{ inputs.options }} diff --git a/.github/actions/ansible/entrypoint.sh b/.github/actions/ansible/entrypoint.sh deleted file mode 100755 index f3da85a0ed..0000000000 --- a/.github/actions/ansible/entrypoint.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh - -set -e - -export WORKSPACE_DIR= -if [ ! -z "$INPUT_WORKSPACE_DIR" ] -then - WORKSPACE_DIR="${INPUT_WORKSPACE_DIR}" -else - echo "No working space directory specified." -fi - -export PLAYBOOK_FILE_PATH= -if [ ! -z "$INPUT_PLAYBOOK_FILE_PATH" ] -then - PLAYBOOK_FILE_PATH="${INPUT_PLAYBOOK_FILE_PATH}" -else - echo "No playbook specified." -fi - -export INVENTORY_FILE_PATH= -if [ ! -z "$INPUT_INVENTORY_FILE_PATH" ] -then - INVENTORY_FILE_PATH="-i ${INPUT_INVENTORY_FILE_PATH}" -else - echo "No inventory specified." -fi - -export SSH_KEY= -if [ ! -z "$INPUT_SSH_KEY" ] -then - mkdir ~/.ssh - echo "$INPUT_SSH_KEY" > ~/.ssh/ansible - chmod 0600 ~/.ssh/ansible - tilde=~ - SSH_KEY_PATH="${tilde}/.ssh/ansible" - SSH_KEY="--key-file ${SSH_KEY_PATH}" -else - echo "No SSH key specified." -fi - -export VAULT_PASSWORD= -if [ ! -z "$INPUT_VAULT_PASSWORD" ] -then - echo "$INPUT_VAULT_PASSWORD" > ~/.vault_secrets_pw - tilde=~ - VAULT_PASSWORD_PATH="${tilde}/.vault_secrets_pw" - VAULT_PASSWORD="--vault-password-file ${VAULT_PASSWORD_PATH}" -else - echo "No vault password specified." -fi - -export OPTIONS= -if [ ! -z "$INPUT_OPTIONS" ] -then - OPTIONS=$(echo "${INPUT_OPTIONS}" | tr "\n" " ") -fi - -cd ${WORKSPACE_DIR} -echo "Running command..." -echo ansible-playbook ${PLAYBOOK_FILE_PATH} ${INVENTORY_FILE_PATH} ${SSH_KEY} ${VAULT_PASSWORD} ${OPTIONS} -ansible-playbook ${PLAYBOOK_FILE_PATH} ${INVENTORY_FILE_PATH} ${SSH_KEY} ${VAULT_PASSWORD} ${OPTIONS} diff --git a/.github/actions/cloud-sql-backup/action.yml b/.github/actions/cloud-sql-backup/action.yml deleted file mode 100644 index 9199899ced..0000000000 --- a/.github/actions/cloud-sql-backup/action.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Cloud SQL backup -description: Backup a Google Cloud SQL instance - -inputs: - gcp_credentials: - description: Google Cloud Platform credentials - required: true - cloud_sql_instance_name: - description: Google Cloud SQL instance name - required: true - backup_description: - description: Backup description - required: false - default: "" - -outputs: - backup_id: - description: Google Cloud SQL backup ID - value: ${{ steps.fetch-backup-id.outputs.backup_id }} - -runs: - using: composite - steps: - - id: auth - uses: google-github-actions/auth@v0 - with: - credentials_json: "${{ inputs.gcp_credentials }}" - - - uses: google-github-actions/setup-gcloud@v0 - - - run: | - gcloud sql backups create \ - --instance="${{ inputs.cloud_sql_instance_name }}" \ - --description="${{ inputs.backup_description }}" - shell: bash - - - id: fetch-backup-id - run: | - echo ::set-output name=backup_id::$( \ - gcloud sql backups list \ - --instance="${{ inputs.cloud_sql_instance_name }}" \ - --format=json --limit 1 | jq -r ".[0].selfLink" ) - shell: bash diff --git a/.github/actions/cloud-sql-restore/action.yml b/.github/actions/cloud-sql-restore/action.yml deleted file mode 100644 index 7d78d1d270..0000000000 --- a/.github/actions/cloud-sql-restore/action.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Cloud SQL restore -description: Restore a Google Cloud SQL instance backup - -inputs: - gcp_credentials: - description: Google Cloud Platform credentials - required: true - cloud_sql_backup_id: - description: Google Cloud SQL backup ID to restore - required: true - cloud_sql_restore_instance: - description: Google Cloud SQL instance name to restore backup into - required: true - -runs: - using: composite - steps: - - id: auth - uses: google-github-actions/auth@v0 - with: - credentials_json: "${{ inputs.gcp_credentials }}" - - - uses: google-github-actions/setup-gcloud@v0 - - - run: | - gcloud sql backups restore \ - --restore-instance="${{ inputs.cloud_sql_restore_instance }}" \ - ${{ inputs.cloud_sql_backup_id }} - shell: bash diff --git a/.github/actions/docker-publish.yml b/.github/actions/docker-publish.yml deleted file mode 100644 index 580dd94672..0000000000 --- a/.github/actions/docker-publish.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: 'Docker build and publish' -description: 'Builds and publishes a Docker image into a Docker registry.' - -inputs: - registry: - description: 'Server address of the Docker registry' - default: lifelike.azurecr.io - required: false - image: - description: 'Docker image' - required: true - username: - description: 'Username to log in to a Docker registry' - default: ${{ secrets.AZURE_CR_USERNAME }} - required: false - password: - description: 'Password or PAT to log in to a Docker registry' - default: ${{ secrets.AZURE_CR_PASSWORD }} - required: false - dockerfile: - description: 'Dockerfile to use for building the image' - required: false - default: './Dockerfile' - context: - description: 'Docker build context' - required: false - default: '.' - push: - description: 'Whether to push the image to the registry' - required: false - default: 'true' - -runs: - using: 'composite' - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Docker meta - id: docker_meta - uses: crazy-max/ghaction-docker-meta@v1 - with: - images: ${{ inputs.image }} - - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to DockerHub - if: github.event_name != 'pull_request' && inputs.username != '' && inputs.password != '' - uses: docker/login-action@v1 - with: - username: ${{ inputs.username }} - password: ${{ inputs.password }} - - - name: Build and push - uses: docker/build-push-action@v2 - with: - file: ${{ inputs.dockerfile }} - context: ${{ inputs.context }} - tags: ${{ steps.docker_meta.outputs.tags }} - labels: ${{ steps.docker_meta.outputs.labels }} - push: ${{ inputs.push }} - cache-from: type=gha - cache-to: type=gha,mode=max diff --git a/.github/labeler.yml b/.github/labeler.yml index debee6d781..c19e1e9fb8 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -37,6 +37,3 @@ docker: workflow: - .github/* - .github/**/* - -infrastructure: - - deployment diff --git a/.github/workflows/backup-tests.yml b/.github/workflows/backup-tests.yml deleted file mode 100644 index 18e7b9c516..0000000000 --- a/.github/workflows/backup-tests.yml +++ /dev/null @@ -1,284 +0,0 @@ -name: Database backups tests - -on: - workflow_dispatch: - inputs: - force: - description: Force backup tests to run even for backups already tested - type: boolean - default: false - required: false - schedule: - # Run once a week on sunday at 00:00 - - cron: "0 1 * * 0" - -concurrency: - group: ${{ github.workflow }} - cancel-in-progress: false - -jobs: - get-sql-instances: - name: List Cloud SQL instances - runs-on: ubuntu-latest - outputs: - instances: ${{ steps.instances.outputs.json }} - steps: - - uses: actions/checkout@v3 - - - name: Authenticate to Google Cloud - uses: google-github-actions/auth@v0 - id: auth - with: - credentials_json: "${{ secrets.GCE_SA_KEY }}" - - - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@v0 - - - name: Get all Cloud SQL instances - id: instances - run: | - INSTANCES=$( \ - gcloud sql instances list \ - --format="value(name.list())" \ - --filter="labels.test-backups=true" \ - | jq -R -s -c 'split("\n") | map(select(.!=""))') - echo ::set-output name=json::$INSTANCES - - restore-and-test: - needs: get-sql-instances - runs-on: ubuntu-latest - continue-on-error: true - strategy: - matrix: - instance: ${{ fromJSON(needs.get-sql-instances.outputs.instances) }} - type: ["AUTOMATED", "ON_DEMAND"] - steps: - - uses: actions/checkout@v3 - - - name: Authenticate to Google Cloud - uses: google-github-actions/auth@v0 - id: auth - with: - credentials_json: "${{ secrets.GCE_SA_KEY }}" - - - name: "Set up Cloud SDK" - uses: google-github-actions/setup-gcloud@v0 - with: - install_components: beta - - - name: Get latest ${{ matrix.type }} backup ID - id: get-backup - run: | - BACKUP=$( \ - gcloud sql backups list \ - --instance="${{ matrix.instance }}" \ - --filter="status=SUCCESSFUL AND type=${{ matrix.type }}" \ - --format="value(id, startTime)" --sort-by="-startTime" \ - | head -n 1) - echo ::set-output name=id::$(echo $BACKUP | cut -d' ' -f1) - echo ::set-output name=date::$(echo $BACKUP | cut -d' ' -f2) - - - name: Retrieve previous results artifact, if any - id: download-artifact - uses: dawidd6/action-download-artifact@v2 - with: - name: backup-test-results-${{ steps.get-backup.outputs.id }} - search_artifacts: true - if_no_artifact_found: ignore - - - name: Check if backup exists and hasn't been tested before - uses: actions/github-script@v6 - with: - script: | - if (!'${{ steps.get-backup.outputs.id }}') { - core.warning('Skipping. No backup found of type ${{ matrix.type }} for Cloud SQL instance: {{ matrix.instance }}') - } else if (!core.getInput('force') && (await (await glob.create('results.txt')).glob()).length > 0) { - core.notice('Skipping. Backup ${{ steps.get-backup.outputs.id }} has already been tested.') - } else { - core.exportVariable('PROCEED', 'true') - } - - - name: Get instance details - if: ${{ env.PROCEED == 'true' }} - id: instance-details - run: | - INSTANCE=$( \ - gcloud sql instances describe \ - --format="value(databaseVersion, settings.tier, region, project)" \ - ${{ matrix.instance }}) - echo ::set-output name=version::$(echo $INSTANCE | cut -d' ' -f1) - echo ::set-output name=tier::$(echo $INSTANCE | cut -d' ' -f2) - echo ::set-output name=region::$(echo $INSTANCE | cut -d' ' -f3) - echo ::set-output name=project::$(echo $INSTANCE | cut -d' ' -f4) - - - name: Create temporary Cloud SQL instance - if: ${{ env.PROCEED == 'true' }} - id: create-temp-instance - run: | - TEMP_INSTANCE_NAME=$(echo "temp-${{ matrix.instance }}-${{ matrix.type }}-${{ github.run_id }}" | sed 's/_/-/g' | awk '{print tolower($0)}') - gcloud beta sql instances create "$TEMP_INSTANCE_NAME" \ - --database-version=${{ steps.instance-details.outputs.version }} \ - --tier=${{ steps.instance-details.outputs.tier }} \ - --region=${{ steps.instance-details.outputs.region }} \ - --labels="temp-instance=true,workflow-run=${{ github.run_id }}" - echo ::set-output name=temp_instance_name::$TEMP_INSTANCE_NAME - - - name: Restore backup into temporary instance - if: ${{ env.PROCEED == 'true' }} - run: | - gcloud sql backups restore --quiet \ - --restore-instance=${{ steps.create-temp-instance.outputs.temp_instance_name }} \ - --backup-instance=${{ matrix.instance }} \ - ${{ steps.get-backup.outputs.id }} - - - name: Reset postgres password - if: ${{ env.PROCEED == 'true' }} - run: | - gcloud sql users set-password \ - --instance=${{ steps.create-temp-instance.outputs.temp_instance_name }} \ - --password=password postgres - - - uses: mattes/gce-cloudsql-proxy-action@v1 - if: ${{ env.PROCEED == 'true' }} - with: - creds: ${{ secrets.GCE_SA_KEY }} - instance: ${{ steps.instance-details.outputs.project }}:${{ steps.instance-details.outputs.region }}:${{ steps.create-temp-instance.outputs.temp_instance_name }} - - - name: Setup PostgreSQL client - if: ${{ env.PROCEED == 'true' }} - run: | - sudo apt-get update - sudo apt-get install --yes --no-install-recommends postgresql-client - - - name: Query temporary instance - if: ${{ env.PROCEED == 'true' }} - env: - PGPASSWORD: password - PGHOST: localhost - run: | - cat < queries.sql - -- ------------------------------------------------------------ - -- Count stats - -- ------------------------------------------------------------ - WITH tbl AS - (SELECT table_schema,TABLE_NAME - FROM information_schema.tables - WHERE TABLE_NAME not like 'pg_%' - AND table_schema in ('public')) - SELECT TABLE_NAME, (xpath('/row/c/text()', query_to_xml(format('select count(*) as c from %I.%I', table_schema, TABLE_NAME), FALSE, TRUE, '')))[1]::text::int AS rows - FROM tbl - ORDER BY rows DESC; - -- ------------------------------------------------------------ - -- Alembic - -- ------------------------------------------------------------ - SELECT version_num as current_alembic_version FROM alembic_version; - -- ------------------------------------------------------------ - -- Date stats - -- ------------------------------------------------------------ - CREATE OR REPLACE FUNCTION get_min_max_modified_date() - RETURNS TABLE (table_name text, - max_modified_daye timestamp, - min_modified_daye timestamp) - LANGUAGE plpgsql - AS \$\$ - DECLARE - r record; - BEGIN - FOR r IN - SELECT i.table_name, i.table_schema - FROM information_schema.tables i - WHERE i.table_name in ( - SELECT c.table_name - FROM information_schema.columns c - WHERE c.table_schema = 'public' - AND c.column_name = 'modified_date' - GROUP BY c.table_name - ) - LOOP - execute format ( - 'SELECT min(modified_date) FROM %I.%I', - r.table_schema, r.table_name - ) INTO min_modified_daye; - execute format ( - 'SELECT max(modified_date) FROM %I.%I', - r.table_schema, r.table_name - ) INTO max_modified_daye; - table_name := r.table_name; - RETURN next; - END LOOP; - END - \$\$; - SELECT * FROM get_min_max_modified_date(); - EOF - - # Query the restored database - psql -U postgres -d postgres -f queries.sql > results.txt - - # Export results to variable - echo "RESULTS<> $GITHUB_ENV - echo $(cat results.txt) >> $GITHUB_ENV - echo "EOF" >> $GITHUB_ENV - - results=$(> $GITHUB_STEP_SUMMARY - ## Backup details - - - Cloud SQL instance name: **${{ matrix.instance }}** - - Backup date: **${{ steps.get-backup.outputs.date }}** - - Backup type: **${{ matrix.type }}** - - Backup ID: **${{ steps.get-backup.outputs.id }}** - - Workflow run ID: [**${{ github.run_id }}**](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) - - ## Results - \`\`\` - $results - \`\`\` - EOF - - - name: Upload results artifact - if: ${{ env.PROCEED == 'true' }} - uses: actions/upload-artifact@v3 - with: - name: backup-test-results-${{ steps.get-backup.outputs.id }} - path: results.txt - retention-days: 90 - - - name: Delete temporary instance - if: ${{ env.PROCEED == 'true' }} - run: | - gcloud sql instances delete --quiet \ - ${{ steps.create-temp-instance.outputs.temp_instance_name }} - - - name: Notify results by email - if: ${{ env.PROCEED == 'true' }} - uses: licenseware/send-email-notification@v1 - with: - api-key: "***REMOVED***" - # api-key: ${{ secrets.SENDGRID_API_KEY }} - from-email: no-reply@lifelike.bio - to-email: darede@biosustain.dtu.dk - # to-email: ${{ secrets.BACKUP_TEST_NOTIFY_EMAILS }} - subject: "Lifelike DB backup test passed for ${{ matrix.instance }} - ${{ matrix.type }}" - markdown-body: | - # Lifelike PostgreSQL backup test results - - ## Test result: ✅ PASSED - - ## Details - - - Cloud SQL instance name: **${{ matrix.instance }}** - - Backup date: **${{ steps.get-backup.outputs.date }}** - - Backup type: **${{ matrix.type }}** - - Backup ID: **${{ steps.get-backup.outputs.id }}** - - Workflow run ID: [**${{ github.run_id }}**](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) - - ## Database queries - - ``` - $(cat results.txt) - ``` - - --- - - See the workflow run [at GitHub](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}). diff --git a/.github/workflows/cloud-sql-backup-ondemand.yml b/.github/workflows/cloud-sql-backup-ondemand.yml deleted file mode 100644 index 890dc9461e..0000000000 --- a/.github/workflows/cloud-sql-backup-ondemand.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Backup Cloud SQL on-demand - -on: - workflow_dispatch: - inputs: - cloud_sql_instance_name: - description: Google Cloud SQL instance name - required: true - type: string - backup_description: - description: Backup description - required: false - default: On-demand backup from GitHub workflow - type: string - secrets: - GCE_SA_KEY: - required: true - -jobs: - backup: - name: Backup Cloud SQL instance - runs-on: ubuntu-latest - outputs: - backup_id: ${{ steps.backup.outputs.backup_id }} - - steps: - - uses: actions/checkout@v3 - - name: Create a new Clod SQL instance backup - id: backup - uses: ./.github/actions/cloud-sql-backup - with: - gcp_credentials: "${{ secrets.GCE_SA_KEY }}" - cloud_sql_instance_name: "${{ github.event.inputs.cloud_sql_instance_name }}" - backup_description: "${{ github.event.inputs.backup_description }}" - - run: | - echo "## Backup created: ${{ steps.backup.outputs.backup_id }}" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/deployment-az-public.yml b/.github/workflows/deployment-az-public.yml deleted file mode 100644 index 0347495991..0000000000 --- a/.github/workflows/deployment-az-public.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Azure Public Deployment - -on: - workflow_dispatch: - push: - tags: [public] - branches: [public/**] - -jobs: - call-deployment-gcp: - uses: ./.github/workflows/deployment-az.yml - with: - environment_name: public - client_config: production - cloud_sql_instance_name: lifelike-public - secrets: - VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT }} - SSH_KEY: ${{ secrets.ANSIBLE_PRIVATE_SSH_KEY }} - CONTAINER_REGISTRY_USERNAME: ${{ secrets.AZURE_CR_USERNAME }} - CONTAINER_REGISTRY_PASSWORD: ${{ secrets.AZURE_CR_PASSWORD }} - INFRA_PAT: ${{ secrets.INFRA_PAT }} diff --git a/.github/workflows/deployment-az-staging.yml b/.github/workflows/deployment-az-staging.yml deleted file mode 100644 index d7e2c2525e..0000000000 --- a/.github/workflows/deployment-az-staging.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Azure Staging Deployment - -on: - workflow_dispatch: - push: - tags: [staging-az] - branches: [staging-az/**] - -jobs: - call-deployment-az: - uses: ./.github/workflows/deployment-az.yml - with: - environment_name: staging-az - client_config: production - secrets: - VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT }} - SSH_KEY: ${{ secrets.ANSIBLE_PRIVATE_SSH_KEY }} - CONTAINER_REGISTRY_USERNAME: ${{ secrets.AZURE_CR_USERNAME }} - CONTAINER_REGISTRY_PASSWORD: ${{ secrets.AZURE_CR_PASSWORD }} - INFRA_PAT: ${{ secrets.INFRA_PAT }} diff --git a/.github/workflows/deployment-az.yml b/.github/workflows/deployment-az.yml deleted file mode 100644 index f2cb12a9bd..0000000000 --- a/.github/workflows/deployment-az.yml +++ /dev/null @@ -1,111 +0,0 @@ -name: Lifelike Azure deployment - -on: - workflow_call: - inputs: - environment_name: - description: Environment name (prod, staging, qa or demo) - required: true - type: string - client_config: - description: Client Runtime configuration preset - required: true - default: production - type: string - container_registry: - description: Container registry name - required: false - default: lifelike.azurecr.io - type: string - secrets: - CONTAINER_REGISTRY_USERNAME: - required: true - CONTAINER_REGISTRY_PASSWORD: - required: true - VAULT_PASSWORD: - required: true - SSH_KEY: - required: true - INFRA_PAT: - required: true - -jobs: - # ------------------------------------------------------------- - # JOB: Build Docker images - # ------------------------------------------------------------- - build: - name: Build - runs-on: ubuntu-latest - strategy: - matrix: - include: - - image: kg-webserver - path: ./client - build_extra_args: --build-arg ANGULAR_CONFIG=${{ inputs.client_config }} --build-arg CLIENT_VERSION=${{ github.sha }} - - image: kg-appserver - path: ./appserver - - image: kg-cache-service - path: ./cache-invalidator - - image: kg-statistical-enrichment - path: ./statistical-enrichment - - image: filebeat - path: ./filebeat - - image: metricbeat - path: ./metricbeat - - steps: - - uses: actions/checkout@v3 - - name: Build and push ${{ matrix.image }} image - uses: whoan/docker-build-with-cache-action@v5 - with: - context: ${{ matrix.path }} - image_name: ${{ matrix.image }} - image_tag: ${{ github.sha }},${{ inputs.environment_name }},latest - build_extra_args: ${{ matrix.build_extra_args }} - registry: ${{ inputs.container_registry }} - username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }} - password: ${{ secrets.CONTAINER_REGISTRY_PASSWORD }} - dockerfile: ./Dockerfile - - # ------------------------------------------------------------- - # JOB: Deploy to AZ environment using Ansible playbook - # pointed by the Git submodule: /deployment - # ------------------------------------------------------------- - deploy: - name: Deploy - needs: - - build - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - token: ${{ secrets.INFRA_PAT }} - submodules: recursive - - - name: Set git metadata - id: git-meta - run: | - echo ::set-output name=commit_timestamp::$(git log -1 --format=%cI) - echo ::set-output name=build_number::$(git rev-list --count HEAD) - echo ::set-output name=build_version::$(echo "${GITHUB_REF#refs/*/}") - - - name: Run Ansible deployment action - uses: ./.github/actions/ansible - with: - workspace_dir: deployment/ansible - playbook_file_path: playbooks/deploy-azure.yml - inventory_file_path: inventories/hosts-az.yml - vault_password: ${{ secrets.VAULT_PASSWORD }} - ssh_key: ${{ secrets.SSH_KEY }} - options: | - --extra-vars environment_name=${{ inputs.environment_name }} - --extra-vars client_config=${{ inputs.client_config }} - --extra-vars docker_img_hash=${{ github.sha }} - --extra-vars git_timestamp=${{ steps.git-meta.outputs.commit_timestamp }} - --extra-vars app_build_number=${{ steps.git-meta.outputs.build_number }} - --extra-vars app_version=${{ steps.git-meta.outputs.build_version }} - --extra-vars github_run_id=${{ github.run_id }} - --user ansible - --verbose diff --git a/.github/workflows/deployment-contabo-ucsd.yml b/.github/workflows/deployment-contabo-ucsd.yml deleted file mode 100644 index 2251acc3ee..0000000000 --- a/.github/workflows/deployment-contabo-ucsd.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Contabo UCSD Deployment - -on: - workflow_dispatch: - push: - tags: [ucsd] - branches: [ucsd/**] - -jobs: - call-deployment-gcp: - uses: ./.github/workflows/deployment-contabo.yml - with: - environment_name: ucsd - client_config: production - secrets: - VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT }} - SSH_KEY: ${{ secrets.ANSIBLE_PRIVATE_SSH_KEY }} - CONTAINER_REGISTRY_USERNAME: ${{ secrets.AZURE_CR_USERNAME }} - CONTAINER_REGISTRY_PASSWORD: ${{ secrets.AZURE_CR_PASSWORD }} - INFRA_PAT: ${{ secrets.INFRA_PAT }} diff --git a/.github/workflows/deployment-contabo.yml b/.github/workflows/deployment-contabo.yml deleted file mode 100644 index 041064b423..0000000000 --- a/.github/workflows/deployment-contabo.yml +++ /dev/null @@ -1,113 +0,0 @@ -name: Lifelike Contabo deployment - -on: - workflow_call: - inputs: - environment_name: - description: Environment name - required: true - type: string - client_config: - description: Client Runtime configuration preset - required: true - default: production - type: string - container_registry: - description: Container registry name - required: false - default: lifelike.azurecr.io - type: string - secrets: - CONTAINER_REGISTRY_USERNAME: - required: true - CONTAINER_REGISTRY_PASSWORD: - required: true - VAULT_PASSWORD: - required: true - SSH_KEY: - required: true - GCP_CREDENTIALS: - required: true - INFRA_PAT: - required: true - -jobs: - # ------------------------------------------------------------- - # JOB: Build Docker images - # ------------------------------------------------------------- - build: - name: Build - runs-on: ubuntu-latest - strategy: - matrix: - include: - - image: kg-webserver - path: ./client - build_extra_args: --build-arg ANGULAR_CONFIG=${{ inputs.client_config }} --build-arg CLIENT_VERSION=${{ github.sha }} - - image: kg-appserver - path: ./appserver - - image: kg-cache-service - path: ./cache-invalidator - - image: kg-statistical-enrichment - path: ./statistical-enrichment - - image: filebeat - path: ./filebeat - - image: metricbeat - path: ./metricbeat - - steps: - - uses: actions/checkout@v3 - - name: Build and push ${{ matrix.image }} image - uses: whoan/docker-build-with-cache-action@v5 - with: - context: ${{ matrix.path }} - image_name: ${{ matrix.image }} - image_tag: ${{ github.sha }},${{ inputs.environment_name }},latest - build_extra_args: ${{ matrix.build_extra_args }} - registry: ${{ inputs.container_registry }} - username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }} - password: ${{ secrets.CONTAINER_REGISTRY_PASSWORD }} - dockerfile: ./Dockerfile - - # ------------------------------------------------------------- - # JOB: Deploy to Contabo environment using Ansible playbook - # pointed by the Git submodule: /deployment - # ------------------------------------------------------------- - deploy: - name: Deploy - needs: - - build - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - token: ${{ secrets.INFRA_PAT }} - submodules: recursive - - - name: Set git metadata - id: git-meta - run: | - echo ::set-output name=commit_timestamp::$(git log -1 --format=%cI) - echo ::set-output name=build_number::$(git rev-list --count HEAD) - echo ::set-output name=build_version::$(echo "${GITHUB_REF#refs/*/}") - - - name: Run Ansible deployment action - uses: ./.github/actions/ansible - with: - workspace_dir: deployment/ansible - playbook_file_path: playbooks/deploy-contabo.yml - inventory_file_path: inventories/hosts-contabo.yml - vault_password: ${{ secrets.VAULT_PASSWORD }} - ssh_key: ${{ secrets.SSH_KEY }} - options: | - --extra-vars environment_name=${{ inputs.environment_name }} - --extra-vars client_config=${{ inputs.client_config }} - --extra-vars docker_img_hash=${{ github.sha }} - --extra-vars git_timestamp=${{ steps.git-meta.outputs.commit_timestamp }} - --extra-vars app_build_number=${{ steps.git-meta.outputs.build_number }} - --extra-vars app_version=${{ steps.git-meta.outputs.build_version }} - --extra-vars github_run_id=${{ github.run_id }} - --user ansible - --verbose diff --git a/.github/workflows/deployment-gcp-demo.yml b/.github/workflows/deployment-gcp-demo.yml deleted file mode 100644 index b673c5c93d..0000000000 --- a/.github/workflows/deployment-gcp-demo.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: GCP Demo Deployment - -on: - workflow_dispatch: - push: - tags: [demo] - -jobs: - call-deployment-gcp: - uses: ./.github/workflows/deployment-gcp.yml - with: - environment_name: demo - client_config: demo - cloud_sql_instance_name: kg-demo - secrets: - VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT }} - SSH_KEY: ${{ secrets.ANSIBLE_PRIVATE_SSH_KEY }} - CONTAINER_REGISTRY_USERNAME: ${{ secrets.AZURE_CR_USERNAME }} - CONTAINER_REGISTRY_PASSWORD: ${{ secrets.AZURE_CR_PASSWORD }} - GCP_CREDENTIALS: ${{ secrets.GCE_SA_KEY }} - INFRA_PAT: ${{ secrets.INFRA_PAT }} diff --git a/.github/workflows/deployment-gcp-prod.yml b/.github/workflows/deployment-gcp-prod.yml deleted file mode 100644 index 4d86fab703..0000000000 --- a/.github/workflows/deployment-gcp-prod.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: GCP Prod Deployment - -on: - workflow_dispatch: - release: - types: [released] - push: - tags: [prod] - -jobs: - call-deployment-gcp: - uses: ./.github/workflows/deployment-gcp.yml - with: - environment_name: prod - client_config: production - cloud_sql_instance_name: lifelike-prod - secrets: - VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT }} - SSH_KEY: ${{ secrets.ANSIBLE_PRIVATE_SSH_KEY }} - CONTAINER_REGISTRY_USERNAME: ${{ secrets.AZURE_CR_USERNAME }} - CONTAINER_REGISTRY_PASSWORD: ${{ secrets.AZURE_CR_PASSWORD }} - GCP_CREDENTIALS: ${{ secrets.GCE_SA_KEY }} - INFRA_PAT: ${{ secrets.INFRA_PAT }} diff --git a/.github/workflows/deployment-gcp-public.yml b/.github/workflows/deployment-gcp-public.yml deleted file mode 100644 index cfaf35aa95..0000000000 --- a/.github/workflows/deployment-gcp-public.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: GCP Public Deployment - -on: - workflow_dispatch: - push: - tags: [public] - branches: [public/**] - -jobs: - call-deployment-gcp: - uses: ./.github/workflows/deployment-gcp.yml - with: - environment_name: public - client_config: production - cloud_sql_instance_name: lifelike-public - secrets: - VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT }} - SSH_KEY: ${{ secrets.ANSIBLE_PRIVATE_SSH_KEY }} - CONTAINER_REGISTRY_USERNAME: ${{ secrets.AZURE_CR_USERNAME }} - CONTAINER_REGISTRY_PASSWORD: ${{ secrets.AZURE_CR_PASSWORD }} - GCP_CREDENTIALS: ${{ secrets.GCE_SA_KEY }} - INFRA_PAT: ${{ secrets.INFRA_PAT }} diff --git a/.github/workflows/deployment-gcp-qa.yml b/.github/workflows/deployment-gcp-qa.yml deleted file mode 100644 index af46d79f4e..0000000000 --- a/.github/workflows/deployment-gcp-qa.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: GCP QA Deployment - -on: - workflow_dispatch: - push: - branches: [master] - tags: [qa] - -jobs: - call-deployment-gcp: - uses: ./.github/workflows/deployment-gcp.yml - with: - environment_name: qa - client_config: qa - cloud_sql_instance_name: lifelike-qa - secrets: - VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT }} - SSH_KEY: ${{ secrets.ANSIBLE_PRIVATE_SSH_KEY }} - CONTAINER_REGISTRY_USERNAME: ${{ secrets.AZURE_CR_USERNAME }} - CONTAINER_REGISTRY_PASSWORD: ${{ secrets.AZURE_CR_PASSWORD }} - GCP_CREDENTIALS: ${{ secrets.GCE_SA_KEY }} - INFRA_PAT: ${{ secrets.INFRA_PAT }} diff --git a/.github/workflows/deployment-gcp-staging.yml b/.github/workflows/deployment-gcp-staging.yml deleted file mode 100644 index f90e923c57..0000000000 --- a/.github/workflows/deployment-gcp-staging.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: GCP Staging Deployment - -on: - workflow_dispatch: - push: - tags: [staging] - branches: [staging/**] - -jobs: - call-deployment-gcp: - uses: ./.github/workflows/deployment-gcp.yml - with: - environment_name: staging - client_config: staging - cloud_sql_instance_name: kg-staging - secrets: - VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT }} - SSH_KEY: ${{ secrets.ANSIBLE_PRIVATE_SSH_KEY }} - CONTAINER_REGISTRY_USERNAME: ${{ secrets.AZURE_CR_USERNAME }} - CONTAINER_REGISTRY_PASSWORD: ${{ secrets.AZURE_CR_PASSWORD }} - GCP_CREDENTIALS: ${{ secrets.GCE_SA_KEY }} - INFRA_PAT: ${{ secrets.INFRA_PAT }} diff --git a/.github/workflows/deployment-gcp.yml b/.github/workflows/deployment-gcp.yml deleted file mode 100644 index a5ab0c6ce9..0000000000 --- a/.github/workflows/deployment-gcp.yml +++ /dev/null @@ -1,159 +0,0 @@ -name: Lifelike GCP deployment - -on: - workflow_call: - inputs: - environment_name: - description: Environment nme (prod, staging, qa or demo) - required: true - type: string - client_config: - description: Client Runtime configuration preset - required: true - default: production - type: string - container_registry: - description: Container registry name - required: false - default: lifelike.azurecr.io - type: string - cloud_sql_instance_name: - description: Google Cloud SQL instance name - required: true - type: string - cloud_sql_force_backup: - description: Backup before deploying even if no migrations need to be run - required: false - default: false - type: boolean - secrets: - CONTAINER_REGISTRY_USERNAME: - required: true - CONTAINER_REGISTRY_PASSWORD: - required: true - VAULT_PASSWORD: - required: true - SSH_KEY: - required: true - GCP_CREDENTIALS: - required: true - INFRA_PAT: - required: true - -jobs: - # ------------------------------------------------------------- - # JOB: Build Docker images - # ------------------------------------------------------------- - build: - name: Build - runs-on: ubuntu-latest - strategy: - matrix: - include: - - image: kg-webserver - path: ./client - build_extra_args: --build-arg ANGULAR_CONFIG=${{ inputs.client_config }} --build-arg CLIENT_VERSION=${{ github.sha }} - - image: kg-appserver - path: ./appserver - - image: kg-cache-service - path: ./cache-invalidator - - image: kg-statistical-enrichment - path: ./statistical-enrichment - - image: filebeat - path: ./filebeat - - image: metricbeat - path: ./metricbeat - - steps: - - uses: actions/checkout@v3 - - name: Build and push ${{ matrix.image }} image - uses: whoan/docker-build-with-cache-action@v5 - with: - context: ${{ matrix.path }} - image_name: ${{ matrix.image }} - image_tag: ${{ github.sha }},${{ inputs.environment_name }},latest - build_extra_args: ${{ matrix.build_extra_args }} - registry: ${{ inputs.container_registry }} - username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }} - password: ${{ secrets.CONTAINER_REGISTRY_PASSWORD }} - dockerfile: ./Dockerfile - - # --------------------------------------------- - # JOB: Backup DB - # --------------------------------------------- - cloud-sql-backup: - name: Backup Cloud SQL instance - needs: build - outputs: - backup_id: ${{ steps.backup.outputs.backup_id }} - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Create a new Clod SQL instance backup - id: backup - uses: ./.github/actions/cloud-sql-backup - with: - gcp_credentials: "${{ secrets.GCP_CREDENTIALS }}" - cloud_sql_instance_name: "${{ inputs.cloud_sql_instance_name }}" - backup_description: "Automated backup from GitHub workflow. Run ID: ${{ github.run_id }}" - - # ------------------------------------------------------------- - # JOB: Deploy to GCP environment using Ansible playbook - # pointed by the Git submodule: /deployment - # ------------------------------------------------------------- - deploy: - name: Deploy - needs: - - build - - cloud-sql-backup - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - token: ${{ secrets.INFRA_PAT }} - submodules: recursive - - - name: Set git metadata - id: git-meta - run: | - echo ::set-output name=commit_timestamp::$(git log -1 --format=%cI) - echo ::set-output name=build_number::$(git rev-list --count HEAD) - echo ::set-output name=build_version::$(echo "${GITHUB_REF#refs/*/}") - - - name: Authenticate to GCP - id: auth - uses: google-github-actions/auth@v0 - with: - credentials_json: "${{ secrets.GCP_CREDENTIALS }}" - - uses: google-github-actions/setup-gcloud@v0 - - - name: Get Cloud SQL instance private IP address - id: database-host - run: | - echo ::set-output name=ip_address::$( \ - gcloud sql instances describe --format=json \ - ${{ inputs.cloud_sql_instance_name }} \ - | jq -r '.ipAddresses[] | select(.type == "PRIVATE").ipAddress') - - - name: Run Ansible deployment action - uses: ./.github/actions/ansible - with: - workspace_dir: deployment/ansible - playbook_file_path: playbooks/deploy-gcloud.yml - inventory_file_path: inventories/hosts.yml - vault_password: ${{ secrets.VAULT_PASSWORD }} - ssh_key: ${{ secrets.SSH_KEY }} - options: | - --extra-vars environment_name=${{ inputs.environment_name }} - --extra-vars client_config=${{ inputs.client_config }} - --extra-vars docker_img_hash=${{ github.sha }} - --extra-vars git_timestamp=${{ steps.git-meta.outputs.commit_timestamp }} - --extra-vars app_build_number=${{ steps.git-meta.outputs.build_number }} - --extra-vars app_version=${{ steps.git-meta.outputs.build_version }} - --extra-vars github_run_id=${{ github.run_id }} - --extra-vars postgres_host=${{ steps.database-host.outputs.ip_address }} - --user ansible - -vvvv diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml deleted file mode 100644 index ac173f1076..0000000000 --- a/.github/workflows/docker.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: Docker images - -on: - push: - branches: - - main - tags: - - v* - pull_request: - branches: - - main -env: - REGISTRY: ghcr.io - REPOSITORY: ${{ github.repository }} - -jobs: - publish-images: - name: Publish ${{ matrix.name }} Docker image - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - include: - - name: appserver - path: appserver - - name: frontend - path: client - # - name: elasticsearch - # path: docker - # file: docker/elasticsearch.Dockerfile - # - name: Grap data migrator - # path: graph-db - # image: lifelike-graph-db - - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Log in to the Container registry - uses: docker/login-action@v1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v3 - with: - images: ${{ env.REGISTRY }}/${{ env.REPOSITORY }}-${{ matrix.name }} - tags: | - type=ref,event=branch - type=ref,event=pr - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor - - - name: Build and push ${{ env.REGISTRY }}/${{ env.REPOSITORY }}-${{ matrix.name }} image - uses: docker/build-push-action@v2 - with: - context: ${{ matrix.path }} - file: ${{ matrix.file }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - push: true diff --git a/.github/workflows/graphdb-migrate.yml b/.github/workflows/graphdb-migrate.yml deleted file mode 100644 index de9d842f48..0000000000 --- a/.github/workflows/graphdb-migrate.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: Grpah DB Migrate - -on: - workflow_dispatch: - inputs: - neo4j_host: - description: Neo4j target host - type: string - required: true - neo4j_username: - description: Neo4j username - type: string - required: true - default: neo4j - neo4j_password: - description: Neo4j password - type: string - required: true - log_level: - description: Log level - type: choice - required: true - default: info - options: - - debug - - info - - warn - - error - release_lock: - description: Release any present lock before executing - type: boolean - required: true - default: true - datafiles_prefix: - description: Prefix of the datafiles in remote storage (stage/prod) - type: choice - required: true - default: stage - options: - - stage - - prod - chunk_size: - description: Liquibase transaction chunk size - type: string - required: true - default: '2000' - changelog: - description: Path to the changelog file - type: string - required: true - default: 'lifelike-graph/changelog-master.xml' - migrator_image_tag: - description: Tag of the graphdb-migrator image to use - type: string - required: true - default: latest - -jobs: - migrate: - name: Migrate Neo4j DB - runs-on: self-hosted - timeout-minutes: 360 - container: - image: ghcr.io/sbrg/lifelike-graphdb-migrator:${{ github.event.inputs.migrator_image_tag }} - options: --user root - env: - NEO4J_HOST: ${{ github.event.inputs.neo4j_host }} - NEO4J_USERNAME: ${{ github.event.inputs.neo4j_username }} - NEO4J_PASSWORD: ${{ github.event.inputs.neo4j_password }} - LOG_LEVEL: ${{ github.event.inputs.log_level }} - CHANGELOG_FILE: ${{ github.event.inputs.changelog }} - DATAFILES_PREFIX: ${{ github.event.inputs.datafiles_prefix }} - AZURE_ACCOUNT_STORAGE_KEY: ${{ secrets.AZURE_ACCOUNT_STORAGE_KEY }} - AZURE_ACCOUNT_STORAGE_NAME: ${{ secrets.AZURE_ACCOUNT_STORAGE_NAME }} - CHUNK_SIZE: ${{ github.event.inputs.chunk_size }} - steps: - - uses: actions/checkout@v2 - - name: Copy changelog files - run: cp -rp graph-db/changelog/* /liquibase/changelog/ - - name: Release previous lock - if: ${{ github.event.inputs.release_lock }} - run: /docker-entrypoint.sh releaseLocks - - name: Run Liquibase migrations - run: /docker-entrypoint.sh update diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index b100f06f55..05d76760b0 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -21,17 +21,6 @@ jobs: - uses: actions/checkout@v3 - - name: Build appserver image - uses: whoan/docker-build-with-cache-action@v5 - with: - username: ${{ secrets.AZURE_CR_USERNAME }} - password: ${{ secrets.AZURE_CR_PASSWORD }} - registry: lifelike.azurecr.io - image_name: kg-appserver - image_tag: ${{ github.sha }} - context: ./appserver - dockerfile: ./Dockerfile - - name: Create environment variable to pass in GitHub hash for Docker Compose run: echo "GITHUB_HASH=${{ github.sha }}" >> .env diff --git a/.github/workflows/traefik-az.yml b/.github/workflows/traefik-az.yml deleted file mode 100644 index 2eca1579eb..0000000000 --- a/.github/workflows/traefik-az.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Azure Traefik deployment - -on: - workflow_dispatch: - push: - tags: [traefik-az] - branches: [traefik-az/**] - -jobs: - call-deployment-gcp: - uses: ./.github/workflows/traefik.yml - with: - playbook_path: playbooks/proxy-azure.yml - inventory_path: inventories/hosts-az.yml - secrets: - VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT }} - SSH_KEY: ${{ secrets.ANSIBLE_PRIVATE_SSH_KEY }} - INFRA_PAT: ${{ secrets.INFRA_PAT }} diff --git a/.github/workflows/traefik.yml b/.github/workflows/traefik.yml deleted file mode 100644 index e5c6367820..0000000000 --- a/.github/workflows/traefik.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Lifelike Traefik deployment - -on: - workflow_call: - inputs: - playbook_path: - description: File path to Ansible playbook - required: true - type: string - inventory_path: - description: File path to Ansible inventory - required: true - type: string - secrets: - VAULT_PASSWORD: - required: true - SSH_KEY: - required: true - INFRA_PAT: - required: true - -jobs: - deploy: - name: Deploy - needs: - - build - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - token: ${{ secrets.INFRA_PAT }} - submodules: recursive - - - name: Run Ansible deployment action - uses: ./.github/actions/ansible - with: - workspace_dir: deployment/ansible - playbook_file_path: ${{ inputs.playbook_path }} - inventory_file_path: ${{ inputs.inventory_path }} - vault_password: ${{ secrets.VAULT_PASSWORD }} - ssh_key: ${{ secrets.SSH_KEY }} - options: | - --user ansible - --verbose diff --git a/.gitignore b/.gitignore index 62a9d48bb5..1147a0ce50 100755 --- a/.gitignore +++ b/.gitignore @@ -88,4 +88,4 @@ arangodb/data/* arangodb/apps/* # Arango seed data -arangodb/bin/seed_data \ No newline at end of file +arangodb/bin/seed_data diff --git a/.gitmodules b/.gitmodules index 98bab4898e..e69de29bb2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,13 +0,0 @@ -[submodule "lifelike-oss"] - path = lifelike-oss - url = https://github.com/SBRG/lifelike -[submodule "keycloak"] - path = keycloak - url = https://github.com/SBRG/lifelike-keycloak -[submodule "website"] - path = website - url = https://github.com/SBRG/lifelike-website -[submodule "deployment"] - path = deployment - url = git@github.com:SBRG/lifelike-infra.git - branch = ansible diff --git a/README.md b/README.md index f5abb35137..29cbaf7fff 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ Lifelike is a distributed system comprised of the following components: ### Backing services - **PostgreSQL** as a RDBMS. -- **Neo4j** as a graph database. +- **ArangoDB** as a graph database. - **Elasticsearch** as a full-text search engine. - **Redis** as a key-value cache store. - **PDFParser** as a document parsing library. diff --git a/appserver/Dockerfile b/appserver/Dockerfile index 66b2431483..7b1380edd7 100644 --- a/appserver/Dockerfile +++ b/appserver/Dockerfile @@ -1,7 +1,7 @@ # ======================================== # Base image # ======================================== -FROM python:3.10-slim as base +FROM python:3.9-slim as base ENV LANG C.UTF-8 ENV LC_ALL C.UTF-8 @@ -82,12 +82,12 @@ ENV POSTGRES_USER=postgres ENV POSTGRES_PASSWORD=postgres ENV POSTGRES_DB=postgres -# Neo4j configuration -ENV NEO4J_HOST=neo4j -ENV NEO4J_PORT=7687 -ENV NEO4J_AUTH=neo4j/password -ENV NEO4J_DATABASE=neo4j -ENV NEO4J_SCHEME=bolt +# ArangoDB configuration +ENV ARANGODB_HOST=arangodb +ENV ARANGODB_PORT=7687 +ENV ARANGODB_AUTH=arangodb/password +ENV ARANGODB_DATABASE=arangodb +ENV ARANGODB_SCHEME=bolt # Elasticsearch configuration ENV ELASTICSEARCH_URL=http://elasticsearch:9200 @@ -129,5 +129,5 @@ EXPOSE $PORT HEALTHCHECK --start-period=30s \ CMD curl -f localhost:$PORT/meta || exit 1 -RUN chmod +x bin/docker-entrypoint.sh -ENTRYPOINT ["bin/docker-entrypoint.sh"] +RUN chmod +x bin/startup.sh +ENTRYPOINT ["bin/startup.sh"] diff --git a/appserver/Pipfile b/appserver/Pipfile index b1286c1a99..6b16e584b0 100644 --- a/appserver/Pipfile +++ b/appserver/Pipfile @@ -53,7 +53,6 @@ paramiko = "==2.7.2" google-cloud-storage = "==1.36.1" fastjsonschema = "==2.15.0" marshmallow-dataclass = "==8.3.1" -marshmallow-enum = "==1.5.1" deepdiff = "==5.2.3" timeflake = "==0.3.3" scipy = "==1.6.1" @@ -61,7 +60,6 @@ statsmodels = "==0.12.2" sqlalchemy = "==1.3.23" azure-storage-file = "==2.1.0" azure-storage-blob = "==12.8.0" -neo4j = "==4.2.1" python-magic = "==0.4.22" httpretty = "==1.0.5" sendgrid = "==6.7.0" @@ -79,6 +77,7 @@ openai = "*" types-cachetools = "*" mypy = "==0.981" pyyaml = "==6.0.1" +marshmallow-enum = "*" [requires] python_version = "3.9" diff --git a/appserver/Pipfile.lock b/appserver/Pipfile.lock index 7647f4ee56..0280160e85 100644 --- a/appserver/Pipfile.lock +++ b/appserver/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "e8e18968eada4f4eba2a7ea35293b9f680b6e0a10413292556849adaa5ea1a61" + "sha256": "723e0fba23007871efc048ff1ab5a6333defdd4688df64ab94c5cca1c6e8bb34" }, "pipfile-spec": 6, "requires": { @@ -16,138 +16,45 @@ ] }, "default": { - "aiohttp": { - "hashes": [ - "sha256:03543dcf98a6619254b409be2d22b51f21ec66272be4ebda7b04e6412e4b2e14", - "sha256:03baa76b730e4e15a45f81dfe29a8d910314143414e528737f8589ec60cf7391", - "sha256:0a63f03189a6fa7c900226e3ef5ba4d3bd047e18f445e69adbd65af433add5a2", - "sha256:10c8cefcff98fd9168cdd86c4da8b84baaa90bf2da2269c6161984e6737bf23e", - "sha256:147ae376f14b55f4f3c2b118b95be50a369b89b38a971e80a17c3fd623f280c9", - "sha256:176a64b24c0935869d5bbc4c96e82f89f643bcdf08ec947701b9dbb3c956b7dd", - "sha256:17b79c2963db82086229012cff93ea55196ed31f6493bb1ccd2c62f1724324e4", - "sha256:1a45865451439eb320784918617ba54b7a377e3501fb70402ab84d38c2cd891b", - "sha256:1b3ea7edd2d24538959c1c1abf97c744d879d4e541d38305f9bd7d9b10c9ec41", - "sha256:22f6eab15b6db242499a16de87939a342f5a950ad0abaf1532038e2ce7d31567", - "sha256:3032dcb1c35bc330134a5b8a5d4f68c1a87252dfc6e1262c65a7e30e62298275", - "sha256:33587f26dcee66efb2fff3c177547bd0449ab7edf1b73a7f5dea1e38609a0c54", - "sha256:34ce9f93a4a68d1272d26030655dd1b58ff727b3ed2a33d80ec433561b03d67a", - "sha256:3a80464982d41b1fbfe3154e440ba4904b71c1a53e9cd584098cd41efdb188ef", - "sha256:3b90467ebc3d9fa5b0f9b6489dfb2c304a1db7b9946fa92aa76a831b9d587e99", - "sha256:3d89efa095ca7d442a6d0cbc755f9e08190ba40069b235c9886a8763b03785da", - "sha256:3d8ef1a630519a26d6760bc695842579cb09e373c5f227a21b67dc3eb16cfea4", - "sha256:3f43255086fe25e36fd5ed8f2ee47477408a73ef00e804cb2b5cba4bf2ac7f5e", - "sha256:40653609b3bf50611356e6b6554e3a331f6879fa7116f3959b20e3528783e699", - "sha256:41a86a69bb63bb2fc3dc9ad5ea9f10f1c9c8e282b471931be0268ddd09430b04", - "sha256:493f5bc2f8307286b7799c6d899d388bbaa7dfa6c4caf4f97ef7521b9cb13719", - "sha256:4a6cadebe132e90cefa77e45f2d2f1a4b2ce5c6b1bfc1656c1ddafcfe4ba8131", - "sha256:4c745b109057e7e5f1848c689ee4fb3a016c8d4d92da52b312f8a509f83aa05e", - "sha256:4d347a172f866cd1d93126d9b239fcbe682acb39b48ee0873c73c933dd23bd0f", - "sha256:4dac314662f4e2aa5009977b652d9b8db7121b46c38f2073bfeed9f4049732cd", - "sha256:4ddaae3f3d32fc2cb4c53fab020b69a05c8ab1f02e0e59665c6f7a0d3a5be54f", - "sha256:5393fb786a9e23e4799fec788e7e735de18052f83682ce2dfcabaf1c00c2c08e", - "sha256:59f029a5f6e2d679296db7bee982bb3d20c088e52a2977e3175faf31d6fb75d1", - "sha256:5a7bdf9e57126dc345b683c3632e8ba317c31d2a41acd5800c10640387d193ed", - "sha256:5b3f2e06a512e94722886c0827bee9807c86a9f698fac6b3aee841fab49bbfb4", - "sha256:5ce45967538fb747370308d3145aa68a074bdecb4f3a300869590f725ced69c1", - "sha256:5e14f25765a578a0a634d5f0cd1e2c3f53964553a00347998dfdf96b8137f777", - "sha256:618c901dd3aad4ace71dfa0f5e82e88b46ef57e3239fc7027773cb6d4ed53531", - "sha256:652b1bff4f15f6287550b4670546a2947f2a4575b6c6dff7760eafb22eacbf0b", - "sha256:6c08e8ed6fa3d477e501ec9db169bfac8140e830aa372d77e4a43084d8dd91ab", - "sha256:6ddb2a2026c3f6a68c3998a6c47ab6795e4127315d2e35a09997da21865757f8", - "sha256:6e601588f2b502c93c30cd5a45bfc665faaf37bbe835b7cfd461753068232074", - "sha256:6e74dd54f7239fcffe07913ff8b964e28b712f09846e20de78676ce2a3dc0bfc", - "sha256:7235604476a76ef249bd64cb8274ed24ccf6995c4a8b51a237005ee7a57e8643", - "sha256:7ab43061a0c81198d88f39aaf90dae9a7744620978f7ef3e3708339b8ed2ef01", - "sha256:7c7837fe8037e96b6dd5cfcf47263c1620a9d332a87ec06a6ca4564e56bd0f36", - "sha256:80575ba9377c5171407a06d0196b2310b679dc752d02a1fcaa2bc20b235dbf24", - "sha256:80a37fe8f7c1e6ce8f2d9c411676e4bc633a8462844e38f46156d07a7d401654", - "sha256:8189c56eb0ddbb95bfadb8f60ea1b22fcfa659396ea36f6adcc521213cd7b44d", - "sha256:854f422ac44af92bfe172d8e73229c270dc09b96535e8a548f99c84f82dde241", - "sha256:880e15bb6dad90549b43f796b391cfffd7af373f4646784795e20d92606b7a51", - "sha256:8b631e26df63e52f7cce0cce6507b7a7f1bc9b0c501fcde69742130b32e8782f", - "sha256:8c29c77cc57e40f84acef9bfb904373a4e89a4e8b74e71aa8075c021ec9078c2", - "sha256:91f6d540163f90bbaef9387e65f18f73ffd7c79f5225ac3d3f61df7b0d01ad15", - "sha256:92c0cea74a2a81c4c76b62ea1cac163ecb20fb3ba3a75c909b9fa71b4ad493cf", - "sha256:9bcb89336efa095ea21b30f9e686763f2be4478f1b0a616969551982c4ee4c3b", - "sha256:a1f4689c9a1462f3df0a1f7e797791cd6b124ddbee2b570d34e7f38ade0e2c71", - "sha256:a3fec6a4cb5551721cdd70473eb009d90935b4063acc5f40905d40ecfea23e05", - "sha256:a5d794d1ae64e7753e405ba58e08fcfa73e3fad93ef9b7e31112ef3c9a0efb52", - "sha256:a86d42d7cba1cec432d47ab13b6637bee393a10f664c425ea7b305d1301ca1a3", - "sha256:adfbc22e87365a6e564c804c58fc44ff7727deea782d175c33602737b7feadb6", - "sha256:aeb29c84bb53a84b1a81c6c09d24cf33bb8432cc5c39979021cc0f98c1292a1a", - "sha256:aede4df4eeb926c8fa70de46c340a1bc2c6079e1c40ccf7b0eae1313ffd33519", - "sha256:b744c33b6f14ca26b7544e8d8aadff6b765a80ad6164fb1a430bbadd593dfb1a", - "sha256:b7a00a9ed8d6e725b55ef98b1b35c88013245f35f68b1b12c5cd4100dddac333", - "sha256:bb96fa6b56bb536c42d6a4a87dfca570ff8e52de2d63cabebfd6fb67049c34b6", - "sha256:bbcf1a76cf6f6dacf2c7f4d2ebd411438c275faa1dc0c68e46eb84eebd05dd7d", - "sha256:bca5f24726e2919de94f047739d0a4fc01372801a3672708260546aa2601bf57", - "sha256:bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c", - "sha256:c4eb3b82ca349cf6fadcdc7abcc8b3a50ab74a62e9113ab7a8ebc268aad35bb9", - "sha256:c6cc15d58053c76eacac5fa9152d7d84b8d67b3fde92709195cb984cfb3475ea", - "sha256:c6cd05ea06daca6ad6a4ca3ba7fe7dc5b5de063ff4daec6170ec0f9979f6c332", - "sha256:c844fd628851c0bc309f3c801b3a3d58ce430b2ce5b359cd918a5a76d0b20cb5", - "sha256:c9cb1565a7ad52e096a6988e2ee0397f72fe056dadf75d17fa6b5aebaea05622", - "sha256:cab9401de3ea52b4b4c6971db5fb5c999bd4260898af972bf23de1c6b5dd9d71", - "sha256:cd468460eefef601ece4428d3cf4562459157c0f6523db89365202c31b6daebb", - "sha256:d1e6a862b76f34395a985b3cd39a0d949ca80a70b6ebdea37d3ab39ceea6698a", - "sha256:d1f9282c5f2b5e241034a009779e7b2a1aa045f667ff521e7948ea9b56e0c5ff", - "sha256:d265f09a75a79a788237d7f9054f929ced2e69eb0bb79de3798c468d8a90f945", - "sha256:db3fc6120bce9f446d13b1b834ea5b15341ca9ff3f335e4a951a6ead31105480", - "sha256:dbf3a08a06b3f433013c143ebd72c15cac33d2914b8ea4bea7ac2c23578815d6", - "sha256:de04b491d0e5007ee1b63a309956eaed959a49f5bb4e84b26c8f5d49de140fa9", - "sha256:e4b09863aae0dc965c3ef36500d891a3ff495a2ea9ae9171e4519963c12ceefd", - "sha256:e595432ac259af2d4630008bf638873d69346372d38255774c0e286951e8b79f", - "sha256:e75b89ac3bd27d2d043b234aa7b734c38ba1b0e43f07787130a0ecac1e12228a", - "sha256:ea9eb976ffdd79d0e893869cfe179a8f60f152d42cb64622fca418cd9b18dc2a", - "sha256:eafb3e874816ebe2a92f5e155f17260034c8c341dad1df25672fb710627c6949", - "sha256:ee3c36df21b5714d49fc4580247947aa64bcbe2939d1b77b4c8dcb8f6c9faecc", - "sha256:f352b62b45dff37b55ddd7b9c0c8672c4dd2eb9c0f9c11d395075a84e2c40f75", - "sha256:fabb87dd8850ef0f7fe2b366d44b77d7e6fa2ea87861ab3844da99291e81e60f", - "sha256:fe11310ae1e4cd560035598c3f29d86cef39a83d244c7466f95c27ae04850f10", - "sha256:fe7ba4a51f33ab275515f66b0a236bcde4fb5561498fe8f898d4e549b2e4509f" + "alembic": { + "hashes": [ + "sha256:2edcc97bed0bd3272611ce3a98d98279e9c209e7186e43e75bbb1b2bdfdbcc43", + "sha256:4932c8558bf68f2ee92b9bbcb8218671c627064d5b08939437af6d77dc05e595" ], - "markers": "python_version >= '3.6'", - "version": "==3.8.4" + "markers": "python_version >= '3.8'", + "version": "==1.13.1" }, - "aiosignal": { + "annotated-types": { "hashes": [ - "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc", - "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17" + "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43", + "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d" ], - "markers": "python_version >= '3.7'", - "version": "==1.3.1" + "markers": "python_version >= '3.8'", + "version": "==0.6.0" }, - "alembic": { + "anyio": { "hashes": [ - "sha256:6880dec4f28dd7bd999d2ed13fbe7c9d4337700a44d11a524c0ce0c59aaf0dbd", - "sha256:e8a6ff9f3b1887e1fed68bfb8fb9a000d8f61c21bdcc85b67bb9f87fcbc4fce3" + "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8", + "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6" ], - "markers": "python_version >= '3.7'", - "version": "==1.9.2" + "markers": "python_version >= '3.8'", + "version": "==4.3.0" }, "apispec": { "hashes": [ - "sha256:d97f0ae9c65133185b9ed9c5be1a434eb85627dfa33c4c53cabda122256c1b67", - "sha256:e76d80b739edef4be213092a6384ad7fd933ba7d64f6d5a0aff8d4da1bef7887" + "sha256:b5b22f5dba6cc69bd90e1075de20ae3d27b310a6250c66b0271aa50615eee72d", + "sha256:c0846f8eaa5119c46b2ecfe9bc24ed19dba8845f8655d00b51ddd296a10ea4cb" ], - "markers": "python_version >= '3.7'", - "version": "==6.0.2" + "markers": "python_version >= '3.8'", + "version": "==6.6.0" }, "appnope": { "hashes": [ - "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", - "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" + "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", + "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c" ], "markers": "sys_platform == 'darwin'", - "version": "==0.1.3" - }, - "async-timeout": { - "hashes": [ - "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15", - "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c" - ], - "markers": "python_version >= '3.6'", - "version": "==4.0.2" + "version": "==0.1.4" }, "attrs": { "hashes": [ @@ -155,6 +62,7 @@ "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==20.3.0" }, "azure-common": { @@ -166,11 +74,11 @@ }, "azure-core": { "hashes": [ - "sha256:986bfd8687889782d79481d4c5d0af04ab4a18ca2f210364804a88e4eaa1586a", - "sha256:df306e6e4abc145610ca6744aef943129a6fd7a11977e56731f69ac0e00724f9" + "sha256:26273a254131f84269e8ea4464f3560c731f29c0c1f69ac99010845f239c1a8f", + "sha256:7c5ee397e48f281ec4dd773d67a0a47a0962ed6fa833036057f9ea067f688e74" ], "markers": "python_version >= '3.7'", - "version": "==1.26.2" + "version": "==1.30.1" }, "azure-storage-blob": { "hashes": [ @@ -225,30 +133,31 @@ "sha256:ff032765bb8716d9387fd5376d987a937254b0619eff0972779515b5c98820bc" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==3.1.7" }, "beautifulsoup4": { "hashes": [ - "sha256:0e79446b10b3ecb499c1556f7e228a53e64a2bfcebd455f370d8927cb5b59e39", - "sha256:bc4bdda6717de5a2987436fb8d72f45dc90dd856bdfd512a1314ce90349a0106" + "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051", + "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed" ], "markers": "python_full_version >= '3.6.0'", - "version": "==4.11.2" + "version": "==4.12.3" }, "bioc": { "hashes": [ - "sha256:278a4f6956b08c1297bfeae05958f5482a569104dd1a50c6abede17dfcfdbe10", - "sha256:a63dcc76a791b7db58d273422791e9909d0524ddd26e332be5467d7fa2e81a0a" + "sha256:278a4f6956b08c1297bfeae05958f5482a569104dd1a50c6abede17dfcfdbe10" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==1.3.7" }, "blinker": { "hashes": [ - "sha256:1eb563df6fdbc39eeddc177d953203f99f097e9bf0e2b8f9f3cf18b6ca425e36", - "sha256:923e5e2f69c155f2cc42dafbbd70e16e3fde24d2d4aa2ab72fbe386238892462" + "sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9", + "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182" ], - "version": "==1.5" + "version": "==1.7.0" }, "cachetools": { "hashes": [ @@ -260,80 +169,69 @@ }, "certifi": { "hashes": [ - "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", - "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", + "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" ], "markers": "python_version >= '3.6'", - "version": "==2022.12.7" + "version": "==2024.2.2" }, "cffi": { "hashes": [ - "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", - "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", - "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", - "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", - "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", - "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", - "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", - "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", - "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", - "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", - "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", - "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", - "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", - "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", - "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", - "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", - "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", - "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", - "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", - "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", - "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", - "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", - "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", - "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", - "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", - "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", - "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", - "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", - "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", - "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", - "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", - "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", - "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", - "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", - "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", - "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", - "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", - "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", - "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", - "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", - "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", - "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", - "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", - "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", - "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", - "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", - "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", - "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", - "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", - "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", - "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", - "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", - "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", - "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", - "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", - "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", - "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", - "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", - "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", - "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", - "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", - "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", - "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", - "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" - ], - "version": "==1.15.1" + "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc", + "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a", + "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417", + "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab", + "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520", + "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36", + "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743", + "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8", + "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed", + "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684", + "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56", + "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324", + "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d", + "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235", + "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e", + "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088", + "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000", + "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7", + "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e", + "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673", + "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c", + "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe", + "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2", + "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098", + "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8", + "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a", + "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0", + "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b", + "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896", + "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e", + "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9", + "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2", + "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b", + "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6", + "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404", + "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f", + "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0", + "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4", + "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc", + "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936", + "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba", + "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872", + "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb", + "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614", + "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1", + "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d", + "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969", + "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b", + "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4", + "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627", + "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956", + "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357" + ], + "markers": "python_version >= '3.8'", + "version": "==1.16.0" }, "chardet": { "hashes": [ @@ -343,123 +241,51 @@ "markers": "python_version >= '3.1'", "version": "==4.0.0" }, - "charset-normalizer": { - "hashes": [ - "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", - "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", - "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", - "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", - "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", - "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", - "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", - "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", - "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", - "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", - "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", - "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", - "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", - "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", - "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", - "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", - "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", - "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", - "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", - "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", - "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", - "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", - "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", - "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", - "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", - "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", - "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", - "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", - "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", - "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", - "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", - "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", - "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", - "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", - "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", - "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", - "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", - "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", - "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", - "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", - "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", - "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", - "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", - "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", - "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", - "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", - "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", - "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", - "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", - "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", - "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", - "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", - "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", - "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", - "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", - "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", - "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", - "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", - "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", - "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", - "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", - "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", - "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", - "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", - "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", - "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", - "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", - "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", - "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", - "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", - "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", - "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", - "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", - "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", - "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.1.0" - }, "click": { "hashes": [ - "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", - "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" ], "markers": "python_version >= '3.7'", - "version": "==8.1.3" + "version": "==8.1.7" }, "cryptography": { "hashes": [ - "sha256:1a6915075c6d3a5e1215eab5d99bcec0da26036ff2102a1038401d6ef5bef25b", - "sha256:1ee1fd0de9851ff32dbbb9362a4d833b579b4a6cc96883e8e6d2ff2a6bc7104f", - "sha256:407cec680e811b4fc829de966f88a7c62a596faa250fc1a4b520a0355b9bc190", - "sha256:50386acb40fbabbceeb2986332f0287f50f29ccf1497bae31cf5c3e7b4f4b34f", - "sha256:6f97109336df5c178ee7c9c711b264c502b905c2d2a29ace99ed761533a3460f", - "sha256:754978da4d0457e7ca176f58c57b1f9de6556591c19b25b8bcce3c77d314f5eb", - "sha256:76c24dd4fd196a80f9f2f5405a778a8ca132f16b10af113474005635fe7e066c", - "sha256:7dacfdeee048814563eaaec7c4743c8aea529fe3dd53127313a792f0dadc1773", - "sha256:80ee674c08aaef194bc4627b7f2956e5ba7ef29c3cc3ca488cf15854838a8f72", - "sha256:844ad4d7c3850081dffba91cdd91950038ee4ac525c575509a42d3fc806b83c8", - "sha256:875aea1039d78557c7c6b4db2fe0e9d2413439f4676310a5f269dd342ca7a717", - "sha256:887cbc1ea60786e534b00ba8b04d1095f4272d380ebd5f7a7eb4cc274710fad9", - "sha256:ad04f413436b0781f20c52a661660f1e23bcd89a0e9bb1d6d20822d048cf2856", - "sha256:bae6c7f4a36a25291b619ad064a30a07110a805d08dc89984f4f441f6c1f3f96", - "sha256:c52a1a6f81e738d07f43dab57831c29e57d21c81a942f4602fac7ee21b27f288", - "sha256:e0a05aee6a82d944f9b4edd6a001178787d1546ec7c6223ee9a848a7ade92e39", - "sha256:e324de6972b151f99dc078defe8fb1b0a82c6498e37bff335f5bc6b1e3ab5a1e", - "sha256:e5d71c5d5bd5b5c3eebcf7c5c2bb332d62ec68921a8c593bea8c394911a005ce", - "sha256:f3ed2d864a2fa1666e749fe52fb8e23d8e06b8012e8bd8147c73797c506e86f1", - "sha256:f671c1bb0d6088e94d61d80c606d65baacc0d374e67bf895148883461cd848de", - "sha256:f6c0db08d81ead9576c4d94bbb27aed8d7a430fa27890f39084c2d0e2ec6b0df", - "sha256:f964c7dcf7802d133e8dbd1565914fa0194f9d683d82411989889ecd701e8adf", - "sha256:fec8b932f51ae245121c4671b4bbc030880f363354b2f0e0bd1366017d891458" + "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee", + "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576", + "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d", + "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30", + "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413", + "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb", + "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da", + "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4", + "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd", + "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc", + "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8", + "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1", + "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc", + "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e", + "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8", + "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940", + "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400", + "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7", + "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16", + "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278", + "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74", + "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec", + "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1", + "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2", + "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c", + "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922", + "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a", + "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6", + "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1", + "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e", + "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac", + "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7" ], - "markers": "python_version >= '3.6'", - "version": "==39.0.0" + "markers": "python_version >= '3.7'", + "version": "==42.0.5" }, "decorator": { "hashes": [ @@ -475,34 +301,43 @@ "sha256:ae2cb98353309f93fbfdda4d77adb08fb303314d836bb6eac3d02ed71a10b40e" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==5.2.3" }, + "distro": { + "hashes": [ + "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", + "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2" + ], + "markers": "python_version >= '3.6'", + "version": "==1.9.0" + }, "docutils": { "hashes": [ - "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6", - "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc" + "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6", + "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b" ], "markers": "python_version >= '3.7'", - "version": "==0.19" + "version": "==0.20.1" }, "ecs-logging": { "hashes": [ - "sha256:34567bda91534a480f12117c30e1aac78489cc9a0ace172014d80f3d1e29c85b", - "sha256:543ed7b634901aee465fddf70f52b6fdbd35e825e7cbcae2e664d7dfdff2f859" + "sha256:02581a56b7fc6cbae2de121a4a398ba3bd73d7bb2d67cd029a8a03df0b144098", + "sha256:222cc158d4331157d128bc903629010f7724eab8ba4b642efbffd0cb482f4cde" ], "markers": "python_version >= '3.6'", - "version": "==2.0.2" + "version": "==2.1.0" }, "elastic-apm": { "extras": [ "flask" ], "hashes": [ - "sha256:815ee9838f6db2db3ee83a31b8ff36ff291aac03c6ed24534280ced45a9cb3dc", - "sha256:d672e51ef2dffa1a08d814e6b47d8d17144256d887dbc1734b2b9ce298f1208b" + "sha256:1861183c5ba3b46df66e111ba27877dbe8aaa8842777c1f0627c7fb1b65ed249", + "sha256:7a5e430658196c9ebcf4530e780268b0dfe2ba2c25041549ee54d9fb8650c418" ], - "index": "pypi", - "version": "==6.13.2" + "markers": "python_version >= '3.6' and python_version < '4'", + "version": "==6.21.4.post8347027212" }, "elasticsearch": { "hashes": [ @@ -510,6 +345,7 @@ "sha256:f4bb05cfe55cf369bdcb4d86d0129d39d66a91fd9517b13cd4e4231fbfcf5c81" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4'", "version": "==7.6.0" }, "et-xmlfile": { @@ -520,6 +356,14 @@ "markers": "python_version >= '3.6'", "version": "==1.1.0" }, + "exceptiongroup": { + "hashes": [ + "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14", + "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68" + ], + "markers": "python_version < '3.11'", + "version": "==1.2.0" + }, "fastjsonschema": { "hashes": [ "sha256:b3da206676f8b4906debf6a17b650b858c92cb304cbe0c8aa81799bde6a6b858", @@ -530,11 +374,11 @@ }, "filelock": { "hashes": [ - "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de", - "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d" + "sha256:5ffa845303983e7a0b7ae17636509bc97997d58afeafa72fb141a17b152284cb", + "sha256:a79895a25bbefdf55d1a2a0a80968f7dbb28edcd6d4234a0afb3f37ecde4b546" ], - "markers": "python_version >= '3.7'", - "version": "==3.9.0" + "markers": "python_version >= '3.8'", + "version": "==3.13.3" }, "flask": { "hashes": [ @@ -542,6 +386,7 @@ "sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.1.2" }, "flask-apispec": { @@ -586,9 +431,7 @@ }, "flask-migrate": { "hashes": [ - "sha256:4dc4a5cce8cbbb06b8dc963fd86cf8136bd7d875aabe2d840302ea739b243732", "sha256:8626af845e6071ef80c70b0dc16d373f761c981f0ad61bb143a529cab649e725", - "sha256:a69d508c2e09d289f6e55a417b3b8c7bfe70e640f53d2d9deb0d056a384f37ee", "sha256:c1601dfd46b9204233935e5d73473cd7fa959db7a4b0e894c7aa7a9e8aeebf0e" ], "index": "pypi", @@ -600,88 +443,9 @@ "sha256:bfc7150eaf809b1c283879302f04c42791136060c6eeb12c0c6674fb1291fae5" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.4.4" }, - "frozenlist": { - "hashes": [ - "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c", - "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f", - "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a", - "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784", - "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27", - "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d", - "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3", - "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678", - "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a", - "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483", - "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8", - "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf", - "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99", - "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c", - "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48", - "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5", - "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56", - "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e", - "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1", - "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401", - "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4", - "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e", - "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649", - "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a", - "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d", - "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0", - "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6", - "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d", - "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b", - "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6", - "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf", - "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef", - "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7", - "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842", - "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba", - "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420", - "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b", - "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d", - "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332", - "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936", - "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816", - "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91", - "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420", - "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448", - "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411", - "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4", - "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32", - "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b", - "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0", - "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530", - "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669", - "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7", - "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1", - "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5", - "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce", - "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4", - "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e", - "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2", - "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d", - "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9", - "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642", - "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0", - "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703", - "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb", - "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1", - "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13", - "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab", - "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38", - "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb", - "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb", - "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81", - "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8", - "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd", - "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4" - ], - "markers": "python_version >= '3.7'", - "version": "==1.3.3" - }, "gdown": { "hashes": [ "sha256:5ce3db0aeda54f46caacb2df86f31c3e3ecd17c355689e6456d85fb528ba9749", @@ -720,6 +484,7 @@ "sha256:e3227abe57122370df02f00b8a6d78da6d41a0df4e6864b7f65a3a4ae673a8a7" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==1.36.1" }, "google-crc32c": { @@ -806,11 +571,11 @@ }, "googleapis-common-protos": { "hashes": [ - "sha256:c727251ec025947d545184ba17e3578840fc3a24a0516a020479edab660457df", - "sha256:ca3befcd4580dab6ad49356b46bf165bb68ff4b32389f028f1abd7c10ab9519a" + "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e", + "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632" ], "markers": "python_version >= '3.7'", - "version": "==1.58.0" + "version": "==1.63.0" }, "graphviz": { "hashes": [ @@ -818,6 +583,7 @@ "sha256:60acbeee346e8c14555821eab57dbf68a169e6c10bce40e83c1bf44f63a62a01" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==0.13.2" }, "gunicorn": { @@ -826,15 +592,41 @@ "sha256:cd4a810dd51bf497552cf3f863b575dabd73d6ad6a91075b65936b151cbf4f9c" ], "index": "pypi", + "markers": "python_version >= '3.4'", "version": "==20.0.4" }, + "h11": { + "hashes": [ + "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", + "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" + ], + "markers": "python_version >= '3.7'", + "version": "==0.14.0" + }, + "httpcore": { + "hashes": [ + "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61", + "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5" + ], + "markers": "python_version >= '3.8'", + "version": "==1.0.5" + }, "httpretty": { "hashes": [ "sha256:e53c927c4d3d781a0761727f1edfad64abef94e828718e12b672a678a8b3e0b5" ], "index": "pypi", + "markers": "python_version >= '3'", "version": "==1.0.5" }, + "httpx": { + "hashes": [ + "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5", + "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5" + ], + "markers": "python_version >= '3.8'", + "version": "==0.27.0" + }, "idna": { "hashes": [ "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", @@ -863,6 +655,7 @@ "sha256:cbb2ef3d5961d44e6a963b9817d4ea4e1fa2eb589c371a470fed14d8d40cbd6a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==7.19.0" }, "isodate": { @@ -878,15 +671,16 @@ "sha256:9e724d68fc22902a1435351f84c3fb8623f303fffcc566a4cb952df8c572cff0" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==2.0.1" }, "jedi": { "hashes": [ - "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e", - "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612" + "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", + "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0" ], "markers": "python_version >= '3.6'", - "version": "==0.18.2" + "version": "==0.19.1" }, "jinja2": { "hashes": [ @@ -894,15 +688,16 @@ "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.0.3" }, "jsonlines": { "hashes": [ - "sha256:2579cb488d96f815b0eb81629e3e6b0332da0962a18fa3532958f7ba14a5c37f", - "sha256:632f5e38f93dfcb1ac8c4e09780b92af3a55f38f26e7c47ae85109d420b6ad39" + "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", + "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55" ], - "markers": "python_version >= '3.6'", - "version": "==3.1.0" + "markers": "python_version >= '3.8'", + "version": "==4.0.0" }, "lmdb": { "hashes": [ @@ -934,158 +729,245 @@ }, "lxml": { "hashes": [ - "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7", - "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726", - "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03", - "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140", - "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a", - "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05", - "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03", - "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419", - "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4", - "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e", - "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67", - "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50", - "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894", - "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf", - "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947", - "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1", - "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd", - "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3", - "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92", - "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3", - "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457", - "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74", - "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf", - "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1", - "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4", - "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975", - "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5", - "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe", - "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7", - "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1", - "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2", - "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409", - "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f", - "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f", - "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5", - "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24", - "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e", - "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4", - "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a", - "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c", - "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de", - "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f", - "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b", - "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5", - "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7", - "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a", - "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c", - "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9", - "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e", - "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab", - "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941", - "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5", - "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45", - "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7", - "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892", - "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746", - "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c", - "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53", - "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe", - "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184", - "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38", - "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df", - "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9", - "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b", - "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2", - "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0", - "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda", - "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b", - "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5", - "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380", - "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33", - "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8", - "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1", - "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889", - "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9", - "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f", - "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c" + "sha256:04ab5415bf6c86e0518d57240a96c4d1fcfc3cb370bb2ac2a732b67f579e5a04", + "sha256:057cdc6b86ab732cf361f8b4d8af87cf195a1f6dc5b0ff3de2dced242c2015e0", + "sha256:058a1308914f20784c9f4674036527e7c04f7be6fb60f5d61353545aa7fcb739", + "sha256:08802f0c56ed150cc6885ae0788a321b73505d2263ee56dad84d200cab11c07a", + "sha256:0a15438253b34e6362b2dc41475e7f80de76320f335e70c5528b7148cac253a1", + "sha256:0c3f67e2aeda739d1cc0b1102c9a9129f7dc83901226cc24dd72ba275ced4218", + "sha256:0e7259016bc4345a31af861fdce942b77c99049d6c2107ca07dc2bba2435c1d9", + "sha256:0ed777c1e8c99b63037b91f9d73a6aad20fd035d77ac84afcc205225f8f41188", + "sha256:0f5d65c39f16717a47c36c756af0fb36144069c4718824b7533f803ecdf91138", + "sha256:0f8c09ed18ecb4ebf23e02b8e7a22a05d6411911e6fabef3a36e4f371f4f2585", + "sha256:11a04306fcba10cd9637e669fd73aa274c1c09ca64af79c041aa820ea992b637", + "sha256:1ae67b4e737cddc96c99461d2f75d218bdf7a0c3d3ad5604d1f5e7464a2f9ffe", + "sha256:1c5bb205e9212d0ebddf946bc07e73fa245c864a5f90f341d11ce7b0b854475d", + "sha256:1f7785f4f789fdb522729ae465adcaa099e2a3441519df750ebdccc481d961a1", + "sha256:200e63525948e325d6a13a76ba2911f927ad399ef64f57898cf7c74e69b71095", + "sha256:21c2e6b09565ba5b45ae161b438e033a86ad1736b8c838c766146eff8ceffff9", + "sha256:2213afee476546a7f37c7a9b4ad4d74b1e112a6fafffc9185d6d21f043128c81", + "sha256:27aa20d45c2e0b8cd05da6d4759649170e8dfc4f4e5ef33a34d06f2d79075d57", + "sha256:2a66bf12fbd4666dd023b6f51223aed3d9f3b40fef06ce404cb75bafd3d89536", + "sha256:2c9d147f754b1b0e723e6afb7ba1566ecb162fe4ea657f53d2139bbf894d050a", + "sha256:2ddfe41ddc81f29a4c44c8ce239eda5ade4e7fc305fb7311759dd6229a080052", + "sha256:31e9a882013c2f6bd2f2c974241bf4ba68c85eba943648ce88936d23209a2e01", + "sha256:3249cc2989d9090eeac5467e50e9ec2d40704fea9ab72f36b034ea34ee65ca98", + "sha256:3545039fa4779be2df51d6395e91a810f57122290864918b172d5dc7ca5bb433", + "sha256:394ed3924d7a01b5bd9a0d9d946136e1c2f7b3dc337196d99e61740ed4bc6fe1", + "sha256:3a6b45da02336895da82b9d472cd274b22dc27a5cea1d4b793874eead23dd14f", + "sha256:3a74c4f27167cb95c1d4af1c0b59e88b7f3e0182138db2501c353555f7ec57f4", + "sha256:3d0c3dd24bb4605439bf91068598d00c6370684f8de4a67c2992683f6c309d6b", + "sha256:3dbe858ee582cbb2c6294dc85f55b5f19c918c2597855e950f34b660f1a5ede6", + "sha256:3dc773b2861b37b41a6136e0b72a1a44689a9c4c101e0cddb6b854016acc0aa8", + "sha256:3e183c6e3298a2ed5af9d7a356ea823bccaab4ec2349dc9ed83999fd289d14d5", + "sha256:3f7765e69bbce0906a7c74d5fe46d2c7a7596147318dbc08e4a2431f3060e306", + "sha256:417d14450f06d51f363e41cace6488519038f940676ce9664b34ebf5653433a5", + "sha256:44f6c7caff88d988db017b9b0e4ab04934f11e3e72d478031efc7edcac6c622f", + "sha256:491755202eb21a5e350dae00c6d9a17247769c64dcf62d8c788b5c135e179dc4", + "sha256:4951e4f7a5680a2db62f7f4ab2f84617674d36d2d76a729b9a8be4b59b3659be", + "sha256:52421b41ac99e9d91934e4d0d0fe7da9f02bfa7536bb4431b4c05c906c8c6919", + "sha256:530e7c04f72002d2f334d5257c8a51bf409db0316feee7c87e4385043be136af", + "sha256:533658f8fbf056b70e434dff7e7aa611bcacb33e01f75de7f821810e48d1bb66", + "sha256:5670fb70a828663cc37552a2a85bf2ac38475572b0e9b91283dc09efb52c41d1", + "sha256:56c22432809085b3f3ae04e6e7bdd36883d7258fcd90e53ba7b2e463efc7a6af", + "sha256:58278b29cb89f3e43ff3e0c756abbd1518f3ee6adad9e35b51fb101c1c1daaec", + "sha256:588008b8497667f1ddca7c99f2f85ce8511f8f7871b4a06ceede68ab62dff64b", + "sha256:59565f10607c244bc4c05c0c5fa0c190c990996e0c719d05deec7030c2aa8289", + "sha256:59689a75ba8d7ffca577aefd017d08d659d86ad4585ccc73e43edbfc7476781a", + "sha256:5aea8212fb823e006b995c4dda533edcf98a893d941f173f6c9506126188860d", + "sha256:5c670c0406bdc845b474b680b9a5456c561c65cf366f8db5a60154088c92d102", + "sha256:5ca1e8188b26a819387b29c3895c47a5e618708fe6f787f3b1a471de2c4a94d9", + "sha256:5d077bc40a1fe984e1a9931e801e42959a1e6598edc8a3223b061d30fbd26bbc", + "sha256:5d5792e9b3fb8d16a19f46aa8208987cfeafe082363ee2745ea8b643d9cc5b45", + "sha256:5dd1537e7cc06efd81371f5d1a992bd5ab156b2b4f88834ca852de4a8ea523fa", + "sha256:5ea7b6766ac2dfe4bcac8b8595107665a18ef01f8c8343f00710b85096d1b53a", + "sha256:622020d4521e22fb371e15f580d153134bfb68d6a429d1342a25f051ec72df1c", + "sha256:627402ad8dea044dde2eccde4370560a2b750ef894c9578e1d4f8ffd54000461", + "sha256:644df54d729ef810dcd0f7732e50e5ad1bd0a135278ed8d6bcb06f33b6b6f708", + "sha256:64641a6068a16201366476731301441ce93457eb8452056f570133a6ceb15fca", + "sha256:64c2baa7774bc22dd4474248ba16fe1a7f611c13ac6123408694d4cc93d66dbd", + "sha256:6588c459c5627fefa30139be4d2e28a2c2a1d0d1c265aad2ba1935a7863a4913", + "sha256:66bc5eb8a323ed9894f8fa0ee6cb3e3fb2403d99aee635078fd19a8bc7a5a5da", + "sha256:68a2610dbe138fa8c5826b3f6d98a7cfc29707b850ddcc3e21910a6fe51f6ca0", + "sha256:6935bbf153f9a965f1e07c2649c0849d29832487c52bb4a5c5066031d8b44fd5", + "sha256:6992030d43b916407c9aa52e9673612ff39a575523c5f4cf72cdef75365709a5", + "sha256:6a014510830df1475176466b6087fc0c08b47a36714823e58d8b8d7709132a96", + "sha256:6ab833e4735a7e5533711a6ea2df26459b96f9eec36d23f74cafe03631647c41", + "sha256:6cc6ee342fb7fa2471bd9b6d6fdfc78925a697bf5c2bcd0a302e98b0d35bfad3", + "sha256:6cf58416653c5901e12624e4013708b6e11142956e7f35e7a83f1ab02f3fe456", + "sha256:70a9768e1b9d79edca17890175ba915654ee1725975d69ab64813dd785a2bd5c", + "sha256:70ac664a48aa64e5e635ae5566f5227f2ab7f66a3990d67566d9907edcbbf867", + "sha256:71e97313406ccf55d32cc98a533ee05c61e15d11b99215b237346171c179c0b0", + "sha256:7221d49259aa1e5a8f00d3d28b1e0b76031655ca74bb287123ef56c3db92f213", + "sha256:74b28c6334cca4dd704e8004cba1955af0b778cf449142e581e404bd211fb619", + "sha256:764b521b75701f60683500d8621841bec41a65eb739b8466000c6fdbc256c240", + "sha256:78bfa756eab503673991bdcf464917ef7845a964903d3302c5f68417ecdc948c", + "sha256:794f04eec78f1d0e35d9e0c36cbbb22e42d370dda1609fb03bcd7aeb458c6377", + "sha256:79bd05260359170f78b181b59ce871673ed01ba048deef4bf49a36ab3e72e80b", + "sha256:7a7efd5b6d3e30d81ec68ab8a88252d7c7c6f13aaa875009fe3097eb4e30b84c", + "sha256:7c17b64b0a6ef4e5affae6a3724010a7a66bda48a62cfe0674dabd46642e8b54", + "sha256:804f74efe22b6a227306dd890eecc4f8c59ff25ca35f1f14e7482bbce96ef10b", + "sha256:853e074d4931dbcba7480d4dcab23d5c56bd9607f92825ab80ee2bd916edea53", + "sha256:857500f88b17a6479202ff5fe5f580fc3404922cd02ab3716197adf1ef628029", + "sha256:865bad62df277c04beed9478fe665b9ef63eb28fe026d5dedcb89b537d2e2ea6", + "sha256:88e22fc0a6684337d25c994381ed8a1580a6f5ebebd5ad41f89f663ff4ec2885", + "sha256:8b9c07e7a45bb64e21df4b6aa623cb8ba214dfb47d2027d90eac197329bb5e94", + "sha256:8de8f9d6caa7f25b204fc861718815d41cbcf27ee8f028c89c882a0cf4ae4134", + "sha256:8e77c69d5892cb5ba71703c4057091e31ccf534bd7f129307a4d084d90d014b8", + "sha256:9123716666e25b7b71c4e1789ec829ed18663152008b58544d95b008ed9e21e9", + "sha256:958244ad566c3ffc385f47dddde4145088a0ab893504b54b52c041987a8c1863", + "sha256:96323338e6c14e958d775700ec8a88346014a85e5de73ac7967db0367582049b", + "sha256:9676bfc686fa6a3fa10cd4ae6b76cae8be26eb5ec6811d2a325636c460da1806", + "sha256:9b0ff53900566bc6325ecde9181d89afadc59c5ffa39bddf084aaedfe3b06a11", + "sha256:9b9ec9c9978b708d488bec36b9e4c94d88fd12ccac3e62134a9d17ddba910ea9", + "sha256:9c6ad0fbf105f6bcc9300c00010a2ffa44ea6f555df1a2ad95c88f5656104817", + "sha256:9ca66b8e90daca431b7ca1408cae085d025326570e57749695d6a01454790e95", + "sha256:9e2addd2d1866fe112bc6f80117bcc6bc25191c5ed1bfbcf9f1386a884252ae8", + "sha256:a0af35bd8ebf84888373630f73f24e86bf016642fb8576fba49d3d6b560b7cbc", + "sha256:a2b44bec7adf3e9305ce6cbfa47a4395667e744097faed97abb4728748ba7d47", + "sha256:a2dfe7e2473f9b59496247aad6e23b405ddf2e12ef0765677b0081c02d6c2c0b", + "sha256:a55ee573116ba208932e2d1a037cc4b10d2c1cb264ced2184d00b18ce585b2c0", + "sha256:a7baf9ffc238e4bf401299f50e971a45bfcc10a785522541a6e3179c83eabf0a", + "sha256:a8d5c70e04aac1eda5c829a26d1f75c6e5286c74743133d9f742cda8e53b9c2f", + "sha256:a91481dbcddf1736c98a80b122afa0f7296eeb80b72344d7f45dc9f781551f56", + "sha256:ab31a88a651039a07a3ae327d68ebdd8bc589b16938c09ef3f32a4b809dc96ef", + "sha256:abc25c3cab9ec7fcd299b9bcb3b8d4a1231877e425c650fa1c7576c5107ab851", + "sha256:adfb84ca6b87e06bc6b146dc7da7623395db1e31621c4785ad0658c5028b37d7", + "sha256:afbbdb120d1e78d2ba8064a68058001b871154cc57787031b645c9142b937a62", + "sha256:afd5562927cdef7c4f5550374acbc117fd4ecc05b5007bdfa57cc5355864e0a4", + "sha256:b070bbe8d3f0f6147689bed981d19bbb33070225373338df755a46893528104a", + "sha256:b0b58fbfa1bf7367dde8a557994e3b1637294be6cf2169810375caf8571a085c", + "sha256:b560e3aa4b1d49e0e6c847d72665384db35b2f5d45f8e6a5c0072e0283430533", + "sha256:b6787b643356111dfd4032b5bffe26d2f8331556ecb79e15dacb9275da02866e", + "sha256:bcbf4af004f98793a95355980764b3d80d47117678118a44a80b721c9913436a", + "sha256:beb72935a941965c52990f3a32d7f07ce869fe21c6af8b34bf6a277b33a345d3", + "sha256:bf2e2458345d9bffb0d9ec16557d8858c9c88d2d11fed53998512504cd9df49b", + "sha256:c2d35a1d047efd68027817b32ab1586c1169e60ca02c65d428ae815b593e65d4", + "sha256:c38d7b9a690b090de999835f0443d8aa93ce5f2064035dfc48f27f02b4afc3d0", + "sha256:c6f2c8372b98208ce609c9e1d707f6918cc118fea4e2c754c9f0812c04ca116d", + "sha256:c817d420c60a5183953c783b0547d9eb43b7b344a2c46f69513d5952a78cddf3", + "sha256:c8ba129e6d3b0136a0f50345b2cb3db53f6bda5dd8c7f5d83fbccba97fb5dcb5", + "sha256:c94e75445b00319c1fad60f3c98b09cd63fe1134a8a953dcd48989ef42318534", + "sha256:cc4691d60512798304acb9207987e7b2b7c44627ea88b9d77489bbe3e6cc3bd4", + "sha256:cc518cea79fd1e2f6c90baafa28906d4309d24f3a63e801d855e7424c5b34144", + "sha256:cd53553ddad4a9c2f1f022756ae64abe16da1feb497edf4d9f87f99ec7cf86bd", + "sha256:cf22b41fdae514ee2f1691b6c3cdeae666d8b7fa9434de445f12bbeee0cf48dd", + "sha256:d38c8f50ecf57f0463399569aa388b232cf1a2ffb8f0a9a5412d0db57e054860", + "sha256:d3be9b2076112e51b323bdf6d5a7f8a798de55fb8d95fcb64bd179460cdc0704", + "sha256:d4f2cc7060dc3646632d7f15fe68e2fa98f58e35dd5666cd525f3b35d3fed7f8", + "sha256:d7520db34088c96cc0e0a3ad51a4fd5b401f279ee112aa2b7f8f976d8582606d", + "sha256:d793bebb202a6000390a5390078e945bbb49855c29c7e4d56a85901326c3b5d9", + "sha256:da052e7962ea2d5e5ef5bc0355d55007407087392cf465b7ad84ce5f3e25fe0f", + "sha256:dae0ed02f6b075426accbf6b2863c3d0a7eacc1b41fb40f2251d931e50188dad", + "sha256:ddc678fb4c7e30cf830a2b5a8d869538bc55b28d6c68544d09c7d0d8f17694dc", + "sha256:df2e6f546c4df14bc81f9498bbc007fbb87669f1bb707c6138878c46b06f6510", + "sha256:e02c5175f63effbd7c5e590399c118d5db6183bbfe8e0d118bdb5c2d1b48d937", + "sha256:e196a4ff48310ba62e53a8e0f97ca2bca83cdd2fe2934d8b5cb0df0a841b193a", + "sha256:e233db59c8f76630c512ab4a4daf5a5986da5c3d5b44b8e9fc742f2a24dbd460", + "sha256:e32be23d538753a8adb6c85bd539f5fd3b15cb987404327c569dfc5fd8366e85", + "sha256:e3d30321949861404323c50aebeb1943461a67cd51d4200ab02babc58bd06a86", + "sha256:e89580a581bf478d8dcb97d9cd011d567768e8bc4095f8557b21c4d4c5fea7d0", + "sha256:e998e304036198b4f6914e6a1e2b6f925208a20e2042563d9734881150c6c246", + "sha256:ec42088248c596dbd61d4ae8a5b004f97a4d91a9fd286f632e42e60b706718d7", + "sha256:efa7b51824aa0ee957ccd5a741c73e6851de55f40d807f08069eb4c5a26b2baa", + "sha256:f0a1bc63a465b6d72569a9bba9f2ef0334c4e03958e043da1920299100bc7c08", + "sha256:f18a5a84e16886898e51ab4b1d43acb3083c39b14c8caeb3589aabff0ee0b270", + "sha256:f2a9efc53d5b714b8df2b4b3e992accf8ce5bbdfe544d74d5c6766c9e1146a3a", + "sha256:f3bbbc998d42f8e561f347e798b85513ba4da324c2b3f9b7969e9c45b10f6169", + "sha256:f42038016852ae51b4088b2862126535cc4fc85802bfe30dea3500fdfaf1864e", + "sha256:f443cdef978430887ed55112b491f670bba6462cea7a7742ff8f14b7abb98d75", + "sha256:f51969bac61441fd31f028d7b3b45962f3ecebf691a510495e5d2cd8c8092dbd", + "sha256:f8aca2e3a72f37bfc7b14ba96d4056244001ddcc18382bd0daa087fd2e68a354", + "sha256:f9737bf36262046213a28e789cc82d82c6ef19c85a0cf05e75c670a33342ac2c", + "sha256:fd6037392f2d57793ab98d9e26798f44b8b4da2f2464388588f48ac52c489ea1", + "sha256:feaa45c0eae424d3e90d78823f3828e7dc42a42f21ed420db98da2c4ecf0a2cb", + "sha256:ff097ae562e637409b429a7ac958a20aab237a0378c42dabaa1e3abf2f896e5f", + "sha256:ff46d772d5f6f73564979cd77a4fffe55c916a05f3cb70e7c9c0590059fb29ef" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==4.9.2" + "markers": "python_version >= '3.6'", + "version": "==5.2.1" }, "mako": { "hashes": [ - "sha256:c97c79c018b9165ac9922ae4f32da095ffd3c4e6872b45eded42926deea46818", - "sha256:d60a3903dc3bb01a18ad6a89cdbe2e4eadc69c0bc8ef1e3773ba53d44c3f7a34" + "sha256:2a0c8ad7f6274271b3bb7467dd37cf9cc6dab4bc19cb69a4ef10669402de698e", + "sha256:32a99d70754dfce237019d17ffe4a282d2d3351b9c476e90d8a60e63f133b80c" ], - "markers": "python_version >= '3.7'", - "version": "==1.2.4" + "markers": "python_version >= '3.8'", + "version": "==1.3.2" }, "markupsafe": { "hashes": [ - "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", - "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", - "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", - "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", - "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", - "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", - "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", - "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", - "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", - "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", - "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", - "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", - "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", - "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", - "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", - "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", - "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", - "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", - "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", - "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", - "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", - "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", - "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", - "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", - "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", - "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", - "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", - "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", - "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", - "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", - "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", - "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", - "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", - "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", - "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", - "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", - "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", - "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", - "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", - "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", - "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", - "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", - "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", - "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", - "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", - "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", - "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", - "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", - "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", - "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" + "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", + "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", + "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", + "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", + "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532", + "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", + "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", + "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df", + "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4", + "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", + "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", + "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", + "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", + "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371", + "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2", + "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", + "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52", + "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", + "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", + "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", + "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", + "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0", + "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029", + "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", + "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a", + "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", + "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", + "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", + "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", + "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9", + "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", + "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", + "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3", + "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", + "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46", + "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", + "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a", + "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", + "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", + "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", + "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", + "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", + "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", + "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", + "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", + "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f", + "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50", + "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", + "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", + "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", + "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff", + "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", + "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", + "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", + "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf", + "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", + "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", + "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab", + "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", + "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" ], "markers": "python_version >= '3.7'", - "version": "==2.1.2" + "version": "==2.1.5" }, "marshmallow": { "hashes": [ - "sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78", - "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b" + "sha256:4e65e9e0d80fc9e609574b9983cf32579f305c718afb30d7233ab818571768c3", + "sha256:f085493f79efb0644f270a9bf2892843142d80d7174bbbd2f3713f2a589dc633" ], - "markers": "python_version >= '3'", - "version": "==3.19.0" + "markers": "python_version >= '3.8'", + "version": "==3.21.1" }, "marshmallow-dataclass": { "hashes": [ @@ -1093,6 +975,7 @@ "sha256:835e6aef758f9b107ab9623d37e0ebbd6e586fb8f4172281a47dd90a69ceda38" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==8.3.1" }, "marshmallow-enum": { @@ -1109,6 +992,7 @@ "sha256:dde9e20bcb710e9e59f765a38e3d6d17f1b2d6b4320cbdc2cea0f6b57f70d08c" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==0.22.3" }, "memory-profiler": { @@ -1116,6 +1000,7 @@ "sha256:01385ac0fec944fcf7969814ec4406c6d8a9c66c079d09276723c5a7680f44e5" ], "index": "pypi", + "markers": "python_version >= '3.4'", "version": "==0.58.0" }, "msrest": { @@ -1126,86 +1011,6 @@ "markers": "python_version >= '3.6'", "version": "==0.7.1" }, - "multidict": { - "hashes": [ - "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9", - "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8", - "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03", - "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710", - "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161", - "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664", - "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569", - "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067", - "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313", - "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706", - "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2", - "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636", - "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49", - "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93", - "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603", - "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0", - "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60", - "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4", - "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e", - "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1", - "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60", - "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951", - "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc", - "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe", - "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95", - "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d", - "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8", - "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed", - "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2", - "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775", - "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87", - "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c", - "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2", - "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98", - "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3", - "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe", - "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78", - "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660", - "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176", - "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e", - "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988", - "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c", - "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c", - "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0", - "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449", - "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f", - "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde", - "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5", - "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d", - "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac", - "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a", - "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9", - "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca", - "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11", - "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35", - "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063", - "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b", - "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982", - "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258", - "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1", - "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52", - "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480", - "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7", - "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461", - "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d", - "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc", - "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779", - "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a", - "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547", - "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0", - "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171", - "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf", - "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d", - "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba" - ], - "markers": "python_version >= '3.7'", - "version": "==6.0.4" - }, "mypy": { "hashes": [ "sha256:06e1eac8d99bd404ed8dd34ca29673c4346e76dd8e612ea507763dccd7e13c7a", @@ -1234,55 +1039,58 @@ "sha256:fa38f82f53e1e7beb45557ff167c177802ba7b387ad017eab1663d567017c8ee" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==0.981" }, "mypy-extensions": { "hashes": [ - "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", - "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" - ], - "version": "==0.4.3" - }, - "neo4j": { - "hashes": [ - "sha256:b6c49fbd60426e268ed4afbd414766444fe70aee1ac0376a0c871d75526b8251" + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" ], - "index": "pypi", - "version": "==4.2.1" + "markers": "python_version >= '3.5'", + "version": "==1.0.0" }, "numpy": { "hashes": [ - "sha256:0044f7d944ee882400890f9ae955220d29b33d809a038923d88e4e01d652acd9", - "sha256:0e3463e6ac25313462e04aea3fb8a0a30fb906d5d300f58b3bc2c23da6a15398", - "sha256:179a7ef0889ab769cc03573b6217f54c8bd8e16cef80aad369e1e8185f994cd7", - "sha256:2386da9a471cc00a1f47845e27d916d5ec5346ae9696e01a8a34760858fe9dd2", - "sha256:26089487086f2648944f17adaa1a97ca6aee57f513ba5f1c0b7ebdabbe2b9954", - "sha256:28bc9750ae1f75264ee0f10561709b1462d450a4808cd97c013046073ae64ab6", - "sha256:28e418681372520c992805bb723e29d69d6b7aa411065f48216d8329d02ba032", - "sha256:442feb5e5bada8408e8fcd43f3360b78683ff12a4444670a7d9e9824c1817d36", - "sha256:6ec0c021cd9fe732e5bab6401adea5a409214ca5592cd92a114f7067febcba0c", - "sha256:7094891dcf79ccc6bc2a1f30428fa5edb1e6fb955411ffff3401fb4ea93780a8", - "sha256:84e789a085aabef2f36c0515f45e459f02f570c4b4c4c108ac1179c34d475ed7", - "sha256:87a118968fba001b248aac90e502c0b13606721b1343cdaddbc6e552e8dfb56f", - "sha256:8e669fbdcdd1e945691079c2cae335f3e3a56554e06bbd45d7609a6cf568c700", - "sha256:ad2925567f43643f51255220424c23d204024ed428afc5aad0f86f3ffc080086", - "sha256:b0677a52f5d896e84414761531947c7a330d1adc07c3a4372262f25d84af7bf7", - "sha256:b07b40f5fb4fa034120a5796288f24c1fe0e0580bbfff99897ba6267af42def2", - "sha256:b09804ff570b907da323b3d762e74432fb07955701b17b08ff1b5ebaa8cfe6a9", - "sha256:b162ac10ca38850510caf8ea33f89edcb7b0bb0dfa5592d59909419986b72407", - "sha256:b31da69ed0c18be8b77bfce48d234e55d040793cebb25398e2a7d84199fbc7e2", - "sha256:caf65a396c0d1f9809596be2e444e3bd4190d86d5c1ce21f5fc4be60a3bc5b36", - "sha256:cfa1161c6ac8f92dea03d625c2d0c05e084668f4a06568b77a25a89111621566", - "sha256:dae46bed2cb79a58d6496ff6d8da1e3b95ba09afeca2e277628171ca99b99db1", - "sha256:ddc7ab52b322eb1e40521eb422c4e0a20716c271a306860979d450decbb51b8e", - "sha256:de92efa737875329b052982e37bd4371d52cabf469f83e7b8be9bb7752d67e51", - "sha256:e274f0f6c7efd0d577744f52032fdd24344f11c5ae668fe8d01aac0422611df1", - "sha256:ed5fb71d79e771ec930566fae9c02626b939e37271ec285e9efaf1b5d4370e7d", - "sha256:ef85cf1f693c88c1fd229ccd1055570cb41cdf4875873b7728b6301f12cd05bf", - "sha256:f1b739841821968798947d3afcefd386fa56da0caf97722a5de53e07c4ccedc7" - ], - "markers": "python_version < '3.10'", - "version": "==1.24.1" + "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", + "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", + "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", + "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", + "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", + "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", + "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea", + "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c", + "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", + "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", + "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be", + "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", + "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", + "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", + "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", + "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd", + "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c", + "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", + "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0", + "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c", + "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", + "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", + "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", + "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6", + "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", + "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", + "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30", + "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", + "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", + "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", + "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", + "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", + "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764", + "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", + "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3", + "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f" + ], + "markers": "python_version >= '3.9'", + "version": "==1.26.4" }, "oauthlib": { "hashes": [ @@ -1294,11 +1102,12 @@ }, "openai": { "hashes": [ - "sha256:2483095c7db1eee274cebac79e315a986c4e55207bb4fa7b82d185b3a2ed9536", - "sha256:e0a7c2f7da26bdbe5354b03c6d4b82a2f34bd4458c7a17ae1a7092c3e397e03c" + "sha256:58922c785d167458b46e3c76e7b1bc2306f313ee9b71791e84cbf590abe160f2", + "sha256:77ef3db6110071f7154859e234250fb945a36554207a30a4491092eadb73fcb5" ], "index": "pypi", - "version": "==0.27.8" + "markers": "python_full_version >= '3.7.1'", + "version": "==1.16.1" }, "openpyxl": { "hashes": [ @@ -1306,6 +1115,7 @@ "sha256:6456a3b472e1ef0facb1129f3c6ef00713cebf62e736cd7a75bcc3247432f251" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.0.7" }, "ordered-set": { @@ -1317,59 +1127,44 @@ }, "packaging": { "hashes": [ - "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", - "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" + "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", + "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" ], "markers": "python_version >= '3.7'", - "version": "==23.0" + "version": "==24.0" }, "pandas": { "hashes": [ - "sha256:02f1e8f71cd994ed7fcb9a35b6ddddeb4314822a0e09a9c5b2d278f8cb5d4096", - "sha256:13f75fb18486759da3ff40f5345d9dd20e7d78f2a39c5884d013456cec9876f0", "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813", "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792", - "sha256:35b670b0abcfed7cad76f2834041dcf7ae47fd9b22b63622d67cdc933d79f453", "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406", "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373", "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328", - "sha256:4c73f373b0800eb3062ffd13d4a7a2a6d522792fa6eb204d67a4fad0a40f03dc", "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996", "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf", - "sha256:5759edf0b686b6f25a5d4a447ea588983a33afc8a0081a0954184a4a87fd0dd7", - "sha256:5a7cf6044467c1356b2b49ef69e50bf4d231e773c3ca0558807cdba56b76820b", "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6", "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7", "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc", - "sha256:69c5d920a0b2a9838e677f78f4dde506b95ea8e4d30da25859db6469ded84fa8", "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1", "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23", "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a", - "sha256:8778a5cc5a8437a561e3276b85367412e10ae9fff07db1eed986e427d9a674f8", "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51", "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572", "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31", - "sha256:9871ef5ee17f388f1cb35f76dc6106d40cb8165c562d573470672f4cdefa59ef", - "sha256:9c31d52f1a7dd2bb4681d9f62646c7aa554f19e8e9addc17e8b1b20011d7522d", "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5", "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a", - "sha256:ab8173a8efe5418bbe50e43f321994ac6673afc5c7c4839014cf6401bbdd0705", - "sha256:ae961f1f0e270f1e4e2273f6a539b2ea33248e0e3a11ffb479d757918a5e03a9", - "sha256:b3c4f93fcb6e97d993bf87cdd917883b7dab7d20c627699f360a8fb49e9e0b91", "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003", "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d", "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354", "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee", "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa", - "sha256:c9410ce8a3dee77653bc0684cfa1535a7f9c291663bd7ad79e39f5ab58f67ab3", "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0", "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9", "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae", - "sha256:f69e0f7b7c09f1f612b1f8f59e2df72faa8a6b41c5a436dde5b615aaf948f107", - "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc", - "sha256:faa42a78d1350b02a7d2f0dbe3c80791cf785663d6997891549d0f86dc49125e" + "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==1.5.3" }, "paramiko": { @@ -1390,10 +1185,10 @@ }, "patsy": { "hashes": [ - "sha256:7eb5349754ed6aa982af81f636479b1b8db9d5b1a6e957a6016ec0534b5c86b7", - "sha256:bdc18001875e319bc91c812c1eb6a10be4bb13cb81eb763f466179dca3b67277" + "sha256:19056886fd8fa71863fa32f0eb090267f21fb74be00f19f5c70b2e9d76c883c6", + "sha256:95c6d47a7222535f84bff7f63d7303f2e297747a598db89cf5c67f0c0c7d2cdb" ], - "version": "==0.5.3" + "version": "==0.5.6" }, "pdfminer-six": { "hashes": [ @@ -1401,15 +1196,16 @@ "sha256:f5ab6aae4999c1460aa569c716cde75c1585e3f4f2e3fcaf6c950696937d1741" ], "index": "pypi", + "markers": "python_version >= '3.4'", "version": "==20200402" }, "pexpect": { "hashes": [ - "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", - "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" + "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", + "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f" ], "markers": "sys_platform != 'win32'", - "version": "==4.8.0" + "version": "==4.9.0" }, "pickleshare": { "hashes": [ @@ -1461,55 +1257,55 @@ "sha256:ff04c373477723430dce2e9d024c708a047d44cf17166bf16e604b379bf0ca14" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==8.3.1" }, "prompt-toolkit": { "hashes": [ - "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63", - "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305" + "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d", + "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6" ], - "markers": "python_full_version >= '3.6.2'", - "version": "==3.0.36" + "markers": "python_full_version >= '3.7.0'", + "version": "==3.0.43" }, "protobuf": { "hashes": [ - "sha256:1f22ac0ca65bb70a876060d96d914dae09ac98d114294f77584b0d2644fa9c30", - "sha256:237216c3326d46808a9f7c26fd1bd4b20015fb6867dc5d263a493ef9a539293b", - "sha256:27f4d15021da6d2b706ddc3860fac0a5ddaba34ab679dc182b60a8bb4e1121cc", - "sha256:299ea899484ee6f44604deb71f424234f654606b983cb496ea2a53e3c63ab791", - "sha256:3d164928ff0727d97022957c2b849250ca0e64777ee31efd7d6de2e07c494717", - "sha256:6ab80df09e3208f742c98443b6166bcb70d65f52cfeb67357d52032ea1ae9bec", - "sha256:78a28c9fa223998472886c77042e9b9afb6fe4242bd2a2a5aced88e3f4422aa7", - "sha256:7cd532c4566d0e6feafecc1059d04c7915aec8e182d1cf7adee8b24ef1e2e6ab", - "sha256:89f9149e4a0169cddfc44c74f230d7743002e3aa0b9472d8c28f0388102fc4c2", - "sha256:a53fd3f03e578553623272dc46ac2f189de23862e68565e83dde203d41b76fc5", - "sha256:b135410244ebe777db80298297a97fbb4c862c881b4403b71bac9d4107d61fd1", - "sha256:b98d0148f84e3a3c569e19f52103ca1feacdac0d2df8d6533cf983d1fda28462", - "sha256:d1736130bce8cf131ac7957fa26880ca19227d4ad68b4888b3be0dea1f95df97", - "sha256:f45460f9ee70a0ec1b6694c6e4e348ad2019275680bd68a1d9314b8c7e01e574" - ], - "markers": "python_version >= '3.7'", - "version": "==4.21.12" + "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4", + "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8", + "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c", + "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d", + "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4", + "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa", + "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c", + "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019", + "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9", + "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c", + "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2" + ], + "markers": "python_version >= '3.8'", + "version": "==4.25.3" }, "psutil": { "hashes": [ - "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff", - "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1", - "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62", - "sha256:3ff89f9b835100a825b14c2808a106b6fdcc4b15483141482a12c725e7f78549", - "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08", - "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7", - "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e", - "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe", - "sha256:6b92c532979bafc2df23ddc785ed116fced1f492ad90a6830cf24f4d1ea27d24", - "sha256:852dd5d9f8a47169fe62fd4a971aa07859476c2ba22c2254d4a1baa4e10b95ad", - "sha256:9120cd39dca5c5e1c54b59a41d205023d436799b1c8c4d3ff71af18535728e94", - "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8", - "sha256:efeae04f9516907be44904cc7ce08defb6b665128992a56957abc9b61dca94b7", - "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4" + "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d", + "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73", + "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8", + "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2", + "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e", + "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36", + "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7", + "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c", + "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee", + "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421", + "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf", + "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81", + "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0", + "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631", + "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4", + "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==5.9.4" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==5.9.8" }, "psycopg2-binary": { "hashes": [ @@ -1517,18 +1313,13 @@ "sha256:01ad49d68dd8c5362e4bfb4158f2896dc6e0c02e87b8a3770fc003459f1a4425", "sha256:024030b13bdcbd53d8a93891a2cf07719715724fc9fee40243f3bd78b4264b8f", "sha256:02551647542f2bf89073d129c73c05a25c372fc0a49aa50e0de65c3c143d8bd0", - "sha256:040234f8a4a8dfd692662a8308d78f63f31a97e1c42d2480e5e6810c48966a29", "sha256:043a9fd45a03858ff72364b4b75090679bd875ee44df9c0613dc862ca6b98460", "sha256:05b3d479425e047c848b9782cd7aac9c6727ce23181eb9647baf64ffdfc3da41", "sha256:0775d6252ccb22b15da3b5d7adbbf8cfe284916b14b6dc0ff503a23edb01ee85", - "sha256:086f7e89ec85a6704db51f68f0dcae432eff9300809723a6e8782c41c2f48e03", "sha256:1764546ffeaed4f9428707be61d68972eb5ede81239b46a45843e0071104d0dd", - "sha256:18ca813fdb17bc1db73fe61b196b05dd1ca2165b884dd5ec5568877cabf9b039", - "sha256:19dc39616850342a2a6db70559af55b22955f86667b5f652f40c0e99253d9881", "sha256:1e491e6489a6cb1d079df8eaa15957c277fdedb102b6a68cfbf40c4994412fd0", "sha256:212757ffcecb3e1a5338d4e6761bf9c04f750e7d027117e74aa3cd8a75bb6fbd", "sha256:215d6bf7e66732a514f47614f828d8c0aaac9a648c46a831955cb103473c7147", - "sha256:2166e770cb98f02ed5ee2b0b569d40db26788e0bf2ec3ae1a0d864ea6f1d8309", "sha256:25382c7d174c679ce6927c16b6fbb68b10e56ee44b1acb40671e02d29f2fce7c", "sha256:2abccab84d057723d2ca8f99ff7b619285d40da6814d50366f61f0fc385c3903", "sha256:2d964eb24c8b021623df1c93c626671420c6efadbdb8655cb2bd5e0c6fa422ba", @@ -1536,65 +1327,41 @@ "sha256:2ef892cabdccefe577088a79580301f09f2a713eb239f4f9f62b2b29cafb0577", "sha256:33e632d0885b95a8b97165899006c40e9ecdc634a529dca7b991eb7de4ece41c", "sha256:3520d7af1ebc838cc6084a3281145d5cd5bdd43fdef139e6db5af01b92596cb7", - "sha256:3a2522b1d9178575acee4adf8fd9f979f9c0449b00b4164bb63c3475ea6528ed", - "sha256:3aa773580f85a28ffdf6f862e59cb5a3cc7ef6885121f2de3fca8d6ada4dbf3b", - "sha256:3b5deaa3ee7180585a296af33e14c9b18c218d148e735c7accf78130765a47e3", "sha256:3d790f84201c3698d1bfb404c917f36e40531577a6dda02e45ba29b64d539867", "sha256:3fc33295cfccad697a97a76dec3f1e94ad848b7b163c3228c1636977966b51e2", - "sha256:407af6d7e46593415f216c7f56ba087a9a42bd6dc2ecb86028760aa45b802bd7", "sha256:422e3d43b47ac20141bc84b3d342eead8d8099a62881a501e97d15f6addabfe9", "sha256:426c2ae999135d64e6a18849a7d1ad0e1bd007277e4a8f4752eaa40a96b550ff", "sha256:46512486be6fbceef51d7660dec017394ba3e170299d1dc30928cbedebbf103a", "sha256:46850a640df62ae940e34a163f72e26aca1f88e2da79148e1862faaac985c302", "sha256:484405b883630f3e74ed32041a87456c5e0e63a8e3429aa93e8714c366d62bd1", - "sha256:4c3c09fb674401f630626310bcaf6cd6285daf0d5e4c26d6e55ca26a2734e39b", - "sha256:4c6717962247445b4f9e21c962ea61d2e884fc17df5ddf5e35863b016f8a1f03", "sha256:4e7904d1920c0c89105c0517dc7e3f5c20fb4e56ba9cdef13048db76947f1d79", - "sha256:50446fae5681fc99f87e505d4e77c9407e683ab60c555ec302f9ac9bffa61103", - "sha256:5057669b6a66aa9ca118a2a860159f0ee3acf837eda937bdd2a64f3431361a2d", "sha256:56b2957a145f816726b109ee3d4e6822c23f919a7d91af5a94593723ed667835", "sha256:5c6527c8efa5226a9e787507652dd5ba97b62d29b53c371a85cd13f957fe4d42", "sha256:5cbc554ba47ecca8cd3396ddaca85e1ecfe3e48dd57dc5e415e59551affe568e", "sha256:5d28ecdf191db558d0c07d0f16524ee9d67896edf2b7990eea800abeb23ebd61", - "sha256:5dd90c5438b4f935c9d01fcbad3620253da89d19c1f5fca9158646407ed7df35", "sha256:5fc447058d083b8c6ac076fc26b446d44f0145308465d745fba93a28c14c9e32", "sha256:63e318dbe52709ed10d516a356f22a635e07a2e34c68145484ed96a19b0c4c68", - "sha256:659c815b5b8e2a55193ede2795c1e2349b8011497310bb936da7d4745652823b", "sha256:68d81a2fe184030aa0c5c11e518292e15d342a667184d91e30644c9d533e53e1", - "sha256:69b13fdf12878b10dc6003acc8d0abf3ad93e79813fd5f3812497c1c9fb9be49", "sha256:6e63814ec71db9bdb42905c925639f319c80e7909fb76c3b84edc79dadef8d60", "sha256:6f8a9bcab7b6db2e3dbf65b214dfc795b4c6b3bb3af922901b6a67f7cb47d5f8", "sha256:70831e03bd53702c941da1a1ad36c17d825a24fbb26857b40913d58df82ec18b", "sha256:74eddec4537ab1f701a1647214734bc52cee2794df748f6ae5908e00771f180a", - "sha256:7a1cb80e35e1ccea3e11a48afe65d38744a0e0bde88795cc56a4d05b6e4f9d70", "sha256:7b3751857da3e224f5629400736a7b11e940b5da5f95fa631d86219a1beaafec", "sha256:7cf1d44e710ca3a9ce952bda2855830fe9f9017ed6259e01fcd71ea6287565f5", "sha256:7d07f552d1e412f4b4e64ce386d4c777a41da3b33f7098b6219012ba534fb2c2", "sha256:7d88db096fa19d94f433420eaaf9f3c45382da2dd014b93e4bf3215639047c16", - "sha256:7e6e3c52e6732c219c07bd97fff6c088f8df4dae3b79752ee3a817e6f32e177e", "sha256:7ee3095d02d6f38bd7d9a5358fcc9ea78fcdb7176921528dd709cc63f40184f5", - "sha256:7f42a8490c4fe854325504ce7a6e4796b207960dabb2cbafe3c3959cb00d1d7e", - "sha256:84156313f258eafff716b2961644a4483a9be44a5d43551d554844d15d4d224e", - "sha256:8578d6b8192e4c805e85f187bc530d0f52ba86c39172e61cd51f68fddd648103", - "sha256:890167d5091279a27e2505ff0e1fb273f8c48c41d35c5b92adbf4af80e6b2ed6", "sha256:902844f9c4fb19b17dfa84d9e2ca053d4a4ba265723d62ea5c9c26b38e0aa1e6", "sha256:937880290775033a743f4836aa253087b85e62784b63fd099ee725d567a48aa1", "sha256:95076399ec3b27a8f7fa1cc9a83417b1c920d55cf7a97f718a94efbb96c7f503", - "sha256:98e10634792ac0e9e7a92a76b4991b44c2325d3e7798270a808407355e7bb0a1", - "sha256:9aadff9032e967865f9778485571e93908d27dab21d0fdfdec0ca779bb6f8ad9", "sha256:9c38d3869238e9d3409239bc05bc27d6b7c99c2a460ea337d2814b35fb4fea1b", "sha256:9e32cedc389bcb76d9f24ea8a012b3cb8385ee362ea437e1d012ffaed106c17d", - "sha256:9f24f383a298a0c0f9b3113b982e21751a8ecde6615494a3f1470eb4a9d70e9e", "sha256:9ffdc51001136b699f9563b1c74cc1f8c07f66ef7219beb6417a4c8aaa896c28", "sha256:a0adef094c49f242122bb145c3c8af442070dc0e4312db17e49058c1702606d4", "sha256:a36a0e791805aa136e9cbd0ffa040d09adec8610453ee8a753f23481a0057af5", - "sha256:a73021b44813b5c84eda4a3af5826dd72356a900bac9bd9dd1f0f81ee1c22c2f", "sha256:a7e518a0911c50f60313cb9e74a169a65b5d293770db4770ebf004245f24b5c5", "sha256:af0516e1711995cb08dc19bbd05bec7dbdebf4185f68870595156718d237df3e", - "sha256:afd96845e12638d2c44d213d4810a08f4dc4a563f9a98204b7428e567014b1cd", - "sha256:b73ddf033d8cd4cc9dfed6324b1ad2a89ba52c410ef6877998422fcb9c23e3a8", "sha256:b8104f709590fff72af801e916817560dbe1698028cd0afe5a52d75ceb1fce5f", - "sha256:b8f490f5fad1767a1331df1259763b3bad7d7af12a75b950c2843ba319b2415f", "sha256:b911dfb727e247340d36ae20c4b9259e4a64013ab9888ccb3cbba69b77fd9636", "sha256:b9a794cef1d9c1772b94a72eec6da144c18e18041d294a9ab47669bc77a80c1d", "sha256:b9c33d4aef08dfecbd1736ceab8b7b3c4358bf10a0121483e5cd60d3d308cc64", @@ -1608,16 +1375,14 @@ "sha256:d4c7b3a31502184e856df1f7bbb2c3735a05a8ce0ade34c5277e1577738a5c91", "sha256:d892bfa1d023c3781a3cab8dd5af76b626c483484d782e8bd047c180db590e4c", "sha256:dbc332beaf8492b5731229a881807cd7b91b50dbbbaf7fe2faf46942eda64a24", - "sha256:dbc5cd56fff1a6152ca59445178652756f4e509f672e49ccdf3d79c1043113a4", "sha256:dc85b3777068ed30aff8242be2813038a929f2084f69e43ef869daddae50f6ee", "sha256:e59137cdb970249ae60be2a49774c6dfb015bd0403f05af1fe61862e9626642d", "sha256:e67b3c26e9b6d37b370c83aa790bbc121775c57bfb096c2e77eacca25fd0233b", "sha256:e72c91bda9880f097c8aa3601a2c0de6c708763ba8128006151f496ca9065935", - "sha256:eac8a3499754790187bb00574ab980df13e754777d346f85e0ff6df929bcd964", - "sha256:eaed1c65f461a959284649e37b5051224f4db6ebdc84e40b5e65f2986f101a08", "sha256:f95b8aca2703d6a30249f83f4fe6a9abf2e627aa892a5caaab2267d56be7ab69" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==2.9.5" }, "ptyprocess": { @@ -1629,87 +1394,166 @@ }, "pyasn1": { "hashes": [ - "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", - "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", - "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", - "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", - "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", - "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", - "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", - "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", - "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", - "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", - "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", - "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", - "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" - ], - "version": "==0.4.8" + "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c", + "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473" + ], + "markers": "python_version >= '3.8'", + "version": "==0.6.0" }, "pyasn1-modules": { "hashes": [ - "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", - "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", - "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", - "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", - "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", - "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", - "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", - "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", - "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", - "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", - "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", - "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", - "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" - ], - "version": "==0.2.8" + "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6", + "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b" + ], + "markers": "python_version >= '3.8'", + "version": "==0.4.0" }, "pycparser": { "hashes": [ - "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", - "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.21" + "markers": "python_version >= '3.8'", + "version": "==2.22" }, "pycryptodome": { "hashes": [ - "sha256:0198fe96c22f7bc31e7a7c27a26b2cec5af3cf6075d577295f4850856c77af32", - "sha256:0e45d2d852a66ecfb904f090c3f87dc0dfb89a499570abad8590f10d9cffb350", - "sha256:1047ac2b9847ae84ea454e6e20db7dcb755a81c1b1631a879213d2b0ad835ff2", - "sha256:13b3e610a2f8938c61a90b20625069ab7a77ccea20d65a9a0f926cc0cc1314b1", - "sha256:1fc16c80a5da8231fd1f953a7b8dfeb415f68120248e8d68383c5c2c4b18708c", - "sha256:265bfcbbf20d58e6871ce695a7a08aac9b41a0553060d9c05363abd6f3391bdd", - "sha256:2bf2a270906a02b7b255e1a0d7b3aea4f06b3983c51ddec1673c380e0dff5b30", - "sha256:47c71a0347847b747ba1349767b16cde049bc36f21654eb09cc82306ef5fdcf8", - "sha256:48d99869d58f3979d72f6fa0c50f48d16f14973bc4a3adb0ce3b8325fdd7e223", - "sha256:4d950ed2a887905b3fa709b86be5a163e26e1b174703ed59d34eb6832f213222", - "sha256:54d807314c66785c69cd25425933d4bd4c23547a593cdcf49d962fa3e0081336", - "sha256:58172080cbfaee724067a3c017add6a1a3cc167bbc8478dc5f2e5f45fa658763", - "sha256:5df582f2112dd72331de7e567837e136a9629181a8ab69ef8949e4bc294a0b99", - "sha256:6016269bb56caf0327f6d42e7bad1247e08b78407446dff562240c65f85d5a5e", - "sha256:63165fbdc247450017eb9ef04cfe15cb3a72ca48ffcc3a3b75b08c0340bf3647", - "sha256:69adf32522b75968e1cbf25b5d83e87c04cd9a55610ce1e4a19012e58e7e4023", - "sha256:856ebf822d08d754af62c22e2b93626509a72773214f92db1551e2b68d9e2a1b", - "sha256:95069fd9e2813668a2713a1efcc65cc26d2c7e741401ac46628f1ec957511f1b", - "sha256:b12a88566a98617b1a34b4e5a805dff2da98d83fc74262aff3c3d724d0f525d6", - "sha256:c69e19afc734b2a17b9d78b7bcb544aabd5a52ff628e14283b6e9404d27d0517", - "sha256:c82e3bc1e70dde153b0956bffe20a15715a1fe3e00bc23e88d6973eda4505944", - "sha256:d1daec4d31bb00918e4e178297ac6ca6f86ec4c851ba584770533ece554d29e2", - "sha256:d67a2d2fe344953e4572a7d30668cceb516b04287b8638170d562065e53ee2e0", - "sha256:dab9359cc295160ba96738ba4912c675181c84bfdf413e5c0621cf00b7deeeaa", - "sha256:e061311b02cefb17ea93d4a5eb1ad36dca4792037078b43e15a653a0a4478ead", - "sha256:e750a21d8a265b1f9bfb1a28822995ea33511ba7db5e2b55f41fb30781d0d073" + "sha256:06d6de87c19f967f03b4cf9b34e538ef46e99a337e9a61a77dbe44b2cbcf0690", + "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7", + "sha256:210ba1b647837bfc42dd5a813cdecb5b86193ae11a3f5d972b9a0ae2c7e9e4b4", + "sha256:2a1250b7ea809f752b68e3e6f3fd946b5939a52eaeea18c73bdab53e9ba3c2dd", + "sha256:2ab6ab0cb755154ad14e507d1df72de9897e99fd2d4922851a276ccc14f4f1a5", + "sha256:3427d9e5310af6680678f4cce149f54e0bb4af60101c7f2c16fdf878b39ccccc", + "sha256:3cd3ef3aee1079ae44afaeee13393cf68b1058f70576b11439483e34f93cf818", + "sha256:405002eafad114a2f9a930f5db65feef7b53c4784495dd8758069b89baf68eab", + "sha256:417a276aaa9cb3be91f9014e9d18d10e840a7a9b9a9be64a42f553c5b50b4d1d", + "sha256:4401564ebf37dfde45d096974c7a159b52eeabd9969135f0426907db367a652a", + "sha256:49a4c4dc60b78ec41d2afa392491d788c2e06edf48580fbfb0dd0f828af49d25", + "sha256:5601c934c498cd267640b57569e73793cb9a83506f7c73a8ec57a516f5b0b091", + "sha256:6e0e4a987d38cfc2e71b4a1b591bae4891eeabe5fa0f56154f576e26287bfdea", + "sha256:76658f0d942051d12a9bd08ca1b6b34fd762a8ee4240984f7c06ddfb55eaf15a", + "sha256:76cb39afede7055127e35a444c1c041d2e8d2f1f9c121ecef573757ba4cd2c3c", + "sha256:8d6b98d0d83d21fb757a182d52940d028564efe8147baa9ce0f38d057104ae72", + "sha256:9b3ae153c89a480a0ec402e23db8d8d84a3833b65fa4b15b81b83be9d637aab9", + "sha256:a60fedd2b37b4cb11ccb5d0399efe26db9e0dd149016c1cc6c8161974ceac2d6", + "sha256:ac1c7c0624a862f2e53438a15c9259d1655325fc2ec4392e66dc46cdae24d044", + "sha256:acae12b9ede49f38eb0ef76fdec2df2e94aad85ae46ec85be3648a57f0a7db04", + "sha256:acc2614e2e5346a4a4eab6e199203034924313626f9620b7b4b38e9ad74b7e0c", + "sha256:acf6e43fa75aca2d33e93409f2dafe386fe051818ee79ee8a3e21de9caa2ac9e", + "sha256:baee115a9ba6c5d2709a1e88ffe62b73ecc044852a925dcb67713a288c4ec70f", + "sha256:c18b381553638414b38705f07d1ef0a7cf301bc78a5f9bc17a957eb19446834b", + "sha256:d29daa681517f4bc318cd8a23af87e1f2a7bad2fe361e8aa29c77d652a065de4", + "sha256:d5954acfe9e00bc83ed9f5cb082ed22c592fbbef86dc48b907238be64ead5c33", + "sha256:ec0bb1188c1d13426039af8ffcb4dbe3aad1d7680c35a62d8eaf2a529b5d3d4f", + "sha256:ec1f93feb3bb93380ab0ebf8b859e8e5678c0f010d2d78367cf6bc30bfeb148e", + "sha256:f0e6d631bae3f231d3634f91ae4da7a960f7ff87f2865b2d2b831af1dfb04e9a", + "sha256:f35d6cee81fa145333137009d9c8ba90951d7d77b67c79cbe5f03c7eb74d8fe2", + "sha256:f47888542a0633baff535a04726948e876bf1ed880fddb7c10a736fa99146ab3", + "sha256:fb3b87461fa35afa19c971b0a2b7456a7b1db7b4eba9a8424666104925b78128" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==3.16.0" + "version": "==3.20.0" + }, + "pydantic": { + "hashes": [ + "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6", + "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5" + ], + "markers": "python_version >= '3.8'", + "version": "==2.6.4" + }, + "pydantic-core": { + "hashes": [ + "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a", + "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed", + "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979", + "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff", + "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5", + "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45", + "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340", + "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad", + "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23", + "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6", + "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7", + "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241", + "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda", + "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187", + "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba", + "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c", + "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2", + "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c", + "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132", + "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf", + "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972", + "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db", + "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade", + "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4", + "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8", + "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f", + "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9", + "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48", + "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec", + "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d", + "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9", + "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb", + "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4", + "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89", + "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c", + "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9", + "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da", + "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac", + "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b", + "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf", + "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e", + "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137", + "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1", + "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b", + "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8", + "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e", + "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053", + "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01", + "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe", + "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd", + "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805", + "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183", + "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8", + "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99", + "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820", + "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074", + "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256", + "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8", + "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975", + "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad", + "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e", + "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca", + "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df", + "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b", + "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a", + "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a", + "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721", + "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a", + "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f", + "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2", + "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97", + "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6", + "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed", + "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc", + "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1", + "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe", + "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120", + "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f", + "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a" + ], + "markers": "python_version >= '3.8'", + "version": "==2.16.3" }, "pygments": { "hashes": [ - "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297", - "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717" + "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", + "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" ], - "markers": "python_version >= '3.6'", - "version": "==2.14.0" + "markers": "python_version >= '3.7'", + "version": "==2.17.2" }, "pyjwt": { "hashes": [ @@ -1717,6 +1561,7 @@ "sha256:fba44e7898bbca160a2b2b501f492824fc8382485d3a6f11ba5d0c1937ce6130" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==2.1.0" }, "pynacl": { @@ -1741,6 +1586,7 @@ "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" ], "index": "pypi", + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.4.7" }, "pypdf4": { @@ -1764,15 +1610,16 @@ "sha256:bb7cdd55776f5cf613e4bb9f0f0aba70b60408b964ec7c13b37f69b215acbbe8" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==7.5.2" }, "python-dateutil": { "hashes": [ - "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", - "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.8.2" + "version": "==2.9.0.post0" }, "python-http-client": { "hashes": [ @@ -1787,6 +1634,7 @@ "sha256:f26eea7898db40609563bed0a7ca11af12e2a79858632706d835a0f961b7d398" ], "index": "pypi", + "markers": "python_version >= '3.4'", "version": "==2.0.1" }, "python-magic": { @@ -1795,18 +1643,21 @@ "sha256:ca884349f2c92ce830e3f498c5b7c7051fe2942c3ee4332f65213b8ebff15a62" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==0.4.22" }, "pytz": { "hashes": [ - "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0", - "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" + "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812", + "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319" ], - "version": "==2022.7.1" + "version": "==2024.1" }, "pyyaml": { "hashes": [ + "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", + "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", @@ -1814,7 +1665,10 @@ "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", + "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", + "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", + "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", @@ -1822,11 +1676,15 @@ "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", + "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", + "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", + "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", + "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef", "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", @@ -1839,7 +1697,9 @@ "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", + "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", + "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", @@ -1848,6 +1708,7 @@ "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==6.0.1" }, "redis": { @@ -1856,31 +1717,36 @@ "sha256:6d65e84bc58091140081ee9d9c187aab0480097750fac44239307a3bdf0b1251" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==3.5.2" }, "requests": { + "extras": [ + "socks" + ], "hashes": [ "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.25.1" }, "requests-oauthlib": { "hashes": [ - "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5", - "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a" + "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", + "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.3.1" + "markers": "python_version >= '3.4'", + "version": "==2.0.0" }, "requests-toolbelt": { "hashes": [ - "sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7", - "sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d" + "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", + "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.10.1" + "version": "==1.0.0" }, "rq": { "hashes": [ @@ -1888,6 +1754,7 @@ "sha256:92f4cf38b2364c1697b541e77c0fe62b7e5242fa864324f262be126ee2a07e3a" ], "index": "pypi", + "markers": "python_version >= '3.5'", "version": "==1.10.1" }, "rsa": { @@ -1921,6 +1788,7 @@ "sha256:f46dd15335e8a320b0fb4685f58b7471702234cba8bb3442b69a3e1dc329c345" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==1.6.1" }, "sendgrid": { @@ -1929,15 +1797,16 @@ "sha256:74b0dcf9a79188948f61f456bd1bf67ffa676a5d388aba1c76bff516566d7084" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==6.7.0" }, "setuptools": { "hashes": [ - "sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab", - "sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6" + "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e", + "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c" ], - "markers": "python_version >= '3.7'", - "version": "==66.0.0" + "markers": "python_version >= '3.8'", + "version": "==69.2.0" }, "six": { "hashes": [ @@ -1947,6 +1816,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, + "sniffio": { + "hashes": [ + "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", + "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc" + ], + "markers": "python_version >= '3.7'", + "version": "==1.3.1" + }, "sortedcontainers": { "hashes": [ "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", @@ -1956,11 +1833,11 @@ }, "soupsieve": { "hashes": [ - "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759", - "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d" + "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690", + "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7" ], - "markers": "python_version >= '3.6'", - "version": "==2.3.2.post1" + "markers": "python_version >= '3.8'", + "version": "==2.5" }, "sqlalchemy": { "hashes": [ @@ -2004,6 +1881,7 @@ "sha256:fdd2ed7395df8ac2dbb10cefc44737b66c6a5cd7755c92524733d7a443e5b7e2" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.3.23" }, "sqlalchemy-searchable": { @@ -2015,11 +1893,11 @@ }, "sqlalchemy-utils": { "hashes": [ - "sha256:9da26a9b20c6979167772ba5dc2a1d01265648f18c82995f082279a399ea308b", - "sha256:b37240917d81c14fe1b6e5096a402bace472b179121384e47c10d854dbf5af92" + "sha256:85cf3842da2bf060760f955f8467b87983fb2e30f1764fd0e24a48307dc8ec6e", + "sha256:bc599c8c3b3319e53ce6c5c3c471120bd325d0071fb6f38a10e924e3d07b9990" ], - "markers": "python_version ~= '3.6'", - "version": "==0.39.0" + "markers": "python_version >= '3.7'", + "version": "==0.41.2" }, "starkbank-ecdsa": { "hashes": [ @@ -2052,6 +1930,7 @@ "sha256:f61f33f64760a22100b6b146217823f73cfedd251c9bdbd58453ca94e63326c7" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==0.12.2" }, "svg-stack": { @@ -2079,64 +1958,66 @@ }, "tqdm": { "hashes": [ - "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4", - "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1" + "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9", + "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==4.64.1" + "markers": "python_version >= '3.7'", + "version": "==4.66.2" }, "traitlets": { "hashes": [ - "sha256:32500888f5ff7bbf3b9267ea31748fa657aaf34d56d85e60f91dda7dc7f5785b", - "sha256:a1ca5df6414f8b5760f7c5f256e326ee21b581742114545b462b35ffe3f04861" + "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9", + "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80" ], - "markers": "python_version >= '3.7'", - "version": "==5.8.1" + "markers": "python_version >= '3.8'", + "version": "==5.14.2" }, "types-cachetools": { "hashes": [ - "sha256:67fa46d51a650896770aee0ba80f0e61dc4a7d1373198eec1bc0622263eaa256", - "sha256:c0c5fa00199017d974c935bf043c467d5204e4f835141e489b48765b5ac1d960" + "sha256:27c982cdb9cf3fead8b0089ee6b895715ecc99dac90ec29e2cab56eb1aaf4199", + "sha256:98c069dc7fc087b1b061703369c80751b0a0fc561f6fb072b554e5eee23773a0" ], "index": "pypi", - "version": "==5.3.0.5" + "markers": "python_version >= '3.7'", + "version": "==5.3.0.7" }, "typing-extensions": { "hashes": [ - "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", - "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" + "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475", + "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb" ], - "markers": "python_version >= '3.7'", - "version": "==4.4.0" + "markers": "python_version >= '3.8'", + "version": "==4.10.0" }, "typing-inspect": { "hashes": [ - "sha256:5fbf9c1e65d4fa01e701fe12a5bca6c6e08a4ffd5bc60bfac028253a447c5188", - "sha256:8b1ff0c400943b6145df8119c41c244ca8207f1f10c9c057aeed1560e4806e3d" + "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", + "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78" ], - "version": "==0.8.0" + "version": "==0.9.0" }, "urllib3": { "hashes": [ - "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72", - "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1" + "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07", + "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.14" + "version": "==1.26.18" }, "validators": { "hashes": [ - "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a" + "sha256:4a70757730619a2c0788aa3c60ba1680372173237c445571586cdef02e37223b", + "sha256:bc0d93d874a363bde9e61b7e31dd274fef168ec057ecb8118edc96c161a89285" ], - "markers": "python_version >= '3.4'", - "version": "==0.20.0" + "markers": "python_version >= '3.8'", + "version": "==0.27.0" }, "wcwidth": { "hashes": [ - "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", - "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" + "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", + "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5" ], - "version": "==0.2.6" + "version": "==0.2.13" }, "webargs": { "hashes": [ @@ -2152,6 +2033,7 @@ "sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.16.0" }, "wrapt": { @@ -2162,23 +2044,30 @@ "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2", "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656", "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3", + "sha256:2020f391008ef874c6d9e208b24f28e31bcb85ccff4f335f15a3251d222b92d9", "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff", + "sha256:240b1686f38ae665d1b15475966fe0472f78e71b1b4903c143a842659c8e4cb9", "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310", + "sha256:26046cd03936ae745a502abf44dac702a5e6880b2b01c29aea8ddf3353b68224", "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a", "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57", "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069", + "sha256:2feecf86e1f7a86517cab34ae6c2f081fd2d0dac860cb0c0ded96d799d20b335", "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383", "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe", + "sha256:358fe87cc899c6bb0ddc185bf3dbfa4ba646f05b1b0b9b5a27c2cb92c2cea204", "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87", "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d", "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b", "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907", + "sha256:49ef582b7a1152ae2766557f0550a9fcbf7bbd76f43fbdc94dd3bf07cc7168be", "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f", "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0", "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28", "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1", "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853", "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc", + "sha256:6447e9f3ba72f8e2b985a1da758767698efa72723d5b59accefd716e9e8272bf", "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3", "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3", "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164", @@ -2201,8 +2090,10 @@ "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4", "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d", "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d", + "sha256:a9008dad07d71f68487c91e96579c8567c98ca4c3881b9b113bc7b33e9fd78b8", "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8", "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5", + "sha256:acae32e13a4153809db37405f5eba5bac5fbe2e2ba61ab227926a22901051c0a", "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471", "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00", "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68", @@ -2217,6 +2108,7 @@ "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb", "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b", "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f", + "sha256:ecee4132c6cd2ce5308e21672015ddfed1ff975ad0ac8d27168ea82e71413f55", "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462", "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015", "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af" @@ -2227,92 +2119,11 @@ "xlsxwriter": { "hashes": [ "sha256:1239958b12da12be6abf05b32f64ff162eb75fff0fdf00d901ca0f46dc0557cf", - "sha256:828b3285fc95105f5b1946a6a015b31cf388bd5378fdc6604e4d1b7839df2e77", - "sha256:82a3b0e73e3913483da23791d1a25e4d2dbb3837d1be4129473526b9a270a5cc", "sha256:d79dadac9dcbff3c24281764b052b46bcdb391f3184f337c4c4e6ed8d2738d7d" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.0.7" - }, - "yarl": { - "hashes": [ - "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", - "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3", - "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3", - "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c", - "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7", - "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04", - "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191", - "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea", - "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4", - "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4", - "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095", - "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e", - "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74", - "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef", - "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33", - "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde", - "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45", - "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf", - "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b", - "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac", - "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0", - "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528", - "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716", - "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb", - "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18", - "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72", - "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6", - "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582", - "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5", - "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368", - "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc", - "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9", - "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be", - "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a", - "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80", - "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8", - "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6", - "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417", - "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574", - "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59", - "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608", - "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82", - "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1", - "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3", - "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d", - "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8", - "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc", - "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac", - "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8", - "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955", - "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0", - "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367", - "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb", - "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a", - "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623", - "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2", - "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6", - "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7", - "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4", - "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051", - "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938", - "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8", - "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9", - "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3", - "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5", - "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9", - "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333", - "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185", - "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3", - "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560", - "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b", - "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7", - "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78", - "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7" - ], - "markers": "python_version >= '3.7'", - "version": "==1.9.2" } }, "develop": { @@ -2322,15 +2133,16 @@ "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==20.3.0" }, "certifi": { "hashes": [ - "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", - "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", + "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" ], "markers": "python_version >= '3.6'", - "version": "==2022.12.7" + "version": "==2024.2.2" }, "chardet": { "hashes": [ @@ -2346,6 +2158,7 @@ "sha256:ca516f86181f85615cd8210854b43acbe7b1f37ed8a082c5557749c73f2f0dd3" ], "index": "pypi", + "markers": "python_version >= '3.7' and python_version < '4.0'", "version": "==1.8.1" }, "flake8": { @@ -2354,6 +2167,7 @@ "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==3.9.2" }, "flake8-obey-import-goat": { @@ -2361,6 +2175,7 @@ "sha256:2e4c7be21b96dda72e903c21de16ff928e11fccdf9427889bfb7ccf4610f6072" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==0.1.1" }, "idna": { @@ -2380,56 +2195,19 @@ }, "more-itertools": { "hashes": [ - "sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41", - "sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab" - ], - "markers": "python_version >= '3.7'", - "version": "==9.0.0" - }, - "mypy": { - "hashes": [ - "sha256:06e1eac8d99bd404ed8dd34ca29673c4346e76dd8e612ea507763dccd7e13c7a", - "sha256:2ee3dbc53d4df7e6e3b1c68ac6a971d3a4fb2852bf10a05fda228721dd44fae1", - "sha256:4bc460e43b7785f78862dab78674e62ec3cd523485baecfdf81a555ed29ecfa0", - "sha256:64e1f6af81c003f85f0dfed52db632817dabb51b65c0318ffbf5ff51995bbb08", - "sha256:6e35d764784b42c3e256848fb8ed1d4292c9fc0098413adb28d84974c095b279", - "sha256:6ee196b1d10b8b215e835f438e06965d7a480f6fe016eddbc285f13955cca659", - "sha256:756fad8b263b3ba39e4e204ee53042671b660c36c9017412b43af210ddee7b08", - "sha256:77f8fcf7b4b3cc0c74fb33ae54a4cd00bb854d65645c48beccf65fa10b17882c", - "sha256:794f385653e2b749387a42afb1e14c2135e18daeb027e0d97162e4b7031210f8", - "sha256:8ad21d4c9d3673726cf986ea1d0c9fb66905258709550ddf7944c8f885f208be", - "sha256:8e8e49aa9cc23aa4c926dc200ce32959d3501c4905147a66ce032f05cb5ecb92", - "sha256:9f362470a3480165c4c6151786b5379351b790d56952005be18bdbdd4c7ce0ae", - "sha256:a16a0145d6d7d00fbede2da3a3096dcc9ecea091adfa8da48fa6a7b75d35562d", - "sha256:ad77c13037d3402fbeffda07d51e3f228ba078d1c7096a73759c9419ea031bf4", - "sha256:b6ede64e52257931315826fdbfc6ea878d89a965580d1a65638ef77cb551f56d", - "sha256:c9e0efb95ed6ca1654951bd5ec2f3fa91b295d78bf6527e026529d4aaa1e0c30", - "sha256:ce65f70b14a21fdac84c294cde75e6dbdabbcff22975335e20827b3b94bdbf49", - "sha256:d1debb09043e1f5ee845fa1e96d180e89115b30e47c5d3ce53bc967bab53f62d", - "sha256:e178eaffc3c5cd211a87965c8c0df6da91ed7d258b5fc72b8e047c3771317ddb", - "sha256:e1acf62a8c4f7c092462c738aa2c2489e275ed386320c10b2e9bff31f6f7e8d6", - "sha256:e53773073c864d5f5cec7f3fc72fbbcef65410cde8cc18d4f7242dea60dac52e", - "sha256:eb3978b191b9fa0488524bb4ffedf2c573340e8c2b4206fc191d44c7093abfb7", - "sha256:f64d2ce043a209a297df322eb4054dfbaa9de9e8738291706eaafda81ab2b362", - "sha256:fa38f82f53e1e7beb45557ff167c177802ba7b387ad017eab1663d567017c8ee" - ], - "index": "pypi", - "version": "==0.981" - }, - "mypy-extensions": { - "hashes": [ - "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", - "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" + "sha256:686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684", + "sha256:8fccb480c43d3e99a00087634c06dd02b0d50fbf088b380de5a41a015ec239e1" ], - "version": "==0.4.3" + "markers": "python_version >= '3.8'", + "version": "==10.2.0" }, "packaging": { "hashes": [ - "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", - "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" + "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", + "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" ], "markers": "python_version >= '3.7'", - "version": "==23.0" + "version": "==24.0" }, "pluggy": { "hashes": [ @@ -2453,6 +2231,7 @@ "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.7.0" }, "pyflakes": { @@ -2469,6 +2248,7 @@ "sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6" ], "index": "pypi", + "markers": "python_version >= '3.5'", "version": "==5.3.5" }, "redis": { @@ -2477,14 +2257,19 @@ "sha256:6d65e84bc58091140081ee9d9c187aab0480097750fac44239307a3bdf0b1251" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==3.5.2" }, "requests": { + "extras": [ + "socks" + ], "hashes": [ "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.25.1" }, "responses": { @@ -2493,15 +2278,16 @@ "sha256:b82502eb5f09a0289d8e209e7bad71ef3978334f56d09b444253d5ad67bf5253" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==0.21.0" }, "setuptools": { "hashes": [ - "sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab", - "sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6" + "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e", + "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c" ], - "markers": "python_version >= '3.7'", - "version": "==66.0.0" + "markers": "python_version >= '3.8'", + "version": "==69.2.0" }, "six": { "hashes": [ @@ -2518,14 +2304,6 @@ ], "version": "==2.4.0" }, - "toml": { - "hashes": [ - "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", - "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.10.2" - }, "types-cryptography": { "hashes": [ "sha256:09cc53f273dd4d8c29fa7ad11fefd9b734126d467960162397bc5e3e604dea75", @@ -2565,28 +2343,20 @@ "index": "pypi", "version": "==2.25.8" }, - "typing-extensions": { - "hashes": [ - "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", - "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" - ], - "markers": "python_version >= '3.7'", - "version": "==4.4.0" - }, "urllib3": { "hashes": [ - "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72", - "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1" + "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07", + "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.14" + "version": "==1.26.18" }, "wcwidth": { "hashes": [ - "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", - "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" + "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", + "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5" ], - "version": "==0.2.6" + "version": "==0.2.13" } } } diff --git a/appserver/bin/docker-entrypoint.sh b/appserver/bin/docker-entrypoint.sh deleted file mode 100755 index feb2d11530..0000000000 --- a/appserver/bin/docker-entrypoint.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -## This scripts serves as the Docker entrypoint. -## If any command is specified, it runs it as is, -## else, it runs the appserver Flask application. - -set -e - -if [ "$1" ]; then - ## A command is specified, then run it. - exec "$@" -else - if [ "$MIGRATE_DB" ]; then - ## If $MIGRATE_DB is set, wait for PostgreSQL and run any required migrations. - while ! curl $POSTGRES_HOST:$POSTGRES_PORT 2>&1 | grep '52'; do - echo "Waiting for PostgreSQL to be available in $POSTGRES_HOST:$POSTGRES_PORT" - sleep 5; - done - echo "PostreSQL is ready. Executing DB migrations now" - flask db upgrade --x-arg data_migrate="True" - echo "Finished executing DB migrations" - fi - - ## Create initial user if $INITIAL_ADMIN_EMAIL is set. - if [ "$INITIAL_ADMIN_EMAIL" ]; then - echo "Trying to create initial admin user: $INITIAL_ADMIN_EMAIL" - flask create-user "Admin" "$INITIAL_ADMIN_EMAIL" > /dev/null 2>&1 || true - flask set-role "$INITIAL_ADMIN_EMAIL" "admin" > /dev/null 2>&1 || true - fi - - ## Run the Flask appserver app, using the built-in development Flask server, - ## or gunicron WSGI server if the $FLASK_ENV is not set to development. - if [ "${FLASK_ENV}" = "development" ]; then - flask run -h 0.0.0.0 -p ${PORT:-5000} - else - gunicorn \ - -b 0.0.0.0:${PORT:-5000} \ - --workers=${GUNICORN_WORKERS:-9} \ - --threads=${GUNICORN_THREADS:-10} \ - --timeout=${GUNICORN_TIMEOUT:-300} \ - --max-requests=${GUNICORN_MAX_REQUESTS:-120} \ - app:app - fi -fi diff --git a/appserver/bin/startup.sh b/appserver/bin/startup.sh index 87179382d4..53c67775f1 100755 --- a/appserver/bin/startup.sh +++ b/appserver/bin/startup.sh @@ -8,7 +8,7 @@ if [ "${FLASK_ENV}" = "development" ] && [ "${FLASK_APP_CONFIG}" = "Development" __dir__="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # wait for postgres timeout 300 ${__dir__}/wait-for-postgres - # wait for neo4j + # wait for arangodb timeout 300 ${__dir__}/wait-for-arango #wait for elastic timeout 300 ${__dir__}/wait-for-elastic diff --git a/appserver/bin/wait-for-neo4j b/appserver/bin/wait-for-neo4j deleted file mode 100755 index c85c5339b8..0000000000 --- a/appserver/bin/wait-for-neo4j +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -echo "Waiting for Neo4J" - -NEO4J_STATUS="000" - -until [ "$NEO4J_STATUS" = "200" ] -do - NEO4J_STATUS=`curl -s -o /dev/null -I -w "%{http_code}" http://${NEO4J_HOST}:7474` - echo "Status of Neo4J: $NEO4J_STATUS" - sleep 2 -done - -# Run command | https://docs.docker.com/compose/startup-order/ ->&2 echo "Neo4j started - executing command" -exec $@ diff --git a/appserver/config.py b/appserver/config.py index 3f01a758f0..c094e85bb1 100644 --- a/appserver/config.py +++ b/appserver/config.py @@ -29,12 +29,6 @@ class Base: POSTGRES_PASSWORD = os.environ.get('POSTGRES_PASSWORD') POSTGRES_DB = os.environ.get('POSTGRES_DB') - NEO4J_HOST = os.environ.get('NEO4J_HOST', '0.0.0.0') - NEO4J_SCHEME = os.environ.get('NEO4J_SCHEME', 'bolt') - NEO4J_AUTH = os.environ.get('NEO4J_AUTH', 'neo4j/password') - NEO4J_PORT = os.environ.get('NEO4J_PORT', '7687') - NEO4J_DATABASE = os.environ.get('NEO4J_DATABASE') - ARANGO_HOST = os.environ.get('ARANGO_HOST', 'http://localhost:8529') ARANGO_USERNAME = os.environ.get('ARANGO_USERNAME', 'root') ARANGO_PASSWORD = os.environ.get('ARANGO_PASSWORD', 'password') diff --git a/appserver/neo4japp/data_transfer_objects/search.py b/appserver/neo4japp/data_transfer_objects/search.py index f5ee549bdc..018b767158 100644 --- a/appserver/neo4japp/data_transfer_objects/search.py +++ b/appserver/neo4japp/data_transfer_objects/search.py @@ -8,7 +8,7 @@ @attr.s(frozen=True) class FTSQueryRecord(CamelDictMixin): - """Single record from a full text query in Neo4j""" + """Single record from a full text query in ArangoDB""" node: GraphNode = attr.ib() @@ -36,7 +36,7 @@ class FTSReferenceRecord(FTSQueryRecord): @attr.s(frozen=True) class FTSResult(CamelDictMixin): - """Paginated results for a full text search query in Neo4j""" + """Paginated results for a full text search query in ArangoDB""" query: str = attr.ib() nodes: List[FTSQueryRecord] = attr.ib() diff --git a/appserver/neo4japp/services/annotations/README.md b/appserver/neo4japp/services/annotations/README.md index 71ab2d16d1..be769a411b 100644 --- a/appserver/neo4japp/services/annotations/README.md +++ b/appserver/neo4japp/services/annotations/README.md @@ -146,9 +146,9 @@ A global inclusion/exclusion is **both** a local and a global. Local inclusions/exclusions are stored in Postgres, as well as global exclusions. The locals are saved in the `files` table, while the globals are in `global_list`. -The global inclusions are stored in Neo4j under the label `:GlobalInclusion` if they do not map to any existing nodes, otherwise use that existing node and create a new synonym relationship with it. +The global inclusions are stored in ArangoDB under the label `:GlobalInclusion` if they do not map to any existing nodes, otherwise use that existing node and create a new synonym relationship with it. -Because we do not curate before they're added to Neo4j, a user can potentially create a bad global inclusion. To correctly delete, we need the property `original_entity_types` so we don't accidentally delete the wrong thing. See https://sbrgsoftware.atlassian.net/browse/LL-3625 for more information. +Because we do not curate before they're added to ArangoDB, a user can potentially create a bad global inclusion. To correctly delete, we need the property `original_entity_types` so we don't accidentally delete the wrong thing. See https://sbrgsoftware.atlassian.net/browse/LL-3625 for more information. ## NLP Service diff --git a/cache-invalidator/Dockerfile b/cache-invalidator/Dockerfile index 33f146b5ba..1c52bb3e62 100644 --- a/cache-invalidator/Dockerfile +++ b/cache-invalidator/Dockerfile @@ -1,7 +1,7 @@ # ======================================== # Base image # ======================================== -FROM python:3.10-slim as base +FROM python:3.11-slim as base ENV LANG C.UTF-8 ENV LC_ALL C.UTF-8 @@ -42,12 +42,12 @@ USER app # Copy application code COPY --chown=app main.py ./ -# Neo4j configuration -ENV NEO4J_HOST=neo4j -ENV NEO4J_PORT=7687 -ENV NEO4J_AUTH=neo4j/password -ENV NEO4J_SCHEME=bolt -ENV NEO4J_DATABASE=neo4j +# ArangoDB configuration +ENV ARANGODB_HOST=arangodb +ENV ARANGODB_PORT=7687 +ENV ARANGODB_AUTH=arangodb/password +ENV ARANGODB_SCHEME=bolt +ENV ARANGODB_DATABASE=arangodb # Redis cache configuration ENV REDIS_HOST=redis diff --git a/cache-invalidator/Pipfile.lock b/cache-invalidator/Pipfile.lock index e95b37a95e..12972e9c28 100644 --- a/cache-invalidator/Pipfile.lock +++ b/cache-invalidator/Pipfile.lock @@ -18,42 +18,123 @@ "default": { "certifi": { "hashes": [ - "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", - "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", + "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" ], "markers": "python_version >= '3.6'", - "version": "==2022.12.7" + "version": "==2024.2.2" }, "charset-normalizer": { "hashes": [ - "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845", - "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f" - ], - "markers": "python_version >= '3.6'", - "version": "==2.1.1" + "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", + "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", + "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", + "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", + "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", + "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", + "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", + "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", + "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", + "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", + "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", + "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", + "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", + "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", + "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", + "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", + "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", + "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", + "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", + "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", + "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", + "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", + "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", + "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", + "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", + "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", + "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", + "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", + "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", + "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", + "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", + "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", + "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", + "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", + "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", + "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", + "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", + "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", + "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", + "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", + "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", + "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", + "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", + "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", + "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", + "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", + "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", + "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", + "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", + "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", + "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", + "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", + "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", + "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", + "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", + "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", + "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", + "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", + "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", + "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", + "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", + "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", + "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", + "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", + "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", + "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", + "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", + "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", + "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", + "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", + "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", + "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", + "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", + "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", + "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", + "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", + "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", + "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", + "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", + "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", + "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", + "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", + "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", + "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", + "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", + "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", + "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", + "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", + "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", + "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.3.2" }, "idna": { "hashes": [ - "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", - "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", + "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" ], "markers": "python_version >= '3.5'", - "version": "==3.4" - }, - "neo4j": { - "hashes": [ - "sha256:b6c49fbd60426e268ed4afbd414766444fe70aee1ac0376a0c871d75526b8251" - ], - "index": "pypi", - "version": "==4.2.1" + "version": "==3.6" }, "pyjwt": { "hashes": [ - "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd", - "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14" + "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de", + "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" ], "markers": "python_version >= '3.7'", - "version": "==2.6.0" + "version": "==2.8.0" }, "python-arango": { "hashes": [ @@ -61,54 +142,49 @@ "sha256:bb7cdd55776f5cf613e4bb9f0f0aba70b60408b964ec7c13b37f69b215acbbe8" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==7.5.2" }, - "pytz": { - "hashes": [ - "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7", - "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c" - ], - "version": "==2022.1" - }, "redis": { "hashes": [ "sha256:2ef11f489003f151777c064c5dbc6653dfb9f3eade159bcadc524619fddc2242", "sha256:6d65e84bc58091140081ee9d9c187aab0480097750fac44239307a3bdf0b1251" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==3.5.2" }, "requests": { "hashes": [ - "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983", - "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349" + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.28.1" + "markers": "python_version >= '3.7'", + "version": "==2.31.0" }, "requests-toolbelt": { "hashes": [ - "sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7", - "sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d" + "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", + "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.10.1" + "version": "==1.0.0" }, "setuptools": { "hashes": [ - "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54", - "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75" + "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e", + "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c" ], - "markers": "python_version >= '3.7'", - "version": "==65.6.3" + "markers": "python_version >= '3.8'", + "version": "==69.2.0" }, "urllib3": { "hashes": [ - "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", - "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" + "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", + "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.13" + "markers": "python_version >= '3.8'", + "version": "==2.2.1" } }, "develop": { @@ -139,14 +215,16 @@ "sha256:edf7237137a1a9330046dbb14796963d734dd740a98d5e144a3eb1d267f5f9ee" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==0.942" }, "mypy-extensions": { "hashes": [ - "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", - "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" ], - "version": "==0.4.3" + "markers": "python_version >= '3.5'", + "version": "==1.0.0" }, "pycodestyle": { "hashes": [ @@ -154,6 +232,7 @@ "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.7.0" }, "tomli": { @@ -166,11 +245,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42", - "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2" + "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475", + "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb" ], - "markers": "python_version >= '3.6'", - "version": "==4.1.1" + "markers": "python_version >= '3.8'", + "version": "==4.10.0" } } } diff --git a/client/Dockerfile b/client/Dockerfile index 268192f7ce..b15603ee86 100644 --- a/client/Dockerfile +++ b/client/Dockerfile @@ -1,5 +1,20 @@ ARG NODE_IMAGE_TAG=node:14 +# ======================================== +# Landing page +# ======================================== +FROM $NODE_IMAGE_TAG as landing-build +WORKDIR /app + +# Install dependencies +COPY landing/package.json landing/yarn.lock ./ +RUN yarn install + +# Build landing page +COPY landing ./ +RUN yarn build + + # ================================================================== # Angular app dependencies by default used for local development # ================================================================== @@ -11,23 +26,28 @@ COPY package.json yarn.lock ./ ARG YARN_INSTALL_OPTS RUN yarn install ${YARN_INSTALL_OPTS} -ENV ENVIRONMENT_CONFIG development - +# build time arguments for Angular environment +ARG ANGULAR_CONFIG=development +ARG CLIENT_VERSION=undefined +# default enviroment presets +ENV ENVIRONMENT_CONFIG $ANGULAR_CONFIG # ======================================== # Angular app bundle build # ======================================== FROM angular-deps as angular-build +# build time arguments for Angular environment +ARG ANGULAR_CONFIG=production +ARG CLIENT_VERSION=undefined + # Copy the code and build the app bundle COPY src ./src COPY tslint ./tslint COPY e2e ./e2e COPY *.json browserslist ./ - -ARG ANGULAR_CONFIG=production -ENV NODE_OPTIONS=--max-old-space-size=4096 -RUN yarn build --configuration=$ANGULAR_CONFIG --output-path=dist +RUN sed -i "s/__VERSION__/${CLIENT_VERSION}/" src/environments/environment.ts +RUN yarn build --configuration=$ANGULAR_CONFIG --aot --output-path=dist # When targeting this image stage, run angulat dev server EXPOSE 4200 @@ -39,27 +59,43 @@ CMD yarn dev-start # ======================================== # Runtime stage - NGINX # ======================================== -FROM nginx:1.21 -LABEL org.opencontainers.image.source https://github.com/SBRG/lifelike - +FROM nginx:1.25.1 +LABEL app=kg-prototypes WORKDIR /usr/share/nginx/html -# Copy built assets -COPY --from=angular-build /app/dist ./ +# URL to proxy requests to /api +ENV APPSERVER_UPSTREAM http://appserver:5000 -# Copy nginx configuraiton template -COPY nginx.conf /etc/nginx/templates/default.conf.template +# Whether to run the app in prod mode +ENV PRODUCTION_MODE true + +# Whether we are running with valid KEGG license +ENV KEGG_ENABLED false -# appserver URL to proxy /api requests -ENV APPSERVER_URL http://appserver:5000 +# Whether to run the app with oauth login +ENV OAUTH_ENABLED false + +# OAuth issuer discovert URL +ENV OAUTH_ISSUER "" + +# Client ID of the OAuth application +ENV OAUTH_CLIENT_ID "" # List of space delimited list of non-stantdard MIME types # which are known to benefit from gzip compression (text based content) ENV GZIP_EXTRA_TYPES text/tsv vnd.lifelike.document/bioc vnd.lifelike.document/enrichment-table vnd.lifelike.document/graph vnd.lifelike.document/map -# Runtime environment configuration preset -ENV ENVIRONMENT_CONFIG production +# build time argument for Angular environment +ARG ANGULAR_CONFIG=production + +# default enviroment presets +ENV ENVIRONMENT_CONFIG $ANGULAR_CONFIG + +# Copy nginx configuraiton template +COPY nginx.conf /etc/nginx/templates/default.conf.template + +# Copy built assets +COPY --from=landing-build /app/dist ./ +COPY --from=angular-build /app/dist ./ -# Listen port -ENV PORT 80 -EXPOSE $PORT +EXPOSE 80 diff --git a/client/src/app/sankey/components/entity-details/node-details.component.html b/client/src/app/sankey/components/entity-details/node-details.component.html index bd2780277c..20a49aafbc 100644 --- a/client/src/app/sankey/components/entity-details/node-details.component.html +++ b/client/src/app/sankey/components/entity-details/node-details.component.html @@ -69,7 +69,7 @@ - +
  • {{ label }}
  • diff --git a/client/src/app/search/components/graph-search.component.ts b/client/src/app/search/components/graph-search.component.ts index a710d77e8e..67900606ce 100644 --- a/client/src/app/search/components/graph-search.component.ts +++ b/client/src/app/search/components/graph-search.component.ts @@ -79,7 +79,7 @@ export class GraphSearchComponent implements OnInit, OnDestroy, ModuleAwareCompo map( (legend) => // Keys of the result dict are all lowercase, need to change the first character - // to uppercase to match Neo4j labels + // to uppercase to match ArangoDB labels new Map(Object.entries(legend).map(([label, { color }]) => [label, color])) ), startWith(new Map()) diff --git a/client/src/app/shortest-path/components/route-builder.component.html b/client/src/app/shortest-path/components/route-builder.component.html deleted file mode 100644 index ab0280681e..0000000000 --- a/client/src/app/shortest-path/components/route-builder.component.html +++ /dev/null @@ -1,47 +0,0 @@ -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    -

    Loading pre-defined queries...

    -
    -
    -
    - - -
    -

    Could not load pre-defined shortest path queries!

    -
    -
    - - -
    -
    -
    -
    diff --git a/client/src/app/shortest-path/components/route-builder.component.scss b/client/src/app/shortest-path/components/route-builder.component.scss deleted file mode 100644 index 357cdccf59..0000000000 --- a/client/src/app/shortest-path/components/route-builder.component.scss +++ /dev/null @@ -1,27 +0,0 @@ -.graph-type-btn-container { - height: 40px; - width: 40px; -} - -.route-builder-container-open { - position: absolute; - width: 400px; - right: 0; - z-index: 2; - transition: right .25s; -} - -.route-builder-container-closed { - position: absolute; - width: 400px; - right: -400px; - z-index: 2; - transition: right .25s; -} - -.toggle-route-builder-button { - height: 60px; - top: 28px; - right: 100%; - position: absolute; -} diff --git a/client/src/app/shortest-path/components/route-builder.component.spec.ts b/client/src/app/shortest-path/components/route-builder.component.spec.ts deleted file mode 100644 index a7884c15cd..0000000000 --- a/client/src/app/shortest-path/components/route-builder.component.spec.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { configureTestSuite } from 'ng-bullet'; - -import { RootStoreModule } from 'app/root-store'; -import { SharedModule } from 'app/shared/shared.module'; - -import { RouteBuilderComponent } from './route-builder.component'; - -describe('RouteBuilderComponent', () => { - let component: RouteBuilderComponent; - let fixture: ComponentFixture; - - configureTestSuite(() => { - TestBed.configureTestingModule({ - imports: [ - RootStoreModule, - SharedModule - ], - declarations: [ RouteBuilderComponent ] - }); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(RouteBuilderComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/shortest-path/components/route-builder.component.ts b/client/src/app/shortest-path/components/route-builder.component.ts deleted file mode 100644 index 22c02806a9..0000000000 --- a/client/src/app/shortest-path/components/route-builder.component.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core'; - -import { combineLatest, Subscription } from 'rxjs'; - -import { BackgroundTask } from 'app/shared/rxjs/background-task'; - -import { ShortestPathService } from '../services/shortest-path.service'; -import { DisplayType } from './route-display.component'; - -@Component({ - selector: 'app-route-builder', - templateUrl: './route-builder.component.html', - styleUrls: ['./route-builder.component.scss'] -}) -export class RouteBuilderComponent implements OnInit, OnDestroy { - @Output() loadNewQuery: EventEmitter; - @Output() changeDisplayType: EventEmitter; - - loadShortestPathQueries: BackgroundTask<[], any>; - queriesLoadedsub: Subscription; - - routeBuilderContainerClass: string; - - routeBuilderOpen: boolean; - - queries: string[][]; - - constructor( - public shortestPathService: ShortestPathService, - ) { - this.queries = []; - - this.routeBuilderContainerClass = 'route-builder-container-open'; - this.routeBuilderOpen = true; - - this.loadNewQuery = new EventEmitter(); - this.changeDisplayType = new EventEmitter(); - - this.loadShortestPathQueries = new BackgroundTask(() => { - return combineLatest( - this.shortestPathService.getShortestPathQueryList(), - ); - }); - this.queriesLoadedsub = this.loadShortestPathQueries.results$.subscribe(({ - result: [shortestPathQueries], - value: [], - }) => { - this.queries = Object.keys(shortestPathQueries).map(key => [key, shortestPathQueries[key]]); - }); - } - - ngOnInit() { - this.loadNewQuery.emit(0); - this.changeDisplayType.emit('NETWORK'); - this.loadShortestPathQueries.update([]); - } - - ngOnDestroy() { - this.queriesLoadedsub.unsubscribe(); - } - - toggleRouteBuilderOpen() { - this.routeBuilderOpen = !this.routeBuilderOpen; - this.routeBuilderContainerClass = this.routeBuilderOpen ? 'route-builder-container-open' : 'route-builder-container-closed'; - } - - requestQueryLoadFromParent(event: any) { - this.loadNewQuery.emit(Number.parseInt(event.target.value, 10)); - } - - requestChangeDisplayTypeFromParent(type: string) { - this.changeDisplayType.emit(type); - } -} diff --git a/client/src/app/shortest-path/components/route-display.component.html b/client/src/app/shortest-path/components/route-display.component.html deleted file mode 100644 index f0ba2043ec..0000000000 --- a/client/src/app/shortest-path/components/route-display.component.html +++ /dev/null @@ -1,18 +0,0 @@ -
    -
    -
    - -
    -
    - -
    -
    -
    diff --git a/client/src/app/shortest-path/components/route-display.component.scss b/client/src/app/shortest-path/components/route-display.component.scss deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/client/src/app/shortest-path/components/route-display.component.spec.ts b/client/src/app/shortest-path/components/route-display.component.spec.ts deleted file mode 100644 index e04e8f259d..0000000000 --- a/client/src/app/shortest-path/components/route-display.component.spec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { configureTestSuite } from 'ng-bullet'; -import { MockComponents } from 'ng-mocks'; - -import { PlotlySankeyDiagramComponent } from 'app/shared/components/plotly-sankey-diagram/plotly-sankey-diagram.component'; -import { VisJsNetworkComponent } from 'app/shared/components/vis-js-network/vis-js-network.component'; - -import { RouteDisplayComponent } from './route-display.component'; - -describe('RouteDisplayComponent', () => { - let component: RouteDisplayComponent; - let fixture: ComponentFixture; - - configureTestSuite(() => { - TestBed.configureTestingModule({ - declarations: [ - RouteDisplayComponent, - MockComponents( - PlotlySankeyDiagramComponent, - VisJsNetworkComponent - ) - ] - }); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(RouteDisplayComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/shortest-path/components/route-display.component.ts b/client/src/app/shortest-path/components/route-display.component.ts deleted file mode 100644 index 43a68748ee..0000000000 --- a/client/src/app/shortest-path/components/route-display.component.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { Component, Input } from '@angular/core'; - -import { isNil } from 'lodash-es'; -import { Options } from 'vis-network'; - -import { GraphData } from 'app/interfaces/vis-js.interface'; - -export enum DisplayType { - NETWORK = 'network', - SANKEY = 'sankey' -} - -@Component({ - selector: 'app-route-display', - templateUrl: './route-display.component.html', - styleUrls: ['./route-display.component.scss'] -}) -export class RouteDisplayComponent { - @Input() set displayType(displayType: DisplayType) { - this.currentDisplay = DisplayType[displayType]; - } - @Input() set graphData(graphData: GraphData) { - // Update vis js data - this.networkData = graphData; - - // Update sankey data - this.generateSankeyData(graphData.nodes, graphData.edges); - - // Update legend - this.setupLegend(graphData.nodes); - } - - currentDisplay: string; - - networkConfig: Options; - networkData: GraphData; - - sankeyConfig: any; - sankeyData: any; - - legend: Map; - - constructor() { - this.initVisJsSettings(); - this.initPlotlySankeySettings(); - this.legend = new Map(); - } - - initVisJsSettings() { - // Init vis js network settings - this.networkConfig = { - interaction: { - hover: true, - multiselect: true, - selectConnectedEdges: false, - }, - physics: { - enabled: true, - solver: 'barnesHut', - }, - edges: { - font: { - size: 12, - }, - length: 250, - widthConstraint: { - maximum: 90, - }, - }, - nodes: { - scaling: { - min: 25, - max: 50, - label: { - enabled: true, - min: 12, - max: 72, - maxVisible: 72, - drawThreshold: 5, - }, - }, - shape: 'box', - widthConstraint: { - maximum: 180, - }, - }, - }; - - this.networkData = { - nodes: [], - edges: [], - }; - } - - generateSankeyData(nodes: any[], edges: any[]) { - const source = []; - const target = []; - const value = []; - const label = []; - const color = []; - - const nodeIdentityMap = new Map(); - nodes.forEach((node, i) => { - nodeIdentityMap.set(node.id, i); - label.push(node.label); - color.push(node.color.border); - }); - - const seenEdges = new Map(); - edges.forEach(edge => { - const sankeyEdge = [nodeIdentityMap.get(edge.from), nodeIdentityMap.get(edge.to)]; - if (seenEdges.has(sankeyEdge.toString())) { - value[seenEdges.get(sankeyEdge.toString())] += 1; - } else { - source.push(sankeyEdge[0]); - target.push(sankeyEdge[1]); - value.push(1); - seenEdges.set(sankeyEdge.toString(), value.length - 1); - } - }); - - this.sankeyData = { - type: 'sankey', - orientation: 'h', - node: { - arrangement: 'snap', - pad: 15, - thickness: 20, - line: { - color: 'black', - width: 0.5 - }, - label, - color, - }, - - link: { - source, - target, - value - } - }; - } - - initPlotlySankeySettings() { - // Init plotly sankey settings - this.sankeyData = { - type: 'sankey', - orientation: 'h', - node: { - arrangement: 'snap', - pad: 15, - thickness: 20, - line: { - color: 'black', - width: 0.5 - }, - label: [], - color: [], - }, - - link: { - source: [], - target: [], - value: [] - } - }; - - this.sankeyConfig = { - font: { - size: 10 - } - }; - } - - /** - * Given a list of input nodes, generates a Map object representing a node legend. Keys are the label of the nodes, and values are a list - * of colors representing the border and background of the node. - * @param nodes list of node objects - */ - setupLegend(nodes: any) { - nodes.forEach((node) => { - if (!isNil(node.databaseLabel)) { - if (!this.legend.has(node.databaseLabel)) { - this.legend.set(node.databaseLabel, [node.color.border, node.color.background]); - } - } - }); - } - -} diff --git a/client/src/app/shortest-path/containers/route-search.component.html b/client/src/app/shortest-path/containers/route-search.component.html deleted file mode 100644 index 542f90ab00..0000000000 --- a/client/src/app/shortest-path/containers/route-search.component.html +++ /dev/null @@ -1 +0,0 @@ -

    route-search works!

    diff --git a/client/src/app/shortest-path/containers/route-search.component.scss b/client/src/app/shortest-path/containers/route-search.component.scss deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/client/src/app/shortest-path/containers/route-search.component.spec.ts b/client/src/app/shortest-path/containers/route-search.component.spec.ts deleted file mode 100644 index 7a5354fab2..0000000000 --- a/client/src/app/shortest-path/containers/route-search.component.spec.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { configureTestSuite } from 'ng-bullet'; - -import { RootStoreModule } from 'app/root-store'; - -import { RouteSearchComponent } from './route-search.component'; - -describe('RouteSearchComponent', () => { - let component: RouteSearchComponent; - let fixture: ComponentFixture; - - configureTestSuite(() => { - TestBed.configureTestingModule({ - imports: [ - RootStoreModule - ], - declarations: [ RouteSearchComponent ] - }); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(RouteSearchComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/shortest-path/containers/route-search.component.ts b/client/src/app/shortest-path/containers/route-search.component.ts deleted file mode 100644 index 10d8fa3313..0000000000 --- a/client/src/app/shortest-path/containers/route-search.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'app-route-search', - templateUrl: './route-search.component.html', - styleUrls: ['./route-search.component.scss'] -}) -export class RouteSearchComponent implements OnInit { - - constructor() { } - - ngOnInit() { - } - -} diff --git a/client/src/app/shortest-path/containers/shortest-path.component.html b/client/src/app/shortest-path/containers/shortest-path.component.html deleted file mode 100644 index 58514a26c1..0000000000 --- a/client/src/app/shortest-path/containers/shortest-path.component.html +++ /dev/null @@ -1,20 +0,0 @@ -
    - -
    - -
    - - - -
    - -
    -
    -
    diff --git a/client/src/app/shortest-path/containers/shortest-path.component.scss b/client/src/app/shortest-path/containers/shortest-path.component.scss deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/client/src/app/shortest-path/containers/shortest-path.component.spec.ts b/client/src/app/shortest-path/containers/shortest-path.component.spec.ts deleted file mode 100644 index 01988d548c..0000000000 --- a/client/src/app/shortest-path/containers/shortest-path.component.spec.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { configureTestSuite } from 'ng-bullet'; -import { MockComponents } from 'ng-mocks'; - -import { RootStoreModule } from 'app/root-store'; -import { SharedModule } from 'app/shared/shared.module'; - -import { RouteBuilderComponent } from '../components/route-builder.component'; -import { RouteDisplayComponent } from '../components/route-display.component'; -import { ShortestPathComponent } from './shortest-path.component'; - -describe('ShortestPathComponent', () => { - let component: ShortestPathComponent; - let fixture: ComponentFixture; - - configureTestSuite(() => { - TestBed.configureTestingModule({ - imports: [ - RootStoreModule, - SharedModule, - ], - declarations: [ - ShortestPathComponent, - MockComponents( - RouteBuilderComponent, - RouteDisplayComponent, - ), - ] - }); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(ShortestPathComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/shortest-path/containers/shortest-path.component.ts b/client/src/app/shortest-path/containers/shortest-path.component.ts deleted file mode 100644 index 9fa38e6a88..0000000000 --- a/client/src/app/shortest-path/containers/shortest-path.component.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { Component, OnDestroy } from '@angular/core'; - -import { combineLatest, Subscription } from 'rxjs'; - -import { GraphData } from 'app/interfaces/vis-js.interface'; -import { BackgroundTask } from 'app/shared/rxjs/background-task'; - -import { ShortestPathService } from '../services/shortest-path.service'; - - -@Component({ - selector: 'app-shortest-path', - templateUrl: './shortest-path.component.html', - styleUrls: ['./shortest-path.component.scss'] -}) -export class ShortestPathComponent implements OnDestroy { - - loadTask: BackgroundTask<[], any>; - shortestPathLoadedSub: Subscription; - - loadedQuery: number; - displayType: string; - graphData: GraphData; - - constructor( - public shortestPathService: ShortestPathService, - ) { - this.loadTask = new BackgroundTask(() => { - return combineLatest( - this.shortestPathService.getShortestPathQueryResult(this.loadedQuery), - ); - }); - this.shortestPathLoadedSub = this.loadTask.results$.subscribe(({ - result: [shortestPathResult], - value: [], - }) => { - this.graphData = { - nodes: shortestPathResult.nodes, - edges: shortestPathResult.edges, - }; - }); - } - - ngOnDestroy() { - this.shortestPathLoadedSub.unsubscribe(); - } - - changeDisplayType(type: string) { - this.displayType = type; - } - - loadNewQuery(query: number) { - this.graphData = null; - this.loadedQuery = query; - this.loadTask.update([]); - } -} diff --git a/client/src/app/shortest-path/services/shortest-path.service.ts b/client/src/app/shortest-path/services/shortest-path.service.ts deleted file mode 100644 index 84a4ba0337..0000000000 --- a/client/src/app/shortest-path/services/shortest-path.service.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; - -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; - -import { AuthenticationService } from 'app/auth/services/authentication.service'; -import { AbstractService } from 'app/shared/services/abstract-service'; - -@Injectable({ - providedIn: 'root' -}) -export class ShortestPathService extends AbstractService { - readonly kgAPI = '/api/knowledge-graph'; - - constructor(auth: AuthenticationService, http: HttpClient) { - super(auth, http); - } - - getShortestPathQueryResult(queryId: number): Observable { - return this.http.get<{result: any}>( - `${this.kgAPI}/shortest-path-query/${queryId}`, { - ...this.getHttpOptions(true), - } - ).pipe( - map((resp: any) => resp.result), - ); - } - - getShortestPathQueryList(): Observable { - return this.http.get<{result: Map}>( - `${this.kgAPI}/shortest-path-query-list`, { - ...this.getHttpOptions(true), - } - ).pipe( - map((resp: any) => resp.result), - ); - } -} diff --git a/client/src/app/shortest-path/shortest-path.module.ts b/client/src/app/shortest-path/shortest-path.module.ts deleted file mode 100644 index 13801d1634..0000000000 --- a/client/src/app/shortest-path/shortest-path.module.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; - -import { SharedModule } from 'app/shared/shared.module'; - -import { ShortestPathComponent } from './containers/shortest-path.component'; -import { RouteSearchComponent } from './containers/route-search.component'; -import { RouteBuilderComponent } from './components/route-builder.component'; -import { RouteDisplayComponent } from './components/route-display.component'; - -const components = [ - ShortestPathComponent, - RouteSearchComponent, - RouteBuilderComponent, - RouteDisplayComponent, -]; - -@NgModule({ - declarations: [...components], - imports: [ - CommonModule, - SharedModule, - ] -}) -export class ShortestPathModule { } diff --git a/deployment b/deployment deleted file mode 160000 index 0f1943080f..0000000000 --- a/deployment +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0f1943080f4dd462a64535248e2f63ede809faa2 diff --git a/docker-compose.ci-test.yml b/docker-compose.ci-test.yml index dec5adbd8c..2a85d2aae5 100644 --- a/docker-compose.ci-test.yml +++ b/docker-compose.ci-test.yml @@ -2,11 +2,11 @@ version: "3.8" x-appserver: &appserver + build: + context: appserver + dockerfile: Dockerfile image: lifelike.azurecr.io/kg-appserver:${GITHUB_HASH} environment: - - NEO4J_HOST=neo4j - - NEO4J_AUTH=neo4j/password - - NEO4J_PORT=7687 - FLASK_DEBUG=1 - FLASK_ENV=development - FLASK_APP=app @@ -33,7 +33,6 @@ x-appserver: &appserver depends_on: - postgres - elasticsearch - - neo4j - redis - arangodb @@ -52,13 +51,6 @@ services: environment: - POSTGRES_PASSWORD=postgres - neo4j: - image: neo4j:4.4-community - restart: on-failure - environment: - - NEO4J_AUTH=neo4j/password - - NEO4JLABS_PLUGINS=["apoc", "n10s"] - elasticsearch: image: ghcr.io/sbrg/lifelike-elasticsearch:latest restart: on-failure diff --git a/docker-compose.override.yml b/docker-compose.override.yml index ca4ec289d8..2df05883fb 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -2,8 +2,6 @@ version: "3.8" x-appserver: &appserver build: ./appserver - env_file: - - azure-secrets.env environment: # Log Services - FORMAT_AS_JSON=false diff --git a/docker/Makefile b/docker/Makefile index 1ca4de303e..44cc20abe2 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -3,7 +3,7 @@ DOCKER_REGISTRY:=us.gcr.io/able-goods-221820 # Base Docker Compose command -------------------------------------------------- # docker-compose.yml -> Base services containers -# docker-compose.services.yml -> Third party services (PostgreSQL, Neo4j, Elasticsearch, Redis) +# docker-compose.services.yml -> Third party services (PostgreSQL, ArangoDB, Elasticsearch, Redis) # docker-compose.dev.yml -> Override base services for local development COMPOSE_COMMAND=docker-compose -p lifelike \ -f ${DOCKER_DIR}/docker-compose.yml \ diff --git a/docker/README.md b/docker/README.md index 0296ad16ba..bc35a8cf69 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,3 +1,5 @@ + + # Getting Started with Lifelike using Docker Docker is an easy way to get started with Lifelike. @@ -50,7 +52,7 @@ The stack definition is divided into three Docker Compose files: ```tree ├── docker-compose.yml --> Base core services ├── docker-compose.dev.yml --> Overrides base core services for local development and debugging. -└── docker-compose.services.yml --> Adds third party services (PostgreSQL, Neo4j, Elasticsearch, Redis) +└── docker-compose.services.yml --> Adds third party services (PostgreSQL, ArangoDB, Elasticsearch, Redis) ``` You may combine them as you need and/or add your own `docker-compose.override.yml` to override any configuration. (this file will be ignored by Git) diff --git a/docker/diagram.svg b/docker/diagram.svg index e9b292e909..e3ddfdb2bf 100644 --- a/docker/diagram.svg +++ b/docker/diagram.svg @@ -3,7 +3,7 @@ entity appserver-->cache-invalidatorelasticsearchfrontendneo4jarangodbpdfparserpostgresredisdepends ondepends ondepends ondepends ondepends ondepends ondepends ondepends ondepends ondepends on \ No newline at end of file +--> diff --git a/docker/docker-compose.services.yml b/docker/docker-compose.services.yml index 1b18dcbfbf..ceae580e7c 100644 --- a/docker/docker-compose.services.yml +++ b/docker/docker-compose.services.yml @@ -5,7 +5,7 @@ version: "3.8" services: # PostgreSQL database postgres: - image: postgres:13 + image: postgres:11 restart: unless-stopped container_name: postgres environment: @@ -18,45 +18,52 @@ services: test: ["CMD", "pg_isready", "-U", "postgres", "-q"] start_period: 10s - ## Neo4j graph database - neo4j: - image: neo4j:4.4-community - restart: unless-stopped - container_name: neo4j + ## ArangoDB graph database + arangodb: + build: + # Note that this Dockerfile simply adds a user directory and installs the helper scripts into it, and then executes the default arango + # entrypoint as normal. + context: ../arangodb + dockerfile: Dockerfile + container_name: arangodb environment: - - NEO4J_AUTH=neo4j/password - - NEO4JLABS_PLUGINS=["apoc"] + ARANGO_ROOT_PASSWORD: password + LIFELIKE_DB_NAME: lifelike ports: - - 7687:7687 - - 7474:7474 + - 8529:8529 volumes: - - neo4j:/var/lib/neo4j/data - healthcheck: - test: ["CMD", "wget", "localhost:7474", "-O", "-"] - start_period: 1m + - ../arangodb/bin:/home/dbuser/bin # the /home/dbuser directory is setup in the Dockerfile + - ../arangodb/data:/var/lib/arangodb3 + - ../arangodb/apps:/var/lib/arangodb3-apps ## Ekasticsearch search engine elasticsearch: - image: ghcr.io/sbrg/lifelike-elasticsearch:7.16.3 - restart: unless-stopped container_name: elasticsearch + build: + dockerfile: Dockerfile + context: ../elasticsearch environment: - discovery.type=single-node + - http.max_content_length=200mb #allow 200mb of content to be sent for indexing - bootstrap.memory_lock=true - ports: - - 9200 + - xpack.graph.enabled=false + - xpack.watcher.enabled=false + - xpack.license.self_generated.type=basic volumes: - - elasticsearch:/usr/share/elasticsearch/data + - ../elasticsearch:/usr/share/elasticsearch/data ulimits: memlock: soft: -1 hard: -1 + ports: + - "9200:9200" + - "9300:9300" healthcheck: test: ["CMD", "curl", "-f", "localhost:9200/_cluster/health"] start_period: 1m redis: - image: redis:alpine + image: redis:6-alpine restart: unless-stopped container_name: redis ports: @@ -68,34 +75,43 @@ services: environment: - POSTGRES_HOST=postgres - POSTGRES_PASSWORD=postgres - - NEO4J_HOST=neo4j - - NEO4J_AUTH=neo4j/password + # Arango + - ARANGO_HOST=http://arangodb:8529 + - ARANGO_USERNAME=root + - ARANGO_PASSWORD=password + - ARANGO_DB_NAME=lifelike - ELASTICSEARCH_URL=http://elasticsearch:9200 - REDIS_HOST=redis depends_on: - postgres - - neo4j + - arangodb - elasticsearch statistical-enrichment: environment: - - NEO4J_HOST=neo4j - - NEO4J_AUTH=neo4j/password + # Arango + - ARANGO_HOST=http://arangodb:8529 + - ARANGO_USERNAME=root + - ARANGO_PASSWORD=password + - ARANGO_DB_NAME=lifelike - REDIS_HOST=redis depends_on: - - neo4j + - arangodb - redis cache-invalidator: environment: - - NEO4J_HOST=neo4j - - NEO4J_AUTH=neo4j/password + # Arango + - ARANGO_HOST=http://arangodb:8529 + - ARANGO_USERNAME=root + - ARANGO_PASSWORD=password + - ARANGO_DB_NAME=lifelike - REDIS_HOST=redis depends_on: - - neo4j + - arangodb - redis volumes: postgres: - neo4j: + arangodb: elasticsearch: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 556013ab1b..48dd0de11d 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -3,7 +3,9 @@ version: "3.8" services: ## Frontend web server frontend: - image: ghcr.io/sbrg/lifelike-frontend:${FRONTEND_IMAGE_TAG:-latest} + build: + context: ../client + dockerfile: Dockerfile restart: unless-stopped container_name: frontend environment: @@ -15,7 +17,9 @@ services: ## Backend application server appserver: - image: ghcr.io/sbrg/lifelike-appserver:${APPSERVER_IMAGE_TAG:-latest} + build: + context: ../appserver + dockerfile: Dockerfile restart: unless-stopped container_name: appserver ports: @@ -43,7 +47,9 @@ services: ## Statistical enrichment service statistical-enrichment: - image: ghcr.io/sbrg/lifelike-statistical-enrichment:${STATISTICAL_ENRICHMENT_IMAGE_TAG:-latest} + build: + context: ../statistical-enrichment + dockerfile: Dockerfile restart: unless-stopped container_name: statistical-enrichment ports: @@ -51,7 +57,9 @@ services: # Cache invalidator service cache-invalidator: - image: ghcr.io/sbrg/lifelike-cache-invalidator:${CACHE_INVALIDATOR_IMAGE_TAG:-latest} + build: + context: ../cache-invalidator + dockerfile: Dockerfile restart: unless-stopped container_name: cache-invalidator diff --git a/docs/wiki/development/general-introduction.md b/docs/wiki/development/general-introduction.md index 919c4609ec..d64d279805 100644 --- a/docs/wiki/development/general-introduction.md +++ b/docs/wiki/development/general-introduction.md @@ -101,7 +101,7 @@ For `$container_name`, you have a choice of: docker compose exec pgdatabase psql -U postgres -h pgdatabase -d postgres ``` -### Neo4j +### ArangoDB ```sh docker compose exec database cypher-shell -u neo4j diff --git a/docs/wiki/elk/introduction.md b/docs/wiki/elk/introduction.md index 05f64707f0..901a30c5c2 100644 --- a/docs/wiki/elk/introduction.md +++ b/docs/wiki/elk/introduction.md @@ -7,8 +7,6 @@ - To seed LMDB data to Kibana: ```bash -./deployment/kibana.sh -a None -# or docker compose exec appserver python neo4japp/services/annotations/index_annotations.py -a ``` diff --git a/graph-db/docker-compose.yml b/graph-db/docker-compose.yml index 04adee3783..ca11a7fb66 100644 --- a/graph-db/docker-compose.yml +++ b/graph-db/docker-compose.yml @@ -1,25 +1,27 @@ version: "3.8" +# Hasn't been migrated to Arango - not working + services: - neo4j: - image: neo4j:4.4-community + arangodb: + image: arangodb:4.4-community restart: on-failure environment: - - NEO4J_AUTH=neo4j/password - - NEO4JLABS_PLUGINS=["apoc"] - - NEO4J_dbms.unmanaged_extension_classes=n10s.endpoint=/rdf # for the neosemantics-4.3.0.0.jar + - ARANGODB_AUTH=arangodb/password + - ARANGODBLABS_PLUGINS=["apoc"] + - ARANGODB_dbms.unmanaged_extension_classes=n10s.endpoint=/rdf # for the neosemantics-4.3.0.0.jar ports: - 7687:7687 - 7474:7474 volumes: - - neo4j:/var/lib/neo4j/data + - arangodb:/var/lib/arangodb/data migrator: build: context: migrator environment: - - NEO4J_HOST=neo4j - - NEO4J_PASSWORD=password + - ARANGODB_HOST=arangodb + - ARANGODB_PASSWORD=password - CHANGELOG_FILE=lifelike-graph/changelog-master.xml - DATAFILES_PREFIX=stage - LOG_LEVEL=debug @@ -29,9 +31,9 @@ services: - ./changelog:/liquibase/changelog - ./tmp:/tmp depends_on: - - neo4j + - arangodb links: - - neo4j + - arangodb volumes: - neo4j: {} + arangodb: {} diff --git a/graph-db/docs/reactome/Reactome GDS.ipynb b/graph-db/docs/reactome/Reactome GDS.ipynb index 71a35cdb79..e0ced77a15 100644 --- a/graph-db/docs/reactome/Reactome GDS.ipynb +++ b/graph-db/docs/reactome/Reactome GDS.ipynb @@ -92,9 +92,9 @@ "source": [ "load_dotenv() # These params are set in .env file\n", "\n", - "URI = os.getenv(\"NEO4J_URI\")\n", - "AUTH = (os.getenv(\"NEO4J_USER\"), os.getenv(\"NEO4J_PASSWORD\"))\n", - "DATABASE = os.getenv(\"NEO4J_DATABASE\")\n", + "URI = os.getenv(\"ARANGODB_URI\")\n", + "AUTH = (os.getenv(\"ARANGODB_USER\"), os.getenv(\"ARANGODB_PASSWORD\"))\n", + "DATABASE = os.getenv(\"ARANGODB_DATABASE\")\n", "\n", "driver = GraphDatabase.driver(URI, auth=AUTH)\n", "with driver as session:\n", diff --git a/graph-db/migrator/Dockerfile b/graph-db/migrator/Dockerfile index 2f15ee818e..0348bc17b9 100644 --- a/graph-db/migrator/Dockerfile +++ b/graph-db/migrator/Dockerfile @@ -20,23 +20,23 @@ RUN mvn -B clean package -DskipTests FROM liquibase/liquibase:$LIQUIBASE_IMAGE_TAG LABEL org.opencontainers.image.source https://github.com/SBRG/lifelike -ARG LIQUIBASE_NEO4J_VERSION=4.7.1.3 -ARG NEO4J_JDBC_VERSION=4.0.5 +ARG LIQUIBASE_ARANGODB_VERSION=4.7.1.3 +ARG ARANGODB_JDBC_VERSION=4.0.5 -# Install liquibase-neo4j extension -RUN lpm update && lpm add --global liquibase-neo4j@$LIQUIBASE_NEO4J_VERSION +# Install liquibase-arangodb extension +RUN lpm update && lpm add --global liquibase-arangodb@$LIQUIBASE_ARANGODB_VERSION -# Download Neo4j JDBC driver -ADD --chown=liquibase:liquibase https://github.com/neo4j-contrib/neo4j-jdbc/releases/download/${NEO4J_JDBC_VERSION}/neo4j-jdbc-driver-${NEO4J_JDBC_VERSION}.jar lib/ +# Download ArangoDB JDBC driver +ADD --chown=liquibase:liquibase https://github.com/arangodb-contrib/arangodb-jdbc/releases/download/${ARANGODB_JDBC_VERSION}/arangodb-jdbc-driver-${ARANGODB_JDBC_VERSION}.jar lib/ # Copy JAR from build stage COPY --from=build --chown=liquibase:liquibase /target/graphdb-migrator-*.jar ./lib -# Neo4j database configuration -ENV NEO4J_HOST= -ENV NEO4J_USERNAME=neo4j -ENV NEO4J_PASSWORD=neo4j -ENV NEO4J_DATABASE=neo4j +# ArangoDB database configuration +ENV ARANGODB_HOST= +ENV ARANGODB_USERNAME=arangodb +ENV ARANGODB_PASSWORD=arangodb +ENV ARANGODB_DATABASE=arangodb # Master changelog file. e.g. lifelike-graph/changelog-master.xml ENV CHANGELOG_FILE= diff --git a/graph-db/migrator/README.md b/graph-db/migrator/README.md index 2e019af219..edcdb210c6 100644 --- a/graph-db/migrator/README.md +++ b/graph-db/migrator/README.md @@ -1,6 +1,8 @@ +# Legacy - not used anymore + # Lifelike Graph DB migrator -Liquibase based migrator for Neo4j +Liquibase based migrator for ArangoDB ## Run with Docker @@ -9,8 +11,8 @@ To run migrations from Lifelike Docker registry latest image, you can run the fo ```bash # Update using bundled changelog files docker run --rm \ - --env NEO4J_HOST=neo4j:7687 \ - --env NEO4J_PASSWORD=password \ + --env ARANGODB_HOST=neo4j:7687 \ + --env ARANGODB_PASSWORD=password \ --env AZURE_ACCOUNT_STORAGE_NAME=lifelike \ --env AZURE_ACCOUNT_STORAGE_KEY= \ --env CHANGELOG_DIR=lifelike-graph \ @@ -28,10 +30,10 @@ docket run --rm \ | Variable | Default | Comment | | -------------------------- | -------------- | ----------------------------------- | | CHANGELOG_DIR | lifelike-graph | Master changelog directory path | -| NEO4J_HOST | | Host and port of Neo4j instance | -| NEO4J_USERNAME | neo4j | Neo4j authentication username | -| NEO4J_PASSWORD | password | Neo4j authentication password | -| NEO4J_DATABASE | neo4j | Neo4j target database | +| ARANGODB_HOST | | Host and port of ArangoDB instance | +| ARANGODB_USERNAME | neo4j | ArangoDB authentication username | +| ARANGODB_PASSWORD | password | ArangoDB authentication password | +| ARANGODB_DATABASE | neo4j | ArangoDB target database | | STORAGE_TYPE | azure | Remote storage type to get TSV data | | AZURE_ACCOUNT_STORAGE_NAME | | Azure Storage Account Name | | AZURE_ACCOUNT_STORAGE_KEY | | Azure Storage Key | @@ -42,5 +44,5 @@ docket run --rm \ | Argument | Default value | Comment | | ----------------------- | ------------- | ------- | | LIQUIBASE_IMAGE_TAG | 4.6 | Tag of the [Liquibase Docker image](https://hub.docker.com/r/liquibase/liquibase/tags) to use | -| LIQUIBASE_NEO4J_VERSION | 4.6.2 | [Liquibase-Neo4j plugin](https://github.com/liquibase/liquibase-neo4j) version to install | -| NEO4J_JDBC_VERSION | 4.0.5 | Neo4j JDBC driver version | +| LIQUIBASE_ARANGODB_VERSION | 4.6.2 | [Liquibase-ArangoDB plugin](https://github.com/liquibase/liquibase-neo4j) version to install | +| ARANGODB_JDBC_VERSION | 4.0.5 | ArangoDB JDBC driver version | diff --git a/graph-db/migrator/docker-entrypoint.sh b/graph-db/migrator/docker-entrypoint.sh index 01c4e0149c..1b7b5095ab 100755 --- a/graph-db/migrator/docker-entrypoint.sh +++ b/graph-db/migrator/docker-entrypoint.sh @@ -13,12 +13,12 @@ else liquibase "$@" else ## Validate envrioment variables - if [ -z "$NEO4J_HOST" ]; then - echo "NEO4J_HOST environment variable is not set. Please set it to the hostname or IP address of the Neo4j server." + if [ -z "$ARANGODB_HOST" ]; then + echo "ARANGODB_HOST environment variable is not set. Please set it to the hostname or IP address of the ArangoDB server." exit 1 - elif [[ "$NEO4J_HOST" != *":"* ]]; then + elif [[ "$ARANGODB_HOST" != *":"* ]]; then ## If no port is specified, use the default one - NEO4J_HOST="$NEO4J_HOST:7687" + ARANGODB_HOST="$ARANGODB_HOST:7687" fi if [ "$STORAGE_TYPE" != "azure" ]; then echo "STORAGE_TYPE environment is set to an invalid valie. `azure` is currently only supported." @@ -33,21 +33,21 @@ else exit 1 fi - ## Wait until Neo4j is available - /wait-for-it.sh "$NEO4J_HOST" --timeout=600 -- echo "Neo4j is up" + ## Wait until ArangoDB is available + /wait-for-it.sh "$ARANGODB_HOST" --timeout=600 -- echo "ArangoDB is up" ## Include standard defaultsFile liquibase \ - --url="jdbc:neo4j:bolt://$NEO4J_HOST?database=${NEO4J_DATABASE:-neo4j}" \ - --username="$NEO4J_USERNAME" \ - --password="$NEO4J_PASSWORD" \ + --url="jdbc:neo4j:bolt://$ARANGODB_HOST?database=${ARANGODB_DATABASE:-neo4j}" \ + --username="$ARANGODB_USERNAME" \ + --password="$ARANGODB_PASSWORD" \ --changelog-file="$CHANGELOG_FILE" \ --log-level="$LOG_LEVEL" \ --defaults-file=/liquibase/liquibase.docker.properties \ "$@" \ - -Dneo4jHost="bolt://$NEO4J_HOST" \ - -Dneo4jCredentials="$NEO4J_USERNAME,$NEO4J_PASSWORD" \ - -Dneo4jDatabase="${NEO4J_DATABASE:-neo4j}" \ + -Dneo4jHost="bolt://$ARANGODB_HOST" \ + -Dneo4jCredentials="$ARANGODB_USERNAME,$ARANGODB_PASSWORD" \ + -Dneo4jDatabase="${ARANGODB_DATABASE:-neo4j}" \ -DazureStorageName="$AZURE_ACCOUNT_STORAGE_NAME" \ -DazureStorageKey="$AZURE_ACCOUNT_STORAGE_KEY" \ -DlocalSaveFileDir=/tmp \ diff --git a/helm/lifelike/Chart.lock b/helm/lifelike/Chart.lock index d89a3eebfc..b93530d606 100644 --- a/helm/lifelike/Chart.lock +++ b/helm/lifelike/Chart.lock @@ -2,9 +2,9 @@ dependencies: - name: postgresql repository: https://charts.bitnami.com/bitnami version: 11.0.4 -- name: neo4j - repository: https://neo4j-contrib.github.io/neo4j-helm - version: 4.4.3 +- name: kube-arangodb + repository: https://github.com/arangodb/kube-arangodb + version: 1.2.39 - name: elasticsearch repository: https://helm.elastic.co version: 7.16.3 diff --git a/helm/lifelike/Chart.yaml b/helm/lifelike/Chart.yaml index ee409bf66f..e69ad794cc 100644 --- a/helm/lifelike/Chart.yaml +++ b/helm/lifelike/Chart.yaml @@ -25,10 +25,10 @@ dependencies: repository: https://charts.bitnami.com/bitnami version: 11.0.4 condition: postgresql.enabled - - name: neo4j + - name: kube-arangodb version: 4.4.3 - repository: https://neo4j-contrib.github.io/neo4j-helm - condition: neo4j.enabled + repository: https://github.com/arangodb/kube-arangodb + condition: 1.2.39 - name: elasticsearch version: 7.16.3 repository: https://helm.elastic.co diff --git a/helm/lifelike/README.md b/helm/lifelike/README.md index 25051e94bc..6fa2107749 100644 --- a/helm/lifelike/README.md +++ b/helm/lifelike/README.md @@ -22,7 +22,7 @@ Kubernetes: `>=1.20.0-0` | https://charts.bitnami.com/bitnami | postgresql | 11.0.4 | | https://charts.bitnami.com/bitnami | redis | 16.2.0 | | https://helm.elastic.co | elasticsearch | 7.16.3 | -| https://neo4j-contrib.github.io/neo4j-helm | neo4j | 4.4.3 | +| https://github.com/arangodb/kube-arangodb | kube-arangodb | 1.2.39 | ## Values @@ -40,11 +40,11 @@ Kubernetes: `>=1.20.0-0` | statisticalEnrichment | object | `{"image":{"repository":"ghcr.io/sbrg/lifelike-statistical-enrichment","tag":""},"livenessProbe":{"enabled":true,"failureThreshold":20,"initialDelaySeconds":20,"path":"/healthz","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10},"readinessProbe":{"enabled":true,"failureThreshold":20,"initialDelaySeconds":20,"path":"/healthz","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10},"replicaCount":1,"resources":{},"service":{"port":5000,"type":"ClusterIP"}}` | ---------------------------------------------------------------------------- | | pdfparser | object | `{"autoScaling":{"enabled":false,"maxReplicas":4,"minReplicas":2,"targetCPUUtilizationPercentage":80,"targetMemoryUtilizationPercentage":80},"image":{"repository":"ghcr.io/sbrg/lifelike-pdfparser","tag":"latest"},"livenessProbe":{"enabled":true,"failureThreshold":20,"initialDelaySeconds":20,"path":"/","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10},"readinessProbe":{"enabled":true,"failureThreshold":20,"initialDelaySeconds":20,"path":"/","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10},"replicaCount":1,"resources":{},"service":{"port":7600,"type":"ClusterIP"}}` | ---------------------------------------------------------------------------- | | postgresqlExternal | object | `{"database":"postgres","existingSecret":"","host":"postgres.local","password":"password","port":5432,"user":"postgres"}` | ---------------------------------------------------------------------------- | -| neo4jExternal.host | string | `"neo4j.local"` | | -| neo4jExternal.port | int | `7687` | | -| neo4jExternal.user | string | `"neo4j"` | | -| neo4jExternal.password | string | `"password"` | | -| neo4jExternal.database | string | `"neo4j"` | | +| arangodbExternal.host | string | `"arangodb.local"` | | +| arangodbExternal.port | int | `7687` | | +| arangodbExternal.user | string | `"arangodb"` | | +| arangodbExternal.password | string | `"password"` | | +| arangodbExternal.database | string | `"arangodb"` | | | redisExternal.host | string | `"redis.local"` | | | redisExternal.port | int | `6379` | | | redisExternal.password | string | `""` | | @@ -55,7 +55,7 @@ Kubernetes: `>=1.20.0-0` | elasticsearchExternal.ssl | bool | `false` | | | postgresql | object | `{"auth":{"database":"database","postgresPassword":"password"},"enabled":true}` | ---------------------------------------------------------------------------- | | postgresql.enabled | bool | `true` | Set to false to disable automatic deployment of PostgreSQL | -| neo4j | object | `{"core":{"numberOfServers":1,"persistentVolume":{"size":"100Gi"},"standalone":true},"enabled":true,"imageTag":"4.4.3-community","neo4jPassword":"password"}` | ---------------------------------------------------------------------------- | +| arangodb | object | `{"core":{"numberOfServers":1,"persistentVolume":{"size":"100Gi"},"standalone":true},"enabled":true,"imageTag":"4.4.3-community","arangodbPassword":"password"}` | ---------------------------------------------------------------------------- | | elasticsearch | object | `{"enabled":true,"esConfig":{"elasticsearch.yml":"node.store.allow_mmap: false\n"},"fullnameOverride":"elasticsearch","image":"ghcr.io/sbrg/lifelike-elasticsearch","imageTag":"7.16.3","volumeClaimTemplate":{"resources":{"requests":{"storage":"30Gi"}}}}` | ---------------------------------------------------------------------------- | | redis | object | `{"auth":{"password":"password"},"commonConfiguration":"# Disable persistence to disk\nsave \"\"\n# Disable AOF https://redis.io/topics/persistence#append-only-file\nappendonly no","enabled":true,"master":{"extraFlags":["--maxmemory-policy allkeys-lru"],"persistence":{"enabled":false}},"replica":{"extraFlags":["--maxmemory-policy allkeys-lru"],"persistence":{"enabled":false}}}` | ---------------------------------------------------------------------------- | diff --git a/helm/lifelike/examples/external-db.yaml b/helm/lifelike/examples/external-db.yaml index 69fbebdb47..edeb47c4fc 100644 --- a/helm/lifelike/examples/external-db.yaml +++ b/helm/lifelike/examples/external-db.yaml @@ -1,6 +1,6 @@ ## This is an example values files for installing Lifelike Helm chart ## connecting to external existing database services -## instead of installing the embedded subcharts (postgres, neo4j and elasticsearch) +## instead of installing the embedded subcharts (postgres, arangodb and elasticsearch) # Disable the embedded PostgreSQL subchart @@ -14,14 +14,14 @@ postgresqlExternal: database: postgres password: password -# Disable embedded Neo4j subchart -neo4j: +# Disable embedded ArangoDB subchart +arangodb: enabled: false -# Configure external Neo4j database -neo4jExternal: - host: neo4j.local +# Configure external ArangoDB database +arangodbExternal: + host: arangodb.local port: 7687 - user: neo4j + user: arangodb password: password # Disable embedded Elasticsearch subchart diff --git a/helm/lifelike/templates/_helpers.tpl b/helm/lifelike/templates/_helpers.tpl index 7823c85cb0..09defdf5ea 100644 --- a/helm/lifelike/templates/_helpers.tpl +++ b/helm/lifelike/templates/_helpers.tpl @@ -163,18 +163,18 @@ Set postgres secretKey {{/* ---------------------------------------------------------------------- */}} -{{/* Neo4J */}} +{{/* ArangoDB */}} {{/* ---------------------------------------------------------------------- */}} {{/* Create a default fully qualified app name. We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). */}} -{{- define "lifelike.neo4j.fullname" -}} -{{- if .Values.neo4j.fullnameOverride -}} -{{- .Values.neo4j.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- define "lifelike.arangodb.fullname" -}} +{{- if .Values.arangodb.fullnameOverride -}} +{{- .Values.arangodb.fullnameOverride | trunc 63 | trimSuffix "-" -}} {{- else -}} -{{- $name := default "neo4j" .Values.neo4j.nameOverride -}} +{{- $name := default "arangodb" .Values.arangodb.nameOverride -}} {{- if contains $name .Release.Name -}} {{- .Release.Name | trunc 63 | trimSuffix "-" -}} {{- else -}} @@ -184,57 +184,57 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this {{- end -}} {{/* -Return the Neo4j hostname +Return the ArangoDB hostname */}} -{{- define "lifelike.neo4jHost" -}} -{{- if .Values.neo4j.enabled }} - {{- printf "%s" (include "lifelike.neo4j.fullname" .) -}} +{{- define "lifelike.arangodbHost" -}} +{{- if .Values.arangodb.enabled }} + {{- printf "%s" (include "lifelike.arangodb.fullname" .) -}} {{- else -}} - {{- printf "%s" .Values.neo4jExternal.host -}} + {{- printf "%s" .Values.arangodbExternal.host -}} {{- end -}} {{- end -}} {{/* -Return the Neo4j port +Return the ArangoDB port */}} -{{- define "lifelike.neo4jPort" -}} -{{- if .Values.neo4j.enabled }} +{{- define "lifelike.arangodbPort" -}} +{{- if .Values.arangodb.enabled }} {{- printf "7687" -}} {{- else -}} - {{- .Values.neo4jExternal.port -}} + {{- .Values.arangodbExternal.port -}} {{- end -}} {{- end -}} {{/* -Return the Neo4j user +Return the ArangoDB user */}} -{{- define "lifelike.neo4jUser" -}} -{{- if .Values.neo4j.enabled }} - {{- printf "neo4j" -}} +{{- define "lifelike.arangodbUser" -}} +{{- if .Values.arangodb.enabled }} + {{- printf "arangodb" -}} {{- else -}} - {{- printf "%s" .Values.neo4jExternal.user -}} + {{- printf "%s" .Values.arangodbExternal.user -}} {{- end -}} {{- end -}} {{/* -Return the Neo4j password +Return the ArangoDB password */}} -{{- define "lifelike.neo4jPassword" -}} -{{- if .Values.neo4j.enabled }} - {{- printf "%s" .Values.neo4j.neo4jPassword -}} +{{- define "lifelike.arangodbPassword" -}} +{{- if .Values.arangodb.enabled }} + {{- printf "%s" .Values.arangodb.arangodbPassword -}} {{- else -}} - {{- printf "%s" .Values.neo4jExternal.password -}} + {{- printf "%s" .Values.arangodbExternal.password -}} {{- end -}} {{- end -}} {{/* -Return the Neo4j database name +Return the ArangoDB database name */}} -{{- define "lifelike.neo4jDatabase" -}} -{{- if .Values.neo4j.enabled }} - {{- default "neo4j" .Values.neo4j.defaultDatabase -}} +{{- define "lifelike.arangodbDatabase" -}} +{{- if .Values.arangodb.enabled }} + {{- default "arangodb" .Values.arangodb.defaultDatabase -}} {{- else -}} - {{- default "neo4j" .Values.neo4jExternal.database -}} + {{- default "arangodb" .Values.arangodbExternal.database -}} {{- end -}} {{- end -}} @@ -282,7 +282,7 @@ Return the Elasticsearch port {{- end -}} {{/* -Return the Neo4j user +Return the ArangoDB user */}} {{- define "lifelike.elasticsearchUser" -}} {{- if .Values.elasticsearch.enabled }} @@ -472,17 +472,17 @@ PostgreSQL environment variables helper {{/* -Neo4j environment variables helper +ArangoDB environment variables helper */}} -{{- define "lifelike.neo4jEnv" -}} -- name: NEO4J_HOST - value: {{ template "lifelike.neo4jHost" . }} -- name: NEO4J_PORT - value: {{ include "lifelike.neo4jPort" . | quote }} -- name: NEO4J_AUTH - value: {{ template "lifelike.neo4jUser" . }}/{{ template "lifelike.neo4jPassword" . }} -- name: NEO4J_DB - value: {{ template "lifelike.neo4jDatabase" . }} +{{- define "lifelike.arangodbEnv" -}} +- name: ARANGODB_HOST + value: {{ template "lifelike.arangodbHost" . }} +- name: ARANGODB_PORT + value: {{ include "lifelike.arangodbPort" . | quote }} +- name: ARANGODB_AUTH + value: {{ template "lifelike.arangodbUser" . }}/{{ template "lifelike.arangodbPassword" . }} +- name: ARANGODB_DB + value: {{ template "lifelike.arangodbDatabase" . }} {{- end -}} diff --git a/helm/lifelike/templates/api/deployment.yaml b/helm/lifelike/templates/api/deployment.yaml index 3b2f5dc0cd..38b09da121 100644 --- a/helm/lifelike/templates/api/deployment.yaml +++ b/helm/lifelike/templates/api/deployment.yaml @@ -47,14 +47,14 @@ spec: - --port={{ template "lifelike.postgresqlPort" . }} - --timeout={{ default 30 .Values.api.dbWaiter.timeoutSeconds }} {{- end }} - {{- if .Values.neo4j.enabled }} - - name: wait-for-neo4j + {{- if .Values.arangodb.enabled }} + - name: wait-for-arangodb image: {{ .Values.api.dbWaiter.image.repository }}:{{ .Values.api.dbWaiter.image.tag }} imagePullPolicy: {{ default "IfNotPresent" .Values.api.dbWaiter.image.imagePullPolicy }} command: - /wait-for-it.sh - - --host={{ template "lifelike.neo4jHost" . }} - - --port={{ template "lifelike.neo4jPort" . }} + - --host={{ template "lifelike.arangodbHost" . }} + - --port={{ template "lifelike.arangodbPort" . }} - --timeout={{ default 30 .Values.api.dbWaiter.timeoutSeconds }} {{- end }} - name: migrate-db diff --git a/helm/lifelike/values.schema.json b/helm/lifelike/values.schema.json index 9fc39fb453..84cd16eeca 100644 --- a/helm/lifelike/values.schema.json +++ b/helm/lifelike/values.schema.json @@ -363,7 +363,7 @@ } } }, - "neo4j": { + "arangodb": { "type": "object", "properties": { "core": { @@ -391,12 +391,12 @@ "imageTag": { "type": "string" }, - "neo4jPassword": { + "arangodbPassword": { "type": "string" } } }, - "neo4jExternal": { + "arangodbExternal": { "type": "object", "properties": { "database": { diff --git a/helm/lifelike/values.yaml b/helm/lifelike/values.yaml index 915f62b3f6..aed8f642e8 100644 --- a/helm/lifelike/values.yaml +++ b/helm/lifelike/values.yaml @@ -207,7 +207,7 @@ statisticalEnrichment: periodSeconds: 10 successThreshold: 1 timeoutSeconds: 10 - + service: type: ClusterIP port: 5000 @@ -282,13 +282,13 @@ postgresqlExternal: ## -- Read password from an existing secret, must contain key "postgres-password" existingSecret: "" -## -- External Neo4j connection details, ignored if neo4j.enabled is set to true -neo4jExternal: - host: neo4j.local +## -- External ArangoDB connection details, ignored if arangodb.enabled is set to true +arangodbExternal: + host: arangodb.local port: 7687 - user: neo4j + user: arangodb password: password - database: neo4j + database: arangodb ## -- External Redis connection details, ignored if redis.enabled is set to true @@ -328,19 +328,19 @@ postgresql: database: database # ------------------------------------------------------------------------------ -# Neo4j database +# ArangoDB database # ------------------------------------------------------------------------------ -## -- Embedded Neo4j subchart deployment -## -- See all available values: https://github.com/neo4j-contrib/neo4j-helm/blob/master/values.yaml -neo4j: - ## -- Set to false to disable automatic deployment of Neo4j +## -- Embedded ArangoDB subchart deployment +## -- See all available values: https://github.com/arangodb-contrib/arangodb-helm/blob/master/values.yaml +arangodb: + ## -- Set to false to disable automatic deployment of ArangoDB enabled: true imageTag: 4.4.3-community - ## -- Neo4j password - neo4jPassword: password + ## -- ArangoDB password + arangodbPassword: password core: ## -- Whether to deploy a standalone server or a replicated cluster diff --git a/keycloak b/keycloak deleted file mode 160000 index 738310c786..0000000000 --- a/keycloak +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 738310c786fafb5b1f2f15c3c313e8cb535fe287 diff --git a/lifelike-oss b/lifelike-oss deleted file mode 160000 index 034c727d7c..0000000000 --- a/lifelike-oss +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 034c727d7c5cafbfdcc022fb0ffdadc727b2fdca diff --git a/makefile b/makefile index d0adea1d44..a6d04e8ddf 100644 --- a/makefile +++ b/makefile @@ -1,19 +1,6 @@ APPSERVER_PATH=./appserver -ANSIBLE_PATH=./deployment/ansible LMDB_PATH = $(APPSERVER_PATH)/neo4japp/services/annotations/lmdb -# Fetches the password to unlock Ansible vault files -ansible-secrets: - az storage blob download --account-name lifelike --container-name lifelike-secrets --name .vault_secrets_pw --file $(ANSIBLE_PATH)/.vault_secrets_pw --auth-mode login - -# Fetches the credentials (env file) for Azure services -azure-secrets: - az storage blob download --account-name lifelike --container-name lifelike-secrets --name azure-secrets.env --file ./azure-secrets.env --auth-mode login - -# Log into azure container registry -container-login: - az acr login --name lifelike - # Fetches the LMDB files needed to run the application lmdb: docker compose up -d appserver @@ -22,7 +9,7 @@ lmdb: # Sets up everything you need to run the application # Mostly used for first time dev environment setup -init: ansible-secrets azure-secrets container-login githooks docker-build lmdb +init: githooks docker-build lmdb # Sets up commit hooks for linting githooks: @@ -32,11 +19,11 @@ docker-build: docker compose build # Runs enough containers for the application to function -docker-run: azure-secrets container-login lmdb +docker-run: lmdb docker compose up -d # Runs additional containers such as Kibana/Logstash/Filebeat -docker-run-all: azure-secrets container-login lmdb +docker-run-all: lmdb docker compose -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.middleware.yml up -d docker-stop: diff --git a/statistical-enrichment/Dockerfile b/statistical-enrichment/Dockerfile index a9e34baaf2..0bbc5c830d 100644 --- a/statistical-enrichment/Dockerfile +++ b/statistical-enrichment/Dockerfile @@ -1,7 +1,7 @@ # ======================================== # Base image # ======================================== -FROM python:3.10-slim as base +FROM python:3.8-slim as base ENV LANG C.UTF-8 ENV LC_ALL C.UTF-8 @@ -45,11 +45,11 @@ USER app # Copy application code COPY --chown=app . . -# Neo4j configuration -ENV NEO4J_HOST=neo4j -ENV NEO4J_PORT=7687 -ENV NEO4J_AUTH=neo4j/password -ENV NEO4J_SCHEME=bolt +# ArangoDB configuration +ENV ARANGODB_HOST='' +ENV ARANGODB_PORT='' +ENV ARANGODB_AUTH='' +ENV ARANGODB_SCHEME='' # Redis cache configuration ENV REDIS_HOST=redis diff --git a/website b/website deleted file mode 160000 index 81ad65ebf3..0000000000 --- a/website +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 81ad65ebf32776cbcfff37f40fc10c540fc7074f