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