From 641cba876815d88b9f635e1dec0ee1e3fff4b11d Mon Sep 17 00:00:00 2001 From: bahill Date: Wed, 20 Nov 2024 14:53:20 -0500 Subject: [PATCH 1/7] poetry was getting confused over python vs python3 during pkg installs - this resolved the issue. --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index ed4bf710..3e61efee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,7 @@ ENV LANG='en_US.UTF-8' \ SBT_VERSION=1.7.1 # Install some helpful tools not included in the base image, as well as set up for JDK install +# python-is-python3 makes python3 the default, to avoid issues with poetry RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive \ && apt-get install -yqq --no-install-recommends \ @@ -20,6 +21,7 @@ RUN apt-get update \ git \ gnupg \ locales \ + python-is-python3 \ sudo \ tzdata \ unzip \ From 8ce0a3127ea358fa521bbfa43b9a64edf5828daf Mon Sep 17 00:00:00 2001 From: bahill Date: Wed, 20 Nov 2024 14:55:02 -0500 Subject: [PATCH 2/7] FE-350 updated manifest.py to accept a csv with a new value for public (No/Yes), so that we filter out Managed Access (Yes) data from the final partition set which will make snapshots public. --- orchestration/hca_manage/manifest.py | 31 +++++++++++++++++++--------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/orchestration/hca_manage/manifest.py b/orchestration/hca_manage/manifest.py index a1041a91..32b88f87 100644 --- a/orchestration/hca_manage/manifest.py +++ b/orchestration/hca_manage/manifest.py @@ -92,8 +92,9 @@ def _sanitize_gs_path(path: str) -> str: def _parse_csv(csv_path: str, env: str, project_id_only: bool = False, - include_release_tag: bool = False, release_tag: str = "") -> list[list[str]]: + include_release_tag: bool = False, release_tag: str = "") -> tuple[list[list[str]], list[list[str]]]: keys = set() + public_projects = set() with open(csv_path, "r") as f: reader = csv.reader(f) for row in reader: @@ -101,12 +102,12 @@ def _parse_csv(csv_path: str, env: str, project_id_only: bool = False, logging.debug("Empty path detected, skipping") continue - assert len(row) == 2 + assert len(row) == 3, "CSV must have 3 columns: institution, project_id, and Yes or No for Public" row = [x.strip() for x in row] institution = row[0].upper() project_id = find_project_id_in_str(row[1]) + public = row[2].lower() - key = None if project_id_only: project_id = row[1] key = project_id @@ -126,18 +127,25 @@ def _parse_csv(csv_path: str, env: str, project_id_only: bool = False, key = key + f",{release_tag}" keys.add(key) + # make a separate set of public projects + if public == "no": + public_projects.add(key) + chunked_paths = chunked(keys, MAX_STAGING_AREAS_PER_PARTITION_SET) - return [chunk for chunk in chunked_paths] + chunked_paths_no_ma = chunked(public_projects, MAX_STAGING_AREAS_PER_PARTITION_SET) + return [chunk for chunk in chunked_paths], [chunk for chunk in chunked_paths_no_ma] def parse_and_load_manifest(env: str, csv_path: str, release_tag: str, pipeline_name: str, project_id_only: bool = False, - include_release_tag: bool = False) -> None: + include_release_tag: bool = False, no_ma: bool = False) -> None: chunked_paths = _parse_csv(csv_path, env, project_id_only, include_release_tag, release_tag) + paths_to_use = chunked_paths[1] if no_ma else chunked_paths[0] + print(f"paths_to_use: {paths_to_use}") storage_client = Client() bucket: Bucket = storage_client.bucket(bucket_name=ETL_PARTITION_BUCKETS[env]) - for pos, chunk in enumerate(chunked_paths): + for pos, chunk in enumerate(paths_to_use): assert len(chunk), "At least one import path is required" qualifier = chr(pos + 97) # dcp11_a, dcp11_b, etc. blob_name = f"{pipeline_name}/{release_tag}_{qualifier}_manifest.csv" @@ -146,8 +154,9 @@ def parse_and_load_manifest(env: str, csv_path: str, release_tag: str, if not query_yes_no(f"Manifest {blob.name} already exists for pipeline {pipeline_name}, overwrite?"): return - logging.info(f"Uploading manifest [bucket={bucket.name}, name={blob_name}]") - blob.upload_from_string(data="\n".join(chunk)) + # TODO turn back on + # logging.info(f"Uploading manifest [bucket={bucket.name}, name={blob_name}]") + # blob.upload_from_string(data="\n".join(chunk)) def _get_dagster_client() -> DagsterGraphQLClient: @@ -196,9 +205,11 @@ def load(args: argparse.Namespace) -> None: args.release_tag, f"make_snapshot_public_job_{ENV_PIPELINE_ENDINGS[args.env]}", project_id_only=True, - include_release_tag=True + include_release_tag=True, + no_ma=True ) - _reload_repository(_get_dagster_client()) + # TODO turn back on + # _reload_repository(_get_dagster_client()) def enumerate_manifests(args: argparse.Namespace) -> None: From f2eb98c14fe55a08637c69f37ee254ecd73a2515 Mon Sep 17 00:00:00 2001 From: bahill Date: Thu, 21 Nov 2024 17:08:11 -0500 Subject: [PATCH 3/7] fixed indentation issues, re-enabled upload to Dagster, removed print statements --- orchestration/hca_manage/manifest.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/orchestration/hca_manage/manifest.py b/orchestration/hca_manage/manifest.py index 32b88f87..fb998398 100644 --- a/orchestration/hca_manage/manifest.py +++ b/orchestration/hca_manage/manifest.py @@ -141,7 +141,6 @@ def parse_and_load_manifest(env: str, csv_path: str, release_tag: str, include_release_tag: bool = False, no_ma: bool = False) -> None: chunked_paths = _parse_csv(csv_path, env, project_id_only, include_release_tag, release_tag) paths_to_use = chunked_paths[1] if no_ma else chunked_paths[0] - print(f"paths_to_use: {paths_to_use}") storage_client = Client() bucket: Bucket = storage_client.bucket(bucket_name=ETL_PARTITION_BUCKETS[env]) @@ -154,9 +153,8 @@ def parse_and_load_manifest(env: str, csv_path: str, release_tag: str, if not query_yes_no(f"Manifest {blob.name} already exists for pipeline {pipeline_name}, overwrite?"): return - # TODO turn back on - # logging.info(f"Uploading manifest [bucket={bucket.name}, name={blob_name}]") - # blob.upload_from_string(data="\n".join(chunk)) + logging.info(f"Uploading manifest [bucket={bucket.name}, name={blob_name}]") + blob.upload_from_string(data="\n".join(chunk)) def _get_dagster_client() -> DagsterGraphQLClient: @@ -208,8 +206,7 @@ def load(args: argparse.Namespace) -> None: include_release_tag=True, no_ma=True ) - # TODO turn back on - # _reload_repository(_get_dagster_client()) + _reload_repository(_get_dagster_client()) def enumerate_manifests(args: argparse.Namespace) -> None: From e84e316a8ed4dfa8a2bd8bbc68bd4d892182131a Mon Sep 17 00:00:00 2001 From: bahill Date: Tue, 26 Nov 2024 16:17:23 -0500 Subject: [PATCH 4/7] added not about public/ma logic and updated data locations. dev SA doesn't have access to prod buckets. duh. --- orchestration/hca_manage/manifest.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/orchestration/hca_manage/manifest.py b/orchestration/hca_manage/manifest.py index fb998398..5200c40b 100644 --- a/orchestration/hca_manage/manifest.py +++ b/orchestration/hca_manage/manifest.py @@ -54,7 +54,6 @@ "dev": { "EBI": "gs://broad-dsp-monster-hca-dev-ebi-staging/dev", "UCSC": "gs://broad-dsp-monster-hca-dev-ebi-staging/dev", - "TEST": "gs://broad-dsp-monster-hca-prod-ebi-storage/broad_test_dataset" } } ENV_PIPELINE_ENDINGS = { @@ -128,6 +127,8 @@ def _parse_csv(csv_path: str, env: str, project_id_only: bool = False, keys.add(key) # make a separate set of public projects + # The question is "Does this project contain managed access data?" + # so no = public, yes = managed access (ma) if public == "no": public_projects.add(key) From 98f356972ba48bff2eec98b1a31371182a0a0af9 Mon Sep 17 00:00:00 2001 From: dsp-fieldeng-bot Date: Tue, 26 Nov 2024 22:49:33 +0000 Subject: [PATCH 5/7] Update requirements.txt From b9215e16734cea59de72f190149d8fa2f9c8e82f Mon Sep 17 00:00:00 2001 From: bahill Date: Tue, 3 Dec 2024 13:48:27 -0500 Subject: [PATCH 6/7] Updating poetry version used by Git to fix whl file corruption from old versions of poetry. --- .github/workflows/generate-requirements-file.yaml | 2 +- .github/workflows/validate_python.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate-requirements-file.yaml b/.github/workflows/generate-requirements-file.yaml index c47a1ff9..7022cae0 100644 --- a/.github/workflows/generate-requirements-file.yaml +++ b/.github/workflows/generate-requirements-file.yaml @@ -24,7 +24,7 @@ jobs: - name: Install Poetry uses: snok/install-poetry@v1 with: - version: 1.1.9 + version: 1.8.0 virtualenvs-create: true virtualenvs-in-project: true installer-parallel: true diff --git a/.github/workflows/validate_python.yaml b/.github/workflows/validate_python.yaml index ca1250a2..9dfc5f6b 100644 --- a/.github/workflows/validate_python.yaml +++ b/.github/workflows/validate_python.yaml @@ -30,7 +30,7 @@ jobs: - name: Install Poetry uses: snok/install-poetry@v1 with: - version: 1.1.9 + version: 1.8.0 - name: Cache dependencies uses: actions/cache@v2 env: From ded8c10159aaf436ab59006495ca92fc55e7671e Mon Sep 17 00:00:00 2001 From: dsp-fieldeng-bot Date: Tue, 3 Dec 2024 18:49:30 +0000 Subject: [PATCH 7/7] Update requirements.txt --- orchestration/requirements.txt | 205 +++++++++++++++++---------------- 1 file changed, 103 insertions(+), 102 deletions(-) diff --git a/orchestration/requirements.txt b/orchestration/requirements.txt index ca718011..48445621 100644 --- a/orchestration/requirements.txt +++ b/orchestration/requirements.txt @@ -1,102 +1,103 @@ -aiohttp==3.9.4; python_version >= "3.8" -aiosignal==1.3.1; python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" -alembic==1.6.5; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" -argo-workflows==5.0.0 -async-timeout==4.0.3; python_version < "3.10" and python_version >= "3.9" and python_full_version >= "3.6.0" -attrs==23.1.0; python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" -beautifulsoup4==4.12.2; python_full_version >= "3.6.0" and python_version >= "3.6" -broad-dagster-utils==0.6.7; python_version >= "3.9" and python_version < "3.10" -cached-property==1.5.2 -cachetools==5.3.2; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_full_version >= "3.6.0" and python_version >= "3.9" and python_version < "3.10" -certifi==2023.7.22; python_version >= "3.9" and python_version < "3.10" -cffi==1.16.0; python_version >= "3.8" -charset-normalizer==3.3.1; python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.7.0" -click==7.1.2; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.5.0" -colorama==0.4.6; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" and platform_system == "Windows" or python_version >= "3.9" and python_version < "3.10" and platform_system == "Windows" and python_full_version >= "3.7.0" -coloredlogs==14.0; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.5.0" -croniter==2.0.1; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.4.0" -dagster-gcp==0.12.14 -dagster-k8s==0.12.14 -dagster-pandas==0.12.14 -dagster-postgres==0.12.14 -dagster-slack==0.12.14 -dagster==0.12.14 -data-repo-client==1.542.0 -docstring-parser==0.15; python_version >= "3.9" and python_version < "3.10" -frozenlist==1.4.0; python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" -google-api-core==2.23.0; python_version >= "3.9" and python_version < "3.10" and (python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_full_version >= "3.6.0" and python_version >= "3.9" and python_version < "3.10") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") -google-api-python-client==1.12.11; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" -google-auth-httplib2==0.1.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" -google-auth==2.23.3; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_full_version >= "3.6.0" and python_version >= "3.9" and python_version < "3.10" -google-cloud-bigquery==2.34.3; python_version >= "3.6" and python_version < "3.11" -google-cloud-core==2.3.3; python_version >= "3.9" and python_version < "3.10" and (python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_full_version >= "3.6.0" and python_version >= "3.9" and python_version < "3.10") -google-cloud-storage==1.44.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0") -google-crc32c==1.5.0; python_version >= "3.9" and python_version < "3.10" -google-resumable-media==2.6.0; python_version >= "3.9" and python_version < "3.10" and (python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_full_version >= "3.6.0" and python_version >= "3.9" and python_version < "3.10") -google==3.0.0; python_version >= "3.6" -googleapis-common-protos==1.61.0; python_version >= "3.9" and python_version < "3.10" -graphql-core==2.3.2 -graphql-ws==0.3.1 -greenlet==3.0.1; python_version >= "3.7" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and (python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0") -grpcio-health-checking==1.48.2; python_version >= "3.9" and python_version < "3.10" -grpcio-status==1.48.2; python_version >= "3.9" and python_version < "3.10" -grpcio==1.53.0; python_version >= "3.7" -hca-import-validation==0.0.17; python_version >= "3.6" -httplib2==0.22.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" -humanfriendly==10.0; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.5.0" -idna==3.4; python_version >= "3.9" and python_version < "3.10" -jinja2==2.11.3; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.5.0" -jsonschema-specifications==2023.7.1; python_version >= "3.8" -jsonschema==4.19.2; python_version >= "3.8" -kubernetes==28.1.0; python_version >= "3.6" -mako==1.2.2; python_version >= "3.7" -markupsafe==2.0.1; python_version >= "3.6" -more-itertools==10.1.0; python_version >= "3.8" -multidict==6.0.4; python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" -numpy==1.26.1; python_version >= "3.9" and python_version < "3.11" -oauth2client==4.1.3 -oauthlib==3.2.2; python_version >= "3.6" -packaging==23.2; python_version >= "3.9" and python_version < "3.10" -pandas==2.1.2; python_version >= "3.9" -pendulum==2.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") -promise==2.3 -proto-plus==1.22.3; python_version >= "3.9" and python_version < "3.10" -protobuf==3.20.2; python_version >= "3.7" -psutil==5.9.6; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" and platform_system == "Windows" or python_version >= "3.9" and python_version < "3.10" and platform_system == "Windows" and python_full_version >= "3.6.0" -psycopg2-binary==2.9.9; python_version >= "3.7" -pyasn1-modules==0.3.0; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_full_version >= "3.6.0" and python_version >= "3.9" and python_version < "3.10" -pyasn1==0.5.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.6" and python_version < "4" and python_full_version >= "3.6.0" -pycparser==2.21; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.8" -pyparsing==3.1.1; python_full_version >= "3.6.8" and python_version > "3.0" -pyreadline3==3.4.1; sys_platform == "win32" and python_version >= "3.8" and (python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.5.0") -python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0") -python-editor==1.0.4; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" -pytz==2023.3.post1; python_version >= "3.9" and python_version < "3.10" and (python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.4.0") -pytzdata==2020.1; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.5.0" -pywin32==306; python_version >= "3.9" and python_version < "3.10" and platform_system == "Windows" -pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0") -referencing==0.30.2; python_version >= "3.8" -requests-oauthlib==1.3.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -requests==2.31.0; python_version >= "3.9" and python_version < "3.10" and (python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") -rfc3339-validator==0.1.4; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") -rpds-py==0.10.6; python_version >= "3.8" -rsa==4.9; python_version >= "3.6" and python_version < "4" and (python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_full_version >= "3.6.0" and python_version >= "3.9" and python_version < "3.10") -rx==1.6.3; python_version >= "3.9" and python_version < "3.10" -sentry-sdk==1.39.2 -six==1.16.0; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" -slack-sdk==3.23.0; python_full_version >= "3.6.0" -slackclient==2.9.4; python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" -soupsieve==2.5; python_full_version >= "3.6.0" and python_version >= "3.8" -sqlalchemy==1.4.50; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" -strict-rfc3339==0.7; python_version >= "3.6" -tabulate==0.9.0; python_version >= "3.9" and python_version < "3.10" -toposort==1.10; python_version >= "3.9" and python_version < "3.10" -tqdm==4.66.1; python_version >= "3.9" and python_version < "3.10" -typing-compat==0.1.0; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.5.0" -typing-extensions==3.10.0.2 -tzdata==2023.3; python_version >= "3.9" -uritemplate==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" -urllib3==1.26.18; python_version >= "3.9" and python_full_version < "3.0.0" and python_version < "3.10" or python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" -watchdog==3.0.0; python_version >= "3.9" and python_version < "3.10" -websocket-client==1.6.4; python_version >= "3.8" -yarl==1.9.2; python_version >= "3.9" and python_version < "3.10" and python_full_version >= "3.6.0" +aiohttp==3.9.4 ; python_full_version == "3.9.16" +aiosignal==1.3.1 ; python_full_version == "3.9.16" +alembic==1.6.5 ; python_full_version == "3.9.16" +argo-workflows==5.0.0 ; python_full_version == "3.9.16" +async-timeout==4.0.3 ; python_full_version == "3.9.16" +attrs==23.1.0 ; python_full_version == "3.9.16" +beautifulsoup4==4.12.2 ; python_full_version == "3.9.16" +broad-dagster-utils==0.6.7 ; python_full_version == "3.9.16" +cached-property==1.5.2 ; python_full_version == "3.9.16" +cachetools==5.3.2 ; python_full_version == "3.9.16" +certifi==2023.7.22 ; python_full_version == "3.9.16" +cffi==1.16.0 ; python_full_version == "3.9.16" +charset-normalizer==3.3.1 ; python_full_version == "3.9.16" +click==7.1.2 ; python_full_version == "3.9.16" +colorama==0.4.6 ; python_full_version == "3.9.16" and platform_system == "Windows" +coloredlogs==14.0 ; python_full_version == "3.9.16" +croniter==2.0.1 ; python_full_version == "3.9.16" +dagster-gcp==0.12.14 ; python_full_version == "3.9.16" +dagster-k8s==0.12.14 ; python_full_version == "3.9.16" +dagster-pandas==0.12.14 ; python_full_version == "3.9.16" +dagster-postgres==0.12.14 ; python_full_version == "3.9.16" +dagster-slack==0.12.14 ; python_full_version == "3.9.16" +dagster==0.12.14 ; python_full_version == "3.9.16" +data-repo-client==1.542.0 ; python_full_version == "3.9.16" +docstring-parser==0.15 ; python_full_version == "3.9.16" +frozenlist==1.4.0 ; python_full_version == "3.9.16" +google-api-core==2.23.0 ; python_full_version == "3.9.16" +google-api-core[grpc]==2.23.0 ; python_full_version == "3.9.16" +google-api-python-client==1.12.11 ; python_full_version == "3.9.16" +google-auth-httplib2==0.1.1 ; python_full_version == "3.9.16" +google-auth==2.23.3 ; python_full_version == "3.9.16" +google-cloud-bigquery==2.34.3 ; python_full_version == "3.9.16" +google-cloud-core==2.3.3 ; python_full_version == "3.9.16" +google-cloud-storage==1.44.0 ; python_full_version == "3.9.16" +google-crc32c==1.5.0 ; python_full_version == "3.9.16" +google-resumable-media==2.6.0 ; python_full_version == "3.9.16" +google==3.0.0 ; python_full_version == "3.9.16" +googleapis-common-protos==1.61.0 ; python_full_version == "3.9.16" +graphql-core==2.3.2 ; python_full_version == "3.9.16" +graphql-ws==0.3.1 ; python_full_version == "3.9.16" +greenlet==3.0.1 ; python_full_version == "3.9.16" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") +grpcio-health-checking==1.48.2 ; python_full_version == "3.9.16" +grpcio-status==1.48.2 ; python_full_version == "3.9.16" +grpcio==1.53.0 ; python_full_version == "3.9.16" +hca-import-validation==0.0.17 ; python_full_version == "3.9.16" +httplib2==0.22.0 ; python_full_version == "3.9.16" +humanfriendly==10.0 ; python_full_version == "3.9.16" +idna==3.4 ; python_full_version == "3.9.16" +jinja2==2.11.3 ; python_full_version == "3.9.16" +jsonschema-specifications==2023.7.1 ; python_full_version == "3.9.16" +jsonschema==4.19.2 ; python_full_version == "3.9.16" +kubernetes==28.1.0 ; python_full_version == "3.9.16" +mako==1.2.2 ; python_full_version == "3.9.16" +markupsafe==2.0.1 ; python_full_version == "3.9.16" +more-itertools==10.1.0 ; python_full_version == "3.9.16" +multidict==6.0.4 ; python_full_version == "3.9.16" +numpy==1.26.1 ; python_full_version == "3.9.16" +oauth2client==4.1.3 ; python_full_version == "3.9.16" +oauthlib==3.2.2 ; python_full_version == "3.9.16" +packaging==23.2 ; python_full_version == "3.9.16" +pandas==2.1.2 ; python_full_version == "3.9.16" +pendulum==2.1.2 ; python_full_version == "3.9.16" +promise==2.3 ; python_full_version == "3.9.16" +proto-plus==1.22.3 ; python_full_version == "3.9.16" +protobuf==3.20.2 ; python_full_version == "3.9.16" +psutil==5.9.6 ; python_full_version == "3.9.16" and platform_system == "Windows" +psycopg2-binary==2.9.9 ; python_full_version == "3.9.16" +pyasn1-modules==0.3.0 ; python_full_version == "3.9.16" +pyasn1==0.5.0 ; python_full_version == "3.9.16" +pycparser==2.21 ; python_full_version == "3.9.16" +pyparsing==3.1.1 ; python_full_version == "3.9.16" +pyreadline3==3.4.1 ; sys_platform == "win32" and python_full_version == "3.9.16" +python-dateutil==2.8.2 ; python_full_version == "3.9.16" +python-editor==1.0.4 ; python_full_version == "3.9.16" +pytz==2023.3.post1 ; python_full_version == "3.9.16" +pytzdata==2020.1 ; python_full_version == "3.9.16" +pywin32==306 ; platform_system == "Windows" and python_full_version == "3.9.16" +pyyaml==5.4.1 ; python_full_version == "3.9.16" +referencing==0.30.2 ; python_full_version == "3.9.16" +requests-oauthlib==1.3.1 ; python_full_version == "3.9.16" +requests==2.31.0 ; python_full_version == "3.9.16" +rfc3339-validator==0.1.4 ; python_full_version == "3.9.16" +rpds-py==0.10.6 ; python_full_version == "3.9.16" +rsa==4.9 ; python_full_version == "3.9.16" +rx==1.6.3 ; python_full_version == "3.9.16" +sentry-sdk==1.39.2 ; python_full_version == "3.9.16" +six==1.16.0 ; python_full_version == "3.9.16" +slack-sdk==3.23.0 ; python_full_version == "3.9.16" +slackclient==2.9.4 ; python_full_version == "3.9.16" +soupsieve==2.5 ; python_full_version == "3.9.16" +sqlalchemy==1.4.50 ; python_full_version == "3.9.16" +strict-rfc3339==0.7 ; python_full_version == "3.9.16" +tabulate==0.9.0 ; python_full_version == "3.9.16" +toposort==1.10 ; python_full_version == "3.9.16" +tqdm==4.66.1 ; python_full_version == "3.9.16" +typing-compat==0.1.0 ; python_full_version == "3.9.16" +typing-extensions==3.10.0.2 ; python_full_version == "3.9.16" +tzdata==2023.3 ; python_full_version == "3.9.16" +uritemplate==3.0.1 ; python_full_version == "3.9.16" +urllib3==1.26.18 ; python_full_version == "3.9.16" +watchdog==3.0.0 ; python_full_version == "3.9.16" +websocket-client==1.6.4 ; python_full_version == "3.9.16" +yarl==1.9.2 ; python_full_version == "3.9.16"