Support overriding API key at request-time #283
Merged
Google Cloud Build / api-python-pull-request (datcom-ci)
succeeded
Jan 11, 2026 in 1m 47s
Summary
Build Information
| Trigger | api-python-pull-request |
| Build | d4966086-21e4-4944-baf6-a502ea2df6a9 |
| Start | 2026-01-10T18:05:42-08:00 |
| Duration | 1m45.544s |
| Status | SUCCESS |
Steps
| Step | Status | Duration |
|---|---|---|
| api_python | SUCCESS | 1m39.359s |
Details
starting build "d4966086-21e4-4944-baf6-a502ea2df6a9"
FETCHSOURCE
From https://github.com/datacommonsorg/api-python
* branch 72e9b0c04bb8744284a7d524ed73ae91d97276cb -> FETCH_HEAD
HEAD is now at 72e9b0c Address review comments
GitCommit:
72e9b0c04bb8744284a7d524ed73ae91d97276cb
BUILD
Pulling image: python:3.10-slim
3.10-slim: Pulling from library/python
02d7611c4eae: Already exists
8715e552fa13: Pulling fs layer
9c27bc7ba63d: Pulling fs layer
7da4424a1132: Pulling fs layer
7da4424a1132: Verifying Checksum
7da4424a1132: Download complete
8715e552fa13: Verifying Checksum
8715e552fa13: Download complete
8715e552fa13: Pull complete
9c27bc7ba63d: Download complete
9c27bc7ba63d: Pull complete
7da4424a1132: Pull complete
Digest: sha256:7b68a5fa7cf0d20b4cedb1dc9a134fdd394fe27edbc4c2519756c91d21df2313
Status: Downloaded newer image for python:3.10-slim
docker.io/library/python:3.10-slim
### Setting up python environment
Requirement already satisfied: pip in /usr/local/lib/python3.10/site-packages (23.0.1)
Collecting pip
Downloading pip-25.3-py3-none-any.whl (1.8 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 35.8 MB/s eta 0:00:00
Collecting hatch
Downloading hatch-1.16.2-py3-none-any.whl (140 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 140.7/140.7 kB 27.2 MB/s eta 0:00:00
Collecting hatchling>=1.27.0
Downloading hatchling-1.28.0-py3-none-any.whl (76 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 76.1/76.1 kB 16.7 MB/s eta 0:00:00
Collecting userpath~=1.7
Downloading userpath-1.9.2-py3-none-any.whl (9.1 kB)
Collecting shellingham>=1.4.0
Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)
Collecting virtualenv>=20.26.6
Downloading virtualenv-20.36.1-py3-none-any.whl (6.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.0/6.0 MB 90.3 MB/s eta 0:00:00
Collecting keyring>=23.5.0
Downloading keyring-25.7.0-py3-none-any.whl (39 kB)
Collecting rich>=11.2.0
Downloading rich-14.2.0-py3-none-any.whl (243 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 243.4/243.4 kB 39.8 MB/s eta 0:00:00
Collecting tomli-w>=1.0
Downloading tomli_w-1.2.0-py3-none-any.whl (6.7 kB)
Collecting uv>=0.5.23
Downloading uv-0.9.24-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.3 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 22.3/22.3 MB 64.0 MB/s eta 0:00:00
Collecting pexpect~=4.8
Downloading pexpect-4.9.0-py2.py3-none-any.whl (63 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 63.8/63.8 kB 11.8 MB/s eta 0:00:00
Collecting click>=8.0.6
Downloading click-8.3.1-py3-none-any.whl (108 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 108.3/108.3 kB 21.9 MB/s eta 0:00:00
Collecting hyperlink>=21.0.0
Downloading hyperlink-21.0.0-py2.py3-none-any.whl (74 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 74.6/74.6 kB 17.0 MB/s eta 0:00:00
Collecting backports-zstd>=1.0.0
Downloading backports_zstd-1.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (491 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 491.1/491.1 kB 58.3 MB/s eta 0:00:00
Collecting httpx>=0.22.0
Downloading httpx-0.28.1-py3-none-any.whl (73 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.5/73.5 kB 14.8 MB/s eta 0:00:00
Collecting packaging>=24.2
Downloading packaging-25.0-py3-none-any.whl (66 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 66.5/66.5 kB 14.3 MB/s eta 0:00:00
Collecting platformdirs>=2.5.0
Downloading platformdirs-4.5.1-py3-none-any.whl (18 kB)
Collecting pyproject-hooks
Downloading pyproject_hooks-1.2.0-py3-none-any.whl (10 kB)
Collecting tomlkit>=0.11.1
Downloading tomlkit-0.13.3-py3-none-any.whl (38 kB)
Collecting pluggy>=1.0.0
Downloading pluggy-1.6.0-py3-none-any.whl (20 kB)
Collecting tomli>=1.2.2
Downloading tomli-2.3.0-py3-none-any.whl (14 kB)
Collecting trove-classifiers
Downloading trove_classifiers-2025.12.1.14-py3-none-any.whl (14 kB)
Collecting pathspec>=0.10.1
Downloading pathspec-1.0.3-py3-none-any.whl (55 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 55.0/55.0 kB 12.1 MB/s eta 0:00:00
Collecting idna
Downloading idna-3.11-py3-none-any.whl (71 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.0/71.0 kB 15.3 MB/s eta 0:00:00
Collecting certifi
Downloading certifi-2026.1.4-py3-none-any.whl (152 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 152.9/152.9 kB 29.6 MB/s eta 0:00:00
Collecting httpcore==1.*
Downloading httpcore-1.0.9-py3-none-any.whl (78 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.8/78.8 kB 16.6 MB/s eta 0:00:00
Collecting anyio
Downloading anyio-4.12.1-py3-none-any.whl (113 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 113.6/113.6 kB 22.9 MB/s eta 0:00:00
Collecting h11>=0.16
Downloading h11-0.16.0-py3-none-any.whl (37 kB)
Collecting jaraco.context
Downloading jaraco_context-6.0.2-py3-none-any.whl (7.0 kB)
Collecting jaraco.classes
Downloading jaraco.classes-3.4.0-py3-none-any.whl (6.8 kB)
Collecting SecretStorage>=3.2
Downloading secretstorage-3.5.0-py3-none-any.whl (15 kB)
Collecting importlib_metadata>=4.11.4
Downloading importlib_metadata-8.7.1-py3-none-any.whl (27 kB)
Collecting jaraco.functools
Downloading jaraco_functools-4.4.0-py3-none-any.whl (10 kB)
Collecting jeepney>=0.4.2
Downloading jeepney-0.9.0-py3-none-any.whl (49 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 49.0/49.0 kB 10.1 MB/s eta 0:00:00
Collecting ptyprocess>=0.5
Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)
Collecting pygments<3.0.0,>=2.13.0
Downloading pygments-2.19.2-py3-none-any.whl (1.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 85.0 MB/s eta 0:00:00
Collecting markdown-it-py>=2.2.0
Downloading markdown_it_py-4.0.0-py3-none-any.whl (87 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 87.3/87.3 kB 18.9 MB/s eta 0:00:00
Collecting filelock<4,>=3.20.1
Downloading filelock-3.20.3-py3-none-any.whl (16 kB)
Collecting distlib<1,>=0.3.7
Downloading distlib-0.4.0-py2.py3-none-any.whl (469 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 469.0/469.0 kB 46.9 MB/s eta 0:00:00
Collecting typing-extensions>=4.13.2
Downloading typing_extensions-4.15.0-py3-none-any.whl (44 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 44.6/44.6 kB 9.1 MB/s eta 0:00:00
Collecting zipp>=3.20
Downloading zipp-3.23.0-py3-none-any.whl (10 kB)
Collecting mdurl~=0.1
Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Collecting cryptography>=2.0
Downloading cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl (4.5 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 93.3 MB/s eta 0:00:00
Collecting exceptiongroup>=1.0.2
Downloading exceptiongroup-1.3.1-py3-none-any.whl (16 kB)
Collecting more-itertools
Downloading more_itertools-10.8.0-py3-none-any.whl (69 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.7/69.7 kB 15.1 MB/s eta 0:00:00
Collecting backports.tarfile
Downloading backports.tarfile-1.2.0-py3-none-any.whl (30 kB)
Collecting cffi>=2.0.0
Downloading cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (216 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 216.5/216.5 kB 37.9 MB/s eta 0:00:00
Collecting pycparser
Downloading pycparser-2.23-py3-none-any.whl (118 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 118.1/118.1 kB 22.2 MB/s eta 0:00:00
Installing collected packages: trove-classifiers, ptyprocess, distlib, zipp, uv, typing-extensions, tomlkit, tomli-w, tomli, shellingham, pyproject-hooks, pygments, pycparser, pluggy, platformdirs, pip, pexpect, pathspec, packaging, more-itertools, mdurl, jeepney, idna, h11, filelock, click, certifi, backports-zstd, backports.tarfile, virtualenv, userpath, markdown-it-py, jaraco.functools, jaraco.context, jaraco.classes, importlib_metadata, hyperlink, httpcore, hatchling, exceptiongroup, cffi, rich, cryptography, anyio, SecretStorage, httpx, keyring, hatch
Attempting uninstall: pip
Found existing installation: pip 23.0.1
Uninstalling pip-23.0.1:
Successfully uninstalled pip-23.0.1
Successfully installed SecretStorage-3.5.0 anyio-4.12.1 backports-zstd-1.3.0 backports.tarfile-1.2.0 certifi-2026.1.4 cffi-2.0.0 click-8.3.1 cryptography-46.0.3 distlib-0.4.0 exceptiongroup-1.3.1 filelock-3.20.3 h11-0.16.0 hatch-1.16.2 hatchling-1.28.0 httpcore-1.0.9 httpx-0.28.1 hyperlink-21.0.0 idna-3.11 importlib_metadata-8.7.1 jaraco.classes-3.4.0 jaraco.context-6.0.2 jaraco.functools-4.4.0 jeepney-0.9.0 keyring-25.7.0 markdown-it-py-4.0.0 mdurl-0.1.2 more-itertools-10.8.0 packaging-25.0 pathspec-1.0.3 pexpect-4.9.0 pip-25.3 platformdirs-4.5.1 pluggy-1.6.0 ptyprocess-0.7.0 pycparser-2.23 pygments-2.19.2 pyproject-hooks-1.2.0 rich-14.2.0 shellingham-1.5.4 tomli-2.3.0 tomli-w-1.2.0 tomlkit-0.13.3 trove-classifiers-2025.12.1.14 typing-extensions-4.15.0 userpath-1.9.2 uv-0.9.24 virtualenv-20.36.1 zipp-3.23.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
WARNING: Skipping uninstall as it is not installed.
Found existing installation: click 8.3.1
Uninstalling click-8.3.1:
Successfully uninstalled click-8.3.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
Collecting click==8.2.1
Downloading click-8.2.1-py3-none-any.whl.metadata (2.5 kB)
Downloading click-8.2.1-py3-none-any.whl (102 kB)
Installing collected packages: click
Successfully installed click-8.2.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
Creating environment: default
Installing project in development mode
Checking dependencies
Syncing dependencies
Creating environment: test
Installing project in development mode
Checking dependencies
Syncing dependencies
### Running all tests
============================= test session starts ==============================
platform linux -- Python 3.10.19, pytest-9.0.2, pluggy-1.6.0 -- /builder/home/.local/share/hatch/env/virtual/datacommons-client/xS3fZVNL/test/bin/python
cachedir: .pytest_cache
rootdir: /workspace
configfile: pyproject.toml
collecting ... collected 233 items
datacommons/test/core_test.py::TestGetPropertyLabels::test_bad_dcids PASSED [ 0%]
datacommons/test/core_test.py::TestGetPropertyLabels::test_multiple_dcids PASSED [ 0%]
datacommons/test/core_test.py::TestGetPropertyLabels::test_no_dcids PASSED [ 1%]
datacommons/test/core_test.py::TestGetPropertyLabels::test_single_dcid PASSED [ 1%]
datacommons/test/core_test.py::TestGetPropertyValues::test_bad_dcids PASSED [ 2%]
datacommons/test/core_test.py::TestGetPropertyValues::test_bad_property PASSED [ 2%]
datacommons/test/core_test.py::TestGetPropertyValues::test_multiple_dcids PASSED [ 3%]
datacommons/test/core_test.py::TestGetPropertyValues::test_no_dcids PASSED [ 3%]
datacommons/test/core_test.py::TestGetTriples::test_bad_dcids PASSED [ 3%]
datacommons/test/core_test.py::TestGetTriples::test_multiple_dcids PASSED [ 4%]
datacommons/test/core_test.py::TestGetTriples::test_no_dcids PASSED [ 4%]
datacommons/test/node_test.py::TestProperties::test_with_data PASSED [ 5%]
datacommons/test/node_test.py::TestProperties::test_with_direction PASSED [ 5%]
datacommons/test/node_test.py::TestPropertyValues::test_multiple_values PASSED [ 6%]
datacommons/test/node_test.py::TestPropertyValues::test_with_data PASSED [ 6%]
datacommons/test/node_test.py::TestTriples::test_with_data PASSED [ 6%]
datacommons/test/places_test.py::TestGetPlacesIn::test_bad_dcids PASSED [ 7%]
datacommons/test/places_test.py::TestGetPlacesIn::test_multiple_dcids PASSED [ 7%]
datacommons/test/places_test.py::TestGetPlacesIn::test_no_dcids PASSED [ 8%]
datacommons/test/places_test.py::TestGetStats::test_bad_dcids PASSED [ 8%]
datacommons/test/places_test.py::TestGetStats::test_batch_request PASSED [ 9%]
datacommons/test/places_test.py::TestGetStats::test_multiple_dcids PASSED [ 9%]
datacommons/test/places_test.py::TestGetStats::test_no_data PASSED [ 9%]
datacommons/test/places_test.py::TestGetStats::test_no_dcids PASSED [ 10%]
datacommons/test/places_test.py::TestGetStats::test_opt_args PASSED [ 10%]
datacommons/test/set_api_key_test.py::TestApiKey::test_set_api_key PASSED [ 11%]
datacommons/test/sparql_test.py::TestQuery::test_no_rows PASSED [ 11%]
datacommons/test/sparql_test.py::TestQuery::test_rows PASSED [ 12%]
datacommons/test/stat_vars_test.py::TestGetStatValue::test_basic PASSED [ 12%]
datacommons/test/stat_vars_test.py::TestGetStatValue::test_opt_args PASSED [ 12%]
datacommons/test/stat_vars_test.py::TestGetStatSeries::test_basic PASSED [ 13%]
datacommons/test/stat_vars_test.py::TestGetStatSeries::test_opt_args PASSED [ 13%]
datacommons/test/stat_vars_test.py::TestGetStatAll::test_bad_dcids PASSED [ 14%]
datacommons/test/stat_vars_test.py::TestGetStatAll::test_basic PASSED [ 14%]
datacommons_client/tests/endpoints/test_base.py::test_api_initialization_default PASSED [ 15%]
datacommons_client/tests/endpoints/test_base.py::test_api_initialization_with_url PASSED [ 15%]
datacommons_client/tests/endpoints/test_base.py::test_api_initialization_with_dc_instance PASSED [ 15%]
datacommons_client/tests/endpoints/test_base.py::test_api_initialization_with_surface_header PASSED [ 16%]
datacommons_client/tests/endpoints/test_base.py::test_api_initialization_invalid_args PASSED [ 16%]
datacommons_client/tests/endpoints/test_base.py::test_build_headers_without_api_key PASSED [ 17%]
datacommons_client/tests/endpoints/test_base.py::test_build_headers_with_api_key_no_surface PASSED [ 17%]
datacommons_client/tests/endpoints/test_base.py::test_build_headers_with_api_key_and_surface PASSED [ 18%]
datacommons_client/tests/endpoints/test_base.py::test_api_post_request[token123-True] PASSED [ 18%]
datacommons_client/tests/endpoints/test_base.py::test_api_post_request[token123-False] PASSED [ 18%]
datacommons_client/tests/endpoints/test_base.py::test_api_post_request[None-True] PASSED [ 19%]
datacommons_client/tests/endpoints/test_base.py::test_api_post_request[None-False] PASSED [ 19%]
datacommons_client/tests/endpoints/test_base.py::test_endpoint_post_request PASSED [ 20%]
datacommons_client/tests/endpoints/test_base.py::test_api_post_request_invalid_payload PASSED [ 20%]
datacommons_client/tests/endpoints/test_base.py::test_endpoint_initialization PASSED [ 21%]
datacommons_client/tests/endpoints/test_base.py::test_endpoint_repr PASSED [ 21%]
datacommons_client/tests/endpoints/test_base.py::test_endpoint_post_request_invalid_payload PASSED [ 21%]
datacommons_client/tests/endpoints/test_base.py::test_api_repr PASSED [ 22%]
datacommons_client/tests/endpoints/test_error_handling.py::test_data_commons_error_default_message PASSED [ 22%]
datacommons_client/tests/endpoints/test_error_handling.py::test_data_commons_error_custom_message PASSED [ 23%]
datacommons_client/tests/endpoints/test_error_handling.py::test_api_error_without_response PASSED [ 23%]
datacommons_client/tests/endpoints/test_error_handling.py::test_api_error_with_response PASSED [ 24%]
datacommons_client/tests/endpoints/test_error_handling.py::test_subclass_default_messages PASSED [ 24%]
datacommons_client/tests/endpoints/test_error_handling.py::test_subclass_custom_message PASSED [ 24%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_node_endpoint_initialization PASSED [ 25%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_node_endpoint_fetch PASSED [ 25%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_node_endpoint_fetch_property_labels PASSED [ 26%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_node_endpoint_fetch_property_values_out PASSED [ 26%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_node_endpoint_fetch_property_values_in PASSED [ 27%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_node_endpoint_fetch_all_classes PASSED [ 27%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_node_endpoint_fetch_property_values_string_vs_list PASSED [ 27%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_fetch_entity_names_english PASSED [ 28%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_fetch_entity_names_non_english PASSED [ 28%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_fetch_entity_names_with_fallback PASSED [ 29%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_fetch_entity_names_no_result PASSED [ 29%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_fetch_entity_relationships_delegates_to_lru PASSED [ 30%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_fetch_entity_ancestry_flat PASSED [ 30%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_fetch_entity_ancestry_tree PASSED [ 30%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test__fetch_property_id_names_flattens_to_dcid_and_name PASSED [ 31%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_fetch_statvar_constraints_builds_constraints_and_values PASSED [ 31%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_fetch_statvar_constraints_handles_string_input_and_no_constraints PASSED [ 32%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test__fetch_property_id_names_handles_literal_values PASSED [ 32%]
datacommons_client/tests/endpoints/test_node_endpoint.py::test_fetch_statvar_constraints_skips_missing_constraint_values PASSED [ 33%]
datacommons_client/tests/endpoints/test_observation_endpoint.py::test_fetch PASSED [ 33%]
datacommons_client/tests/endpoints/test_observation_endpoint.py::test_fetch_observations_by_entity_type PASSED [ 33%]
datacommons_client/tests/endpoints/test_observation_endpoint.py::test_fetch_observations_facets_by_entity_type PASSED [ 34%]
datacommons_client/tests/endpoints/test_observation_endpoint.py::test_fetch_available_statistical_variables_single_entity PASSED [ 34%]
datacommons_client/tests/endpoints/test_observation_endpoint.py::test_fetch_available_statistical_variables_multiple_entities PASSED [ 35%]
datacommons_client/tests/endpoints/test_payloads.py::test_node_payload_normalize PASSED [ 35%]
datacommons_client/tests/endpoints/test_payloads.py::test_node_payload_validate PASSED [ 36%]
datacommons_client/tests/endpoints/test_payloads.py::test_node_payload_to_dict PASSED [ 36%]
datacommons_client/tests/endpoints/test_payloads.py::test_observation_payload_normalize PASSED [ 36%]
datacommons_client/tests/endpoints/test_payloads.py::test_observation_select_invalid_value PASSED [ 37%]
datacommons_client/tests/endpoints/test_payloads.py::test_observation_payload_validate PASSED [ 37%]
datacommons_client/tests/endpoints/test_payloads.py::test_observation_payload_to_dict PASSED [ 38%]
datacommons_client/tests/endpoints/test_payloads.py::test_resolve_payload_normalize PASSED [ 38%]
datacommons_client/tests/endpoints/test_payloads.py::test_resolve_payload_validate PASSED [ 39%]
datacommons_client/tests/endpoints/test_payloads.py::test_resolve_payload_to_dict PASSED [ 39%]
datacommons_client/tests/endpoints/test_request_handling.py::test_resolve_instance_url_default PASSED [ 39%]
datacommons_client/tests/endpoints/test_request_handling.py::test_check_instance_is_valid_request_exception PASSED [ 40%]
datacommons_client/tests/endpoints/test_request_handling.py::test_send_post_request_connection_error PASSED [ 40%]
datacommons_client/tests/endpoints/test_request_handling.py::test_resolve_instance_url_custom PASSED [ 41%]
datacommons_client/tests/endpoints/test_request_handling.py::test_check_instance_is_valid_valid PASSED [ 41%]
datacommons_client/tests/endpoints/test_request_handling.py::test_check_instance_is_valid_with_key_valid PASSED [ 42%]
datacommons_client/tests/endpoints/test_request_handling.py::test_check_instance_is_valid_invalid PASSED [ 42%]
datacommons_client/tests/endpoints/test_request_handling.py::test_send_post_request_500_status_error PASSED [ 42%]
datacommons_client/tests/endpoints/test_request_handling.py::test_send_post_request_other_http_error PASSED [ 43%]
datacommons_client/tests/endpoints/test_request_handling.py::test_send_post_request_success PASSED [ 43%]
datacommons_client/tests/endpoints/test_request_handling.py::test_send_post_request_surface_header PASSED [ 44%]
datacommons_client/tests/endpoints/test_request_handling.py::test_send_post_request_http_error PASSED [ 44%]
datacommons_client/tests/endpoints/test_request_handling.py::test_recursively_merge_dicts PASSED [ 45%]
datacommons_client/tests/endpoints/test_request_handling.py::test_merge_values_dicts PASSED [ 45%]
datacommons_client/tests/endpoints/test_request_handling.py::test_merge_values_lists PASSED [ 45%]
datacommons_client/tests/endpoints/test_request_handling.py::test_merge_values_other PASSED [ 46%]
datacommons_client/tests/endpoints/test_request_handling.py::test_merge_values_complex_conflict PASSED [ 46%]
datacommons_client/tests/endpoints/test_request_handling.py::test_fetch_with_pagination PASSED [ 47%]
datacommons_client/tests/endpoints/test_request_handling.py::test_fetch_with_pagination_next_token PASSED [ 47%]
datacommons_client/tests/endpoints/test_request_handling.py::test_fetch_with_pagination_next_token_all_pages PASSED [ 48%]
datacommons_client/tests/endpoints/test_request_handling.py::test_fetch_with_pagination_invalid_json PASSED [ 48%]
datacommons_client/tests/endpoints/test_request_handling.py::test_post_request PASSED [ 48%]
datacommons_client/tests/endpoints/test_request_handling.py::test_post_request_next_token PASSED [ 49%]
datacommons_client/tests/endpoints/test_request_handling.py::test_post_request_invalid_payload PASSED [ 49%]
datacommons_client/tests/endpoints/test_resolve_endpoint.py::test_fetch PASSED [ 50%]
datacommons_client/tests/endpoints/test_resolve_endpoint.py::test_fetch_dcid_by_name PASSED [ 50%]
datacommons_client/tests/endpoints/test_resolve_endpoint.py::test_fetch_dcid_by_wikidata_id PASSED [ 51%]
datacommons_client/tests/endpoints/test_resolve_endpoint.py::test_fetch_dcids_list_by_wikidata_id PASSED [ 51%]
datacommons_client/tests/endpoints/test_resolve_endpoint.py::test_fetch_dcid_by_coordinates PASSED [ 51%]
datacommons_client/tests/endpoints/test_resolve_endpoint.py::test_resolve_correspondence_expression PASSED [ 52%]
datacommons_client/tests/endpoints/test_resolve_endpoint.py::test_flatten_resolve_response PASSED [ 52%]
datacommons_client/tests/endpoints/test_response.py::test_node_response_model_validation PASSED [ 53%]
datacommons_client/tests/endpoints/test_response.py::test_node_as_dict PASSED [ 53%]
datacommons_client/tests/endpoints/test_response.py::test_node_as_dict_exclude_none PASSED [ 54%]
datacommons_client/tests/endpoints/test_response.py::test_node_as_dict_include_none PASSED [ 54%]
datacommons_client/tests/endpoints/test_response.py::test_flatten_properties PASSED [ 54%]
datacommons_client/tests/endpoints/test_response.py::test_flatten_arcs PASSED [ 55%]
datacommons_client/tests/endpoints/test_response.py::test_flatten_multiple_arcs_with_multiple_nodes PASSED [ 55%]
datacommons_client/tests/endpoints/test_response.py::test_unpack_arcs_missing_nodes_key PASSED [ 56%]
datacommons_client/tests/endpoints/test_response.py::test_unpack_arcs_multiple_properties PASSED [ 56%]
datacommons_client/tests/endpoints/test_response.py::test_extract_connected_dcids PASSED [ 57%]
datacommons_client/tests/endpoints/test_response.py::test_extract_connected_dcids_with_nonexistent_dcid PASSED [ 57%]
datacommons_client/tests/endpoints/test_response.py::test_extract_connected_dcids_with_nonexistent_property PASSED [ 57%]
datacommons_client/tests/endpoints/test_response.py::test_extract_connected_dcids_does_not_include_none_for_value_only_nodes PASSED [ 58%]
datacommons_client/tests/endpoints/test_response.py::test_extract_connected_dcids_with_node_type_filter PASSED [ 58%]
datacommons_client/tests/endpoints/test_response.py::test_extract_connected_dcids_with_multiple_node_type_filter PASSED [ 59%]
datacommons_client/tests/endpoints/test_response.py::test_extract_connected_nodes_with_multiple_node_type_filter PASSED [ 59%]
datacommons_client/tests/endpoints/test_response.py::test_get_data_by_entity PASSED [ 60%]
datacommons_client/tests/endpoints/test_response.py::test_observation_as_dict PASSED [ 60%]
datacommons_client/tests/endpoints/test_response.py::test_observation_as_dict_exclude_none PASSED [ 60%]
datacommons_client/tests/endpoints/test_response.py::test_observation_response_model_validation PASSED [ 61%]
datacommons_client/tests/endpoints/test_response.py::test_get_data_by_entity_from_method PASSED [ 61%]
datacommons_client/tests/endpoints/test_response.py::test_extract_observations PASSED [ 62%]
datacommons_client/tests/endpoints/test_response.py::test_get_observations_as_records PASSED [ 62%]
datacommons_client/tests/endpoints/test_response.py::test_resolve_response_model_validation PASSED [ 63%]
datacommons_client/tests/endpoints/test_response.py::test_resolve_response_dict PASSED [ 63%]
datacommons_client/tests/endpoints/test_response.py::test_resolve_response_dict_exclude_none PASSED [ 63%]
datacommons_client/tests/endpoints/test_response.py::test_resolve_response_json_string_exclude_none PASSED [ 64%]
datacommons_client/tests/endpoints/test_response.py::test_get_facets_metadata PASSED [ 64%]
datacommons_client/tests/endpoints/test_response.py::test_find_matching_facet_id PASSED [ 65%]
datacommons_client/tests/models/test_node_models.py::test_node_model_validation PASSED [ 65%]
datacommons_client/tests/models/test_node_models.py::test_node_model_validation_partial PASSED [ 66%]
datacommons_client/tests/models/test_node_models.py::test_nodegroup_model_validation PASSED [ 66%]
datacommons_client/tests/models/test_node_models.py::test_nodegroup_model_validation_empty PASSED [ 66%]
datacommons_client/tests/models/test_node_models.py::test_arcs_model_validation PASSED [ 67%]
datacommons_client/tests/models/test_node_models.py::test_arcs_model_validation_empty PASSED [ 67%]
datacommons_client/tests/models/test_node_models.py::test_properties_model_validation PASSED [ 68%]
datacommons_client/tests/models/test_node_models.py::test_properties_model_validation_empty PASSED [ 68%]
datacommons_client/tests/models/test_node_models.py::test_statvarconstraint_model_validation PASSED [ 69%]
datacommons_client/tests/models/test_node_models.py::test_statvarconstraints_model_validation PASSED [ 69%]
datacommons_client/tests/models/test_observation_models.py::test_observation_model_validation PASSED [ 69%]
datacommons_client/tests/models/test_observation_models.py::test_observation_model_validation_partial PASSED [ 70%]
datacommons_client/tests/models/test_observation_models.py::test_ordered_facets_model_validation PASSED [ 70%]
datacommons_client/tests/models/test_observation_models.py::test_ordered_facets_model_validation_empty_observations PASSED [ 71%]
datacommons_client/tests/models/test_observation_models.py::test_variable_model_validation PASSED [ 71%]
datacommons_client/tests/models/test_observation_models.py::test_variable_model_validation_empty PASSED [ 72%]
datacommons_client/tests/models/test_observation_models.py::test_facet_model_validation PASSED [ 72%]
datacommons_client/tests/models/test_observation_models.py::test_facet_model_validation_partial PASSED [ 72%]
datacommons_client/tests/models/test_observation_models.py::test_observation_select_list_defaults PASSED [ 73%]
datacommons_client/tests/models/test_observation_models.py::test_observation_select_list_custom PASSED [ 73%]
datacommons_client/tests/models/test_observation_models.py::test_observation_select_list_missing_required PASSED [ 74%]
datacommons_client/tests/models/test_resolve_models.py::test_candidate_model_validation PASSED [ 74%]
datacommons_client/tests/models/test_resolve_models.py::test_candidate_model_validation_partial PASSED [ 75%]
datacommons_client/tests/models/test_resolve_models.py::test_entity_model_validation PASSED [ 75%]
datacommons_client/tests/models/test_resolve_models.py::test_entity_model_validation_empty_candidates PASSED [ 75%]
datacommons_client/tests/test_client.py::test_datacommons_client_initialization PASSED [ 76%]
datacommons_client/tests/test_client.py::test_datacommons_client_initialization_with_surface_header PASSED [ 76%]
datacommons_client/tests/test_client.py::test_datacommons_client_raises_error_when_both_url_and_instance_are_provided PASSED [ 77%]
datacommons_client/tests/test_client.py::test_observations_dataframe_raises_error_when_entities_all_but_no_entity_type PASSED [ 77%]
datacommons_client/tests/test_client.py::test_observations_dataframe_raises_error_when_entities_all_but_no_parent_entity PASSED [ 78%]
datacommons_client/tests/test_client.py::test_observations_dataframe_raises_error_when_invalid_entity_type_usage PASSED [ 78%]
datacommons_client/tests/test_client.py::test_observations_dataframe_calls_fetch_observations_by_entity_type PASSED [ 78%]
datacommons_client/tests/test_client.py::test_observations_dataframe_calls_fetch_observations_by_entity PASSED [ 79%]
datacommons_client/tests/test_client.py::test_observations_dataframe_returns_dataframe_with_expected_columns PASSED [ 79%]
datacommons_client/tests/test_client.py::test_observations_dataframe_includes_constraints_metadata PASSED [ 80%]
datacommons_client/tests/test_client.py::test_dc_instance_is_ignored_when_url_is_provided PASSED [ 80%]
datacommons_client/tests/test_client.py::test_find_filter_facet_ids_returns_none_when_no_filters PASSED [ 81%]
datacommons_client/tests/test_client.py::test_find_filter_facet_ids_returns_facet_ids PASSED [ 81%]
datacommons_client/tests/test_client.py::test_observations_dataframe_filters_by_facet_ids PASSED [ 81%]
datacommons_client/tests/test_client.py::test_observations_dataframe_raises_error_when_no_facet_match PASSED [ 82%]
datacommons_client/tests/test_client.py::test_client_end_to_end_surface_header_propagation_observation PASSED [ 82%]
datacommons_client/tests/test_client.py::test_use_api_key_with_observation_fetch PASSED [ 83%]
datacommons_client/tests/test_client.py::test_use_api_key_with_node_fetch_place_ancestors PASSED [ 83%]
datacommons_client/tests/test_context.py::test_use_api_key_sets_var PASSED [ 84%]
datacommons_client/tests/test_context.py::test_use_api_key_nested PASSED [ 84%]
datacommons_client/tests/test_context.py::test_use_api_key_none PASSED [ 84%]
datacommons_client/tests/test_dataframes.py::test_add_property_constraints_to_observations_dataframe_adds_columns PASSED [ 85%]
datacommons_client/tests/test_dataframes.py::test_add_property_constraints_to_observations_dataframe_empty PASSED [ 85%]
datacommons_client/tests/test_decorators.py::test_requires_pandas_with_pandas PASSED [ 86%]
datacommons_client/tests/test_decorators.py::test_requires_pandas_without_pandas PASSED [ 86%]
datacommons_client/tests/test_decorators.py::test_importerror_handling PASSED [ 87%]
datacommons_client/tests/test_names.py::test_extract_name_from_english_name_property_with_list PASSED [ 87%]
datacommons_client/tests/test_names.py::test_extract_name_from_english_empty_list PASSED [ 87%]
datacommons_client/tests/test_names.py::test_extract_name_from_english_not_list PASSED [ 88%]
datacommons_client/tests/test_names.py::test_extract_name_from_property_with_language_match PASSED [ 88%]
datacommons_client/tests/test_names.py::test_extract_name_from_property_with_language_fallback PASSED [ 89%]
datacommons_client/tests/test_names.py::test_extract_name_from_property_with_language_no_fallback PASSED [ 89%]
datacommons_client/tests/test_names.py::test_extract_name_from_property_without_language_tags PASSED [ 90%]
datacommons_client/tests/test_utils.py::test_group_variables_by_entity_basic PASSED [ 90%]
datacommons_client/tests/test_utils.py::test_group_variables_by_entity_duplicate_entities PASSED [ 90%]
datacommons_client/tests/test_utils.py::test_group_variables_by_entity_preserves_order PASSED [ 91%]
datacommons_client/tests/utils/test_graph.py::test_fetch_parents_uncached_returns_data PASSED [ 91%]
datacommons_client/tests/utils/test_graph.py::test_fetch_relationship_lru_caches_results PASSED [ 92%]
datacommons_client/tests/utils/test_graph.py::test_build_ancestry_map_linear_tree PASSED [ 92%]
datacommons_client/tests/utils/test_graph.py::test_build_ancestry_map_branching_graph PASSED [ 93%]
datacommons_client/tests/utils/test_graph.py::test_build_ancestry_map_cycle_detection PASSED [ 93%]
datacommons_client/tests/utils/test_graph.py::test_postorder_nodes_simple_graph PASSED [ 93%]
datacommons_client/tests/utils/test_graph.py::test_postorder_nodes_ignores_disconnected PASSED [ 94%]
datacommons_client/tests/utils/test_graph.py::test_assemble_tree_creates_nested_structure PASSED [ 94%]
datacommons_client/tests/utils/test_graph.py::test_postorder_nodes_ignores_unreachable_nodes PASSED [ 95%]
datacommons_client/tests/utils/test_graph.py::test_assemble_tree_shared_parent_not_duplicated PASSED [ 95%]
datacommons_client/tests/utils/test_graph.py::test_build_ancestry_tree_nested_output PASSED [ 96%]
datacommons_client/tests/utils/test_graph.py::test_flatten_ancestry_deduplicates PASSED [ 96%]
datacommons_pandas/test/df_builder_test.py::TestBuildTimeSeries::test_basic PASSED [ 96%]
datacommons_pandas/test/df_builder_test.py::TestBuildTimeSeries::test_multi_option PASSED [ 97%]
datacommons_pandas/test/df_builder_test.py::TestBuildTimeSeries::test_no_data PASSED [ 97%]
datacommons_pandas/test/df_builder_test.py::TestPdTimeSeries::test_basic PASSED [ 98%]
datacommons_pandas/test/df_builder_test.py::TestPdTimeSeries::test_one_place PASSED [ 98%]
datacommons_pandas/test/df_builder_test.py::TestPdMultivariates::test_basic PASSED [ 99%]
datacommons_pandas/test/df_builder_test.py::TestPdMultivariates::test_no_data PASSED [ 99%]
datacommons_pandas/test/df_builder_test.py::TestPdMultivariates::test_one_each PASSED [100%]
============================= 233 passed in 1.68s ==============================
Skipped 2 files
Python style checks passed.
PUSH
DONE
Loading