tango-python 1.11.0__tar.gz → 1.13.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.
- {tango_python-1.11.0 → tango_python-1.13.0}/CHANGELOG.md +32 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/PKG-INFO +1 -1
- {tango_python-1.11.0 → tango_python-1.13.0}/docs/API_REFERENCE.md +26 -4
- {tango_python-1.11.0 → tango_python-1.13.0}/pyproject.toml +1 -1
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/__init__.py +7 -1
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/client.py +29 -2
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/models.py +64 -5
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/shapes/explicit_schemas.py +5 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/shapes/generated_overlay.py +9 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_supports_joiner_and_flat_lists +39 -35
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_with_metrics_expansion +41 -37
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_awardees_uses_default_shape +44 -40
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_orders_uses_default_shape +56 -52
- tango_python-1.13.0/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_uses_default_shape_and_search +150 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_client.py +198 -0
- tango_python-1.11.0/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_uses_default_shape_and_search +0 -150
- {tango_python-1.11.0 → tango_python-1.13.0}/.gitignore +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/LICENSE +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/README.md +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/docs/CLIENT.md +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/docs/DYNAMIC_MODELS.md +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/docs/ERRORS.md +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/docs/PAGINATION.md +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/docs/SHAPES.md +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/docs/WEBHOOKS.md +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/README.md +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/check_filter_shape_conformance.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/check_shape_coverage.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/fetch_api_schema.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/generate_schemas_from_api.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/generate_shape_overlay.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/pr_review.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/probe_shape_types.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/refresh_contract.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/smoke_api_parity.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/scripts/test_production.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/exceptions.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/shapes/__init__.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/shapes/factory.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/shapes/generator.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/shapes/models.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/shapes/parser.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/shapes/schema.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/shapes/types.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/webhooks/__init__.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/webhooks/cli.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/webhooks/receiver.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/webhooks/signing.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tango/webhooks/simulate.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/__init__.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestAgenciesIntegration.test_get_agency +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestAgenciesIntegration.test_list_agencies +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestBusinessTypesIntegration.test_business_type_field_type_validation +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestBusinessTypesIntegration.test_business_type_parsing_consistency +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestBusinessTypesIntegration.test_list_business_types +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_combined_filters_work_together +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_contract_cursor_pagination +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_contract_data_object_parsing +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_contract_field_types +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_filter_parameter_mappings[keyword-software] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_filter_parameter_mappings[psc_code-R425] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_awarding_agency_filter +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_date_range_filter +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_flat +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_naics_code_filter +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[custom-key,piid,recipient(display_name),total_contract_value,award_date] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[default-None] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.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
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[minimal-key,piid,award_date,recipient(display_name),description,total_contract_value] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_new_expiring_filters +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_new_fiscal_year_range_filters +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_new_identifier_filters +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_search_contracts_with_filters +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_search_filters_object_with_new_parameters +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_sort_and_order_mapped_to_ordering[asc-] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestContractsIntegration.test_sort_and_order_mapped_to_ordering[desc--] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_api_schema_stability_detection_contracts +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_api_schema_stability_detection_entities +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_date_field_parsing_edge_cases +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_decimal_field_parsing_edge_cases +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_empty_list_responses +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_entity_parsing_with_various_address_formats +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_flattened_responses_with_flat_lists +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_list_field_parsing_consistency +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_parsing_nested_objects_with_missing_data +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_parsing_null_missing_fields_in_contracts +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEdgeCasesIntegration.test_parsing_with_minimal_shape_sparse_data +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_entity_field_types +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_entity_location_parsing +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_entity_parsing_with_business_types +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_entity_with_various_identifiers +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_get_entity_budget_flows +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_get_entity_by_uei +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_flat +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_search +0 -0
- {tango_python-1.11.0 → tango_python-1.13.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
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[custom-uei,legal_business_name,cage_code] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[minimal-uei,legal_business_name,cage_code,business_types] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[with_address-uei,legal_business_name,cage_code,business_types,physical_address] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestForecastsIntegration.test_forecast_field_types +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[custom-id,title,anticipated_award_date] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[default-None] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.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
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[minimal-id,title,anticipated_award_date,fiscal_year,naics_code,status] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestGrantsIntegration.test_grant_field_types +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestGrantsIntegration.test_grant_pagination +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[custom-grant_id,title,opportunity_number] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[default-None] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.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
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[minimal-grant_id,opportunity_number,title,status(-),agency_code] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestIDVsIntegration.test_get_idv_uses_default_shape +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestIDVsIntegration.test_list_idv_awards_uses_default_shape +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestIDVsIntegration.test_list_idv_child_idvs_uses_default_shape +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestIDVsIntegration.test_list_idv_transactions +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestIDVsIntegration.test_list_idvs_uses_default_shape_and_keyset_params +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_agency_code +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_agency_name_text +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_cio_rating +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_cio_rating_max +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_performance_risk +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_type_of_investment +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_filter_by_updated_time_range +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_funding_and_cio_evaluation_expansions +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_get_itdashboard_investment_by_uii +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_itdashboard_pagination +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_list_itdashboard_investments_with_search +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_list_itdashboard_investments_with_shapes[custom-uii,agency_name,investment_title,updated_time] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestITDashboardIntegration.test_list_itdashboard_investments_with_shapes[default-None] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.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
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestNaicsIntegration.test_list_naics +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[custom-notice_id,title,solicitation_number] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[default-None] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.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
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[minimal-notice_id,title,solicitation_number,posted_date] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestNoticesIntegration.test_notice_field_types +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestNoticesIntegration.test_notice_pagination +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestNoticesIntegration.test_notice_with_meta_fields +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOTAsIntegration.test_get_ota +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOTAsIntegration.test_list_otas +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOTIDVsIntegration.test_get_otidv +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOTIDVsIntegration.test_list_otidvs +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOfficesIntegration.test_get_office +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOfficesIntegration.test_list_offices +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[custom-opportunity_id,title,solicitation_number] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[default-None] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.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
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[minimal-opportunity_id,title,solicitation_number,response_deadline,active] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOpportunitiesIntegration.test_opportunity_field_types +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOrganizationsIntegration.test_get_organization +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestOrganizationsIntegration.test_list_organizations +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestProtestsIntegration.test_get_protest_by_case_id +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_filter +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_shapes[custom-case_id,title,source_system,outcome] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_shapes[default-None] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_shapes[minimal-case_id,case_number,title,source_system,outcome,filed_date] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.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
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestProtestsIntegration.test_protest_pagination +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestSubawardsIntegration.test_list_subawards +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[custom-key,piid,description] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[minimal-key,piid,award_date,recipient(display_name),description,total_contract_value] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[ultra_minimal-key,piid,recipient(display_name),total_contract_value] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestTypeHintsIntegration.test_entities_dict_access[minimal-uei,legal_business_name,cage_code,business_types] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestTypeHintsIntegration.test_entities_dict_access[with_address-uei,legal_business_name,cage_code,business_types,physical_address] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.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
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestTypeHintsIntegration.test_notices_dict_access[minimal-notice_id,title,solicitation_number,posted_date] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.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
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestTypeHintsIntegration.test_opportunities_dict_access[minimal-opportunity_id,title,solicitation_number,response_deadline,active] +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_with_ordering +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/conftest.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/README.md +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/__init__.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/conftest.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_agencies_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_contracts_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_edge_cases_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_entities_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_forecasts_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_grants_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_itdashboard_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_naics_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_notices_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_offices_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_opportunities_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_organizations_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_otas_otidvs_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_protests_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_reference_data_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_subawards_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/test_vehicles_idvs_integration.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/integration/validation.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/production/__init__.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/production/conftest.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/production/test_production_smoke.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_api_parity.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_contract_appeals.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_dibbs_exclusions_sbir.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_ebuy.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_federal_register.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_models.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_opportunity_attachments.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_opportunity_awards.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_organization_scope.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_shape_coverage_gate.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_shapes.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_sled.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_webhooks_cli.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_webhooks_receiver.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_webhooks_signing.py +0 -0
- {tango_python-1.11.0 → tango_python-1.13.0}/tests/test_webhooks_simulate.py +0 -0
|
@@ -7,6 +7,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.13.0] - 2026-10-02
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`holder_count` and `order_winner_count` on vehicles** (Tango API 5.8.0). `holder_count` is the number of distinct companies holding one of the vehicle's IDVs, and `order_winner_count` is the number of distinct companies that have won a task order under it. Both are in the default `VEHICLES_MINIMAL` and `VEHICLES_COMPREHENSIVE` shapes and accepted in custom shapes.
|
|
15
|
+
- **`data_through_period` on budget accounts** (Tango API 5.8.0). The File A period (1-12) an account-year's figures run through; below 12 the year is partial, and `None` means there is no File A data. It is in the default `BUDGET_ACCOUNTS_MINIMAL` shape and accepted in custom shapes.
|
|
16
|
+
- **`list_budget_accounts(data_through_period=..., data_through_period_gte=..., data_through_period_lte=..., data_through_period_isnull=...)`** filters by that period, exactly, by range, or by whether it is set.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Re-vendored `contracts/filter_shape_contract.json` (Tango API 5.8.0) and regenerated `tango/shapes/generated_overlay.py`.
|
|
21
|
+
|
|
22
|
+
### Deprecated
|
|
23
|
+
|
|
24
|
+
- **`awardee_count` on vehicles.** It is the same value as `order_winner_count`; use that instead. The API removes it at its next major version, and the SDK's default vehicle shapes will drop it then.
|
|
25
|
+
|
|
26
|
+
## [1.12.0] - 2026-10-02
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- **`account_category` and `source_anomalies` on budget accounts** (Tango API 5.7.0). Both are in the default `BUDGET_ACCOUNTS_MINIMAL` shape and accepted in custom shapes. `account_category` is `budgetary` or `credit_financing` today. `source_anomalies` lists the problems found in the source data behind an account, and is `[]` when there are none. Each element is typed as the new `BudgetAccountSourceAnomaly` `TypedDict` (with `BudgetAccountAnomalySource` and `BudgetAccountAnomalySourceRow` for its nested `source`), and every key is optional. Treat `account_category` and an anomaly's `code` as open strings, since new values may appear.
|
|
31
|
+
- **`list_budget_accounts(account_category=..., account_category_in=...)`** filters by account category, exactly or against a comma-separated list.
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
|
|
35
|
+
- **`list_budget_accounts()` documents the API's default ordering**: the latest fiscal year first, then largest `enacted_ba` first, with accounts that have no `enacted_ba` last.
|
|
36
|
+
- Re-vendored `contracts/filter_shape_contract.json` (Tango API 5.7.0) and regenerated `tango/shapes/generated_overlay.py`.
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- **`list_idvs()`, `list_idv_awards()`, `list_idv_child_idvs()` and `list_idv_transactions()` now return the API's pagination `cursor`.** They dropped it, so `response.cursor` was always `None` and a caller following the cursor stopped after the first page.
|
|
41
|
+
|
|
10
42
|
## [1.11.0] - 2026-09-29
|
|
11
43
|
|
|
12
44
|
### Added
|
|
@@ -599,7 +599,10 @@ The post-cutover (May 2026) vehicle response includes these top-level fields, al
|
|
|
599
599
|
| `vehicle_type`, `who_can_use`, `type_of_idc`, `contract_type` | dict \| None | Returned as `{code, description}`. |
|
|
600
600
|
| `description` | str \| None | Common text across IDV descriptions. |
|
|
601
601
|
| `descriptions` | list[str] \| None | Distinct IDV descriptions. |
|
|
602
|
-
| `idv_count`, `
|
|
602
|
+
| `idv_count`, `order_count` | int \| None | Denormalized rollups. |
|
|
603
|
+
| `holder_count` | int \| None | Distinct companies holding one of the vehicle's IDVs. |
|
|
604
|
+
| `order_winner_count` | int \| None | Distinct companies that have won a task order under the vehicle. |
|
|
605
|
+
| `awardee_count` | int \| None | **Deprecated.** Same value as `order_winner_count`; use that instead. Removed at the next major API version. |
|
|
603
606
|
| `total_obligated`, `vehicle_obligations`, `vehicle_contracts_value` | Decimal \| None | Denormalized rollups. |
|
|
604
607
|
| `award_date`, `latest_award_date`, `last_date_to_order` | date \| None | |
|
|
605
608
|
| `solicitation_title`, `solicitation_description`, `solicitation_date`, `opportunity_id` | str / date / None | From SAM.gov via the linked Opportunity. |
|
|
@@ -1770,6 +1773,12 @@ accounts = client.list_budget_accounts(
|
|
|
1770
1773
|
bea_category=None,
|
|
1771
1774
|
on_off_budget=None,
|
|
1772
1775
|
subfunction_code=None,
|
|
1776
|
+
account_category=None,
|
|
1777
|
+
account_category_in=None,
|
|
1778
|
+
data_through_period=None,
|
|
1779
|
+
data_through_period_gte=None,
|
|
1780
|
+
data_through_period_lte=None,
|
|
1781
|
+
data_through_period_isnull=None,
|
|
1773
1782
|
search=None,
|
|
1774
1783
|
ordering=None,
|
|
1775
1784
|
)
|
|
@@ -1785,8 +1794,21 @@ accounts = client.list_budget_accounts(
|
|
|
1785
1794
|
- `bea_category` - BEA category (exact)
|
|
1786
1795
|
- `on_off_budget` - On/off budget flag (exact)
|
|
1787
1796
|
- `subfunction_code` - Subfunction code (exact)
|
|
1797
|
+
- `account_category` - Account category (exact): `budgetary` or `credit_financing` today; treat it as an open string
|
|
1798
|
+
- `account_category_in` - Comma-separated account categories to match any of (e.g. `"budgetary,credit_financing"`)
|
|
1799
|
+
- `data_through_period` - File A period (1-12) the account-year's figures run through (exact); below 12 the year is partial
|
|
1800
|
+
- `data_through_period_gte` / `data_through_period_lte` - `data_through_period` range
|
|
1801
|
+
- `data_through_period_isnull` - `True` for accounts with no File A data, `False` for accounts with it
|
|
1788
1802
|
- `search` - Full-text search over `account_title`, `agency_name`, `bureau_name`
|
|
1789
|
-
- `ordering` - Sort field; prefix with `-` for descending
|
|
1803
|
+
- `ordering` - Sort field; prefix with `-` for descending. The default is the latest fiscal year first, then largest `enacted_ba` first, with accounts that have no `enacted_ba` last.
|
|
1804
|
+
|
|
1805
|
+
**Source anomalies:** the default shape includes `account_category` and `source_anomalies`. `source_anomalies` is a list of problems found in the source data behind the account, and `[]` when there are none. Each element is a `BudgetAccountSourceAnomaly` (a `TypedDict`; every key is optional and may be `None`, so read keys with `.get()`): `code`, `field`, `bound_field`, `action` (`capped` or `flagged`), `reported_value`, `served_value`, `likely_cause`, `affected_fields`, `message`, and `source` (`dataset`, `fiscal_year`, and `rows` of `fiscal_period`, `piid`, `parent_piid`, `tas`, `reporting_agency_id`, `transaction_obligated_amount`, `file_c_source`). Today `code` is one of `contract_exceeds_obligations`, `assistance_exceeds_obligations` or `contract_without_obligations`; treat it as an open string. There is no filter on anomalies.
|
|
1806
|
+
|
|
1807
|
+
```python
|
|
1808
|
+
for acct in client.list_budget_accounts(fiscal_year=2025).results:
|
|
1809
|
+
for anomaly in acct["source_anomalies"] or []:
|
|
1810
|
+
print(acct["federal_account_symbol"], anomaly.get("code"), anomaly.get("action"))
|
|
1811
|
+
```
|
|
1790
1812
|
|
|
1791
1813
|
**Returns:** [PaginatedResponse](#paginatedresponse) of `BudgetAccount` records (see [ShapeConfig](#shapeconfig-predefined-shapes) for the default shape).
|
|
1792
1814
|
|
|
@@ -2532,7 +2554,7 @@ entity = client.get_entity("UEI_KEY", shape=ShapeConfig.ENTITIES_COMPREHENSIVE)
|
|
|
2532
2554
|
| `GRANTS_MINIMAL` | `list_grants` | grant_id, opportunity_number, title, status(*), agency_code |
|
|
2533
2555
|
| `IDVS_MINIMAL` | `list_idvs`, `list_vehicle_awardees` | key, piid, award_date, recipient(display_name,uei), description, total_contract_value, obligated, idv_type |
|
|
2534
2556
|
| `IDVS_COMPREHENSIVE` | `get_idv` | Full IDV with offices, place_of_performance, competition, transactions, etc. |
|
|
2535
|
-
| `VEHICLES_MINIMAL` | `list_vehicles` | uuid, solicitation_identifier, is_synthetic_solicitation, program_acronym, organization_id, organization, vehicle_type, description, idv_count, awardee_count, order_count, total_obligated, vehicle_obligations, vehicle_contracts_value, latest_award_date, solicitation_title, solicitation_date |
|
|
2557
|
+
| `VEHICLES_MINIMAL` | `list_vehicles` | uuid, solicitation_identifier, is_synthetic_solicitation, program_acronym, organization_id, organization, vehicle_type, description, idv_count, holder_count, order_winner_count, awardee_count, order_count, total_obligated, vehicle_obligations, vehicle_contracts_value, latest_award_date, solicitation_title, solicitation_date |
|
|
2536
2558
|
| `VEHICLES_COMPREHENSIVE` | `get_vehicle` | Full vehicle with competition_details, fiscal_year, set_aside, etc. |
|
|
2537
2559
|
| `VEHICLE_AWARDEES_MINIMAL` | `list_vehicle_awardees` | uuid, key, piid, award_date, title, order_count, idv_obligations, idv_contracts_value, recipient(display_name,uei) |
|
|
2538
2560
|
| `ORGANIZATIONS_MINIMAL` | `list_organizations` | key, fh_key, name, level, type, short_name |
|
|
@@ -2547,7 +2569,7 @@ entity = client.get_entity("UEI_KEY", shape=ShapeConfig.ENTITIES_COMPREHENSIVE)
|
|
|
2547
2569
|
| `FEDERAL_REGISTER_COMPREHENSIVE` | `get_federal_register_document` | The list fields plus dates, signing_date, start_page, end_page, volume, docket_ids, dockets, regulation_id_numbers, topics, correction_of, corrections, executive_order_number, presidential_document_number, proclamation_number, comment_url, regulations_dot_gov_url, raw_text_url, body_html_url (omits `full_text`) |
|
|
2548
2570
|
| `EBUY_REQUESTS_MINIMAL` | `list_ebuy_requests` | rfq_id, request_type, title, schedule, sin, status, buyer_name, buyer_agency, buyer_agency_code, reference_number, issue_date, close_date, attachment_count, link_count, last_seen |
|
|
2549
2571
|
| `EBUY_REQUESTS_COMPREHENSIVE` | `get_ebuy_request` | Every field, plus the `organization` and `attachments` expands |
|
|
2550
|
-
| `BUDGET_ACCOUNTS_MINIMAL` | `list_budget_accounts`, `get_budget_account` | id, federal_account_symbol, fiscal_year, agency_code/name, bureau_name, account_title, bea_category, on_off_budget, subfunction_code, lifecycle (requested/enacted/apportioned/obligated/outlayed/unobligated), contract & assistance rollups, key ratios, next-year growth |
|
|
2572
|
+
| `BUDGET_ACCOUNTS_MINIMAL` | `list_budget_accounts`, `get_budget_account` | id, federal_account_symbol, fiscal_year, data_through_period, agency_code/name, bureau_name, account_title, bea_category, on_off_budget, subfunction_code, account_category, lifecycle (requested/enacted/apportioned/obligated/outlayed/unobligated), contract & assistance rollups, key ratios, next-year growth, source_anomalies |
|
|
2551
2573
|
| `VEHICLE_ORDERS_MINIMAL` | `list_vehicle_orders` | key, piid, award_date, recipient(display_name,uei), total_contract_value, obligated |
|
|
2552
2574
|
| `ITDASHBOARD_INVESTMENTS_MINIMAL` | `list_itdashboard_investments` | Minimal IT Dashboard investment fields |
|
|
2553
2575
|
| `ITDASHBOARD_INVESTMENTS_COMPREHENSIVE` | `get_itdashboard_investment` | Full investment fields: uii, agency_code, agency_name, bureau_code, bureau_name, investment_title, type_of_investment, part_of_it_portfolio, updated_time, url |
|
|
@@ -11,6 +11,9 @@ from .exceptions import (
|
|
|
11
11
|
)
|
|
12
12
|
from .models import (
|
|
13
13
|
BudgetAccount,
|
|
14
|
+
BudgetAccountAnomalySource,
|
|
15
|
+
BudgetAccountAnomalySourceRow,
|
|
16
|
+
BudgetAccountSourceAnomaly,
|
|
14
17
|
ContractAppeal,
|
|
15
18
|
DibbsAward,
|
|
16
19
|
DibbsRfp,
|
|
@@ -59,7 +62,7 @@ from .webhooks import (
|
|
|
59
62
|
)
|
|
60
63
|
from .webhooks.receiver import Delivery, WebhookReceiver
|
|
61
64
|
|
|
62
|
-
__version__ = "1.
|
|
65
|
+
__version__ = "1.13.0"
|
|
63
66
|
__all__ = [
|
|
64
67
|
"TangoClient",
|
|
65
68
|
"TangoAPIError",
|
|
@@ -72,6 +75,9 @@ __all__ = [
|
|
|
72
75
|
"ResolveCandidate",
|
|
73
76
|
"ResolveResult",
|
|
74
77
|
"BudgetAccount",
|
|
78
|
+
"BudgetAccountAnomalySource",
|
|
79
|
+
"BudgetAccountAnomalySourceRow",
|
|
80
|
+
"BudgetAccountSourceAnomaly",
|
|
75
81
|
"ContractAppeal",
|
|
76
82
|
"FederalRegisterDocument",
|
|
77
83
|
"EbuyAccess",
|
|
@@ -986,6 +986,7 @@ class TangoClient:
|
|
|
986
986
|
next=data.get("next"),
|
|
987
987
|
previous=data.get("previous"),
|
|
988
988
|
results=results,
|
|
989
|
+
cursor=data.get("cursor"),
|
|
989
990
|
page_metadata=data.get("page_metadata"),
|
|
990
991
|
meta=data.get("meta"),
|
|
991
992
|
)
|
|
@@ -1088,6 +1089,7 @@ class TangoClient:
|
|
|
1088
1089
|
next=data.get("next"),
|
|
1089
1090
|
previous=data.get("previous"),
|
|
1090
1091
|
results=results,
|
|
1092
|
+
cursor=data.get("cursor"),
|
|
1091
1093
|
page_metadata=data.get("page_metadata"),
|
|
1092
1094
|
meta=data.get("meta"),
|
|
1093
1095
|
)
|
|
@@ -1133,6 +1135,7 @@ class TangoClient:
|
|
|
1133
1135
|
next=data.get("next"),
|
|
1134
1136
|
previous=data.get("previous"),
|
|
1135
1137
|
results=results,
|
|
1138
|
+
cursor=data.get("cursor"),
|
|
1136
1139
|
page_metadata=data.get("page_metadata"),
|
|
1137
1140
|
meta=data.get("meta"),
|
|
1138
1141
|
)
|
|
@@ -1150,6 +1153,7 @@ class TangoClient:
|
|
|
1150
1153
|
next=data.get("next"),
|
|
1151
1154
|
previous=data.get("previous"),
|
|
1152
1155
|
results=data.get("results") or [],
|
|
1156
|
+
cursor=data.get("cursor"),
|
|
1153
1157
|
page_metadata=data.get("page_metadata"),
|
|
1154
1158
|
meta=data.get("meta"),
|
|
1155
1159
|
)
|
|
@@ -4444,6 +4448,12 @@ class TangoClient:
|
|
|
4444
4448
|
bea_category: str | None = None,
|
|
4445
4449
|
on_off_budget: str | None = None,
|
|
4446
4450
|
subfunction_code: str | None = None,
|
|
4451
|
+
account_category: str | None = None,
|
|
4452
|
+
account_category_in: str | None = None,
|
|
4453
|
+
data_through_period: int | None = None,
|
|
4454
|
+
data_through_period_gte: int | None = None,
|
|
4455
|
+
data_through_period_lte: int | None = None,
|
|
4456
|
+
data_through_period_isnull: bool | None = None,
|
|
4447
4457
|
# Range-numeric filters: each field also accepts ``__gte`` / ``__lte``.
|
|
4448
4458
|
requested_ba: float | None = None,
|
|
4449
4459
|
requested_ba_gte: float | None = None,
|
|
@@ -4550,6 +4560,13 @@ class TangoClient:
|
|
|
4550
4560
|
bea_category: BEA category (exact).
|
|
4551
4561
|
on_off_budget: On/off budget flag (exact).
|
|
4552
4562
|
subfunction_code: Subfunction code (exact).
|
|
4563
|
+
account_category: Account category (exact), e.g. ``budgetary`` or
|
|
4564
|
+
``credit_financing``. Treat the value as an open string; new
|
|
4565
|
+
categories may be added.
|
|
4566
|
+
account_category_in: Comma-separated account categories to match
|
|
4567
|
+
any of, e.g. ``"budgetary,credit_financing"``.
|
|
4568
|
+
data_through_period: File A period (1-12) the account-year's figures run through (exact). Also ``data_through_period_gte`` / ``data_through_period_lte``; a value below 12 means a partial year.
|
|
4569
|
+
data_through_period_isnull: ``True`` for accounts with no File A data, ``False`` for accounts with it.
|
|
4553
4570
|
requested_ba: President's-budget requested BA (exact). Also
|
|
4554
4571
|
``requested_ba_gte`` / ``requested_ba_lte`` for range queries.
|
|
4555
4572
|
enacted_ba: Enacted budget authority (exact / gte / lte).
|
|
@@ -4592,7 +4609,9 @@ class TangoClient:
|
|
|
4592
4609
|
ordering: Sort field (prefix with '-' for descending). Any of the
|
|
4593
4610
|
numeric fields above is a valid ordering target — e.g.
|
|
4594
4611
|
``ordering="-unobligated_balance"`` to rank by largest
|
|
4595
|
-
headroom first.
|
|
4612
|
+
headroom first. The default ordering is the latest fiscal year
|
|
4613
|
+
first, then largest ``enacted_ba`` first, with accounts that
|
|
4614
|
+
have no ``enacted_ba`` sorted last.
|
|
4596
4615
|
"""
|
|
4597
4616
|
params: dict[str, Any] = {"page": page, "limit": min(limit, 100)}
|
|
4598
4617
|
if shape is None:
|
|
@@ -4615,11 +4634,19 @@ class TangoClient:
|
|
|
4615
4634
|
("bea_category", bea_category),
|
|
4616
4635
|
("on_off_budget", on_off_budget),
|
|
4617
4636
|
("subfunction_code", subfunction_code),
|
|
4637
|
+
("account_category", account_category),
|
|
4638
|
+
("account_category__in", account_category_in),
|
|
4639
|
+
("data_through_period", data_through_period),
|
|
4640
|
+
("data_through_period__gte", data_through_period_gte),
|
|
4641
|
+
("data_through_period__lte", data_through_period_lte),
|
|
4642
|
+
("data_through_period__isnull", data_through_period_isnull),
|
|
4618
4643
|
("search", search),
|
|
4619
4644
|
("ordering", ordering),
|
|
4620
4645
|
)
|
|
4621
4646
|
for key, val in scalar_filters:
|
|
4622
|
-
if val
|
|
4647
|
+
if isinstance(val, bool):
|
|
4648
|
+
params[key] = "true" if val else "false"
|
|
4649
|
+
elif val is not None:
|
|
4623
4650
|
params[key] = val
|
|
4624
4651
|
# Range-numeric filters: each field has exact / __gte / __lte forms.
|
|
4625
4652
|
range_filters: tuple[tuple[str, float | None, float | None, float | None], ...] = (
|
|
@@ -489,6 +489,8 @@ class Vehicle:
|
|
|
489
489
|
program_acronym: str | None = None
|
|
490
490
|
description: str | None = None
|
|
491
491
|
idv_count: int | None = None
|
|
492
|
+
holder_count: int | None = None
|
|
493
|
+
order_winner_count: int | None = None
|
|
492
494
|
total_obligated: Decimal | None = None
|
|
493
495
|
latest_award_date: date | None = None
|
|
494
496
|
solicitation_title: str | None = None
|
|
@@ -786,6 +788,55 @@ class ValidateResult:
|
|
|
786
788
|
errors: list[str] | None = None
|
|
787
789
|
|
|
788
790
|
|
|
791
|
+
class BudgetAccountAnomalySourceRow(TypedDict, total=False):
|
|
792
|
+
"""One source record behind a budget-account source anomaly.
|
|
793
|
+
|
|
794
|
+
Every key is optional and any value may be ``None``.
|
|
795
|
+
"""
|
|
796
|
+
|
|
797
|
+
fiscal_period: int | None
|
|
798
|
+
piid: str | None
|
|
799
|
+
parent_piid: str | None
|
|
800
|
+
tas: str | None
|
|
801
|
+
reporting_agency_id: str | None
|
|
802
|
+
transaction_obligated_amount: float | str | None
|
|
803
|
+
file_c_source: str | None
|
|
804
|
+
|
|
805
|
+
|
|
806
|
+
class BudgetAccountAnomalySource(TypedDict, total=False):
|
|
807
|
+
"""Where a budget-account source anomaly was found.
|
|
808
|
+
|
|
809
|
+
Every key is optional and any value may be ``None``.
|
|
810
|
+
"""
|
|
811
|
+
|
|
812
|
+
dataset: str | None
|
|
813
|
+
fiscal_year: int | None
|
|
814
|
+
rows: list[BudgetAccountAnomalySourceRow] | None
|
|
815
|
+
|
|
816
|
+
|
|
817
|
+
class BudgetAccountSourceAnomaly(TypedDict, total=False):
|
|
818
|
+
"""One problem found in the source data behind a budget account.
|
|
819
|
+
|
|
820
|
+
An element of ``BudgetAccount.source_anomalies``. Every key is optional and
|
|
821
|
+
any value may be ``None``, so read keys with ``.get()``. ``code`` and
|
|
822
|
+
``action`` are open strings: today ``code`` is one of
|
|
823
|
+
``contract_exceeds_obligations``, ``assistance_exceeds_obligations`` or
|
|
824
|
+
``contract_without_obligations``, and ``action`` is ``capped`` or
|
|
825
|
+
``flagged``, but new values may appear.
|
|
826
|
+
"""
|
|
827
|
+
|
|
828
|
+
code: str | None
|
|
829
|
+
field: str | None
|
|
830
|
+
bound_field: str | None
|
|
831
|
+
action: str | None
|
|
832
|
+
reported_value: float | str | None
|
|
833
|
+
served_value: float | str | None
|
|
834
|
+
likely_cause: str | None
|
|
835
|
+
affected_fields: list[str] | None
|
|
836
|
+
message: str | None
|
|
837
|
+
source: BudgetAccountAnomalySource | None
|
|
838
|
+
|
|
839
|
+
|
|
789
840
|
@dataclass
|
|
790
841
|
class BudgetAccount:
|
|
791
842
|
"""Schema definition for BudgetAccount (not used for instances).
|
|
@@ -798,6 +849,8 @@ class BudgetAccount:
|
|
|
798
849
|
id: int | None = None
|
|
799
850
|
federal_account_symbol: str | None = None
|
|
800
851
|
fiscal_year: int | None = None
|
|
852
|
+
# File A period (1-12) this account-year's figures run through; below 12 the year is partial, and `None` means no File A data.
|
|
853
|
+
data_through_period: int | None = None
|
|
801
854
|
agency_code: str | None = None
|
|
802
855
|
agency_name: str | None = None
|
|
803
856
|
bureau_name: str | None = None
|
|
@@ -805,6 +858,8 @@ class BudgetAccount:
|
|
|
805
858
|
bea_category: str | None = None
|
|
806
859
|
on_off_budget: str | None = None
|
|
807
860
|
subfunction_code: str | None = None
|
|
861
|
+
# ``budgetary`` or ``credit_financing`` today; treat as an open string.
|
|
862
|
+
account_category: str | None = None
|
|
808
863
|
# Lifecycle
|
|
809
864
|
requested_ba: Decimal | None = None
|
|
810
865
|
enacted_ba: Decimal | None = None
|
|
@@ -828,6 +883,8 @@ class BudgetAccount:
|
|
|
828
883
|
assistance_share_of_obligated: Decimal | None = None
|
|
829
884
|
assistance_share_of_obligated_capped: Decimal | None = None
|
|
830
885
|
assistance_share_capped_flag: bool | None = None
|
|
886
|
+
# Problems found in the source data; ``[]`` when there are none.
|
|
887
|
+
source_anomalies: list[BudgetAccountSourceAnomaly] | None = None
|
|
831
888
|
# Forward-look
|
|
832
889
|
next_year_requested_ba: Decimal | None = None
|
|
833
890
|
ba_growth_next_year: Decimal | None = None
|
|
@@ -1699,7 +1756,7 @@ class ShapeConfig:
|
|
|
1699
1756
|
VEHICLES_MINIMAL: Final = (
|
|
1700
1757
|
"uuid,solicitation_identifier,is_synthetic_solicitation,program_acronym,"
|
|
1701
1758
|
"organization_id,organization,vehicle_type,description,"
|
|
1702
|
-
"idv_count,awardee_count,order_count,total_obligated,"
|
|
1759
|
+
"idv_count,holder_count,order_winner_count,awardee_count,order_count,total_obligated,"
|
|
1703
1760
|
"vehicle_obligations,vehicle_contracts_value,latest_award_date,"
|
|
1704
1761
|
"solicitation_title,solicitation_date"
|
|
1705
1762
|
)
|
|
@@ -1711,7 +1768,8 @@ class ShapeConfig:
|
|
|
1711
1768
|
"solicitation_title,solicitation_description,solicitation_date,opportunity_id,"
|
|
1712
1769
|
"naics_code,psc_code,set_aside,"
|
|
1713
1770
|
"fiscal_year,award_date,latest_award_date,last_date_to_order,"
|
|
1714
|
-
"description,idv_count,awardee_count,order_count,
|
|
1771
|
+
"description,idv_count,holder_count,order_winner_count,awardee_count,order_count,"
|
|
1772
|
+
"total_obligated,"
|
|
1715
1773
|
"vehicle_obligations,vehicle_contracts_value,"
|
|
1716
1774
|
"type_of_idc,contract_type,metrics(*)"
|
|
1717
1775
|
)
|
|
@@ -1727,13 +1785,14 @@ class ShapeConfig:
|
|
|
1727
1785
|
# Default for list_budget_accounts() / get_budget_account()
|
|
1728
1786
|
# Mirrors the API's BUDGET_ACCOUNT_DEFAULT_SHAPE.
|
|
1729
1787
|
BUDGET_ACCOUNTS_MINIMAL: Final = (
|
|
1730
|
-
"id,federal_account_symbol,fiscal_year,agency_code,agency_name,
|
|
1731
|
-
"
|
|
1788
|
+
"id,federal_account_symbol,fiscal_year,data_through_period,agency_code,agency_name,"
|
|
1789
|
+
"bureau_name,"
|
|
1790
|
+
"account_title,bea_category,on_off_budget,subfunction_code,account_category,"
|
|
1732
1791
|
"requested_ba,enacted_ba,apportioned,obligated_total,outlayed_total,"
|
|
1733
1792
|
"unobligated_balance,contract_obligated,contract_share_of_obligated_capped,"
|
|
1734
1793
|
"assistance_obligated,obligated_to_apportioned_pct_capped,"
|
|
1735
1794
|
"obligated_to_enacted_pct_capped,outlayed_to_obligated_pct_capped,"
|
|
1736
|
-
"ba_growth_next_year_pct"
|
|
1795
|
+
"ba_growth_next_year_pct,source_anomalies"
|
|
1737
1796
|
)
|
|
1738
1797
|
|
|
1739
1798
|
# Default for list_organizations()
|
|
@@ -1337,6 +1337,11 @@ VEHICLE_SCHEMA: dict[str, FieldSchema] = {
|
|
|
1337
1337
|
),
|
|
1338
1338
|
# Denormalized rollups
|
|
1339
1339
|
"idv_count": FieldSchema(name="idv_count", type=int, is_optional=True, is_list=False),
|
|
1340
|
+
"holder_count": FieldSchema(name="holder_count", type=int, is_optional=True, is_list=False),
|
|
1341
|
+
"order_winner_count": FieldSchema(
|
|
1342
|
+
name="order_winner_count", type=int, is_optional=True, is_list=False
|
|
1343
|
+
),
|
|
1344
|
+
# Deprecated: same value as `order_winner_count`; removed at the next major API version.
|
|
1340
1345
|
"awardee_count": FieldSchema(name="awardee_count", type=int, is_optional=True, is_list=False),
|
|
1341
1346
|
"order_count": FieldSchema(name="order_count", type=int, is_optional=True, is_list=False),
|
|
1342
1347
|
"total_obligated": FieldSchema(
|
|
@@ -1225,6 +1225,9 @@ GENERATED_OVERLAY: dict[str, dict[str, FieldSchema]] = {
|
|
|
1225
1225
|
),
|
|
1226
1226
|
},
|
|
1227
1227
|
"BudgetAccount": {
|
|
1228
|
+
"account_category": FieldSchema(
|
|
1229
|
+
name="account_category", type=str, is_optional=True, is_list=False
|
|
1230
|
+
),
|
|
1228
1231
|
"account_narrative_excerpt": FieldSchema(
|
|
1229
1232
|
name="account_narrative_excerpt", type=str, is_optional=True, is_list=False
|
|
1230
1233
|
),
|
|
@@ -1315,6 +1318,9 @@ GENERATED_OVERLAY: dict[str, dict[str, FieldSchema]] = {
|
|
|
1315
1318
|
name="contract_share_of_obligated_capped", type=str, is_optional=True, is_list=False
|
|
1316
1319
|
),
|
|
1317
1320
|
"created": FieldSchema(name="created", type=datetime, is_optional=True, is_list=False),
|
|
1321
|
+
"data_through_period": FieldSchema(
|
|
1322
|
+
name="data_through_period", type=int, is_optional=True, is_list=False
|
|
1323
|
+
),
|
|
1318
1324
|
"enacted_ba": FieldSchema(name="enacted_ba", type=str, is_optional=True, is_list=False),
|
|
1319
1325
|
"enacted_ba_5yr_cagr": FieldSchema(
|
|
1320
1326
|
name="enacted_ba_5yr_cagr", type=str, is_optional=True, is_list=False
|
|
@@ -1410,6 +1416,9 @@ GENERATED_OVERLAY: dict[str, dict[str, FieldSchema]] = {
|
|
|
1410
1416
|
"requested_personnel_share": FieldSchema(
|
|
1411
1417
|
name="requested_personnel_share", type=str, is_optional=True, is_list=False
|
|
1412
1418
|
),
|
|
1419
|
+
"source_anomalies": FieldSchema(
|
|
1420
|
+
name="source_anomalies", type=dict, is_optional=True, is_list=True
|
|
1421
|
+
),
|
|
1413
1422
|
"subfunction_code": FieldSchema(
|
|
1414
1423
|
name="subfunction_code", type=str, is_optional=True, is_list=False
|
|
1415
1424
|
),
|
|
@@ -2,40 +2,40 @@ interactions:
|
|
|
2
2
|
- request:
|
|
3
3
|
body: ''
|
|
4
4
|
headers:
|
|
5
|
-
|
|
5
|
+
Accept:
|
|
6
6
|
- '*/*'
|
|
7
|
-
|
|
7
|
+
Accept-Encoding:
|
|
8
8
|
- gzip, deflate
|
|
9
|
-
|
|
9
|
+
Connection:
|
|
10
10
|
- keep-alive
|
|
11
|
-
|
|
11
|
+
Host:
|
|
12
12
|
- tango.makegov.com
|
|
13
|
-
|
|
13
|
+
User-Agent:
|
|
14
14
|
- python-httpx/0.28.1
|
|
15
15
|
method: GET
|
|
16
|
-
uri: https://tango.makegov.com/api/vehicles/?page=1&limit=1&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date
|
|
16
|
+
uri: https://tango.makegov.com/api/vehicles/?page=1&limit=1&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date
|
|
17
17
|
response:
|
|
18
18
|
body:
|
|
19
|
-
string: '{"count":
|
|
19
|
+
string: '{"count":22055,"next":"https://tango.makegov.com/api/vehicles/?limit=1&page=2&shape=uuid%2Csolicitation_identifier%2Cis_synthetic_solicitation%2Cprogram_acronym%2Corganization_id%2Corganization%2Cvehicle_type%2Cdescription%2Cidv_count%2Cholder_count%2Corder_winner_count%2Cawardee_count%2Corder_count%2Ctotal_obligated%2Cvehicle_obligations%2Cvehicle_contracts_value%2Clatest_award_date%2Csolicitation_title%2Csolicitation_date","previous":null,"results":[{"awardee_count":2,"description":["CATTLE
|
|
20
20
|
AND SWINE BACKTAG CEMENT","CATTLE AND SWINE BACKTAG CEMENT TO BE DELIVERED
|
|
21
|
-
ON AN IDIQ BASIS TO KS, MO."],"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2006-06-01","order_count":25,"organization":{"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","office_code":"126395","office_name":"MRPBS
|
|
21
|
+
ON AN IDIQ BASIS TO KS, MO."],"holder_count":2,"idv_count":2,"is_synthetic_solicitation":false,"latest_award_date":"2006-06-01","order_count":25,"order_winner_count":2,"organization":{"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","office_code":"126395","office_name":"MRPBS
|
|
22
22
|
MINNEAPOLIS MN","agency_code":"12K3","agency_name":"ANIMAL AND PLANT HEALTH
|
|
23
23
|
INSPECTION SERVICE","department_code":"012","department_name":"AGRICULTURE,
|
|
24
24
|
DEPARTMENT OF"},"organization_id":"767bb2b0-239a-5bb4-8f3c-16d0a418fb71","program_acronym":"APHIS
|
|
25
|
-
VS","solicitation_date":null,"solicitation_identifier":"002-M-APHIS-06","solicitation_title":null,"total_obligated":5388564.69,"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","vehicle_contracts_value":
|
|
25
|
+
VS","solicitation_date":null,"solicitation_identifier":"002-M-APHIS-06","solicitation_title":null,"total_obligated":5388564.69,"uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e","vehicle_contracts_value":5388564.6899999995,"vehicle_obligations":5388564.6899999995,"vehicle_type":{"code":"B","description":"IDC"}}]}'
|
|
26
26
|
headers:
|
|
27
27
|
CF-RAY:
|
|
28
|
-
-
|
|
28
|
+
- a447660dcefcf84d-ORD
|
|
29
29
|
Connection:
|
|
30
30
|
- keep-alive
|
|
31
31
|
Content-Type:
|
|
32
32
|
- application/json
|
|
33
33
|
Date:
|
|
34
|
-
-
|
|
34
|
+
- Fri, 02 Oct 2026 23:13:37 GMT
|
|
35
35
|
Nel:
|
|
36
36
|
- '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}'
|
|
37
37
|
Report-To:
|
|
38
|
-
- '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=
|
|
38
|
+
- '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=AmrLIFxuKDudhcIWGN5N4ezSw2Qz5gPr%2F7KEKepEefWA2xsY7Y3QsVwCQ%2FU7BGTrlKIB8NXh3ZTJr7p9LaWJW1FnhLhUlearwN5jMAeEvUZORDa1NicaCMony9wC7CHNTeIaiBRKMRpOVf5dZ4VW"}]}'
|
|
39
39
|
Server:
|
|
40
40
|
- cloudflare
|
|
41
41
|
Transfer-Encoding:
|
|
@@ -45,7 +45,7 @@ interactions:
|
|
|
45
45
|
cf-cache-status:
|
|
46
46
|
- DYNAMIC
|
|
47
47
|
content-length:
|
|
48
|
-
- '
|
|
48
|
+
- '1417'
|
|
49
49
|
cross-origin-opener-policy:
|
|
50
50
|
- same-origin
|
|
51
51
|
referrer-policy:
|
|
@@ -55,44 +55,46 @@ interactions:
|
|
|
55
55
|
x-content-type-options:
|
|
56
56
|
- nosniff
|
|
57
57
|
x-execution-time:
|
|
58
|
-
- 0.
|
|
58
|
+
- 0.033s
|
|
59
59
|
x-frame-options:
|
|
60
60
|
- DENY
|
|
61
61
|
x-ratelimit-burst-limit:
|
|
62
62
|
- '1000'
|
|
63
63
|
x-ratelimit-burst-remaining:
|
|
64
|
-
- '
|
|
64
|
+
- '989'
|
|
65
65
|
x-ratelimit-burst-reset:
|
|
66
|
-
- '
|
|
66
|
+
- '37'
|
|
67
67
|
x-ratelimit-daily-limit:
|
|
68
68
|
- '2000000'
|
|
69
69
|
x-ratelimit-daily-remaining:
|
|
70
|
-
- '
|
|
70
|
+
- '1997193'
|
|
71
71
|
x-ratelimit-daily-reset:
|
|
72
|
-
- '
|
|
72
|
+
- '2782'
|
|
73
73
|
x-ratelimit-limit:
|
|
74
74
|
- '1000'
|
|
75
75
|
x-ratelimit-remaining:
|
|
76
|
-
- '
|
|
76
|
+
- '989'
|
|
77
77
|
x-ratelimit-reset:
|
|
78
|
-
- '
|
|
78
|
+
- '37'
|
|
79
79
|
x-results-counttype:
|
|
80
80
|
- exact
|
|
81
|
+
x-tango-api-version:
|
|
82
|
+
- 5.8.0
|
|
81
83
|
status:
|
|
82
84
|
code: 200
|
|
83
85
|
message: OK
|
|
84
86
|
- request:
|
|
85
87
|
body: ''
|
|
86
88
|
headers:
|
|
87
|
-
|
|
89
|
+
Accept:
|
|
88
90
|
- '*/*'
|
|
89
|
-
|
|
91
|
+
Accept-Encoding:
|
|
90
92
|
- gzip, deflate
|
|
91
|
-
|
|
93
|
+
Connection:
|
|
92
94
|
- keep-alive
|
|
93
|
-
|
|
95
|
+
Host:
|
|
94
96
|
- tango.makegov.com
|
|
95
|
-
|
|
97
|
+
User-Agent:
|
|
96
98
|
- python-httpx/0.28.1
|
|
97
99
|
method: GET
|
|
98
100
|
uri: https://tango.makegov.com/api/vehicles/8597845d-2a4c-5acd-99ff-1f5fe348501e/?shape=uuid%2Corganization&flat=true&joiner=__&flat_lists=true
|
|
@@ -104,17 +106,17 @@ interactions:
|
|
|
104
106
|
DEPARTMENT OF","uuid":"8597845d-2a4c-5acd-99ff-1f5fe348501e"}'
|
|
105
107
|
headers:
|
|
106
108
|
CF-RAY:
|
|
107
|
-
-
|
|
109
|
+
- a447660f989b1910-ORD
|
|
108
110
|
Connection:
|
|
109
111
|
- keep-alive
|
|
110
112
|
Content-Type:
|
|
111
113
|
- application/json
|
|
112
114
|
Date:
|
|
113
|
-
-
|
|
115
|
+
- Fri, 02 Oct 2026 23:13:37 GMT
|
|
114
116
|
Nel:
|
|
115
117
|
- '{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}'
|
|
116
118
|
Report-To:
|
|
117
|
-
- '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=
|
|
119
|
+
- '{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=Dh5eo3m5%2Bhp8A56KhBrB659PGcdvM13ZcVQnL4r4ppR5M%2BtlrC0iiCW%2BrCISCEKnnu6IXNYzUui2P5rexhv0ZofkM9shRcr2lLoxc5k8p8DTSeHf7xJL6W9RkwRasgfvH%2BinRMjlzsNyj80d2msP"}]}'
|
|
118
120
|
Server:
|
|
119
121
|
- cloudflare
|
|
120
122
|
Transfer-Encoding:
|
|
@@ -134,27 +136,29 @@ interactions:
|
|
|
134
136
|
x-content-type-options:
|
|
135
137
|
- nosniff
|
|
136
138
|
x-execution-time:
|
|
137
|
-
- 0.
|
|
139
|
+
- 0.021s
|
|
138
140
|
x-frame-options:
|
|
139
141
|
- DENY
|
|
140
142
|
x-ratelimit-burst-limit:
|
|
141
143
|
- '1000'
|
|
142
144
|
x-ratelimit-burst-remaining:
|
|
143
|
-
- '
|
|
145
|
+
- '988'
|
|
144
146
|
x-ratelimit-burst-reset:
|
|
145
|
-
- '
|
|
147
|
+
- '36'
|
|
146
148
|
x-ratelimit-daily-limit:
|
|
147
149
|
- '2000000'
|
|
148
150
|
x-ratelimit-daily-remaining:
|
|
149
|
-
- '
|
|
151
|
+
- '1997192'
|
|
150
152
|
x-ratelimit-daily-reset:
|
|
151
|
-
- '
|
|
153
|
+
- '2782'
|
|
152
154
|
x-ratelimit-limit:
|
|
153
155
|
- '1000'
|
|
154
156
|
x-ratelimit-remaining:
|
|
155
|
-
- '
|
|
157
|
+
- '988'
|
|
156
158
|
x-ratelimit-reset:
|
|
157
|
-
- '
|
|
159
|
+
- '36'
|
|
160
|
+
x-tango-api-version:
|
|
161
|
+
- 5.8.0
|
|
158
162
|
status:
|
|
159
163
|
code: 200
|
|
160
164
|
message: OK
|