tango-python 1.9.0__tar.gz → 1.10.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 (207) hide show
  1. {tango_python-1.9.0 → tango_python-1.10.0}/CHANGELOG.md +6 -0
  2. {tango_python-1.9.0 → tango_python-1.10.0}/PKG-INFO +1 -1
  3. {tango_python-1.9.0 → tango_python-1.10.0}/pyproject.toml +1 -1
  4. {tango_python-1.9.0 → tango_python-1.10.0}/tango/__init__.py +1 -1
  5. {tango_python-1.9.0 → tango_python-1.10.0}/tango/client.py +3 -0
  6. {tango_python-1.9.0 → tango_python-1.10.0}/tango/models.py +1 -0
  7. {tango_python-1.9.0 → tango_python-1.10.0}/tango/shapes/generated_overlay.py +1 -0
  8. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_dibbs_exclusions_sbir.py +6 -0
  9. {tango_python-1.9.0 → tango_python-1.10.0}/.gitignore +0 -0
  10. {tango_python-1.9.0 → tango_python-1.10.0}/LICENSE +0 -0
  11. {tango_python-1.9.0 → tango_python-1.10.0}/README.md +0 -0
  12. {tango_python-1.9.0 → tango_python-1.10.0}/docs/API_REFERENCE.md +0 -0
  13. {tango_python-1.9.0 → tango_python-1.10.0}/docs/CLIENT.md +0 -0
  14. {tango_python-1.9.0 → tango_python-1.10.0}/docs/DYNAMIC_MODELS.md +0 -0
  15. {tango_python-1.9.0 → tango_python-1.10.0}/docs/ERRORS.md +0 -0
  16. {tango_python-1.9.0 → tango_python-1.10.0}/docs/PAGINATION.md +0 -0
  17. {tango_python-1.9.0 → tango_python-1.10.0}/docs/SHAPES.md +0 -0
  18. {tango_python-1.9.0 → tango_python-1.10.0}/docs/WEBHOOKS.md +0 -0
  19. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/README.md +0 -0
  20. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/check_filter_shape_conformance.py +0 -0
  21. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/check_shape_coverage.py +0 -0
  22. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/fetch_api_schema.py +0 -0
  23. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/generate_schemas_from_api.py +0 -0
  24. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/generate_shape_overlay.py +0 -0
  25. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/pr_review.py +0 -0
  26. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/probe_shape_types.py +0 -0
  27. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/refresh_contract.py +0 -0
  28. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/smoke_api_parity.py +0 -0
  29. {tango_python-1.9.0 → tango_python-1.10.0}/scripts/test_production.py +0 -0
  30. {tango_python-1.9.0 → tango_python-1.10.0}/tango/exceptions.py +0 -0
  31. {tango_python-1.9.0 → tango_python-1.10.0}/tango/shapes/__init__.py +0 -0
  32. {tango_python-1.9.0 → tango_python-1.10.0}/tango/shapes/explicit_schemas.py +0 -0
  33. {tango_python-1.9.0 → tango_python-1.10.0}/tango/shapes/factory.py +0 -0
  34. {tango_python-1.9.0 → tango_python-1.10.0}/tango/shapes/generator.py +0 -0
  35. {tango_python-1.9.0 → tango_python-1.10.0}/tango/shapes/models.py +0 -0
  36. {tango_python-1.9.0 → tango_python-1.10.0}/tango/shapes/parser.py +0 -0
  37. {tango_python-1.9.0 → tango_python-1.10.0}/tango/shapes/schema.py +0 -0
  38. {tango_python-1.9.0 → tango_python-1.10.0}/tango/shapes/types.py +0 -0
  39. {tango_python-1.9.0 → tango_python-1.10.0}/tango/webhooks/__init__.py +0 -0
  40. {tango_python-1.9.0 → tango_python-1.10.0}/tango/webhooks/cli.py +0 -0
  41. {tango_python-1.9.0 → tango_python-1.10.0}/tango/webhooks/receiver.py +0 -0
  42. {tango_python-1.9.0 → tango_python-1.10.0}/tango/webhooks/signing.py +0 -0
  43. {tango_python-1.9.0 → tango_python-1.10.0}/tango/webhooks/simulate.py +0 -0
  44. {tango_python-1.9.0 → tango_python-1.10.0}/tests/__init__.py +0 -0
  45. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestAgenciesIntegration.test_get_agency +0 -0
  46. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestAgenciesIntegration.test_list_agencies +0 -0
  47. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestBusinessTypesIntegration.test_business_type_field_type_validation +0 -0
  48. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestBusinessTypesIntegration.test_business_type_parsing_consistency +0 -0
  49. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestBusinessTypesIntegration.test_list_business_types +0 -0
  50. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_combined_filters_work_together +0 -0
  51. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_contract_cursor_pagination +0 -0
  52. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_contract_data_object_parsing +0 -0
  53. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_contract_field_types +0 -0
  54. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_filter_parameter_mappings[keyword-software] +0 -0
  55. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_filter_parameter_mappings[psc_code-R425] +0 -0
  56. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_awarding_agency_filter +0 -0
  57. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_date_range_filter +0 -0
  58. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_flat +0 -0
  59. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_naics_code_filter +0 -0
  60. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[custom-key,piid,recipient(display_name),total_contract_value,award_date] +0 -0
  61. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[default-None] +0 -0
  62. {tango_python-1.9.0 → tango_python-1.10.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 +0 -0
  63. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[minimal-key,piid,award_date,recipient(display_name),description,total_contract_value] +0 -0
  64. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_new_expiring_filters +0 -0
  65. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_new_fiscal_year_range_filters +0 -0
  66. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_new_identifier_filters +0 -0
  67. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_search_contracts_with_filters +0 -0
  68. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_search_filters_object_with_new_parameters +0 -0
  69. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_sort_and_order_mapped_to_ordering[asc-] +0 -0
  70. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestContractsIntegration.test_sort_and_order_mapped_to_ordering[desc--] +0 -0
  71. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_api_schema_stability_detection_contracts +0 -0
  72. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_api_schema_stability_detection_entities +0 -0
  73. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_date_field_parsing_edge_cases +0 -0
  74. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_decimal_field_parsing_edge_cases +0 -0
  75. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_empty_list_responses +0 -0
  76. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_entity_parsing_with_various_address_formats +0 -0
  77. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_flattened_responses_with_flat_lists +0 -0
  78. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_list_field_parsing_consistency +0 -0
  79. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_parsing_nested_objects_with_missing_data +0 -0
  80. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_parsing_null_missing_fields_in_contracts +0 -0
  81. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEdgeCasesIntegration.test_parsing_with_minimal_shape_sparse_data +0 -0
  82. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_entity_field_types +0 -0
  83. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_entity_location_parsing +0 -0
  84. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_entity_parsing_with_business_types +0 -0
  85. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_entity_with_various_identifiers +0 -0
  86. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_get_entity_budget_flows +0 -0
  87. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_get_entity_by_uei +0 -0
  88. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_flat +0 -0
  89. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_search +0 -0
  90. {tango_python-1.9.0 → tango_python-1.10.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...1603a7d52e211cf2b3bc7d32080238aa +0 -0
  91. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[custom-uei,legal_business_name,cage_code] +0 -0
  92. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[minimal-uei,legal_business_name,cage_code,business_types] +0 -0
  93. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[with_address-uei,legal_business_name,cage_code,business_types,physical_address] +0 -0
  94. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestForecastsIntegration.test_forecast_field_types +0 -0
  95. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[custom-id,title,anticipated_award_date] +0 -0
  96. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[default-None] +0 -0
  97. {tango_python-1.9.0 → tango_python-1.10.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] +0 -0
  98. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[minimal-id,title,anticipated_award_date,fiscal_year,naics_code,status] +0 -0
  99. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestGrantsIntegration.test_grant_field_types +0 -0
  100. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestGrantsIntegration.test_grant_pagination +0 -0
  101. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[custom-grant_id,title,opportunity_number] +0 -0
  102. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[default-None] +0 -0
  103. {tango_python-1.9.0 → tango_python-1.10.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(-)] +0 -0
  104. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[minimal-grant_id,opportunity_number,title,status(-),agency_code] +0 -0
  105. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestIDVsIntegration.test_get_idv_uses_default_shape +0 -0
  106. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestIDVsIntegration.test_list_idv_awards_uses_default_shape +0 -0
  107. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestIDVsIntegration.test_list_idv_child_idvs_uses_default_shape +0 -0
  108. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestIDVsIntegration.test_list_idv_transactions +0 -0
  109. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestIDVsIntegration.test_list_idvs_uses_default_shape_and_keyset_params +0 -0
  110. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_agency_code +0 -0
  111. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_agency_name_text +0 -0
  112. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_cio_rating +0 -0
  113. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_cio_rating_max +0 -0
  114. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_performance_risk +0 -0
  115. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_type_of_investment +0 -0
  116. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_updated_time_range +0 -0
  117. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_funding_and_cio_evaluation_expansions +0 -0
  118. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_get_itdashboard_investment_by_uii +0 -0
  119. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_itdashboard_pagination +0 -0
  120. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_list_itdashboard_investments_with_search +0 -0
  121. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_list_itdashboard_investments_with_shapes[custom-uii,agency_name,investment_title,updated_time] +0 -0
  122. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_list_itdashboard_investments_with_shapes[default-None] +0 -0
  123. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestITDashboardIntegration.test_list_itdashboard_investments_with_shapes[minimal-uii,agency_name,bureau_name,investment_title,type_of_investment,part_of_it_portfolio,updated_time,url] +0 -0
  124. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestNaicsIntegration.test_list_naics +0 -0
  125. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[custom-notice_id,title,solicitation_number] +0 -0
  126. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[default-None] +0 -0
  127. {tango_python-1.9.0 → tango_python-1.10.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(-)] +0 -0
  128. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[minimal-notice_id,title,solicitation_number,posted_date] +0 -0
  129. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestNoticesIntegration.test_notice_field_types +0 -0
  130. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestNoticesIntegration.test_notice_pagination +0 -0
  131. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestNoticesIntegration.test_notice_with_meta_fields +0 -0
  132. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOTAsIntegration.test_get_ota +0 -0
  133. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOTAsIntegration.test_list_otas +0 -0
  134. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOTIDVsIntegration.test_get_otidv +0 -0
  135. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOTIDVsIntegration.test_list_otidvs +0 -0
  136. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOfficesIntegration.test_get_office +0 -0
  137. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOfficesIntegration.test_list_offices +0 -0
  138. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[custom-opportunity_id,title,solicitation_number] +0 -0
  139. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[default-None] +0 -0
  140. {tango_python-1.9.0 → tango_python-1.10.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 +0 -0
  141. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[minimal-opportunity_id,title,solicitation_number,response_deadline,active] +0 -0
  142. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOpportunitiesIntegration.test_opportunity_field_types +0 -0
  143. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOrganizationsIntegration.test_get_organization +0 -0
  144. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestOrganizationsIntegration.test_list_organizations +0 -0
  145. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestProtestsIntegration.test_get_protest_by_case_id +0 -0
  146. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_filter +0 -0
  147. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_shapes[custom-case_id,title,source_system,outcome] +0 -0
  148. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_shapes[default-None] +0 -0
  149. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_shapes[minimal-case_id,case_number,title,source_system,outcome,filed_date] +0 -0
  150. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_shapes[with_dockets-case_id,case_number,title,outcome,filed_date,dockets(docket_number,filed_date,outcome)] +0 -0
  151. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestProtestsIntegration.test_protest_pagination +0 -0
  152. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestSubawardsIntegration.test_list_subawards +0 -0
  153. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[custom-key,piid,description] +0 -0
  154. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[minimal-key,piid,award_date,recipient(display_name),description,total_contract_value] +0 -0
  155. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[ultra_minimal-key,piid,recipient(display_name),total_contract_value] +0 -0
  156. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestTypeHintsIntegration.test_entities_dict_access[minimal-uei,legal_business_name,cage_code,business_types] +0 -0
  157. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestTypeHintsIntegration.test_entities_dict_access[with_address-uei,legal_business_name,cage_code,business_types,physical_address] +0 -0
  158. {tango_python-1.9.0 → tango_python-1.10.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(-)] +0 -0
  159. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestTypeHintsIntegration.test_notices_dict_access[minimal-notice_id,title,solicitation_number,posted_date] +0 -0
  160. {tango_python-1.9.0 → tango_python-1.10.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(-)] +0 -0
  161. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestTypeHintsIntegration.test_opportunities_dict_access[minimal-opportunity_id,title,solicitation_number,response_deadline,active] +0 -0
  162. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_supports_joiner_and_flat_lists +0 -0
  163. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_with_metrics_expansion +0 -0
  164. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_awardees_uses_default_shape +0 -0
  165. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_orders_uses_default_shape +0 -0
  166. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_uses_default_shape_and_search +0 -0
  167. {tango_python-1.9.0 → tango_python-1.10.0}/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_with_ordering +0 -0
  168. {tango_python-1.9.0 → tango_python-1.10.0}/tests/conftest.py +0 -0
  169. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/README.md +0 -0
  170. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/__init__.py +0 -0
  171. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/conftest.py +0 -0
  172. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_agencies_integration.py +0 -0
  173. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_contracts_integration.py +0 -0
  174. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_edge_cases_integration.py +0 -0
  175. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_entities_integration.py +0 -0
  176. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_forecasts_integration.py +0 -0
  177. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_grants_integration.py +0 -0
  178. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_itdashboard_integration.py +0 -0
  179. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_naics_integration.py +0 -0
  180. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_notices_integration.py +0 -0
  181. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_offices_integration.py +0 -0
  182. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_opportunities_integration.py +0 -0
  183. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_organizations_integration.py +0 -0
  184. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_otas_otidvs_integration.py +0 -0
  185. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_protests_integration.py +0 -0
  186. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_reference_data_integration.py +0 -0
  187. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_subawards_integration.py +0 -0
  188. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/test_vehicles_idvs_integration.py +0 -0
  189. {tango_python-1.9.0 → tango_python-1.10.0}/tests/integration/validation.py +0 -0
  190. {tango_python-1.9.0 → tango_python-1.10.0}/tests/production/__init__.py +0 -0
  191. {tango_python-1.9.0 → tango_python-1.10.0}/tests/production/conftest.py +0 -0
  192. {tango_python-1.9.0 → tango_python-1.10.0}/tests/production/test_production_smoke.py +0 -0
  193. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_api_parity.py +0 -0
  194. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_client.py +0 -0
  195. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_contract_appeals.py +0 -0
  196. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_ebuy.py +0 -0
  197. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_federal_register.py +0 -0
  198. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_models.py +0 -0
  199. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_opportunity_attachments.py +0 -0
  200. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_organization_scope.py +0 -0
  201. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_shape_coverage_gate.py +0 -0
  202. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_shapes.py +0 -0
  203. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_sled.py +0 -0
  204. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_webhooks_cli.py +0 -0
  205. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_webhooks_receiver.py +0 -0
  206. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_webhooks_signing.py +0 -0
  207. {tango_python-1.9.0 → tango_python-1.10.0}/tests/test_webhooks_simulate.py +0 -0
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.10.0] - 2026-09-29
11
+
12
+ ### Added
13
+
14
+ - **`list_sbir_topics(cycle_name=...)`** filters topics by their DSIP solicitation cycle (e.g. `DOD_SBIR_2026_P1_CBZ`), and `SbirTopic` gains a `cycle_name` field (Tango API 5.3.1). The vendored API contract is refreshed to 5.3.1.
15
+
10
16
  ## [1.9.0] - 2026-09-28
11
17
 
12
18
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tango-python
3
- Version: 1.9.0
3
+ Version: 1.10.0
4
4
  Summary: Python SDK for the Tango API
5
5
  Project-URL: Homepage, https://github.com/makegov/tango-python
6
6
  Project-URL: Documentation, https://docs.makegov.com/tango-python
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "tango-python"
7
- version = "1.9.0"
7
+ version = "1.10.0"
8
8
  description = "Python SDK for the Tango API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -59,7 +59,7 @@ from .webhooks import (
59
59
  )
60
60
  from .webhooks.receiver import Delivery, WebhookReceiver
61
61
 
62
- __version__ = "1.9.0"
62
+ __version__ = "1.10.0"
63
63
  __all__ = [
64
64
  "TangoClient",
65
65
  "TangoAPIError",
@@ -3733,6 +3733,7 @@ class TangoClient:
3733
3733
  flat_lists: bool = False,
3734
3734
  topic_number: str | None = None,
3735
3735
  solicitation_number: str | None = None,
3736
+ cycle_name: str | None = None,
3736
3737
  agency: str | None = None,
3737
3738
  activity: str | None = None,
3738
3739
  year: int | None = None,
@@ -3759,6 +3760,7 @@ class TangoClient:
3759
3760
  flat_lists: If True, flatten arrays using indexed keys
3760
3761
  topic_number: Filter by topic number
3761
3762
  solicitation_number: Filter by solicitation number
3763
+ cycle_name: Filter by DSIP solicitation cycle, exact (e.g. "DOD_SBIR_2026_P1_CBZ"; requires Tango API 5.3.1)
3762
3764
  agency: Filter by agency
3763
3765
  activity: Filter by activity (component/branch)
3764
3766
  year: Filter by solicitation year
@@ -3786,6 +3788,7 @@ class TangoClient:
3786
3788
  for key, val in (
3787
3789
  ("topic_number", topic_number),
3788
3790
  ("solicitation_number", solicitation_number),
3791
+ ("cycle_name", cycle_name),
3789
3792
  ("agency", agency),
3790
3793
  ("activity", activity),
3791
3794
  ("year", year),
@@ -1000,6 +1000,7 @@ class SbirTopic:
1000
1000
  activity: str | None = None
1001
1001
  year: int | None = None
1002
1002
  solicitation_number: str | None = None
1003
+ cycle_name: str | None = None
1003
1004
  solicitation_status: str | None = None
1004
1005
  release_date: str | None = None
1005
1006
  open_date: str | None = None
@@ -2731,6 +2731,7 @@ GENERATED_OVERLAY: dict[str, dict[str, FieldSchema]] = {
2731
2731
  "activity": FieldSchema(name="activity", type=str, is_optional=True, is_list=False),
2732
2732
  "agency": FieldSchema(name="agency", type=str, is_optional=True, is_list=False),
2733
2733
  "close_date": FieldSchema(name="close_date", type=date, is_optional=True, is_list=False),
2734
+ "cycle_name": FieldSchema(name="cycle_name", type=str, is_optional=True, is_list=False),
2734
2735
  "description": FieldSchema(name="description", type=str, is_optional=True, is_list=False),
2735
2736
  "doc_source": FieldSchema(name="doc_source", type=str, is_optional=True, is_list=False),
2736
2737
  "due_dates_text": FieldSchema(
@@ -141,6 +141,12 @@ class TestSbir:
141
141
  assert params["year"] == 2026
142
142
  assert params["topic_number"] == "A26-001"
143
143
 
144
+ @patch("tango.client.httpx.Client.request")
145
+ def test_list_sbir_topics_cycle_name(self, mock_request):
146
+ _mock(mock_request)
147
+ TangoClient(api_key="k").list_sbir_topics(cycle_name="DOD_SBIR_2026_P1_CBZ")
148
+ assert _call_params(mock_request)["cycle_name"] == "DOD_SBIR_2026_P1_CBZ"
149
+
144
150
  @patch("tango.client.httpx.Client.request")
145
151
  def test_get_sbir_topic_uses_topic_id_route(self, mock_request):
146
152
  _mock(mock_request, {"topic_id": "t1"})
File without changes
File without changes
File without changes