google-cloud-bigquery 3.34.0__tar.gz → 3.35.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. {google_cloud_bigquery-3.34.0/google_cloud_bigquery.egg-info → google_cloud_bigquery-3.35.0}/PKG-INFO +3 -2
  2. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/_job_helpers.py +1 -0
  3. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/_pandas_helpers.py +2 -7
  4. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/client.py +58 -3
  5. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/dataset.py +27 -10
  6. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/enums.py +54 -0
  7. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/external_config.py +134 -4
  8. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/job/base.py +1 -3
  9. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/job/load.py +171 -1
  10. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/job/query.py +9 -0
  11. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/query.py +14 -0
  12. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/routine/routine.py +3 -9
  13. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/schema.py +2 -4
  14. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/table.py +22 -7
  15. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/version.py +1 -1
  16. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0/google_cloud_bigquery.egg-info}/PKG-INFO +3 -2
  17. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/test_load.py +88 -1
  18. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/test_load_config.py +244 -0
  19. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/test_query.py +74 -0
  20. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/test_query_pandas.py +5 -7
  21. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_client.py +161 -2
  22. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_create_dataset.py +6 -1
  23. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_dataset.py +67 -0
  24. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_external_config.py +72 -1
  25. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_magics.py +5 -0
  26. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_query.py +16 -0
  27. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_table_pandas.py +6 -8
  28. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/LICENSE +0 -0
  29. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/MANIFEST.in +0 -0
  30. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/README.rst +0 -0
  31. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/__init__.py +0 -0
  32. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/_helpers.py +0 -0
  33. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/_http.py +0 -0
  34. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/_pyarrow_helpers.py +0 -0
  35. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/_tqdm_helpers.py +0 -0
  36. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/_versions_helpers.py +0 -0
  37. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/dbapi/__init__.py +0 -0
  38. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/dbapi/_helpers.py +0 -0
  39. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/dbapi/connection.py +0 -0
  40. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/dbapi/cursor.py +0 -0
  41. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/dbapi/exceptions.py +0 -0
  42. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/dbapi/types.py +0 -0
  43. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/encryption_configuration.py +0 -0
  44. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/exceptions.py +0 -0
  45. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/format_options.py +0 -0
  46. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/iam.py +0 -0
  47. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/job/__init__.py +0 -0
  48. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/job/copy_.py +0 -0
  49. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/job/extract.py +0 -0
  50. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/magics/__init__.py +0 -0
  51. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/magics/line_arg_parser/__init__.py +0 -0
  52. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/magics/line_arg_parser/exceptions.py +0 -0
  53. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/magics/line_arg_parser/lexer.py +0 -0
  54. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/magics/line_arg_parser/parser.py +0 -0
  55. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/magics/line_arg_parser/visitors.py +0 -0
  56. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/magics/magics.py +0 -0
  57. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/model.py +0 -0
  58. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/opentelemetry_tracing.py +0 -0
  59. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/py.typed +0 -0
  60. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/retry.py +0 -0
  61. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/routine/__init__.py +0 -0
  62. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery/standard_sql.py +0 -0
  63. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery_v2/__init__.py +0 -0
  64. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery_v2/types/__init__.py +0 -0
  65. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery_v2/types/encryption_config.py +0 -0
  66. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery_v2/types/model.py +0 -0
  67. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery_v2/types/model_reference.py +0 -0
  68. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery_v2/types/standard_sql.py +0 -0
  69. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google/cloud/bigquery_v2/types/table_reference.py +0 -0
  70. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google_cloud_bigquery.egg-info/SOURCES.txt +0 -0
  71. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google_cloud_bigquery.egg-info/dependency_links.txt +0 -0
  72. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google_cloud_bigquery.egg-info/requires.txt +0 -0
  73. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/google_cloud_bigquery.egg-info/top_level.txt +0 -0
  74. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/pyproject.toml +0 -0
  75. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/setup.cfg +0 -0
  76. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/setup.py +0 -0
  77. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/__init__.py +0 -0
  78. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/characters.json +0 -0
  79. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/characters.jsonl +0 -0
  80. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/colors.avro +0 -0
  81. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/numeric_38_12.parquet +0 -0
  82. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/people.csv +0 -0
  83. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/scalars.csv +0 -0
  84. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/scalars.jsonl +0 -0
  85. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/scalars_extreme.jsonl +0 -0
  86. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/scalars_schema.json +0 -0
  87. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/scalars_schema_csv.json +0 -0
  88. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/data/schema.json +0 -0
  89. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/scrub_datasets.py +0 -0
  90. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/__init__.py +0 -0
  91. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/conftest.py +0 -0
  92. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/helpers.py +0 -0
  93. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/test_arrow.py +0 -0
  94. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/test_client.py +0 -0
  95. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/test_job_retry.py +0 -0
  96. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/test_list_rows.py +0 -0
  97. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/test_magics.py +0 -0
  98. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/test_pandas.py +0 -0
  99. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/test_query.py +0 -0
  100. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/system/test_structs.py +0 -0
  101. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/__init__.py +0 -0
  102. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/_helpers/__init__.py +0 -0
  103. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/_helpers/test_cell_data_parser.py +0 -0
  104. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/_helpers/test_data_frame_cell_data_parser.py +0 -0
  105. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/_helpers/test_scalar_query_param_parser.py +0 -0
  106. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/conftest.py +0 -0
  107. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/helpers.py +0 -0
  108. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/__init__.py +0 -0
  109. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/helpers.py +0 -0
  110. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/test_base.py +0 -0
  111. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/test_copy.py +0 -0
  112. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/test_extract.py +0 -0
  113. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/test_query_config.py +0 -0
  114. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/job/test_query_stats.py +0 -0
  115. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/line_arg_parser/__init__.py +0 -0
  116. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/line_arg_parser/test_lexer.py +0 -0
  117. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/line_arg_parser/test_parser.py +0 -0
  118. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/line_arg_parser/test_visitors.py +0 -0
  119. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/model/__init__.py +0 -0
  120. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/model/test_model.py +0 -0
  121. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/model/test_model_reference.py +0 -0
  122. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/routine/__init__.py +0 -0
  123. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/routine/test_remote_function_options.py +0 -0
  124. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/routine/test_routine.py +0 -0
  125. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/routine/test_routine_argument.py +0 -0
  126. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/routine/test_routine_reference.py +0 -0
  127. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test__helpers.py +0 -0
  128. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test__http.py +0 -0
  129. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test__job_helpers.py +0 -0
  130. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test__pandas_helpers.py +0 -0
  131. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test__pyarrow_helpers.py +0 -0
  132. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test__versions_helpers.py +0 -0
  133. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_dbapi__helpers.py +0 -0
  134. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_dbapi_connection.py +0 -0
  135. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_dbapi_cursor.py +0 -0
  136. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_dbapi_types.py +0 -0
  137. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_delete_dataset.py +0 -0
  138. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_encryption_configuration.py +0 -0
  139. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_format_options.py +0 -0
  140. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_job_retry.py +0 -0
  141. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_legacy_types.py +0 -0
  142. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_list_datasets.py +0 -0
  143. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_list_jobs.py +0 -0
  144. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_list_models.py +0 -0
  145. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_list_projects.py +0 -0
  146. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_list_routines.py +0 -0
  147. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_list_tables.py +0 -0
  148. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_opentelemetry_tracing.py +0 -0
  149. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_packaging.py +0 -0
  150. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_retry.py +0 -0
  151. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_schema.py +0 -0
  152. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_signature_compatibility.py +0 -0
  153. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_standard_sql_types.py +0 -0
  154. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_table.py +0 -0
  155. {google_cloud_bigquery-3.34.0 → google_cloud_bigquery-3.35.0}/tests/unit/test_table_arrow.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: google-cloud-bigquery
3
- Version: 3.34.0
3
+ Version: 3.35.0
4
4
  Summary: Google BigQuery API client library
5
5
  Author-email: Google LLC <googleapis-packages@google.com>
6
6
  License: Apache 2.0
@@ -62,6 +62,7 @@ Requires-Dist: proto-plus<2.0.0,>=1.22.3; extra == "bigquery-v2"
62
62
  Requires-Dist: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<7.0.0,>=3.20.2; extra == "bigquery-v2"
63
63
  Provides-Extra: all
64
64
  Requires-Dist: google-cloud-bigquery[bigquery_v2,bqstorage,geopandas,ipython,ipywidgets,matplotlib,opentelemetry,pandas,tqdm]; extra == "all"
65
+ Dynamic: license-file
65
66
 
66
67
  Python Client for Google BigQuery
67
68
  =================================
@@ -560,6 +560,7 @@ def query_and_wait(
560
560
  num_dml_affected_rows=query_results.num_dml_affected_rows,
561
561
  query=query,
562
562
  total_bytes_processed=query_results.total_bytes_processed,
563
+ slot_millis=query_results.slot_millis,
563
564
  )
564
565
 
565
566
  if job_retry is not None:
@@ -337,13 +337,8 @@ def default_types_mapper(
337
337
  ):
338
338
  return range_date_dtype
339
339
 
340
- # TODO: this section does not have a test yet OR at least not one that is
341
- # recognized by coverage, hence the pragma. See Issue: #2132
342
- elif (
343
- range_timestamp_dtype is not None
344
- and arrow_data_type.equals( # pragma: NO COVER
345
- range_timestamp_dtype.pyarrow_dtype
346
- )
340
+ elif range_timestamp_dtype is not None and arrow_data_type.equals(
341
+ range_timestamp_dtype.pyarrow_dtype
347
342
  ):
348
343
  return range_timestamp_dtype
349
344
 
@@ -90,7 +90,8 @@ from google.cloud.bigquery._job_helpers import make_job_id as _make_job_id
90
90
  from google.cloud.bigquery.dataset import Dataset
91
91
  from google.cloud.bigquery.dataset import DatasetListItem
92
92
  from google.cloud.bigquery.dataset import DatasetReference
93
- from google.cloud.bigquery.enums import AutoRowIDs
93
+
94
+ from google.cloud.bigquery.enums import AutoRowIDs, DatasetView, UpdateMode
94
95
  from google.cloud.bigquery.format_options import ParquetOptions
95
96
  from google.cloud.bigquery.job import (
96
97
  CopyJob,
@@ -864,6 +865,7 @@ class Client(ClientWithProject):
864
865
  dataset_ref: Union[DatasetReference, str],
865
866
  retry: retries.Retry = DEFAULT_RETRY,
866
867
  timeout: TimeoutType = DEFAULT_TIMEOUT,
868
+ dataset_view: Optional[DatasetView] = None,
867
869
  ) -> Dataset:
868
870
  """Fetch the dataset referenced by ``dataset_ref``
869
871
 
@@ -881,7 +883,21 @@ class Client(ClientWithProject):
881
883
  timeout (Optional[float]):
882
884
  The number of seconds to wait for the underlying HTTP transport
883
885
  before using ``retry``.
884
-
886
+ dataset_view (Optional[google.cloud.bigquery.enums.DatasetView]):
887
+ Specifies the view that determines which dataset information is
888
+ returned. By default, dataset metadata (e.g. friendlyName, description,
889
+ labels, etc) and ACL information are returned. This argument can
890
+ take on the following possible enum values.
891
+
892
+ * :attr:`~google.cloud.bigquery.enums.DatasetView.ACL`:
893
+ Includes dataset metadata and the ACL.
894
+ * :attr:`~google.cloud.bigquery.enums.DatasetView.FULL`:
895
+ Includes all dataset metadata, including the ACL and table metadata.
896
+ This view is not supported by the `datasets.list` API method.
897
+ * :attr:`~google.cloud.bigquery.enums.DatasetView.METADATA`:
898
+ Includes basic dataset metadata, but not the ACL.
899
+ * :attr:`~google.cloud.bigquery.enums.DatasetView.DATASET_VIEW_UNSPECIFIED`:
900
+ The server will decide which view to use. Currently defaults to FULL.
885
901
  Returns:
886
902
  google.cloud.bigquery.dataset.Dataset:
887
903
  A ``Dataset`` instance.
@@ -891,6 +907,12 @@ class Client(ClientWithProject):
891
907
  dataset_ref, default_project=self.project
892
908
  )
893
909
  path = dataset_ref.path
910
+
911
+ if dataset_view:
912
+ query_params = {"datasetView": dataset_view.value}
913
+ else:
914
+ query_params = {}
915
+
894
916
  span_attributes = {"path": path}
895
917
  api_response = self._call_api(
896
918
  retry,
@@ -899,6 +921,7 @@ class Client(ClientWithProject):
899
921
  method="GET",
900
922
  path=path,
901
923
  timeout=timeout,
924
+ query_params=query_params,
902
925
  )
903
926
  return Dataset.from_api_repr(api_response)
904
927
 
@@ -1198,6 +1221,7 @@ class Client(ClientWithProject):
1198
1221
  fields: Sequence[str],
1199
1222
  retry: retries.Retry = DEFAULT_RETRY,
1200
1223
  timeout: TimeoutType = DEFAULT_TIMEOUT,
1224
+ update_mode: Optional[UpdateMode] = None,
1201
1225
  ) -> Dataset:
1202
1226
  """Change some fields of a dataset.
1203
1227
 
@@ -1237,6 +1261,20 @@ class Client(ClientWithProject):
1237
1261
  timeout (Optional[float]):
1238
1262
  The number of seconds to wait for the underlying HTTP transport
1239
1263
  before using ``retry``.
1264
+ update_mode (Optional[google.cloud.bigquery.enums.UpdateMode]):
1265
+ Specifies the kind of information to update in a dataset.
1266
+ By default, dataset metadata (e.g. friendlyName, description,
1267
+ labels, etc) and ACL information are updated. This argument can
1268
+ take on the following possible enum values.
1269
+
1270
+ * :attr:`~google.cloud.bigquery.enums.UPDATE_MODE_UNSPECIFIED`:
1271
+ The default value. Behavior defaults to UPDATE_FULL.
1272
+ * :attr:`~google.cloud.bigquery.enums.UpdateMode.UPDATE_METADATA`:
1273
+ Includes metadata information for the dataset, such as friendlyName, description, labels, etc.
1274
+ * :attr:`~google.cloud.bigquery.enums.UpdateMode.UPDATE_ACL`:
1275
+ Includes ACL information for the dataset, which defines dataset access for one or more entities.
1276
+ * :attr:`~google.cloud.bigquery.enums.UpdateMode.UPDATE_FULL`:
1277
+ Includes both dataset metadata and ACL information.
1240
1278
 
1241
1279
  Returns:
1242
1280
  google.cloud.bigquery.dataset.Dataset:
@@ -1250,6 +1288,11 @@ class Client(ClientWithProject):
1250
1288
  path = dataset.path
1251
1289
  span_attributes = {"path": path, "fields": fields}
1252
1290
 
1291
+ if update_mode:
1292
+ query_params = {"updateMode": update_mode.value}
1293
+ else:
1294
+ query_params = {}
1295
+
1253
1296
  api_response = self._call_api(
1254
1297
  retry,
1255
1298
  span_name="BigQuery.updateDataset",
@@ -1259,6 +1302,7 @@ class Client(ClientWithProject):
1259
1302
  data=partial,
1260
1303
  headers=headers,
1261
1304
  timeout=timeout,
1305
+ query_params=query_params,
1262
1306
  )
1263
1307
  return Dataset.from_api_repr(api_response)
1264
1308
 
@@ -2001,6 +2045,7 @@ class Client(ClientWithProject):
2001
2045
  location: Optional[str] = None,
2002
2046
  timeout: TimeoutType = DEFAULT_TIMEOUT,
2003
2047
  page_size: int = 0,
2048
+ start_index: Optional[int] = None,
2004
2049
  ) -> _QueryResults:
2005
2050
  """Get the query results object for a query job.
2006
2051
 
@@ -2019,9 +2064,12 @@ class Client(ClientWithProject):
2019
2064
  before using ``retry``. If set, this connection timeout may be
2020
2065
  increased to a minimum value. This prevents retries on what
2021
2066
  would otherwise be a successful response.
2022
- page_size (int):
2067
+ page_size (Optional[int]):
2023
2068
  Maximum number of rows in a single response. See maxResults in
2024
2069
  the jobs.getQueryResults REST API.
2070
+ start_index (Optional[int]):
2071
+ Zero-based index of the starting row. See startIndex in the
2072
+ jobs.getQueryResults REST API.
2025
2073
 
2026
2074
  Returns:
2027
2075
  google.cloud.bigquery.query._QueryResults:
@@ -2051,6 +2099,9 @@ class Client(ClientWithProject):
2051
2099
  if location is not None:
2052
2100
  extra_params["location"] = location
2053
2101
 
2102
+ if start_index is not None:
2103
+ extra_params["startIndex"] = start_index
2104
+
2054
2105
  path = "/projects/{}/queries/{}".format(project, job_id)
2055
2106
 
2056
2107
  # This call is typically made in a polling loop that checks whether the
@@ -4093,6 +4144,7 @@ class Client(ClientWithProject):
4093
4144
  num_dml_affected_rows: Optional[int] = None,
4094
4145
  query: Optional[str] = None,
4095
4146
  total_bytes_processed: Optional[int] = None,
4147
+ slot_millis: Optional[int] = None,
4096
4148
  ) -> RowIterator:
4097
4149
  """List the rows of a completed query.
4098
4150
  See
@@ -4144,6 +4196,8 @@ class Client(ClientWithProject):
4144
4196
  The query text used.
4145
4197
  total_bytes_processed (Optional[int]):
4146
4198
  total bytes processed from job statistics, if present.
4199
+ slot_millis (Optional[int]):
4200
+ Number of slot ms the user is actually billed for.
4147
4201
 
4148
4202
  Returns:
4149
4203
  google.cloud.bigquery.table.RowIterator:
@@ -4183,6 +4237,7 @@ class Client(ClientWithProject):
4183
4237
  num_dml_affected_rows=num_dml_affected_rows,
4184
4238
  query=query,
4185
4239
  total_bytes_processed=total_bytes_processed,
4240
+ slot_millis=slot_millis,
4186
4241
  )
4187
4242
  return row_iterator
4188
4243
 
@@ -17,6 +17,7 @@
17
17
  from __future__ import absolute_import
18
18
 
19
19
  import copy
20
+ import json
20
21
 
21
22
  import typing
22
23
  from typing import Optional, List, Dict, Any, Union
@@ -506,7 +507,20 @@ class AccessEntry(object):
506
507
  def __eq__(self, other):
507
508
  if not isinstance(other, AccessEntry):
508
509
  return NotImplemented
509
- return self._key() == other._key()
510
+ return (
511
+ self.role == other.role
512
+ and self.entity_type == other.entity_type
513
+ and self._normalize_entity_id(self.entity_id)
514
+ == self._normalize_entity_id(other.entity_id)
515
+ and self.condition == other.condition
516
+ )
517
+
518
+ @staticmethod
519
+ def _normalize_entity_id(value):
520
+ """Ensure consistent equality for dicts like 'view'."""
521
+ if isinstance(value, dict):
522
+ return json.dumps(value, sort_keys=True)
523
+ return value
510
524
 
511
525
  def __ne__(self, other):
512
526
  return not self == other
@@ -557,7 +571,6 @@ class AccessEntry(object):
557
571
  google.cloud.bigquery.dataset.AccessEntry:
558
572
  Access entry parsed from ``resource``.
559
573
  """
560
-
561
574
  access_entry = cls()
562
575
  access_entry._properties = resource.copy()
563
576
  return access_entry
@@ -574,6 +587,10 @@ class Dataset(object):
574
587
  A pointer to a dataset. If ``dataset_ref`` is a string, it must
575
588
  include both the project ID and the dataset ID, separated by
576
589
  ``.``.
590
+
591
+ Note:
592
+ Fields marked as "Output Only" are populated by the server and will only be
593
+ available after calling :meth:`google.cloud.bigquery.client.Client.get_dataset`.
577
594
  """
578
595
 
579
596
  _PROPERTY_TO_API_FIELD = {
@@ -692,7 +709,7 @@ class Dataset(object):
692
709
 
693
710
  @property
694
711
  def created(self):
695
- """Union[datetime.datetime, None]: Datetime at which the dataset was
712
+ """Union[datetime.datetime, None]: Output only. Datetime at which the dataset was
696
713
  created (:data:`None` until set from the server).
697
714
  """
698
715
  creation_time = self._properties.get("creationTime")
@@ -709,8 +726,8 @@ class Dataset(object):
709
726
 
710
727
  @property
711
728
  def full_dataset_id(self):
712
- """Union[str, None]: ID for the dataset resource (:data:`None` until
713
- set from the server)
729
+ """Union[str, None]: Output only. ID for the dataset resource
730
+ (:data:`None` until set from the server).
714
731
 
715
732
  In the format ``project_id:dataset_id``.
716
733
  """
@@ -725,14 +742,14 @@ class Dataset(object):
725
742
 
726
743
  @property
727
744
  def etag(self):
728
- """Union[str, None]: ETag for the dataset resource (:data:`None` until
729
- set from the server).
745
+ """Union[str, None]: Output only. ETag for the dataset resource
746
+ (:data:`None` until set from the server).
730
747
  """
731
748
  return self._properties.get("etag")
732
749
 
733
750
  @property
734
751
  def modified(self):
735
- """Union[datetime.datetime, None]: Datetime at which the dataset was
752
+ """Union[datetime.datetime, None]: Output only. Datetime at which the dataset was
736
753
  last modified (:data:`None` until set from the server).
737
754
  """
738
755
  modified_time = self._properties.get("lastModifiedTime")
@@ -744,8 +761,8 @@ class Dataset(object):
744
761
 
745
762
  @property
746
763
  def self_link(self):
747
- """Union[str, None]: URL for the dataset resource (:data:`None` until
748
- set from the server).
764
+ """Union[str, None]: Output only. URL for the dataset resource
765
+ (:data:`None` until set from the server).
749
766
  """
750
767
  return self._properties.get("selfLink")
751
768
 
@@ -80,6 +80,24 @@ class CreateDisposition(object):
80
80
  returned in the job result."""
81
81
 
82
82
 
83
+ class DatasetView(enum.Enum):
84
+ """DatasetView specifies which dataset information is returned."""
85
+
86
+ DATASET_VIEW_UNSPECIFIED = "DATASET_VIEW_UNSPECIFIED"
87
+ """The default value. Currently maps to the FULL view."""
88
+
89
+ METADATA = "METADATA"
90
+ """View metadata information for the dataset, such as friendlyName,
91
+ description, labels, etc."""
92
+
93
+ ACL = "ACL"
94
+ """View ACL information for the dataset, which defines dataset access
95
+ for one or more entities."""
96
+
97
+ FULL = "FULL"
98
+ """View both dataset metadata and ACL information."""
99
+
100
+
83
101
  class DefaultPandasDTypes(enum.Enum):
84
102
  """Default Pandas DataFrem DTypes to convert BigQuery data. These
85
103
  Sentinel values are used instead of None to maintain backward compatibility,
@@ -409,6 +427,24 @@ class BigLakeTableFormat(object):
409
427
  """Apache Iceberg format."""
410
428
 
411
429
 
430
+ class UpdateMode(enum.Enum):
431
+ """Specifies the kind of information to update in a dataset."""
432
+
433
+ UPDATE_MODE_UNSPECIFIED = "UPDATE_MODE_UNSPECIFIED"
434
+ """The default value. Behavior defaults to UPDATE_FULL."""
435
+
436
+ UPDATE_METADATA = "UPDATE_METADATA"
437
+ """Includes metadata information for the dataset, such as friendlyName,
438
+ description, labels, etc."""
439
+
440
+ UPDATE_ACL = "UPDATE_ACL"
441
+ """Includes ACL information for the dataset, which defines dataset access
442
+ for one or more entities."""
443
+
444
+ UPDATE_FULL = "UPDATE_FULL"
445
+ """Includes both dataset metadata and ACL information."""
446
+
447
+
412
448
  class JobCreationMode(object):
413
449
  """Documented values for Job Creation Mode."""
414
450
 
@@ -426,3 +462,21 @@ class JobCreationMode(object):
426
462
  The conditions under which BigQuery can decide to not create a Job are
427
463
  subject to change.
428
464
  """
465
+
466
+
467
+ class SourceColumnMatch(str, enum.Enum):
468
+ """Uses sensible defaults based on how the schema is provided.
469
+ If autodetect is used, then columns are matched by name. Otherwise, columns
470
+ are matched by position. This is done to keep the behavior backward-compatible.
471
+ """
472
+
473
+ SOURCE_COLUMN_MATCH_UNSPECIFIED = "SOURCE_COLUMN_MATCH_UNSPECIFIED"
474
+ """Unspecified column name match option."""
475
+
476
+ POSITION = "POSITION"
477
+ """Matches by position. This assumes that the columns are ordered the same
478
+ way as the schema."""
479
+
480
+ NAME = "NAME"
481
+ """Matches by name. This reads the header row as column names and reorders
482
+ columns to match the field names in the schema."""
@@ -22,6 +22,7 @@ from __future__ import absolute_import, annotations
22
22
 
23
23
  import base64
24
24
  import copy
25
+ import typing
25
26
  from typing import Any, Dict, FrozenSet, Iterable, Optional, Union
26
27
 
27
28
  from google.cloud.bigquery._helpers import _to_bytes
@@ -29,6 +30,7 @@ from google.cloud.bigquery._helpers import _bytes_to_json
29
30
  from google.cloud.bigquery._helpers import _int_or_none
30
31
  from google.cloud.bigquery._helpers import _str_or_none
31
32
  from google.cloud.bigquery import _helpers
33
+ from google.cloud.bigquery.enums import SourceColumnMatch
32
34
  from google.cloud.bigquery.format_options import AvroOptions, ParquetOptions
33
35
  from google.cloud.bigquery import schema
34
36
  from google.cloud.bigquery.schema import SchemaField
@@ -473,6 +475,60 @@ class CSVOptions(object):
473
475
  def skip_leading_rows(self, value):
474
476
  self._properties["skipLeadingRows"] = str(value)
475
477
 
478
+ @property
479
+ def source_column_match(self) -> Optional[SourceColumnMatch]:
480
+ """Optional[google.cloud.bigquery.enums.SourceColumnMatch]: Controls the
481
+ strategy used to match loaded columns to the schema. If not set, a sensible
482
+ default is chosen based on how the schema is provided. If autodetect is
483
+ used, then columns are matched by name. Otherwise, columns are matched by
484
+ position. This is done to keep the behavior backward-compatible.
485
+
486
+ Acceptable values are:
487
+
488
+ SOURCE_COLUMN_MATCH_UNSPECIFIED: Unspecified column name match option.
489
+ POSITION: matches by position. This assumes that the columns are ordered
490
+ the same way as the schema.
491
+ NAME: matches by name. This reads the header row as column names and
492
+ reorders columns to match the field names in the schema.
493
+
494
+ See
495
+ https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#CsvOptions.FIELDS.source_column_match
496
+ """
497
+
498
+ value = self._properties.get("sourceColumnMatch")
499
+ return SourceColumnMatch(value) if value is not None else None
500
+
501
+ @source_column_match.setter
502
+ def source_column_match(self, value: Union[SourceColumnMatch, str, None]):
503
+ if value is not None and not isinstance(value, (SourceColumnMatch, str)):
504
+ raise TypeError(
505
+ "value must be a google.cloud.bigquery.enums.SourceColumnMatch, str, or None"
506
+ )
507
+ if isinstance(value, SourceColumnMatch):
508
+ value = value.value
509
+ self._properties["sourceColumnMatch"] = value if value else None
510
+
511
+ @property
512
+ def null_markers(self) -> Optional[Iterable[str]]:
513
+ """Optional[Iterable[str]]: A list of strings represented as SQL NULL values in a CSV file.
514
+
515
+ .. note::
516
+ null_marker and null_markers can't be set at the same time.
517
+ If null_marker is set, null_markers has to be not set.
518
+ If null_markers is set, null_marker has to be not set.
519
+ If both null_marker and null_markers are set at the same time, a user error would be thrown.
520
+ Any strings listed in null_markers, including empty string would be interpreted as SQL NULL.
521
+ This applies to all column types.
522
+
523
+ See
524
+ https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#CsvOptions.FIELDS.null_markers
525
+ """
526
+ return self._properties.get("nullMarkers")
527
+
528
+ @null_markers.setter
529
+ def null_markers(self, value: Optional[Iterable[str]]):
530
+ self._properties["nullMarkers"] = value
531
+
476
532
  def to_api_repr(self) -> dict:
477
533
  """Build an API representation of this object.
478
534
 
@@ -835,10 +891,10 @@ class ExternalConfig(object):
835
891
  See
836
892
  https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#ExternalDataConfiguration.FIELDS.schema
837
893
  """
838
- # TODO: The typehinting for this needs work. Setting this pragma to temporarily
839
- # manage a pytype issue that came up in another PR. See Issue: #2132
840
- prop = self._properties.get("schema", {}) # type: ignore
841
- return [SchemaField.from_api_repr(field) for field in prop.get("fields", [])] # type: ignore
894
+ prop: Dict[str, Any] = typing.cast(
895
+ Dict[str, Any], self._properties.get("schema", {})
896
+ )
897
+ return [SchemaField.from_api_repr(field) for field in prop.get("fields", [])]
842
898
 
843
899
  @schema.setter
844
900
  def schema(self, value):
@@ -847,6 +903,80 @@ class ExternalConfig(object):
847
903
  prop = {"fields": [field.to_api_repr() for field in value]}
848
904
  self._properties["schema"] = prop
849
905
 
906
+ @property
907
+ def date_format(self) -> Optional[str]:
908
+ """Optional[str]: Format used to parse DATE values. Supports C-style and SQL-style values.
909
+
910
+ See:
911
+ https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#ExternalDataConfiguration.FIELDS.date_format
912
+ """
913
+ result = self._properties.get("dateFormat")
914
+ return typing.cast(str, result)
915
+
916
+ @date_format.setter
917
+ def date_format(self, value: Optional[str]):
918
+ self._properties["dateFormat"] = value
919
+
920
+ @property
921
+ def datetime_format(self) -> Optional[str]:
922
+ """Optional[str]: Format used to parse DATETIME values. Supports C-style
923
+ and SQL-style values.
924
+
925
+ See:
926
+ https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#ExternalDataConfiguration.FIELDS.datetime_format
927
+ """
928
+ result = self._properties.get("datetimeFormat")
929
+ return typing.cast(str, result)
930
+
931
+ @datetime_format.setter
932
+ def datetime_format(self, value: Optional[str]):
933
+ self._properties["datetimeFormat"] = value
934
+
935
+ @property
936
+ def time_zone(self) -> Optional[str]:
937
+ """Optional[str]: Time zone used when parsing timestamp values that do not
938
+ have specific time zone information (e.g. 2024-04-20 12:34:56). The expected
939
+ format is an IANA timezone string (e.g. America/Los_Angeles).
940
+
941
+ See:
942
+ https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#ExternalDataConfiguration.FIELDS.time_zone
943
+ """
944
+
945
+ result = self._properties.get("timeZone")
946
+ return typing.cast(str, result)
947
+
948
+ @time_zone.setter
949
+ def time_zone(self, value: Optional[str]):
950
+ self._properties["timeZone"] = value
951
+
952
+ @property
953
+ def time_format(self) -> Optional[str]:
954
+ """Optional[str]: Format used to parse TIME values. Supports C-style and SQL-style values.
955
+
956
+ See:
957
+ https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#ExternalDataConfiguration.FIELDS.time_format
958
+ """
959
+ result = self._properties.get("timeFormat")
960
+ return typing.cast(str, result)
961
+
962
+ @time_format.setter
963
+ def time_format(self, value: Optional[str]):
964
+ self._properties["timeFormat"] = value
965
+
966
+ @property
967
+ def timestamp_format(self) -> Optional[str]:
968
+ """Optional[str]: Format used to parse TIMESTAMP values. Supports C-style and SQL-style values.
969
+
970
+ See:
971
+ https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#ExternalDataConfiguration.FIELDS.timestamp_format
972
+ """
973
+ result = self._properties.get("timestampFormat")
974
+ return typing.cast(str, result)
975
+
976
+ @timestamp_format.setter
977
+ def timestamp_format(self, value: Optional[str]):
978
+ self._properties["timestampFormat"] = value
979
+
850
980
  @property
851
981
  def connection_id(self):
852
982
  """Optional[str]: [Experimental] ID of a BigQuery Connection API
@@ -435,9 +435,7 @@ class _AsyncJob(google.api_core.future.polling.PollingFuture):
435
435
  @property
436
436
  def configuration(self) -> _JobConfig:
437
437
  """Job-type specific configurtion."""
438
- # TODO: The typehinting for this needs work. Setting this pragma to temporarily
439
- # manage a pytype issue that came up in another PR. See Issue: #2132
440
- configuration = self._CONFIG_CLASS() # pytype: disable=not-callable
438
+ configuration: _JobConfig = self._CONFIG_CLASS() # pytype: disable=not-callable
441
439
  configuration._properties = self._properties.setdefault("configuration", {})
442
440
  return configuration
443
441