From 1d13af1163ac620e8aaf2ce19adc13e5fff76b5e Mon Sep 17 00:00:00 2001 From: Javier Ferrer Date: Wed, 15 Jan 2025 11:57:37 +0000 Subject: [PATCH] Fix tests --- .gitignore | 1 + pyproject.toml | 2 +- tests/{pis => ontoform}/conftest.py | 0 tests/{pis => ontoform}/main_test.py | 0 tests/test_disease.sh | 6 +- tests/test_expression.sh | 14 +-- tests/test_homologue.sh | 42 ------- tests/test_so.sh | 10 +- tests/test_target.sh | 54 +++++---- uv.lock | 169 +-------------------------- 10 files changed, 48 insertions(+), 250 deletions(-) rename tests/{pis => ontoform}/conftest.py (100%) rename tests/{pis => ontoform}/main_test.py (100%) delete mode 100755 tests/test_homologue.sh diff --git a/.gitignore b/.gitignore index c004386..98296eb 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ htmlcov # input dir can be used for tests input +work diff --git a/pyproject.toml b/pyproject.toml index 7314983..b1934a6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "ontoform" -version = "25.0.0-rc.4" +version = "25.0.0-rc.5" description = "Open Targets pipeline converter tool" readme = "README.md" requires-python = ">=3.12" diff --git a/tests/pis/conftest.py b/tests/ontoform/conftest.py similarity index 100% rename from tests/pis/conftest.py rename to tests/ontoform/conftest.py diff --git a/tests/pis/main_test.py b/tests/ontoform/main_test.py similarity index 100% rename from tests/pis/main_test.py rename to tests/ontoform/main_test.py diff --git a/tests/test_disease.sh b/tests/test_disease.sh index d87a9ec..51dd319 100755 --- a/tests/test_disease.sh +++ b/tests/test_disease.sh @@ -11,12 +11,12 @@ work_dir=/tmp # set up stuff set -x set -e -mkdir -p $work_dir/input/ontology-inputs +mkdir -p $work_dir/input/disease # get efo # DiseaseTransformer — -# input/ontology-inputs/efo_otar_slim.json -> output/disease/disease.parquet -curl -Ls https://github.com/EBISPOT/efo/releases/download/v3.70.0/efo_otar_slim.json > $work_dir/input/ontology-inputs/efo_otar_slim.json +# input/disease/efo_otar_slim.json -> output/disease/disease.parquet +curl -Ls https://github.com/EBISPOT/efo/releases/download/v3.70.0/efo_otar_slim.json > $work_dir/input/disease/efo_otar_slim.json gsutil cp gs://open-targets-pre-data-releases/24.09dev/output/oldetl_diseases.jsonl $work_dir/oldetl-disease.jsonl # run ontoform diff --git a/tests/test_expression.sh b/tests/test_expression.sh index 0d1e777..86ebf0f 100755 --- a/tests/test_expression.sh +++ b/tests/test_expression.sh @@ -11,16 +11,16 @@ work_dir=/tmp # set up stuff set -x set -e -mkdir -p $work_dir/input/expression-inputs +mkdir -p $work_dir/input/expression # get expression files # NormalTissueTransformer — -# input/expression-inputs/normal_tissue.tsv.zip -> input/expression-inputs-transformed/normal_tissue.tsv.gz -curl -Ls https://www.proteinatlas.org/download/tsv/normal_tissue.tsv.zip > $work_dir/input/expression-inputs/normal_tissue.tsv.zip +# input/expression/normal_tissue.tsv.zip -> input/expression-transformed/normal_tissue.tsv.gz +curl -Ls https://www.proteinatlas.org/download/tsv/normal_tissue.tsv.zip > $work_dir/input/expression/normal_tissue.tsv.zip # TissueTransformer — -# input/expression-inputs/map_with_efos.json -> input/expression-inputs-transformed/tissue-translation-map.parquet -curl -Ls https://raw.githubusercontent.com/opentargets/expression_hierarchy/master/process/map_with_efos.json > $work_dir/input/expression-inputs/map_with_efos.json +# input/expression/map_with_efos.json -> input/expression-transformed/tissue-translation-map.parquet +curl -Ls https://raw.githubusercontent.com/opentargets/expression_hierarchy/master/process/map_with_efos.json > $work_dir/input/expression/map_with_efos.json gsutil cp gs://open-targets-pre-data-releases/24.09dev/input/expression-inputs/tissue-translation-map.json $work_dir/oldpis-tissue-translation-map.json # run ontoform @@ -28,11 +28,11 @@ uv run ontoform --work-dir /tmp expression --output-format ndjson # we cannot compare with the old pis output because we do not know about version # control in protein atlas so we cant get the same original file -diff <(unzip -p $work_dir/input/expression-inputs/normal_tissue.tsv.zip normal_tissue.tsv) <(gzip -d $work_dir/input/expression-inputs/normal_tissue.tsv.gz -c) +diff <(unzip -p $work_dir/input/expression/normal_tissue.tsv.zip normal_tissue.tsv) <(gzip -d $work_dir/intermediate/expression/normal_tissue.tsv.gz -c) # sort rows sort < $work_dir/oldpis-tissue-translation-map.json > /tmp/oldpis-tissue-translation-map-sort.jsonl -sort < $work_dir/input/expression-inputs/tissue-translation-map.jsonl > /tmp/ontoform-tissue-translation-map-sort.jsonl +sort < $work_dir/intermediate/expression/tissue-translation-map.jsonl > /tmp/ontoform-tissue-translation-map-sort.jsonl # remove whitespace jq -c . /tmp/oldpis-tissue-translation-map-sort.jsonl > /tmp/oldpis-tissue-translation-map-sort_nowhite.jsonl diff --git a/tests/test_homologue.sh b/tests/test_homologue.sh deleted file mode 100755 index 06700cc..0000000 --- a/tests/test_homologue.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -# This script is meant to be run from the root of the repository -if [ ! -d ./tests ]; then - echo "Please run this script from the root of the repository (like: ./tests/$(basename "$0"))" - exit 1 -fi - -work_dir=/tmp - -# set up stuff -set -x -set -e -mkdir -p $work_dir/input/target-inputs/homologue/gene_dictionary - -# get a couple of homologue files, conditionally -# HomologueTransformer -# input/target-inputs/homologue/gene_dictionary/**/*.json -> input/target-inputs/homologue/gene_dictionary/*.parquet -if [ ! -f $work_dir/input/target-inputs/homologue/gene_dictionary/homo_sapiens.json ]; then - curl -Ls https://ftp.ensembl.org/pub/release-112/json/homo_sapiens/homo_sapiens.json > $work_dir/input/target-inputs/homologue/gene_dictionary/homo_sapiens.json -fi -gsutil cp gs://open-targets-pre-data-releases/24.09dev/input/target-inputs/homologue/gene_dictionary/homo_sapiens.tsv $work_dir/oldpis-homologue.tsv - -if [ ! -f $work_dir/input/target-inputs/homologue/gene_dictionary/mus_musculus.json ]; then - curl -Ls https://ftp.ensembl.org/pub/release-112/json/mus_musculus/mus_musculus.json > $work_dir/input/target-inputs/homologue/gene_dictionary/mus_musculus.json -fi - -# run the transformation -uv run ontoform --work-dir /tmp homologue --output-format tsv - -# we'll just check homo_sapiens, as it is the biggest one of them, but make sure mus_musculus was generated too -[ ! -f $work_dir/input/target-inputs/homologue/gene_dictionary/mus_musculus.tsv ] && echo "mus_musculus was not generated!" - -# fix the escaping in old pis -sed 's/"//g; s/\\t/\t/g' $work_dir/oldpis-homologue.tsv > $work_dir/oldpis-homologue-fixed.tsv - -# sort rows -sort < $work_dir/oldpis-homologue-fixed.tsv > $work_dir/oldpis-homologue-fixed_sort.tsv -sort < $work_dir/input/target-inputs/homologue/gene_dictionary/homo_sapiens.tsv > $work_dir/ontoform-homologue-sort.tsv - -# compare the outputs -diff --color $work_dir/oldpis-homologue-fixed_sort.tsv $work_dir/ontoform-homologue-sort.tsv || : diff --git a/tests/test_so.sh b/tests/test_so.sh index c228003..7237288 100755 --- a/tests/test_so.sh +++ b/tests/test_so.sh @@ -11,12 +11,12 @@ work_dir=/tmp # set up stuff set -x set -e -mkdir -p $work_dir/input/so-inputs +mkdir -p $work_dir/input/so # get so # SOTransformer — -# input/so-inputs/so.json -> input/so-inputs/so.parquet -curl -Ls https://raw.githubusercontent.com/The-Sequence-Ontology/SO-Ontologies/refs/heads/master/Ontology_Files/so.json > $work_dir/input/so-inputs/so.json +# input/so/so.json -> input/so/so.parquet +curl -Ls https://raw.githubusercontent.com/The-Sequence-Ontology/SO-Ontologies/refs/heads/master/Ontology_Files/so.json > $work_dir/input/so/so.json gsutil cp gs://open-targets-pre-data-releases/24.09dev/input/so-inputs/so.json $work_dir/oldpis-so.jsonl # run the transformation @@ -24,14 +24,14 @@ uv run ontoform --work-dir $work_dir so --output-format ndjson # sort rows sort < $work_dir/oldpis-so.jsonl > /tmp/oldpis-so-sort.jsonl -sort < $work_dir/input/so-inputs/so.jsonl > /tmp/ontoform-so-sort.jsonl +sort < $work_dir/intermediate/so/so.jsonl > /tmp/ontoform-so-sort.jsonl # sort the arrays jq -cf ./tools/diff.jq /tmp/oldpis-so-sort.jsonl > /tmp/oldpis-so-sort_keysort.jsonl jq -cf ./tools/diff.jq /tmp/ontoform-so-sort.jsonl > /tmp/ontoform-so-sort_keysort.jsonl # sort the object keys -jq -s "." /tmp/oldpis-so-sort_keysort.jsonl | jq --sort-keys "." | jq -c ".[]" > /tmp/oldpis-so-sort_keysort_objsort.jsonl +jq -s "." /tmp/oldpis-so-sort_keysort.jsonl | jq --sort-keys "." | jq -c ".[]" > /tmp/oldpis-so-sort_keysort_objsort.jsonl jq -s "." /tmp/ontoform-so-sort_keysort.jsonl | jq --sort-keys "." | jq -c ".[]" > /tmp/ontoform-so-sort_keysort_objsort.jsonl # we only need id and label so let's drop everything else from the old pis output diff --git a/tests/test_target.sh b/tests/test_target.sh index adfc767..a51bfda 100755 --- a/tests/test_target.sh +++ b/tests/test_target.sh @@ -6,48 +6,52 @@ if [ ! -d ./tests ]; then exit 1 fi -work_dir=/tmp +work_dir=./work # /tmp might be too small if it uses tmpfsgg # set up stuff set -x set -e -mkdir -p $work_dir/input/target-inputs/hpa -mkdir -p $work_dir/input/target-inputs/project-scores -mkdir -p $work_dir/input/target-inputs/ensembl -mkdir -p $work_dir/input/target-inputs/gnomad +mkdir -p $work_dir/input/target/hpa +mkdir -p $work_dir/input/target/project-scores +mkdir -p $work_dir/input/target/ensembl +mkdir -p $work_dir/input/target/gnomad +mkdir -p $work_dir/input/target/homologue/gene_dictionary # get target files # SubcellularLocationTransformer — -# input/target-inputs/hpa/subcellular_locations.tsv.zip -> input/target-inputs/hpa/subcellular_locations.tsv.gz -curl -Ls https://www.proteinatlas.org/download/tsv/subcellular_location.tsv.zip -o $work_dir/input/target-inputs/hpa/subcellular_location.tsv.zip +# input/target/hpa/subcellular_locations.tsv.zip -> intermediate/target/hpa/subcellular_locations.tsv.gz +curl -Ls https://www.proteinatlas.org/download/tsv/subcellular_location.tsv.zip -o $work_dir/input/target/hpa/subcellular_location.tsv.zip # SubcellularLocationSSLTransformer — -# input/target-inputs/hpa/subcellular_locations_ssl.tsv -> target-inputs/hpa/subcellular_locations_ssl.parquet -curl -Ls https://storage.googleapis.com/otar001-core/subcellularLocations/HPA_subcellular_locations_SL-2021-08-19.tsv -o $work_dir/input/target-inputs/hpa/subcellular_locations_ssl.tsv +# input/target/hpa/subcellular_locations_ssl.tsv -> intermediate/target/hpa/subcellular_locations_ssl.parquet +curl -Ls https://storage.googleapis.com/otar001-core/subcellularLocations/HPA_subcellular_locations_SL-2021-08-19.tsv -o $work_dir/input/target/hpa/subcellular_locations_ssl.tsv # EssentialityMatricesTransformer — -# input/target-inputs/project-scores/essentiality_matrices.zip -> input/target-inputs/project-scores/04_binaryDepScores.parquet -curl -Ls https://cog.sanger.ac.uk/cmp/download/essentiality_matrices.zip -o $work_dir/input/target-inputs/project-scores/essentiality_matrices.zip +# input/target/project-scores/essentiality_matrices.zip -> intermediate/target/project-scores/04_binaryDepScores.parquet +curl -Ls https://cog.sanger.ac.uk/cmp/download/essentiality_matrices.zip -o $work_dir/input/target/project-scores/essentiality_matrices.zip # GeneIdentifiersTransformer — -# input/target-inputs/project-scores/gene_identifiers_latest.csv.gz -> input/target-inputs/project-scores/gene_identifiers_latest.parquet -curl -Ls https://cog.sanger.ac.uk/cmp/download/gene_identifiers_latest.csv.gz -o $work_dir/input/target-inputs/project-scores/gene_identifiers_latest.csv.gz - -# Ensembl — download conditionally -# input/target-inputs/ensembl/homo_sapiens.json -> input/target-inputs/ensembl/homo_sapiens.parquet -if [ ! -f $work_dir/input/target-inputs/ensembl/homo_sapiens.json ]; then - curl -Ls https://ftp.ensembl.org/pub/release-113/json/homo_sapiens/homo_sapiens.json -o $work_dir/input/target-inputs/ensembl/homo_sapiens.json -fi +# input/target/project-scores/gene_identifiers_latest.csv.gz -> intermediate/target/project-scores/gene_identifiers_latest.parquet +curl -Ls https://cog.sanger.ac.uk/cmp/download/gene_identifiers_latest.csv.gz -o $work_dir/input/target/project-scores/gene_identifiers_latest.csv.gz # GnomAD — -# input/target-inputs/gnomad/gnomad.v2.1.1.lof_metrics.by_gene.txt.bgz -> input/target-inputs/gnomad/gnomad_lof_by_gene.txt.gz -curl -Ls https://storage.googleapis.com/gcp-public-data--gnomad/release/2.1.1/constraint/gnomad.v2.1.1.lof_metrics.by_gene.txt.bgz -o $work_dir/input/target-inputs/gnomad/gnomad.v2.1.1.lof_metrics.by_gene.txt.bgz +# input/target/gnomad/gnomad.v2.1.1.lof_metrics.by_gene.txt.bgz -> intermediate/target/gnomad/gnomad_lof_by_gene.txt.gz +curl -Ls https://storage.googleapis.com/gcp-public-data--gnomad/release/2.1.1/constraint/gnomad.v2.1.1.lof_metrics.by_gene.txt.bgz -o $work_dir/input/target/gnomad/gnomad.v2.1.1.lof_metrics.by_gene.txt.bgz +# Ensembl — download conditionally +# input/target/ensembl/homo_sapiens.json -> intermediate/target/ensembl/homo_sapiens.parquet +if [ ! -f $work_dir/input/target/ensembl/homo_sapiens.json ]; then + curl -Ls https://ftp.ensembl.org/pub/release-113/json/homo_sapiens/homo_sapiens.json -o $work_dir/input/target/ensembl/homo_sapiens.json +fi +# homologue — input/target/homologue/gene_dictionary/homo_sapiens.json -> intermediate/target/homologue/gene_dictionary/homo_sapiens.parquet +cp $work_dir/input/target/ensembl/homo_sapiens.json $work_dir/input/target/homologue/gene_dictionary/homo_sapiens.json +gsutil cp gs://open-targets-pre-data-releases/24.12-uo_test-3/input/target-inputs/homologue/gene_dictionary/homo_sapiens.parquet $work_dir/previous_homologue.parquet -# run ontoform -uv run ontoform --work-dir /tmp target --output-format ndjson +# run the target transformation +uv run ontoform --work-dir $work_dir target +# compare the outputs +diff $work_dir/previous_homologue.parquet $work_dir/intermediate/target/homologue/gene_dictionary/homo_sapiens.parquet || : -# we don't need to check outputs, just knowing everything runs is fine -# except for ensembl, TODO once regular pis runs for release 113 +# we don't need to check other outputs (those just convert formats), just knowing everything runs is fine diff --git a/uv.lock b/uv.lock index b8b996b..e5f834a 100644 --- a/uv.lock +++ b/uv.lock @@ -63,7 +63,7 @@ name = "click" version = "8.1.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "colorama", marker = "platform_system == 'Windows'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } wheels = [ @@ -79,66 +79,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] -[[package]] -name = "coverage" -version = "7.6.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/84/ba/ac14d281f80aab516275012e8875991bb06203957aa1e19950139238d658/coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23", size = 803868 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/77/19d09ea06f92fdf0487499283b1b7af06bc422ea94534c8fe3a4cd023641/coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853", size = 208281 }, - { url = "https://files.pythonhosted.org/packages/b6/67/5479b9f2f99fcfb49c0d5cf61912a5255ef80b6e80a3cddba39c38146cf4/coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078", size = 208514 }, - { url = "https://files.pythonhosted.org/packages/15/d1/febf59030ce1c83b7331c3546d7317e5120c5966471727aa7ac157729c4b/coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0", size = 241537 }, - { url = "https://files.pythonhosted.org/packages/4b/7e/5ac4c90192130e7cf8b63153fe620c8bfd9068f89a6d9b5f26f1550f7a26/coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50", size = 238572 }, - { url = "https://files.pythonhosted.org/packages/dc/03/0334a79b26ecf59958f2fe9dd1f5ab3e2f88db876f5071933de39af09647/coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022", size = 240639 }, - { url = "https://files.pythonhosted.org/packages/d7/45/8a707f23c202208d7b286d78ad6233f50dcf929319b664b6cc18a03c1aae/coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b", size = 240072 }, - { url = "https://files.pythonhosted.org/packages/66/02/603ce0ac2d02bc7b393279ef618940b4a0535b0868ee791140bda9ecfa40/coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0", size = 238386 }, - { url = "https://files.pythonhosted.org/packages/04/62/4e6887e9be060f5d18f1dd58c2838b2d9646faf353232dec4e2d4b1c8644/coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852", size = 240054 }, - { url = "https://files.pythonhosted.org/packages/5c/74/83ae4151c170d8bd071924f212add22a0e62a7fe2b149edf016aeecad17c/coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359", size = 210904 }, - { url = "https://files.pythonhosted.org/packages/c3/54/de0893186a221478f5880283119fc40483bc460b27c4c71d1b8bba3474b9/coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247", size = 211692 }, - { url = "https://files.pythonhosted.org/packages/25/6d/31883d78865529257bf847df5789e2ae80e99de8a460c3453dbfbe0db069/coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9", size = 208308 }, - { url = "https://files.pythonhosted.org/packages/70/22/3f2b129cc08de00c83b0ad6252e034320946abfc3e4235c009e57cfeee05/coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b", size = 208565 }, - { url = "https://files.pythonhosted.org/packages/97/0a/d89bc2d1cc61d3a8dfe9e9d75217b2be85f6c73ebf1b9e3c2f4e797f4531/coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690", size = 241083 }, - { url = "https://files.pythonhosted.org/packages/4c/81/6d64b88a00c7a7aaed3a657b8eaa0931f37a6395fcef61e53ff742b49c97/coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18", size = 238235 }, - { url = "https://files.pythonhosted.org/packages/9a/0b/7797d4193f5adb4b837207ed87fecf5fc38f7cc612b369a8e8e12d9fa114/coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c", size = 240220 }, - { url = "https://files.pythonhosted.org/packages/65/4d/6f83ca1bddcf8e51bf8ff71572f39a1c73c34cf50e752a952c34f24d0a60/coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd", size = 239847 }, - { url = "https://files.pythonhosted.org/packages/30/9d/2470df6aa146aff4c65fee0f87f58d2164a67533c771c9cc12ffcdb865d5/coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e", size = 237922 }, - { url = "https://files.pythonhosted.org/packages/08/dd/723fef5d901e6a89f2507094db66c091449c8ba03272861eaefa773ad95c/coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694", size = 239783 }, - { url = "https://files.pythonhosted.org/packages/3d/f7/64d3298b2baf261cb35466000628706ce20a82d42faf9b771af447cd2b76/coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6", size = 210965 }, - { url = "https://files.pythonhosted.org/packages/d5/58/ec43499a7fc681212fe7742fe90b2bc361cdb72e3181ace1604247a5b24d/coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e", size = 211719 }, - { url = "https://files.pythonhosted.org/packages/ab/c9/f2857a135bcff4330c1e90e7d03446b036b2363d4ad37eb5e3a47bbac8a6/coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe", size = 209050 }, - { url = "https://files.pythonhosted.org/packages/aa/b3/f840e5bd777d8433caa9e4a1eb20503495709f697341ac1a8ee6a3c906ad/coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273", size = 209321 }, - { url = "https://files.pythonhosted.org/packages/85/7d/125a5362180fcc1c03d91850fc020f3831d5cda09319522bcfa6b2b70be7/coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8", size = 252039 }, - { url = "https://files.pythonhosted.org/packages/a9/9c/4358bf3c74baf1f9bddd2baf3756b54c07f2cfd2535f0a47f1e7757e54b3/coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098", size = 247758 }, - { url = "https://files.pythonhosted.org/packages/cf/c7/de3eb6fc5263b26fab5cda3de7a0f80e317597a4bad4781859f72885f300/coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb", size = 250119 }, - { url = "https://files.pythonhosted.org/packages/3e/e6/43de91f8ba2ec9140c6a4af1102141712949903dc732cf739167cfa7a3bc/coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0", size = 249597 }, - { url = "https://files.pythonhosted.org/packages/08/40/61158b5499aa2adf9e37bc6d0117e8f6788625b283d51e7e0c53cf340530/coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf", size = 247473 }, - { url = "https://files.pythonhosted.org/packages/50/69/b3f2416725621e9f112e74e8470793d5b5995f146f596f133678a633b77e/coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2", size = 248737 }, - { url = "https://files.pythonhosted.org/packages/3c/6e/fe899fb937657db6df31cc3e61c6968cb56d36d7326361847440a430152e/coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312", size = 211611 }, - { url = "https://files.pythonhosted.org/packages/1c/55/52f5e66142a9d7bc93a15192eba7a78513d2abf6b3558d77b4ca32f5f424/coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d", size = 212781 }, -] - -[[package]] -name = "deptry" -version = "0.21.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "packaging" }, - { name = "requirements-parser" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e1/71/b7bd84b50aa898f50e0af5e30f50e621ff21d1d83951d2303516a3217fce/deptry-0.21.2.tar.gz", hash = "sha256:4e870553c7a1fafcd99a83ba4137259525679eecabeff61bc669741efa201541", size = 160990 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/25/b2/66c6d5709edc8cd04c0f1987e868b75e6681f525b5e9c703074bad14b521/deptry-0.21.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e3b9e0c5ee437240b65e61107b5777a12064f78f604bf9f181a96c9b56eb896d", size = 1741649 }, - { url = "https://files.pythonhosted.org/packages/b5/d4/a391784f9e323a50c461878f193848e187f24573085e56aa4e2557eafd25/deptry-0.21.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:d76bbf48bd62ecc44ca3d414769bd4b7956598d23d9ccb42fd359b831a31cab2", size = 1642885 }, - { url = "https://files.pythonhosted.org/packages/6c/4c/c6edfa6860174ca0d929059874c903503084c9eff12776eb17571da4ff71/deptry-0.21.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3080bb88c16ebd35f59cba7688416115b7aaf4630dc5a051dff2649cbf129a1b", size = 1746733 }, - { url = "https://files.pythonhosted.org/packages/a8/4e/36f5ee2adc14a5ee8e46fe749f409f4fc423354de641fd9b0ddf0c912bab/deptry-0.21.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adb12d6678fb5dbd320a0a2e37881059d0a45bec6329df4250c977d803fe7f96", size = 1823962 }, - { url = "https://files.pythonhosted.org/packages/be/cb/a45aa163be1386dade6ca6f61664578662c638254c89bbef81d4e1e80126/deptry-0.21.2-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7479d3079be69c3bbf5913d8e21090749c1139ee91f81520ffce90b5322476b0", size = 1927315 }, - { url = "https://files.pythonhosted.org/packages/a4/fa/84a396a5605fa3dd98c66ba9aa0d25665dd24bab1e42458bdd9ffbd3232f/deptry-0.21.2-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:019167b35301edd2bdd4719c8b8f44769be4507cb8a1cd46fff4393cdbe8d31b", size = 1992695 }, - { url = "https://files.pythonhosted.org/packages/30/87/858bc92296313fe15761ad4c37e64ebda6dee2670c63da6da45fa235e8c1/deptry-0.21.2-cp39-abi3-win_amd64.whl", hash = "sha256:d8add495f0dd19a38aa6d1e09b14b1441bca47c9d945bc7b322efb084313eea3", size = 1601293 }, - { url = "https://files.pythonhosted.org/packages/2c/42/58383595b0062da10f9ed3628748b93d3e6af5a131aead530c86186a3bb4/deptry-0.21.2-cp39-abi3-win_arm64.whl", hash = "sha256:06d48e9fa460aad02f9e1b079d9f5a69d622d291b3a0525b722fc91c88032042", size = 1518159 }, -] - [[package]] name = "google-api-core" version = "2.24.0" @@ -245,15 +185,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, ] -[[package]] -name = "iniconfig" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 }, -] - [[package]] name = "loguru" version = "0.7.3" @@ -290,7 +221,7 @@ wheels = [ [[package]] name = "ontoform" -version = "25.0.0rc4" +version = "25.0.0rc5" source = { editable = "." } dependencies = [ { name = "google-cloud-storage" }, @@ -299,14 +230,6 @@ dependencies = [ { name = "typer" }, ] -[package.dev-dependencies] -dev = [ - { name = "coverage" }, - { name = "deptry" }, - { name = "pytest" }, - { name = "ruff" }, -] - [package.metadata] requires-dist = [ { name = "google-cloud-storage", specifier = "==2.19.0" }, @@ -315,32 +238,6 @@ requires-dist = [ { name = "typer", specifier = "==0.15.1" }, ] -[package.metadata.requires-dev] -dev = [ - { name = "coverage", specifier = ">=7.6.10" }, - { name = "deptry", specifier = ">=0.21.2" }, - { name = "pytest", specifier = "==8.3.4" }, - { name = "ruff", specifier = ">=0.8.5" }, -] - -[[package]] -name = "packaging" -version = "24.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, -] - -[[package]] -name = "pluggy" -version = "1.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, -] - [[package]] name = "polars" version = "1.18.0" @@ -411,21 +308,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, ] -[[package]] -name = "pytest" -version = "8.3.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "iniconfig" }, - { name = "packaging" }, - { name = "pluggy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/05/35/30e0d83068951d90a01852cb1cef56e5d8a09d20c7f511634cc2f7e0372a/pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761", size = 1445919 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size = 343083 }, -] - [[package]] name = "requests" version = "2.32.3" @@ -441,19 +323,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, ] -[[package]] -name = "requirements-parser" -version = "0.11.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "packaging" }, - { name = "types-setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/05/70/80ed53ebd21853855aad552d4ed6c4934df62cd32fe9a3669fcdef59429c/requirements_parser-0.11.0.tar.gz", hash = "sha256:35f36dc969d14830bf459803da84f314dc3d17c802592e9e970f63d0359e5920", size = 23663 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/33/190393a7d36872e237cbc99e6c44d9a078a1ba7b406462fe6eafd5a28e04/requirements_parser-0.11.0-py3-none-any.whl", hash = "sha256:50379eb50311834386c2568263ae5225d7b9d0867fb55cf4ecc93959de2c2684", size = 14800 }, -] - [[package]] name = "rich" version = "13.9.4" @@ -479,31 +348,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7", size = 34315 }, ] -[[package]] -name = "ruff" -version = "0.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/48/385f276f41e89623a5ea8e4eb9c619a44fdfc2a64849916b3584eca6cb9f/ruff-0.9.0.tar.gz", hash = "sha256:143f68fa5560ecf10fc49878b73cee3eab98b777fcf43b0e62d43d42f5ef9d8b", size = 3489167 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/01/e0885e5519212efc7ab9d868bc39cb9781931c4c6f9b17becafa81193ec4/ruff-0.9.0-py3-none-linux_armv6l.whl", hash = "sha256:949b3513f931741e006cf267bf89611edff04e1f012013424022add3ce78f319", size = 10647069 }, - { url = "https://files.pythonhosted.org/packages/dd/69/510a9a5781dcf84c2ad513c2003936fefc802f39c745d5f2355d77fa45fd/ruff-0.9.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:99fbcb8c7fe94ae1e462ab2a1ef17cb20b25fb6438b9f198b1bcf5207a0a7916", size = 10401936 }, - { url = "https://files.pythonhosted.org/packages/07/9f/37fb86bfdf28c4cbfe94cbcc01fb9ab0cb8128548f243f34d5298b212562/ruff-0.9.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:0b022afd8eb0fcfce1e0adec84322abf4d6ce3cd285b3b99c4f17aae7decf749", size = 10010347 }, - { url = "https://files.pythonhosted.org/packages/30/0d/b95121f53c7f7bfb7ba427a35d25f983ed3b476620c5cd69f45caa5b294e/ruff-0.9.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:336567ce92c9ca8ec62780d07b5fa11fbc881dc7bb40958f93a7d621e7ab4589", size = 10882152 }, - { url = "https://files.pythonhosted.org/packages/d4/0b/a955cb6b19eb900c4c594707ab72132ce2d5cd8b5565137fb8fed21b8f08/ruff-0.9.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d338336c44bda602dc8e8766836ac0441e5b0dfeac3af1bd311a97ebaf087a75", size = 10405502 }, - { url = "https://files.pythonhosted.org/packages/1e/fa/9a6c70af74f20edd2519b89eb3322f4bfa399315cf306383443700f2d6b6/ruff-0.9.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9b3ececf523d733e90b540e7afcc0494189e8999847f8855747acd5a9a8c45f", size = 11465069 }, - { url = "https://files.pythonhosted.org/packages/ee/8b/7effac8915470da496be009fe861060baff2692f92801976b2c01cdc8c54/ruff-0.9.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a11c0872a31232e473e2e0e2107f3d294dbadd2f83fb281c3eb1c22a24866924", size = 12176850 }, - { url = "https://files.pythonhosted.org/packages/bd/ed/626179786889eca47b1e821c1582622ac0c1c8f01d60ac974f8b96867a57/ruff-0.9.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5fd06220c17a9cc0dc7fc6552f2ac4db74e8e8bff9c401d160ac59d00566f54", size = 11700963 }, - { url = "https://files.pythonhosted.org/packages/75/79/094c34ddec47fd3c61a0bc5e83ca164344c592949cff91f05961fd40922e/ruff-0.9.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0457e775c74bf3976243f910805242b7dcd389e1d440deccbd1194ca17a5728c", size = 13096560 }, - { url = "https://files.pythonhosted.org/packages/e7/23/ec85dca0dcb329835197401734501bfa1d39e72343df64628c67b72bcbf5/ruff-0.9.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05415599bbcb318f730ea1b46a39e4fbf71f6a63fdbfa1dda92efb55f19d7ecf", size = 11278658 }, - { url = "https://files.pythonhosted.org/packages/6c/17/1b3ea5f06578ea1daa08ac35f9de099d1827eea6e116a8cabbf11235c925/ruff-0.9.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:fbf9864b009e43cfc1c8bed1a6a4c529156913105780af4141ca4342148517f5", size = 10879847 }, - { url = "https://files.pythonhosted.org/packages/a6/e5/00bc97d6f419da03c0d898e95cca77311494e7274dc7cc17d94976e32e52/ruff-0.9.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:37b3da222b12e2bb2ce628e02586ab4846b1ed7f31f42a5a0683b213453b2d49", size = 10494220 }, - { url = "https://files.pythonhosted.org/packages/cc/70/d0a23d94f3e40b7ffac0e5506f33bb504672569173781a6c7cab0db6a4ba/ruff-0.9.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:733c0fcf2eb0c90055100b4ed1af9c9d87305b901a8feb6a0451fa53ed88199d", size = 11004182 }, - { url = "https://files.pythonhosted.org/packages/20/8e/367cf8e401890f823d0e4eb33635d0113719d5660b6522b7295376dd95fd/ruff-0.9.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8221a454bfe5ccdf8017512fd6bb60e6ec30f9ea252b8a80e5b73619f6c3cefd", size = 11345761 }, - { url = "https://files.pythonhosted.org/packages/fe/08/4b54e02da73060ebc29368ab15868613f7d2496bde3b01d284d5423646bc/ruff-0.9.0-py3-none-win32.whl", hash = "sha256:d345f2178afd192c7991ddee59155c58145e12ad81310b509bd2e25c5b0247b3", size = 8807005 }, - { url = "https://files.pythonhosted.org/packages/a1/a7/0b422971e897c51bf805f998d75bcfe5d4d858f5002203832875fc91b733/ruff-0.9.0-py3-none-win_amd64.whl", hash = "sha256:0cbc0905d94d21305872f7f8224e30f4bbcd532bc21b2225b2446d8fc7220d19", size = 9689974 }, - { url = "https://files.pythonhosted.org/packages/73/0e/c00f66731e514be3299801b1d9d54efae0abfe8f00a5c14155f2ab9e2920/ruff-0.9.0-py3-none-win_arm64.whl", hash = "sha256:7b1148771c6ca88f820d761350a053a5794bc58e0867739ea93eb5e41ad978cd", size = 9147729 }, -] - [[package]] name = "shellingham" version = "1.5.4" @@ -528,15 +372,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d0/cc/0a838ba5ca64dc832aa43f727bd586309846b0ffb2ce52422543e6075e8a/typer-0.15.1-py3-none-any.whl", hash = "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847", size = 44908 }, ] -[[package]] -name = "types-setuptools" -version = "75.8.0.20250110" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f7/42/5713e90d4f9683f2301d900f33e4fc2405ad8ac224dda30f6cb7f4cd215b/types_setuptools-75.8.0.20250110.tar.gz", hash = "sha256:96f7ec8bbd6e0a54ea180d66ad68ad7a1d7954e7281a710ea2de75e355545271", size = 48185 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/a3/dbfd106751b11c728cec21cc62cbfe7ff7391b935c4b6e8f0bdc2e6fd541/types_setuptools-75.8.0.20250110-py3-none-any.whl", hash = "sha256:a9f12980bbf9bcdc23ecd80755789085bad6bfce4060c2275bc2b4ca9f2bc480", size = 71521 }, -] - [[package]] name = "typing-extensions" version = "4.12.2"