tango-python 1.5.0__tar.gz → 1.5.1__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.5.0 → tango_python-1.5.1}/CHANGELOG.md +8 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/PKG-INFO +1 -1
- {tango_python-1.5.0 → tango_python-1.5.1}/docs/API_REFERENCE.md +1 -1
- {tango_python-1.5.0 → tango_python-1.5.1}/pyproject.toml +3 -2
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/__init__.py +1 -1
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/client.py +1 -1
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/test_client.py +16 -0
- tango_python-1.5.0/.github/workflows/docs-dispatch.yml +0 -58
- tango_python-1.5.0/.github/workflows/lint.yml +0 -110
- tango_python-1.5.0/.github/workflows/publish.yml +0 -29
- tango_python-1.5.0/.github/workflows/test.yml +0 -44
- {tango_python-1.5.0 → tango_python-1.5.1}/.gitignore +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/LICENSE +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/README.md +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/docs/CLIENT.md +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/docs/DYNAMIC_MODELS.md +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/docs/ERRORS.md +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/docs/PAGINATION.md +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/docs/SHAPES.md +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/docs/WEBHOOKS.md +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/README.md +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/check_filter_shape_conformance.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/check_shape_coverage.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/fetch_api_schema.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/generate_schemas_from_api.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/generate_shape_overlay.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/pr_review.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/probe_shape_types.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/refresh_contract.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/smoke_api_parity.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/scripts/test_production.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/exceptions.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/models.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/shapes/__init__.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/shapes/explicit_schemas.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/shapes/factory.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/shapes/generated_overlay.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/shapes/generator.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/shapes/models.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/shapes/parser.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/shapes/schema.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/shapes/types.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/webhooks/__init__.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/webhooks/cli.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/webhooks/receiver.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/webhooks/signing.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tango/webhooks/simulate.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/__init__.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestAgenciesIntegration.test_get_agency +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestAgenciesIntegration.test_list_agencies +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestBusinessTypesIntegration.test_business_type_field_type_validation +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestBusinessTypesIntegration.test_business_type_parsing_consistency +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestBusinessTypesIntegration.test_list_business_types +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_combined_filters_work_together +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_contract_cursor_pagination +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_contract_data_object_parsing +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_contract_field_types +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_filter_parameter_mappings[keyword-software] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_filter_parameter_mappings[psc_code-R425] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_awarding_agency_filter +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_date_range_filter +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_flat +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_naics_code_filter +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[custom-key,piid,recipient(display_name),total_contract_value,award_date] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_list_contracts_with_shapes[default-None] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_new_expiring_filters +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_new_fiscal_year_range_filters +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_new_identifier_filters +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_search_contracts_with_filters +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_search_filters_object_with_new_parameters +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_sort_and_order_mapped_to_ordering[asc-] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestContractsIntegration.test_sort_and_order_mapped_to_ordering[desc--] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_api_schema_stability_detection_contracts +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_api_schema_stability_detection_entities +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_date_field_parsing_edge_cases +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_decimal_field_parsing_edge_cases +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_empty_list_responses +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_entity_parsing_with_various_address_formats +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_flattened_responses_with_flat_lists +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_list_field_parsing_consistency +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_parsing_nested_objects_with_missing_data +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_parsing_null_missing_fields_in_contracts +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEdgeCasesIntegration.test_parsing_with_minimal_shape_sparse_data +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEntitiesIntegration.test_entity_field_types +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEntitiesIntegration.test_entity_location_parsing +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEntitiesIntegration.test_entity_parsing_with_business_types +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEntitiesIntegration.test_entity_with_various_identifiers +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEntitiesIntegration.test_get_entity_budget_flows +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEntitiesIntegration.test_get_entity_by_uei +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_flat +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_search +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[custom-uei,legal_business_name,cage_code] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestEntitiesIntegration.test_list_entities_with_shapes[minimal-uei,legal_business_name,cage_code,business_types] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestForecastsIntegration.test_forecast_field_types +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[custom-id,title,anticipated_award_date] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[default-None] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestForecastsIntegration.test_list_forecasts_with_shapes[minimal-id,title,anticipated_award_date,fiscal_year,naics_code,status] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestGrantsIntegration.test_grant_field_types +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestGrantsIntegration.test_grant_pagination +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[custom-grant_id,title,opportunity_number] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[default-None] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestGrantsIntegration.test_list_grants_with_shapes[minimal-grant_id,opportunity_number,title,status(-),agency_code] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestIDVsIntegration.test_get_idv_uses_default_shape +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestIDVsIntegration.test_list_idv_awards_uses_default_shape +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestIDVsIntegration.test_list_idv_child_idvs_uses_default_shape +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestIDVsIntegration.test_list_idv_transactions +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestIDVsIntegration.test_list_idvs_uses_default_shape_and_keyset_params +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_filter_by_agency_code +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_filter_by_agency_name_text +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_filter_by_cio_rating +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_filter_by_cio_rating_max +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_filter_by_performance_risk +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_filter_by_type_of_investment +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_filter_by_updated_time_range +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_funding_and_cio_evaluation_expansions +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_get_itdashboard_investment_by_uii +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_itdashboard_pagination +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_list_itdashboard_investments_with_search +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_list_itdashboard_investments_with_shapes[custom-uii,agency_name,investment_title,updated_time] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestITDashboardIntegration.test_list_itdashboard_investments_with_shapes[default-None] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestNaicsIntegration.test_list_naics +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[custom-notice_id,title,solicitation_number] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[default-None] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestNoticesIntegration.test_list_notices_with_shapes[minimal-notice_id,title,solicitation_number,posted_date] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestNoticesIntegration.test_notice_field_types +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestNoticesIntegration.test_notice_pagination +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestNoticesIntegration.test_notice_with_meta_fields +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOTAsIntegration.test_get_ota +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOTAsIntegration.test_list_otas +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOTIDVsIntegration.test_get_otidv +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOTIDVsIntegration.test_list_otidvs +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOfficesIntegration.test_get_office +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOfficesIntegration.test_list_offices +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[custom-opportunity_id,title,solicitation_number] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[default-None] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestOpportunitiesIntegration.test_list_opportunities_with_shapes[minimal-opportunity_id,title,solicitation_number,response_deadline,active] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOpportunitiesIntegration.test_opportunity_field_types +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOrganizationsIntegration.test_get_organization +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOrganizationsIntegration.test_list_organizations +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestProtestsIntegration.test_get_protest_by_case_id +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_filter +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_shapes[custom-case_id,title,source_system,outcome] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_shapes[default-None] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestProtestsIntegration.test_list_protests_with_shapes[minimal-case_id,case_number,title,source_system,outcome,filed_date] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestProtestsIntegration.test_protest_pagination +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestSubawardsIntegration.test_list_subawards +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[custom-key,piid,description] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[minimal-key,piid,award_date,recipient(display_name),description,total_contract_value] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestTypeHintsIntegration.test_contracts_dict_access[ultra_minimal-key,piid,recipient(display_name),total_contract_value] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestTypeHintsIntegration.test_entities_dict_access[minimal-uei,legal_business_name,cage_code,business_types] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestTypeHintsIntegration.test_entities_dict_access[with_address-uei,legal_business_name,cage_code,business_types,physical_address] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestTypeHintsIntegration.test_notices_dict_access[minimal-notice_id,title,solicitation_number,posted_date] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/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.5.0 → tango_python-1.5.1}/tests/cassettes/TestTypeHintsIntegration.test_opportunities_dict_access[minimal-opportunity_id,title,solicitation_number,response_deadline,active] +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_supports_joiner_and_flat_lists +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestVehiclesIntegration.test_get_vehicle_with_metrics_expansion +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_awardees_uses_default_shape +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestVehiclesIntegration.test_list_vehicle_orders_uses_default_shape +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_uses_default_shape_and_search +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestVehiclesIntegration.test_list_vehicles_with_ordering +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/conftest.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/README.md +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/__init__.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/conftest.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_agencies_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_contracts_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_edge_cases_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_entities_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_forecasts_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_grants_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_itdashboard_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_naics_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_notices_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_offices_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_opportunities_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_organizations_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_otas_otidvs_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_protests_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_reference_data_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_subawards_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_vehicles_idvs_integration.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/validation.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/production/__init__.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/production/conftest.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/production/test_production_smoke.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/test_api_parity.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/test_dibbs_exclusions_sbir.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/test_models.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/test_shape_coverage_gate.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/test_shapes.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/test_webhooks_cli.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/test_webhooks_receiver.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/test_webhooks_signing.py +0 -0
- {tango_python-1.5.0 → tango_python-1.5.1}/tests/test_webhooks_simulate.py +0 -0
|
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.5.1] - 2026-08-10
|
|
11
|
+
|
|
12
|
+
### Documentation
|
|
13
|
+
- Documented (and pinned with tests) the OR syntax `list_entities(socioeconomic=...)` has always supported: pipe-separated values match entities holding any of the listed designations, e.g. `socioeconomic="OY|A2"`; values are SAM business-type codes (e.g. `OY` Black American Owned, `A6` SBA-certified 8(a), `A2` Woman Owned), not set-aside codes.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- The sdist no longer packages `.github/workflows`, so CI-only commits stop changing the sdist hash. ([#58](https://github.com/makegov/tango-python/pull/58))
|
|
17
|
+
|
|
10
18
|
## [1.5.0] - 2026-08-04
|
|
11
19
|
|
|
12
20
|
### Added
|
|
@@ -713,7 +713,7 @@ entities = client.list_entities(
|
|
|
713
713
|
- `name` - Filter by entity name
|
|
714
714
|
- `psc` - Filter by PSC code
|
|
715
715
|
- `purpose_of_registration_code` - Filter by registration purpose
|
|
716
|
-
- `socioeconomic` - Filter by socioeconomic status
|
|
716
|
+
- `socioeconomic` - Filter by socioeconomic status; takes SAM business-type codes (e.g. `OY` Black American Owned, `A6` SBA-certified 8(a), `A2` Woman Owned — see `GET /api/business_types/`), not set-aside codes; accepts pipe-separated values for OR semantics, e.g. `socioeconomic="OY|A2"`
|
|
717
717
|
- `state` - Filter by state
|
|
718
718
|
- `total_awards_obligated_gte` / `total_awards_obligated_lte` - Obligation amount range
|
|
719
719
|
- `uei` - Filter by UEI
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tango-python"
|
|
7
|
-
version = "1.5.
|
|
7
|
+
version = "1.5.1"
|
|
8
8
|
description = "Python SDK for the Tango API"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -126,13 +126,14 @@ packages = ["tango"]
|
|
|
126
126
|
# diaries, scratch reports, etc.) when anyone runs `uv publish` locally.
|
|
127
127
|
# The explicit whitelist is belt-and-suspenders for that foot-gun: even
|
|
128
128
|
# from a developer laptop, only these paths can ever end up on PyPI.
|
|
129
|
+
#
|
|
130
|
+
# `.github/workflows` is excluded on purpose: shipping it moves the sdist hash on every CI-only commit, which breaks `--check-url`.
|
|
129
131
|
[tool.hatch.build.targets.sdist]
|
|
130
132
|
include = [
|
|
131
133
|
"/tango",
|
|
132
134
|
"/tests",
|
|
133
135
|
"/docs",
|
|
134
136
|
"/scripts",
|
|
135
|
-
"/.github/workflows",
|
|
136
137
|
"/README.md",
|
|
137
138
|
"/LICENSE",
|
|
138
139
|
"/CHANGELOG.md",
|
|
@@ -2081,7 +2081,7 @@ class TangoClient:
|
|
|
2081
2081
|
name: Entity name filter
|
|
2082
2082
|
psc: PSC code filter
|
|
2083
2083
|
purpose_of_registration_code: Purpose of registration code
|
|
2084
|
-
socioeconomic: Socioeconomic status filter
|
|
2084
|
+
socioeconomic: Socioeconomic status filter; takes SAM business-type codes (e.g. "OY" Black American Owned, "A6" SBA-certified 8(a), "A2" Woman Owned — see `GET /api/business_types/`), not set-aside codes, and accepts pipe-separated values for OR semantics, e.g. ``socioeconomic="OY|A2"``
|
|
2085
2085
|
state: State filter
|
|
2086
2086
|
total_awards_obligated_gte: Total awards obligated >=
|
|
2087
2087
|
total_awards_obligated_lte: Total awards obligated <=
|
|
@@ -1992,6 +1992,22 @@ class TestPscFilters:
|
|
|
1992
1992
|
assert "has_awards" not in mock_request.call_args[1]["params"]
|
|
1993
1993
|
|
|
1994
1994
|
|
|
1995
|
+
class TestEntityFilters:
|
|
1996
|
+
"""The server ORs pipe-separated `socioeconomic` values; the SDK's job is to forward the string verbatim."""
|
|
1997
|
+
|
|
1998
|
+
@patch("tango.client.httpx.Client.request")
|
|
1999
|
+
def test_list_entities_forwards_pipe_separated_socioeconomic(self, mock_request):
|
|
2000
|
+
_stub_empty_page(mock_request)
|
|
2001
|
+
TangoClient(api_key="test-key").list_entities(socioeconomic="OY|A2")
|
|
2002
|
+
assert mock_request.call_args[1]["params"]["socioeconomic"] == "OY|A2"
|
|
2003
|
+
|
|
2004
|
+
@patch("tango.client.httpx.Client.request")
|
|
2005
|
+
def test_list_entities_omits_unset_socioeconomic(self, mock_request):
|
|
2006
|
+
_stub_empty_page(mock_request)
|
|
2007
|
+
TangoClient(api_key="test-key").list_entities()
|
|
2008
|
+
assert "socioeconomic" not in mock_request.call_args[1]["params"]
|
|
2009
|
+
|
|
2010
|
+
|
|
1995
2011
|
class TestAgencyFilterDiagnostics:
|
|
1996
2012
|
"""`meta` from the API's agency-filter diagnostics.
|
|
1997
2013
|
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
name: Docs dispatch
|
|
2
|
-
|
|
3
|
-
# Fires on push to main when content that affects the published docs site
|
|
4
|
-
# changes (docs/, README, or CHANGELOG). Notifies makegov/docs via
|
|
5
|
-
# repository_dispatch so the docs site rebuilds without waiting for someone
|
|
6
|
-
# to push to the composer.
|
|
7
|
-
#
|
|
8
|
-
# tango-python is a `coloc-source` repo: its docs/ folder is the authoritative
|
|
9
|
-
# source for the Python SDK pages on docs.makegov.com (see makegov/docs#15).
|
|
10
|
-
#
|
|
11
|
-
# Required secrets:
|
|
12
|
-
# DOCS_DISPATCH_TOKEN — GitHub token with contents:write on makegov/docs.
|
|
13
|
-
#
|
|
14
|
-
# Required variables (optional):
|
|
15
|
-
# DOCS_TARGET_REPO — override the dispatch target (default: makegov/docs).
|
|
16
|
-
|
|
17
|
-
on:
|
|
18
|
-
push:
|
|
19
|
-
branches:
|
|
20
|
-
- main
|
|
21
|
-
paths:
|
|
22
|
-
- "docs/**"
|
|
23
|
-
- "README.md"
|
|
24
|
-
- "CHANGELOG.md"
|
|
25
|
-
workflow_dispatch:
|
|
26
|
-
|
|
27
|
-
jobs:
|
|
28
|
-
dispatch:
|
|
29
|
-
runs-on: ubuntu-latest
|
|
30
|
-
permissions:
|
|
31
|
-
contents: read
|
|
32
|
-
steps:
|
|
33
|
-
- uses: actions/checkout@v6
|
|
34
|
-
with:
|
|
35
|
-
fetch-depth: 2
|
|
36
|
-
|
|
37
|
-
- name: Detect changed paths
|
|
38
|
-
id: changes
|
|
39
|
-
run: |
|
|
40
|
-
set -euo pipefail
|
|
41
|
-
base=$(git rev-parse HEAD~1 2>/dev/null || git rev-parse HEAD)
|
|
42
|
-
external=$(git diff --name-only "$base" HEAD -- 'docs' 'README.md' 'CHANGELOG.md' | paste -sd, -)
|
|
43
|
-
{
|
|
44
|
-
echo "external=$external"
|
|
45
|
-
echo "has_external=$([ -n "$external" ] && echo true || echo false)"
|
|
46
|
-
} >> "$GITHUB_OUTPUT"
|
|
47
|
-
|
|
48
|
-
- name: Dispatch to docs composer (makegov/docs)
|
|
49
|
-
if: steps.changes.outputs.has_external == 'true'
|
|
50
|
-
env:
|
|
51
|
-
GH_TOKEN: ${{ secrets.DOCS_DISPATCH_TOKEN }}
|
|
52
|
-
TARGET: ${{ vars.DOCS_TARGET_REPO || 'makegov/docs' }}
|
|
53
|
-
run: |
|
|
54
|
-
gh api "repos/$TARGET/dispatches" \
|
|
55
|
-
-f event_type=external_updated \
|
|
56
|
-
-f "client_payload[source_repo]=${{ github.repository }}" \
|
|
57
|
-
-f "client_payload[source_ref]=${{ github.sha }}" \
|
|
58
|
-
-f "client_payload[changed_paths]=${{ steps.changes.outputs.external }}"
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
name: Linting
|
|
2
|
-
|
|
3
|
-
# Lint gate runs on every PR and push to main.
|
|
4
|
-
#
|
|
5
|
-
# - ruff format + ruff check are HARD gates (block the PR).
|
|
6
|
-
# - mypy is a HARD gate: the package type-checks cleanly under strict mypy.
|
|
7
|
-
# (The earlier ~28-error burn-down is complete.)
|
|
8
|
-
# - The SDK filter/shape conformance check is a HARD gate: it runs against the
|
|
9
|
-
# vendored contract at contracts/filter_shape_contract.json on every run (no
|
|
10
|
-
# secrets needed, works on forks). A second, token-gated step compares the
|
|
11
|
-
# vendored contract against the tango repo's HEAD and emits a staleness
|
|
12
|
-
# notice (never a failure — tango HEAD may carry unreleased changes).
|
|
13
|
-
# Refresh the vendored contract with scripts/refresh_contract.py.
|
|
14
|
-
# - Reverse shape-coverage is a HARD gate: check_shape_coverage.py fails when
|
|
15
|
-
# Tango's shape trees expose a field/expand the SDK schema doesn't capture and
|
|
16
|
-
# it isn't in contracts/shape_coverage_baseline.json. Also offline (vendored
|
|
17
|
-
# contract), so it runs on forks. Burn the baseline down with the generator.
|
|
18
|
-
on:
|
|
19
|
-
workflow_dispatch:
|
|
20
|
-
push:
|
|
21
|
-
branches: [ main ]
|
|
22
|
-
pull_request:
|
|
23
|
-
branches: [ main ]
|
|
24
|
-
|
|
25
|
-
jobs:
|
|
26
|
-
lint:
|
|
27
|
-
runs-on: ubuntu-latest
|
|
28
|
-
|
|
29
|
-
steps:
|
|
30
|
-
- uses: actions/checkout@v6
|
|
31
|
-
|
|
32
|
-
- name: Install uv
|
|
33
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
34
|
-
with:
|
|
35
|
-
version: "latest"
|
|
36
|
-
|
|
37
|
-
- name: Set up Python
|
|
38
|
-
run: uv python install 3.12
|
|
39
|
-
|
|
40
|
-
- name: Install dependencies
|
|
41
|
-
run: uv sync --all-extras
|
|
42
|
-
|
|
43
|
-
- name: Check formatting with ruff
|
|
44
|
-
run: uv run ruff format --check tango/
|
|
45
|
-
|
|
46
|
-
- name: Lint with ruff
|
|
47
|
-
run: uv run ruff check tango/
|
|
48
|
-
|
|
49
|
-
- name: Type check with mypy
|
|
50
|
-
run: uv run mypy tango/
|
|
51
|
-
|
|
52
|
-
conformance:
|
|
53
|
-
# Hard gate against the vendored contract (contracts/filter_shape_contract.json).
|
|
54
|
-
# Runs unconditionally — no secrets required, so forks and tokenless runs
|
|
55
|
-
# get the full check instead of a silent skip.
|
|
56
|
-
runs-on: ubuntu-latest
|
|
57
|
-
|
|
58
|
-
steps:
|
|
59
|
-
- uses: actions/checkout@v6
|
|
60
|
-
|
|
61
|
-
- name: Install uv
|
|
62
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
63
|
-
with:
|
|
64
|
-
version: "latest"
|
|
65
|
-
|
|
66
|
-
- name: Set up Python
|
|
67
|
-
run: uv python install 3.12
|
|
68
|
-
|
|
69
|
-
- name: Install dependencies
|
|
70
|
-
run: uv sync --all-extras
|
|
71
|
-
|
|
72
|
-
- name: Check SDK filter/shape conformance (vendored contract)
|
|
73
|
-
run: uv run python scripts/check_filter_shape_conformance.py
|
|
74
|
-
|
|
75
|
-
- name: Check reverse shape coverage (Tango exposes -> SDK captures)
|
|
76
|
-
# Complements the conformance check with the OTHER direction: fails when
|
|
77
|
-
# Tango's shape trees expose a field/expand the SDK schema doesn't capture
|
|
78
|
-
# and it isn't in contracts/shape_coverage_baseline.json. Also offline
|
|
79
|
-
# against the vendored contract — no secrets, works on forks.
|
|
80
|
-
run: uv run python scripts/check_shape_coverage.py
|
|
81
|
-
|
|
82
|
-
# --- Staleness notice (best-effort, never fails the job) ---------------
|
|
83
|
-
- name: Determine token availability
|
|
84
|
-
id: gate
|
|
85
|
-
env:
|
|
86
|
-
TANGO_API_REPO_ACCESS_TOKEN: ${{ secrets.TANGO_API_REPO_ACCESS_TOKEN }}
|
|
87
|
-
run: |
|
|
88
|
-
if [ -n "$TANGO_API_REPO_ACCESS_TOKEN" ]; then
|
|
89
|
-
echo "ready=true" >> "$GITHUB_OUTPUT"
|
|
90
|
-
else
|
|
91
|
-
echo "ready=false" >> "$GITHUB_OUTPUT"
|
|
92
|
-
echo "::notice::Contract staleness check skipped — TANGO_API_REPO_ACCESS_TOKEN not configured."
|
|
93
|
-
fi
|
|
94
|
-
|
|
95
|
-
- name: Checkout tango API repo (contract source)
|
|
96
|
-
if: steps.gate.outputs.ready == 'true'
|
|
97
|
-
uses: actions/checkout@v6
|
|
98
|
-
with:
|
|
99
|
-
repository: makegov/tango
|
|
100
|
-
path: tango-api
|
|
101
|
-
token: ${{ secrets.TANGO_API_REPO_ACCESS_TOKEN }}
|
|
102
|
-
|
|
103
|
-
- name: Compare vendored contract against tango HEAD
|
|
104
|
-
if: steps.gate.outputs.ready == 'true'
|
|
105
|
-
run: |
|
|
106
|
-
if ! diff -q contracts/filter_shape_contract.json tango-api/contracts/filter_shape_contract.json >/dev/null; then
|
|
107
|
-
echo "::warning::Vendored contract differs from makegov/tango HEAD. Refresh with: uv run python scripts/refresh_contract.py"
|
|
108
|
-
else
|
|
109
|
-
echo "Vendored contract matches makegov/tango HEAD."
|
|
110
|
-
fi
|
|
@@ -1,29 +0,0 @@
|
|
|
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@v6
|
|
14
|
-
|
|
15
|
-
- name: Install uv
|
|
16
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
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
|
|
@@ -1,44 +0,0 @@
|
|
|
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@v6
|
|
24
|
-
|
|
25
|
-
- name: Install uv
|
|
26
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
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@v5
|
|
41
|
-
with:
|
|
42
|
-
files: ./coverage.xml
|
|
43
|
-
flags: unittests
|
|
44
|
-
name: codecov-${{ matrix.os }}-py${{ matrix.python-version }}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestAgenciesIntegration.test_get_agency
RENAMED
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestAgenciesIntegration.test_list_agencies
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestNaicsIntegration.test_list_naics
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOTAsIntegration.test_list_otas
RENAMED
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOTIDVsIntegration.test_get_otidv
RENAMED
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOTIDVsIntegration.test_list_otidvs
RENAMED
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOfficesIntegration.test_get_office
RENAMED
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/cassettes/TestOfficesIntegration.test_list_offices
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_opportunities_integration.py
RENAMED
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_organizations_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_reference_data_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
{tango_python-1.5.0 → tango_python-1.5.1}/tests/integration/test_vehicles_idvs_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|