tango-python 0.1.0a1__tar.gz → 0.3.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 (290) hide show
  1. tango_python-0.3.0/.env.example +16 -0
  2. tango_python-0.3.0/.github/workflows/lint.yml +31 -0
  3. tango_python-0.3.0/.github/workflows/publish.yml +29 -0
  4. tango_python-0.3.0/.github/workflows/test.yml +44 -0
  5. tango_python-0.3.0/.gitignore +150 -0
  6. tango_python-0.3.0/CHANGELOG.md +27 -0
  7. tango_python-0.3.0/LICENSE +21 -0
  8. tango_python-0.3.0/PKG-INFO +532 -0
  9. tango_python-0.3.0/README.md +477 -0
  10. tango_python-0.3.0/ROADMAP.md +29 -0
  11. tango_python-0.3.0/docs/API_REFERENCE.md +1100 -0
  12. tango_python-0.3.0/docs/DEVELOPERS.md +639 -0
  13. tango_python-0.3.0/docs/SHAPES.md +459 -0
  14. tango_python-0.3.0/docs/quick_start.ipynb +926 -0
  15. tango_python-0.3.0/pyproject.toml +122 -0
  16. tango_python-0.3.0/scripts/README.md +76 -0
  17. tango_python-0.3.0/scripts/fetch_api_schema.py +122 -0
  18. tango_python-0.3.0/scripts/generate_schemas_from_api.py +145 -0
  19. tango_python-0.3.0/scripts/pr_review.py +473 -0
  20. tango_python-0.3.0/scripts/test_production.py +86 -0
  21. tango_python-0.3.0/tango/__init__.py +50 -0
  22. tango_python-0.3.0/tango/client.py +1527 -0
  23. tango_python-0.3.0/tango/exceptions.py +100 -0
  24. tango_python-0.3.0/tango/models.py +565 -0
  25. tango_python-0.3.0/tango/shapes/__init__.py +41 -0
  26. tango_python-0.3.0/tango/shapes/explicit_schemas.py +1054 -0
  27. tango_python-0.3.0/tango/shapes/factory.py +881 -0
  28. tango_python-0.3.0/tango/shapes/generator.py +617 -0
  29. tango_python-0.3.0/tango/shapes/models.py +93 -0
  30. tango_python-0.3.0/tango/shapes/parser.py +689 -0
  31. tango_python-0.3.0/tango/shapes/schema.py +383 -0
  32. tango_python-0.3.0/tango/shapes/types.py +46 -0
  33. tango_python-0.3.0/tests/__init__.py +1 -0
  34. tango_python-0.3.0/tests/cassettes/TestAgenciesIntegration.test_get_agency +85 -0
  35. tango_python-0.3.0/tests/cassettes/TestAgenciesIntegration.test_list_agencies +98 -0
  36. tango_python-0.3.0/tests/cassettes/TestBusinessTypesIntegration.test_business_type_field_type_validation +83 -0
  37. tango_python-0.3.0/tests/cassettes/TestBusinessTypesIntegration.test_business_type_parsing_consistency +91 -0
  38. tango_python-0.3.0/tests/cassettes/TestBusinessTypesIntegration.test_list_business_types +81 -0
  39. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_combined_filters_work_together +92 -0
  40. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_contract_cursor_pagination +169 -0
  41. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_contract_data_object_parsing +92 -0
  42. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_contract_field_types +102 -0
  43. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_filter_parameter_mappings[keyword-software] +180 -0
  44. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_filter_parameter_mappings[psc_code-R425] +180 -0
  45. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_list_contracts_with_awarding_agency_filter +182 -0
  46. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_list_contracts_with_date_range_filter +174 -0
  47. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_list_contracts_with_flat +92 -0
  48. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_list_contracts_with_naics_code_filter +408 -0
  49. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[custom-key,piid,recipient(display_name),total_contract_value,award_date] +83 -0
  50. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[default-None] +92 -0
  51. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[detailed-key,piid,award_date,description,total_contract_value,obligated,fiscal_year,set_aside,recipient(display_name,uei),awarding_office(-),place_of_performa...ce114a3c47e2037aaa3c15d00b7031bd +218 -0
  52. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[minimal-key,piid,award_date,recipient(display_name),description,total_contract_value] +92 -0
  53. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_new_expiring_filters +88 -0
  54. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_new_fiscal_year_range_filters +88 -0
  55. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_new_identifier_filters +78 -0
  56. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_search_contracts_with_filters +174 -0
  57. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_search_filters_object_with_new_parameters +88 -0
  58. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_sort_and_order_mapped_to_ordering[asc-] +88 -0
  59. tango_python-0.3.0/tests/cassettes/TestContractsIntegration.test_sort_and_order_mapped_to_ordering[desc--] +92 -0
  60. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_api_schema_stability_detection_contracts +88 -0
  61. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_api_schema_stability_detection_entities +142 -0
  62. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_date_field_parsing_edge_cases +143 -0
  63. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_decimal_field_parsing_edge_cases +128 -0
  64. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_empty_list_responses +78 -0
  65. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_entity_parsing_with_various_address_formats +228 -0
  66. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_flattened_responses_with_flat_lists +92 -0
  67. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_list_field_parsing_consistency +196 -0
  68. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_parsing_nested_objects_with_missing_data +289 -0
  69. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_parsing_null_missing_fields_in_contracts +128 -0
  70. tango_python-0.3.0/tests/cassettes/TestEdgeCasesIntegration.test_parsing_with_minimal_shape_sparse_data +88 -0
  71. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_entity_field_types +228 -0
  72. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_entity_location_parsing +196 -0
  73. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_entity_parsing_with_business_types +196 -0
  74. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_entity_with_various_identifiers +169 -0
  75. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_get_entity_by_uei +254 -0
  76. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_flat +90 -0
  77. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_search +88 -0
  78. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[comprehensive-uei,legal_business_name,dba_name,cage_code,business_types,primary_naics,naics_codes,psc_codes,email_address,entity_url,description,capabilities,ke...95fcff7efcf320ecc846393dd484321d +115 -0
  79. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[custom-uei,legal_business_name,cage_code] +84 -0
  80. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[minimal-uei,legal_business_name,cage_code,business_types] +102 -0
  81. tango_python-0.3.0/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[with_address-uei,legal_business_name,cage_code,business_types,physical_address] +107 -0
  82. tango_python-0.3.0/tests/cassettes/TestForecastsIntegration.test_forecast_field_types +88 -0
  83. tango_python-0.3.0/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[custom-id,title,anticipated_award_date] +83 -0
  84. tango_python-0.3.0/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[default-None] +83 -0
  85. tango_python-0.3.0/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[detailed-id,source_system,external_id,title,description,anticipated_award_date,fiscal_year,naics_code,status,is_active] +107 -0
  86. tango_python-0.3.0/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[minimal-id,title,anticipated_award_date,fiscal_year,naics_code,status] +83 -0
  87. tango_python-0.3.0/tests/cassettes/TestGrantsIntegration.test_grant_field_types +79 -0
  88. tango_python-0.3.0/tests/cassettes/TestGrantsIntegration.test_grant_pagination +171 -0
  89. tango_python-0.3.0/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[custom-grant_id,title,opportunity_number] +87 -0
  90. tango_python-0.3.0/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[default-None] +87 -0
  91. tango_python-0.3.0/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[detailed-grant_id,opportunity_number,title,status(-),agency_code,description,last_updated,cfda_numbers(number,title),applicant_types(-),funding_categories(-)] +179 -0
  92. tango_python-0.3.0/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[minimal-grant_id,opportunity_number,title,status(-),agency_code] +87 -0
  93. tango_python-0.3.0/tests/cassettes/TestIDVsIntegration.test_get_idv_summary +252 -0
  94. tango_python-0.3.0/tests/cassettes/TestIDVsIntegration.test_get_idv_uses_default_shape +494 -0
  95. tango_python-0.3.0/tests/cassettes/TestIDVsIntegration.test_list_idv_awards_uses_default_shape +302 -0
  96. tango_python-0.3.0/tests/cassettes/TestIDVsIntegration.test_list_idv_child_idvs_uses_default_shape +302 -0
  97. tango_python-0.3.0/tests/cassettes/TestIDVsIntegration.test_list_idv_summary_awards +256 -0
  98. tango_python-0.3.0/tests/cassettes/TestIDVsIntegration.test_list_idv_transactions +304 -0
  99. tango_python-0.3.0/tests/cassettes/TestIDVsIntegration.test_list_idvs_uses_default_shape_and_keyset_params +284 -0
  100. tango_python-0.3.0/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[custom-notice_id,title,solicitation_number] +83 -0
  101. tango_python-0.3.0/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[default-None] +83 -0
  102. tango_python-0.3.0/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[detailed-notice_id,title,description,solicitation_number,posted_date,naics_code,set_aside,office(-),place_of_performance(-)] +368 -0
  103. tango_python-0.3.0/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[minimal-notice_id,title,solicitation_number,posted_date] +83 -0
  104. tango_python-0.3.0/tests/cassettes/TestNoticesIntegration.test_notice_field_types +88 -0
  105. tango_python-0.3.0/tests/cassettes/TestNoticesIntegration.test_notice_pagination +164 -0
  106. tango_python-0.3.0/tests/cassettes/TestNoticesIntegration.test_notice_with_meta_fields +488 -0
  107. tango_python-0.3.0/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[custom-opportunity_id,title,solicitation_number] +82 -0
  108. tango_python-0.3.0/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[default-None] +82 -0
  109. tango_python-0.3.0/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[detailed-opportunity_id,title,description,solicitation_number,response_deadline,first_notice_date,last_notice_date,active,naics_code,psc_code,set_asid...23b6b4502ddd665b7184afcff6c6d8d9 +129 -0
  110. tango_python-0.3.0/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[minimal-opportunity_id,title,solicitation_number,response_deadline,active] +82 -0
  111. tango_python-0.3.0/tests/cassettes/TestOpportunitiesIntegration.test_opportunity_field_types +83 -0
  112. tango_python-0.3.0/tests/cassettes/TestProductionSmokeWithCassettes.test_contract_cursor_pagination +169 -0
  113. tango_python-0.3.0/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[custom-key,piid,description] +87 -0
  114. tango_python-0.3.0/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[minimal-key,piid,award_date,recipient(display_name),description,total_contract_value] +92 -0
  115. tango_python-0.3.0/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[ultra_minimal-key,piid,recipient(display_name),total_contract_value] +83 -0
  116. tango_python-0.3.0/tests/cassettes/TestTypeHintsIntegration.test_entities_dict_access[minimal-uei,legal_business_name,cage_code,business_types] +102 -0
  117. tango_python-0.3.0/tests/cassettes/TestTypeHintsIntegration.test_entities_dict_access[with_address-uei,legal_business_name,cage_code,business_types,physical_address] +107 -0
  118. tango_python-0.3.0/tests/cassettes/TestTypeHintsIntegration.test_notices_dict_access[detailed-notice_id,title,description,solicitation_number,posted_date,naics_code,set_aside,office(-),place_of_performance(-)] +368 -0
  119. tango_python-0.3.0/tests/cassettes/TestTypeHintsIntegration.test_notices_dict_access[minimal-notice_id,title,solicitation_number,posted_date] +83 -0
  120. tango_python-0.3.0/tests/cassettes/TestTypeHintsIntegration.test_opportunities_dict_access[detailed-opportunity_id,title,description,solicitation_number,response_deadline,first_notice_date,last_notice_date,active,naics_code,psc_code,set_aside,sam_url,office(-),place_of_performance(-)] +129 -0
  121. tango_python-0.3.0/tests/cassettes/TestTypeHintsIntegration.test_opportunities_dict_access[minimal-opportunity_id,title,solicitation_number,response_deadline,active] +82 -0
  122. tango_python-0.3.0/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_supports_joiner_and_flat_lists +1352 -0
  123. tango_python-0.3.0/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_awardees_uses_default_shape +1505 -0
  124. tango_python-0.3.0/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_uses_default_shape_and_search +812 -0
  125. tango_python-0.3.0/tests/conftest.py +68 -0
  126. tango_python-0.3.0/tests/integration/README.md +377 -0
  127. tango_python-0.3.0/tests/integration/__init__.py +1 -0
  128. tango_python-0.3.0/tests/integration/conftest.py +210 -0
  129. tango_python-0.3.0/tests/integration/test_agencies_integration.py +78 -0
  130. tango_python-0.3.0/tests/integration/test_contracts_integration.py +539 -0
  131. tango_python-0.3.0/tests/integration/test_edge_cases_integration.py +937 -0
  132. tango_python-0.3.0/tests/integration/test_entities_integration.py +431 -0
  133. tango_python-0.3.0/tests/integration/test_forecasts_integration.py +269 -0
  134. tango_python-0.3.0/tests/integration/test_grants_integration.py +211 -0
  135. tango_python-0.3.0/tests/integration/test_notices_integration.py +450 -0
  136. tango_python-0.3.0/tests/integration/test_opportunities_integration.py +313 -0
  137. tango_python-0.3.0/tests/integration/test_reference_data_integration.py +113 -0
  138. tango_python-0.3.0/tests/integration/test_vehicles_idvs_integration.py +467 -0
  139. tango_python-0.3.0/tests/integration/validation.py +199 -0
  140. tango_python-0.3.0/tests/production/__init__.py +5 -0
  141. tango_python-0.3.0/tests/production/conftest.py +79 -0
  142. tango_python-0.3.0/tests/production/test_production_smoke.py +314 -0
  143. tango_python-0.3.0/tests/test_client.py +1412 -0
  144. tango_python-0.3.0/tests/test_models.py +429 -0
  145. tango_python-0.3.0/tests/test_shapes.py +1692 -0
  146. tango_python-0.3.0/uv.lock +2209 -0
  147. tango_python-0.1.0a1/.gitignore +0 -16
  148. tango_python-0.1.0a1/.release-please-manifest.json +0 -3
  149. tango_python-0.1.0a1/CHANGELOG.md +0 -18
  150. tango_python-0.1.0a1/CONTRIBUTING.md +0 -129
  151. tango_python-0.1.0a1/LICENSE +0 -201
  152. tango_python-0.1.0a1/PKG-INFO +0 -350
  153. tango_python-0.1.0a1/README.md +0 -319
  154. tango_python-0.1.0a1/SECURITY.md +0 -27
  155. tango_python-0.1.0a1/api.md +0 -210
  156. tango_python-0.1.0a1/bin/check-release-environment +0 -21
  157. tango_python-0.1.0a1/bin/publish-pypi +0 -9
  158. tango_python-0.1.0a1/examples/.keep +0 -4
  159. tango_python-0.1.0a1/mypy.ini +0 -50
  160. tango_python-0.1.0a1/noxfile.py +0 -9
  161. tango_python-0.1.0a1/pyproject.toml +0 -207
  162. tango_python-0.1.0a1/release-please-config.json +0 -66
  163. tango_python-0.1.0a1/requirements-dev.lock +0 -103
  164. tango_python-0.1.0a1/requirements.lock +0 -45
  165. tango_python-0.1.0a1/src/tango/__init__.py +0 -83
  166. tango_python-0.1.0a1/src/tango/_base_client.py +0 -2045
  167. tango_python-0.1.0a1/src/tango/_client.py +0 -528
  168. tango_python-0.1.0a1/src/tango/_compat.py +0 -219
  169. tango_python-0.1.0a1/src/tango/_constants.py +0 -14
  170. tango_python-0.1.0a1/src/tango/_exceptions.py +0 -108
  171. tango_python-0.1.0a1/src/tango/_files.py +0 -123
  172. tango_python-0.1.0a1/src/tango/_models.py +0 -788
  173. tango_python-0.1.0a1/src/tango/_qs.py +0 -150
  174. tango_python-0.1.0a1/src/tango/_resource.py +0 -43
  175. tango_python-0.1.0a1/src/tango/_response.py +0 -824
  176. tango_python-0.1.0a1/src/tango/_streaming.py +0 -333
  177. tango_python-0.1.0a1/src/tango/_types.py +0 -219
  178. tango_python-0.1.0a1/src/tango/_utils/__init__.py +0 -56
  179. tango_python-0.1.0a1/src/tango/_utils/_logs.py +0 -25
  180. tango_python-0.1.0a1/src/tango/_utils/_proxy.py +0 -62
  181. tango_python-0.1.0a1/src/tango/_utils/_reflection.py +0 -42
  182. tango_python-0.1.0a1/src/tango/_utils/_streams.py +0 -12
  183. tango_python-0.1.0a1/src/tango/_utils/_sync.py +0 -71
  184. tango_python-0.1.0a1/src/tango/_utils/_transform.py +0 -392
  185. tango_python-0.1.0a1/src/tango/_utils/_typing.py +0 -120
  186. tango_python-0.1.0a1/src/tango/_utils/_utils.py +0 -414
  187. tango_python-0.1.0a1/src/tango/_version.py +0 -4
  188. tango_python-0.1.0a1/src/tango/lib/.keep +0 -4
  189. tango_python-0.1.0a1/src/tango/py.typed +0 -0
  190. tango_python-0.1.0a1/src/tango/resources/__init__.py +0 -229
  191. tango_python-0.1.0a1/src/tango/resources/agencies.py +0 -255
  192. tango_python-0.1.0a1/src/tango/resources/assistance_listings.py +0 -214
  193. tango_python-0.1.0a1/src/tango/resources/bulk/__init__.py +0 -33
  194. tango_python-0.1.0a1/src/tango/resources/bulk/bulk.py +0 -102
  195. tango_python-0.1.0a1/src/tango/resources/bulk/entities.py +0 -152
  196. tango_python-0.1.0a1/src/tango/resources/business_types.py +0 -218
  197. tango_python-0.1.0a1/src/tango/resources/contracts.py +0 -381
  198. tango_python-0.1.0a1/src/tango/resources/departments.py +0 -210
  199. tango_python-0.1.0a1/src/tango/resources/entities.py +0 -325
  200. tango_python-0.1.0a1/src/tango/resources/idvs/__init__.py +0 -33
  201. tango_python-0.1.0a1/src/tango/resources/idvs/awards.py +0 -287
  202. tango_python-0.1.0a1/src/tango/resources/idvs/idvs.py +0 -413
  203. tango_python-0.1.0a1/src/tango/resources/naics.py +0 -317
  204. tango_python-0.1.0a1/src/tango/resources/notices.py +0 -391
  205. tango_python-0.1.0a1/src/tango/resources/offices.py +0 -281
  206. tango_python-0.1.0a1/src/tango/resources/opportunities.py +0 -420
  207. tango_python-0.1.0a1/src/tango/resources/pscs.py +0 -210
  208. tango_python-0.1.0a1/src/tango/resources/schemas.py +0 -398
  209. tango_python-0.1.0a1/src/tango/resources/subawards.py +0 -313
  210. tango_python-0.1.0a1/src/tango/resources/versions.py +0 -136
  211. tango_python-0.1.0a1/src/tango/types/__init__.py +0 -43
  212. tango_python-0.1.0a1/src/tango/types/agency.py +0 -17
  213. tango_python-0.1.0a1/src/tango/types/agency_list_params.py +0 -14
  214. tango_python-0.1.0a1/src/tango/types/agency_list_response.py +0 -10
  215. tango_python-0.1.0a1/src/tango/types/assistance_listing.py +0 -12
  216. tango_python-0.1.0a1/src/tango/types/assistance_listing_list_response.py +0 -10
  217. tango_python-0.1.0a1/src/tango/types/assistance_listing_retrieve_response.py +0 -26
  218. tango_python-0.1.0a1/src/tango/types/bulk/__init__.py +0 -3
  219. tango_python-0.1.0a1/src/tango/types/business_type.py +0 -14
  220. tango_python-0.1.0a1/src/tango/types/business_type_list_response.py +0 -10
  221. tango_python-0.1.0a1/src/tango/types/contract_list_params.py +0 -78
  222. tango_python-0.1.0a1/src/tango/types/contract_list_response.py +0 -55
  223. tango_python-0.1.0a1/src/tango/types/contract_retrieve_response.py +0 -51
  224. tango_python-0.1.0a1/src/tango/types/department.py +0 -16
  225. tango_python-0.1.0a1/src/tango/types/department_list_response.py +0 -10
  226. tango_python-0.1.0a1/src/tango/types/entity_list_params.py +0 -38
  227. tango_python-0.1.0a1/src/tango/types/entity_list_response.py +0 -37
  228. tango_python-0.1.0a1/src/tango/types/entity_retrieve_response.py +0 -116
  229. tango_python-0.1.0a1/src/tango/types/idv.py +0 -102
  230. tango_python-0.1.0a1/src/tango/types/idv_list_params.py +0 -78
  231. tango_python-0.1.0a1/src/tango/types/idv_list_response.py +0 -27
  232. tango_python-0.1.0a1/src/tango/types/idvs/__init__.py +0 -6
  233. tango_python-0.1.0a1/src/tango/types/idvs/award_list_params.py +0 -55
  234. tango_python-0.1.0a1/src/tango/types/idvs/award_list_response.py +0 -55
  235. tango_python-0.1.0a1/src/tango/types/naic_list_params.py +0 -47
  236. tango_python-0.1.0a1/src/tango/types/naic_list_response.py +0 -10
  237. tango_python-0.1.0a1/src/tango/types/naic_retrieve_response.py +0 -13
  238. tango_python-0.1.0a1/src/tango/types/naics_code.py +0 -13
  239. tango_python-0.1.0a1/src/tango/types/notice_list_params.py +0 -81
  240. tango_python-0.1.0a1/src/tango/types/notice_list_response.py +0 -60
  241. tango_python-0.1.0a1/src/tango/types/notice_retrieve_response.py +0 -93
  242. tango_python-0.1.0a1/src/tango/types/office.py +0 -15
  243. tango_python-0.1.0a1/src/tango/types/office_list_params.py +0 -18
  244. tango_python-0.1.0a1/src/tango/types/office_list_response.py +0 -18
  245. tango_python-0.1.0a1/src/tango/types/opportunity_list_params.py +0 -97
  246. tango_python-0.1.0a1/src/tango/types/opportunity_list_response.py +0 -101
  247. tango_python-0.1.0a1/src/tango/types/opportunity_retrieve_response.py +0 -123
  248. tango_python-0.1.0a1/src/tango/types/product_service_code.py +0 -21
  249. tango_python-0.1.0a1/src/tango/types/psc_list_response.py +0 -10
  250. tango_python-0.1.0a1/src/tango/types/schema_retrieve_params.py +0 -113
  251. tango_python-0.1.0a1/src/tango/types/schema_retrieve_response.py +0 -8
  252. tango_python-0.1.0a1/src/tango/types/subaward.py +0 -172
  253. tango_python-0.1.0a1/src/tango/types/subaward_list_params.py +0 -33
  254. tango_python-0.1.0a1/src/tango/types/subaward_list_response.py +0 -18
  255. tango_python-0.1.0a1/tests/__init__.py +0 -1
  256. tango_python-0.1.0a1/tests/api_resources/__init__.py +0 -1
  257. tango_python-0.1.0a1/tests/api_resources/bulk/__init__.py +0 -1
  258. tango_python-0.1.0a1/tests/api_resources/bulk/test_entities.py +0 -70
  259. tango_python-0.1.0a1/tests/api_resources/idvs/__init__.py +0 -1
  260. tango_python-0.1.0a1/tests/api_resources/idvs/test_awards.py +0 -151
  261. tango_python-0.1.0a1/tests/api_resources/test_agencies.py +0 -162
  262. tango_python-0.1.0a1/tests/api_resources/test_assistance_listings.py +0 -148
  263. tango_python-0.1.0a1/tests/api_resources/test_business_types.py +0 -148
  264. tango_python-0.1.0a1/tests/api_resources/test_contracts.py +0 -194
  265. tango_python-0.1.0a1/tests/api_resources/test_departments.py +0 -134
  266. tango_python-0.1.0a1/tests/api_resources/test_entities.py +0 -184
  267. tango_python-0.1.0a1/tests/api_resources/test_idvs.py +0 -194
  268. tango_python-0.1.0a1/tests/api_resources/test_naics.py +0 -162
  269. tango_python-0.1.0a1/tests/api_resources/test_notices.py +0 -192
  270. tango_python-0.1.0a1/tests/api_resources/test_offices.py +0 -166
  271. tango_python-0.1.0a1/tests/api_resources/test_opportunities.py +0 -201
  272. tango_python-0.1.0a1/tests/api_resources/test_pscs.py +0 -134
  273. tango_python-0.1.0a1/tests/api_resources/test_schemas.py +0 -88
  274. tango_python-0.1.0a1/tests/api_resources/test_subawards.py +0 -164
  275. tango_python-0.1.0a1/tests/api_resources/test_versions.py +0 -70
  276. tango_python-0.1.0a1/tests/conftest.py +0 -51
  277. tango_python-0.1.0a1/tests/sample_file.txt +0 -1
  278. tango_python-0.1.0a1/tests/test_client.py +0 -1657
  279. tango_python-0.1.0a1/tests/test_deepcopy.py +0 -58
  280. tango_python-0.1.0a1/tests/test_extract_files.py +0 -64
  281. tango_python-0.1.0a1/tests/test_files.py +0 -51
  282. tango_python-0.1.0a1/tests/test_models.py +0 -830
  283. tango_python-0.1.0a1/tests/test_qs.py +0 -78
  284. tango_python-0.1.0a1/tests/test_required_args.py +0 -111
  285. tango_python-0.1.0a1/tests/test_response.py +0 -277
  286. tango_python-0.1.0a1/tests/test_streaming.py +0 -248
  287. tango_python-0.1.0a1/tests/test_transform.py +0 -425
  288. tango_python-0.1.0a1/tests/test_utils/test_proxy.py +0 -23
  289. tango_python-0.1.0a1/tests/test_utils/test_typing.py +0 -73
  290. tango_python-0.1.0a1/tests/utils.py +0 -155
@@ -0,0 +1,16 @@
1
+ # Tango API Configuration
2
+ # Copy this file to .env and fill in your actual values
3
+
4
+ # API Key for Tango API
5
+ TANGO_API_KEY=your_api_key_here
6
+
7
+ # Base URL for Tango API (optional, defaults to production)
8
+ # TANGO_BASE_URL=https://tango.makegov.com
9
+
10
+ # Integration Testing Configuration
11
+
12
+ # Set to 'true' to use live API instead of cassettes (requires TANGO_API_KEY)
13
+ TANGO_USE_LIVE_API=false
14
+
15
+ # Set to 'true' to refresh all cassettes (re-record from live API)
16
+ TANGO_REFRESH_CASSETTES=false
@@ -0,0 +1,31 @@
1
+ name: Linting
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, develop ]
6
+ pull_request:
7
+ branches: [ main, develop ]
8
+
9
+ jobs:
10
+ lint:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - name: Install uv
17
+ uses: astral-sh/setup-uv@v4
18
+ with:
19
+ version: "latest"
20
+
21
+ - name: Set up Python
22
+ run: uv python install 3.12
23
+
24
+ - name: Install dependencies
25
+ run: uv sync --all-extras
26
+
27
+ - name: Check formatting with ruff
28
+ run: uv run ruff format --check tango/
29
+
30
+ - name: Lint with ruff
31
+ run: uv run ruff check tango/
@@ -0,0 +1,29 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ build-and-publish:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - name: Install uv
16
+ uses: astral-sh/setup-uv@v4
17
+ with:
18
+ version: 'latest'
19
+
20
+ - name: Set up Python
21
+ run: uv python install 3.12
22
+
23
+ - name: Build package
24
+ run: uv build
25
+
26
+ - name: Publish to PyPI
27
+ env:
28
+ UV_PUBLISH_TOKEN: ${{ secrets.TANGO_PYPI_TOKEN }}
29
+ run: uv publish
@@ -0,0 +1,44 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, develop ]
6
+ pull_request:
7
+ branches: [ main, develop ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ${{ matrix.os }}
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ os: [ubuntu-latest, macos-latest, windows-latest]
16
+ python-version: ["3.12", "3.13"]
17
+
18
+ steps:
19
+ - name: Enable Git long paths (Windows)
20
+ if: matrix.os == 'windows-latest'
21
+ run: git config --global core.longpaths true
22
+
23
+ - uses: actions/checkout@v4
24
+
25
+ - name: Install uv
26
+ uses: astral-sh/setup-uv@v4
27
+ with:
28
+ version: "latest"
29
+
30
+ - name: Set up Python ${{ matrix.python-version }}
31
+ run: uv python install ${{ matrix.python-version }}
32
+
33
+ - name: Install dependencies
34
+ run: uv sync --all-extras
35
+
36
+ - name: Test with pytest
37
+ run: uv run pytest
38
+
39
+ - name: Upload coverage to Codecov
40
+ uses: codecov/codecov-action@v3
41
+ with:
42
+ file: ./coverage.xml
43
+ flags: unittests
44
+ name: codecov-${{ matrix.os }}-py${{ matrix.python-version }}
@@ -0,0 +1,150 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ **/__pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ *.manifest
32
+ *.spec
33
+
34
+ # Installer logs
35
+ pip-log.txt
36
+ pip-delete-this-directory.txt
37
+
38
+ # Unit test / coverage reports
39
+ htmlcov/
40
+ .tox/
41
+ .nox/
42
+ .coverage
43
+ .coverage.*
44
+ .cache
45
+ nosetests.xml
46
+ coverage.xml
47
+ *.cover
48
+ *.py,cover
49
+ .hypothesis/
50
+ .pytest_cache/
51
+
52
+ # Translations
53
+ *.mo
54
+ *.pot
55
+
56
+ # Django stuff:
57
+ *.log
58
+ local_settings.py
59
+ db.sqlite3
60
+ db.sqlite3-journal
61
+
62
+ # Flask stuff:
63
+ instance/
64
+ .webassets-cache
65
+
66
+ # Scrapy stuff:
67
+ .scrapy
68
+
69
+ # Sphinx documentation
70
+ docs/_build/
71
+
72
+ # PyBuilder
73
+ target/
74
+
75
+ # Jupyter Notebook
76
+ .ipynb_checkpoints
77
+
78
+ # IPython
79
+ profile_default/
80
+ ipython_config.py
81
+
82
+ # pyenv
83
+ .python-version
84
+
85
+ # pipenv
86
+ Pipfile.lock
87
+
88
+ # PEP 582
89
+ __pypackages__/
90
+
91
+ # Celery stuff
92
+ celerybeat-schedule
93
+ celerybeat.pid
94
+
95
+ # SageMath parsed files
96
+ *.sage.py
97
+
98
+ # Environments
99
+ .env
100
+ .venv
101
+ env/
102
+ venv/
103
+ ENV/
104
+ env.bak/
105
+ venv.bak/
106
+
107
+ # Generated API schema files (from scripts/)
108
+ api_schema_full.json
109
+ api_schema_extracted.json
110
+
111
+ # UV lock file (optional - comment out if you want to commit it)
112
+ # uv.lock
113
+
114
+ # Spyder project settings
115
+ .spyderproject
116
+ .spyproject
117
+
118
+ # Rope project settings
119
+ .ropeproject
120
+
121
+ # mkdocs documentation
122
+ /site
123
+
124
+ # mypy
125
+ .mypy_cache/
126
+ .dmypy.json
127
+ dmypy.json
128
+
129
+ # Ruff
130
+ .ruff_cache/
131
+
132
+ # Pyre type checker
133
+ .pyre/
134
+
135
+ # IDE
136
+ .vscode/
137
+ .idea/
138
+ .claude/
139
+ *.swp
140
+ *.swo
141
+ *~
142
+ .kiro
143
+
144
+ # OS
145
+ .DS_Store
146
+ Thumbs.db
147
+
148
+ # Other
149
+ yoni/
150
+ .cursor/*
@@ -0,0 +1,27 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+
12
+ ### Changed
13
+
14
+ ## [0.3.0] - 2026-02-09
15
+
16
+ ### Added
17
+ - Vehicles endpoints: `list_vehicles`, `get_vehicle`, and `list_vehicle_awardees` (supports shaping + flattening). (refs `makegov/tango#1328`)
18
+ - IDV endpoints: `list_idvs`, `get_idv`, `list_idv_awards`, `list_idv_child_idvs`, `list_idv_transactions`, `get_idv_summary`, `list_idv_summary_awards`. (refs `makegov/tango#1328`)
19
+ - Webhooks v2 client support: event type discovery, subscription CRUD, endpoint management, test delivery, and sample payload helpers. (refs `makegov/tango#1274`)
20
+
21
+ ### Changed
22
+ - Expanded explicit schemas to support common IDV shaping expansions (award offices, officers, period of performance, etc.).
23
+ - HTTP client now supports PATCH/DELETE helpers for webhook management endpoints.
24
+
25
+ ## [0.2.0] - 2025-11-16
26
+
27
+ - Entirely refactored SDK
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 MakeGov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.