direct-cli 0.5.2__tar.gz → 0.5.4__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.
- {direct_cli-0.5.2 → direct_cli-0.5.4}/.github/workflows/quality.yml +3 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/AGENTS.md +21 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/CHANGELOG.md +781 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/PKG-INFO +236 -40
- {direct_cli-0.5.2 → direct_cli-0.5.4}/README.md +233 -38
- {direct_cli-0.5.2 → direct_cli-0.5.4}/README_ru.md +84 -38
- direct_cli-0.5.4/direct_cli/_auth_hints.py +21 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/tapi_yandex_direct/tapi_yandex_direct.py +10 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/tapi_yandex_direct/tapi_yandex_direct.pyi +6 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/api.py +72 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/auth.py +125 -25
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/browser/__init__.py +4 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/browser/_chrome_crypto.py +62 -5
- direct_cli-0.5.4/direct_cli/browser/ad_elements.py +376 -0
- direct_cli-0.5.4/direct_cli/browser/auth.py +114 -0
- direct_cli-0.5.4/direct_cli/browser/change_history.py +360 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/browser/diagnostics.py +63 -86
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/browser/masters.py +2418 -411
- direct_cli-0.5.4/direct_cli/browser/session.py +1205 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/browser/store.py +16 -4
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/cli.py +112 -19
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_lifecycle.py +1 -1
- direct_cli-0.5.4/direct_cli/commands/ad_elements.py +69 -0
- direct_cli-0.5.4/direct_cli/commands/auth.py +1400 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/balance.py +3 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/bidmodifiers.py +35 -4
- direct_cli-0.5.4/direct_cli/commands/browser_session.py +48 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/clients.py +20 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/dictionaries.py +57 -3
- direct_cli-0.5.4/direct_cli/commands/history.py +153 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/masters.py +1404 -392
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/reports.py +38 -7
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/sitelinks.py +1 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/strategies.py +3 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/v4events.py +2 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/v4finance.py +5 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/v4wordstat.py +2 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/i18n.py +28 -2
- direct_cli-0.5.4/direct_cli/optional_output.py +107 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/output.py +82 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/smoke_matrix.py +31 -2
- direct_cli-0.5.4/direct_cli/translations/auth.json +98 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/bidmodifiers.json +3 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/clients.json +2 -1
- direct_cli-0.5.4/direct_cli/translations/dictionaries.json +14 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/reports.json +4 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/v4/parse.py +5 -4
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/wsdl_coverage.py +13 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli.egg-info/PKG-INFO +236 -40
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli.egg-info/SOURCES.txt +18 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli.egg-info/requires.txt +2 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/pyproject.toml +33 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/audit_wire_shape.py +1 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/build_api_coverage_checklist.py +3 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/build_api_coverage_report.py +14 -12
- direct_cli-0.5.4/scripts/recon_812_video_upload.py +382 -0
- direct_cli-0.5.4/scripts/recon_871_bidmodifiers_enum.py +118 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/sandbox_write_audit.py +2 -3
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/test_dangerous_commands.sh +3 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/test_safe_commands.sh +4 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/setup.cfg +1 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/WSDL_OPTIONAL_FIELD_AUDIT.md +2 -1
- direct_cli-0.5.4/tests/_cli_tree.py +19 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/api_coverage_payloads.py +6 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/conftest.py +47 -3
- direct_cli-0.5.4/tests/fixtures/ad_elements_payloads.json +1254 -0
- direct_cli-0.5.4/tests/fixtures/user_action_log.json +85 -0
- direct_cli-0.5.4/tests/test_ad_elements.py +326 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_adgroups_build_adgroup_object.py +54 -54
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_adgroups_build_adgroup_update_object.py +14 -14
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_ads_build_ad_object.py +46 -42
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_ads_build_ad_update_object.py +24 -20
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_api_coverage.py +66 -7
- direct_cli-0.5.4/tests/test_api_retry.py +189 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_audit_wire_shape.py +1 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_auth_bw.py +5 -3
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_auth_oauth.py +36 -29
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_auth_op.py +5 -3
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_balance.py +2 -1
- direct_cli-0.5.4/tests/test_change_history.py +653 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_chrome_crypto.py +60 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_cli.py +75 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_comprehensive.py +51 -0
- direct_cli-0.5.4/tests/test_credential_provenance.py +394 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_bids.py +64 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_clients.py +14 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_common.py +73 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_i18n.py +18 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_integration_write.py +2 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_low_coverage_payloads.py +57 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_masters.py +20953 -15574
- direct_cli-0.5.4/tests/test_optional_output.py +191 -0
- direct_cli-0.5.4/tests/test_playwright_session.py +771 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_reports_parsing.py +3 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_smoke_matrix.py +3 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_transport_contract.py +6 -2
- direct_cli-0.5.4/tests/test_unified_auth.py +763 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4_contracts.py +6 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4_output_options.py +1 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4account.py +3 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4adimage.py +2 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4events.py +2 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4finance_money.py +2 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4finance_read.py +2 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4forecast.py +2 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4goals.py +2 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4keywords.py +2 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4tags.py +2 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4wordstat.py +2 -1
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v5_live_write.py +7 -10
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_vendor_imports.py +2 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_wsdl_parity_gate.py +14 -2
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/adimages.xml +4 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/campaigns.xml +6 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/imports/generalclients.xsd +2 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/strategies.xml +14 -0
- direct_cli-0.5.2/direct_cli/browser/session.py +0 -709
- direct_cli-0.5.2/direct_cli/commands/auth.py +0 -567
- direct_cli-0.5.2/direct_cli/commands/browser_session.py +0 -175
- direct_cli-0.5.2/direct_cli/translations/auth.json +0 -25
- direct_cli-0.5.2/direct_cli/translations/dictionaries.json +0 -10
- direct_cli-0.5.2/tests/test_playwright_session.py +0 -306
- {direct_cli-0.5.2 → direct_cli-0.5.4}/.env.example +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/.github/copilot-instructions.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/.github/workflows/api-coverage.yml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/.github/workflows/claude.yml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/.gitignore +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/.mcp.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/CLAUDE.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/MANIFEST.in +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/__init__.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_autotargeting.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_bidding_strategy.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_captcha.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_deprecated.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_flag_validation.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_smoke_probes.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/__init__.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/tapi_yandex_direct/__init__.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/tapi_yandex_direct/endpoints.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/tapi_yandex_direct/exceptions.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/tapi_yandex_direct/resource_mapping.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/tapi_yandex_direct/v4/__init__.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/tapi_yandex_direct/v4/adapter.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/tapi_yandex_direct/v4/adapter.pyi +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/_vendor/tapi_yandex_direct/v4/resource_mapping.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/browser/_clock.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/__init__.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_batch.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_campaigns_base.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_campaigns_cpm_banner.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_campaigns_dynamic.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_campaigns_mobile_app.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_campaigns_smart.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_campaigns_text.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_campaigns_unified.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_execute.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_get.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/_set_bids.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/adextensions.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/adgroups.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/adimages.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/ads/__init__.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/ads/_cli.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/ads/base.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/ads/batch.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/ads/builder.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/ads/mobile_app.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/ads/objects.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/ads/responsive.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/ads/shopping.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/ads/text.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/advideos.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/agencyclients.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/audiencetargets.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/bids.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/businesses.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/campaigns.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/changes.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/creatives.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/dynamicads.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/dynamicfeedadtargets.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/feeds.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/keywordbids.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/keywords.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/keywordsresearch.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/leads.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/negativekeywordsharedsets.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/retargeting.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/smartadtargets.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/trackingparams.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/turbopages.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/v4account.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/v4adimage.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/v4forecast.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/v4goals.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/v4keywords.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/v4shells.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/v4tags.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/commands/vcards.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/reports_coverage.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/tracking_params.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/adextensions.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/adgroups.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/adimages.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/ads.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/advideos.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/agencyclients.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/audiencetargets.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/balance.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/bids.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/businesses.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/campaigns.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/changes.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/common.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/creatives.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/dynamicads.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/dynamicfeedadtargets.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/feeds.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/keywordbids.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/keywords.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/keywordsresearch.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/leads.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/negativekeywordsharedsets.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/retargeting.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/sitelinks.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/smartadtargets.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/strategies.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/turbopages.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/v4account.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/v4adimage.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/v4events.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/v4finance.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/v4forecast.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/v4goals.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/v4keywords.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/v4shells.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/v4tags.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/v4wordstat.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/translations/vcards.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/utils.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/v4/__init__.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/v4/emit.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/v4/money.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli/v4_contracts.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli.egg-info/dependency_links.txt +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli.egg-info/entry_points.txt +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/direct_cli.egg-info/top_level.txt +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/docs/audits/API_COVERAGE.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/docs/audits/PROJECT_WIRE_SHAPE_AUDIT_2026-05-30.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/docs/audits/WIRE_SHAPE_TRIAGE_2026-05-30.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/docs/audits/issue-198-mutating-wsdl-audit.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/docs/audits/wire_shape.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/docs/superpowers/plans/2026-04-12-issue-32-completion.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/docs/superpowers/specs/2026-04-23-vendor-tapi-yandex-direct-design.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/anonymize_cassettes.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/build_wsdl_optional_field_audit.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/check_all_docs_urls.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/check_reports_drift.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/check_wsdl_drift.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/measure_criteria_limits.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/patch_vendor_imports.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/preflight_check.sh +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/probe_drift_urls.sh +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/recon_761_utm_split.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/recon_774_audit_saved_utm.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/recon_774_utm_reorder.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/refresh_reports_cache.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/refresh_wsdl_cache.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/release_pypi.sh +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/sandbox_write_live.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/test_sandbox_write.sh +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/scripts/update_vendor.sh +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/setup.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/API_COVERAGE.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/API_ISSUE_AUDIT.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/MANUAL_COVERAGE.md +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/__init__.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/_orphan_store.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteAdExtensions.test_add_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteAdGroups.test_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteAdImages.test_add_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteAds.test_add_text_ad_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteAudienceTargets.test_add_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteBidModifiersAdd.test_add_delete_mobile.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteBidModifiersSet.test_set_without_id_is_rejected.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteBids.test_set_bid.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteBidsRead.test_bids_get.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteBidsRead.test_bids_set_auto.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteCampaignDraftLifecycle.test_draft_create_get_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteCampaigns.test_campaign_lifecycle.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteDynamicAds.test_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteFeeds.test_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteKeywordBids.test_set_keyword_bid.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteKeywords.test_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteNegativeKeywordSharedSets.test_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteRetargeting.test_add_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteRetargetingUpdate.test_retargeting_update.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteSitelinks.test_add_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteSmartAdTargets.test_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteStrategies.test_strategies_lifecycle.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_integration_write/TestWriteVCards.test_add_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_balance_get_no_shared_account.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[adextensions_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[adgroups_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[adimages_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[ads_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[advideos_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[audiencetargets_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[bidmodifiers_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[bids_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[businesses_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[campaigns_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[changes_check].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[changes_check_campaigns].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[changes_check_dictionaries].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[clients_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[creatives_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[dictionaries_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[dynamicads_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[dynamicfeedadtargets_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[feeds_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[keywordbids_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[keywords_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[keywordsresearch_deduplicate].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[keywordsresearch_has_search_volume].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[leads_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[negativekeywordsharedsets_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[reports_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[retargeting_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[sitelinks_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[smartadtargets_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[strategies_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[turbopages_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[v4adimage_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[v4events_get_events_log].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[v4finance_get_clients_units].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[v4forecast_list].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[v4goals_get_stat_goals].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[v4tags_get_campaigns].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[v4wordstat_list_reports].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_read_command[vcards_get].yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_v4account_get_accounts_no_shared_account.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_v4finance_check_payment_unknown_transaction.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_v4forecast_get_unknown_forecast.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_v4goals_get_retargeting_goals_server_error.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_v4tags_get_banners_server_error.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_read_cassettes/test_v4wordstat_get_report_unknown_report.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_adgroups_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_adimages_add_get_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_ads_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_ads_suspend_resume_archive_unarchive.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_advideos_add_get.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_audiencetargets_add_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_audiencetargets_suspend_resume.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_bids_set.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_campaign_create_get_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_creatives_chain_advideo_to_creative.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_dynamicads_add_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_dynamicads_suspend_resume.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_feeds_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_keywordbids_set.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_keywords_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_keywords_suspend_resume.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_retargeting_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_sitelinks_add_get_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_smartadtargets_add_update_delete.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_smartadtargets_suspend_resume.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/cassettes/test_v5_live_write/test_v5_live_draft_strategies_add_update_archive_unarchive.yaml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/fixtures/masters_grid_campaigns.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/fixtures/masters_wizard_create.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/fixtures/masters_wizard_draft_overview.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/fixtures/masters_wizard_edit_moderation.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/fixtures/masters_wizard_edit_name.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/fixtures/masters_wizard_edit_stage_a.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/fixtures/masters_wizard_edit_stage_b.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/fixtures/masters_wizard_edit_stage_d.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/fixtures/masters_wizard_overview.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/fixtures/test-video.mp4 +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/reports_cache/raw/fields-list.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/reports_cache/raw/headers.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/reports_cache/raw/period.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/reports_cache/raw/spec.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/reports_cache/raw/type.html +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/reports_cache/spec.json +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_auth_write_json.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_autotargeting.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_bidding_strategy_constants.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_cassette_integrity.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_changes.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_check_all_docs_urls.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_cli_contract.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_adgroups.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_ads.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_campaigns.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_extensions.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_keywords.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_shared.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_strategies.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_strategy_smart.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_strategy_text.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_strategy_unified.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_dry_run_targets.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_env_loading.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_field_names_option.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_flag_validation.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_handle_api_errors.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_integration.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_read_cassettes.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_reference_output.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_reports_drift.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_sandbox_write_audit.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_unknown_option_hints.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4_exit_codes.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4_foundation.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4_live_contracts.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4_runtime_shape.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4_safety.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/test_v4meta.py +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/adextensions.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/adgroups.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/ads.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/advideos.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/agencyclients.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/audiencetargets.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/bidmodifiers.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/bids.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/businesses.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/changes.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/clients.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/creatives.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/dictionaries.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/dynamicfeedadtargets.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/dynamictextadtargets.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/feeds.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/imports/adextensiontypes.xsd +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/imports/general.xsd +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/keywordbids.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/keywords.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/keywordsresearch.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/leads.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/negativekeywordsharedsets.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/retargetinglists.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/sitelinks.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/smartadtargets.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/turbopages.xml +0 -0
- {direct_cli-0.5.2 → direct_cli-0.5.4}/tests/wsdl_cache/vcards.xml +0 -0
|
@@ -38,6 +38,9 @@ jobs:
|
|
|
38
38
|
- name: Type check
|
|
39
39
|
run: mypy .
|
|
40
40
|
|
|
41
|
+
- name: Pyright
|
|
42
|
+
run: pyright
|
|
43
|
+
|
|
41
44
|
- name: Run offline tests
|
|
42
45
|
# Offline default comes from pyproject addopts (skips the live-network
|
|
43
46
|
# markers). integration_write stays in — it replays VCR cassettes offline.
|
|
@@ -35,13 +35,33 @@ Naming rules:
|
|
|
35
35
|
|
|
36
36
|
### Input Rules
|
|
37
37
|
|
|
38
|
-
-
|
|
38
|
+
- In default headless mode, all user-facing input must be passed only through typed CLI flags.
|
|
39
|
+
- Authentication input prompts require explicit `direct auth login --interactive`.
|
|
39
40
|
- `--json` is not part of the public CLI contract.
|
|
40
41
|
- User-facing parameters must not be passed through `--json`.
|
|
41
42
|
- The CLI must not accept `SelectionCriteria`, nested payloads, update payloads, bidding rules, or any other user-facing command input through `--json`.
|
|
42
43
|
- Typed flags and JSON blobs must not be mixed as part of one public command contract.
|
|
43
44
|
- If the API requires a complex object, the CLI must expose explicit flags or subcommands instead of forwarding raw JSON.
|
|
44
45
|
|
|
46
|
+
### Authorization Execution Mode
|
|
47
|
+
|
|
48
|
+
- Authorization is headless and non-interactive by default, including when stdin and stdout are terminals. TTY detection must never enable login dialogs or browser UI by itself.
|
|
49
|
+
- `direct auth login` defaults to the headless API flow: print the authorization URL and accept the completion code later through typed flags or explicit stdin input.
|
|
50
|
+
- Login menus and OAuth code prompts require `direct auth login --interactive`.
|
|
51
|
+
- Manual browser login requires explicit `--interactive` or `--headful`. `--allow-no-tty` only overrides the terminal check; it does not authorize browser UI by itself.
|
|
52
|
+
- Chrome import is headless by default. Failed headless verification must not retry in a visible browser automatically.
|
|
53
|
+
- Missing or expired credentials in ordinary commands produce an actionable error, never an implicit login.
|
|
54
|
+
- Saving credentials into an existing profile requires explicit `--force`; the headless completion and token import refuse to overwrite otherwise.
|
|
55
|
+
|
|
56
|
+
### Data Safety — No Silent Overwrites
|
|
57
|
+
|
|
58
|
+
- Stored user data (auth profiles, credentials, folder bindings, browser sessions) is never replaced silently.
|
|
59
|
+
- A write is either the command's declared purpose (the command then reports what was replaced) or requires an explicit confirmation flag (`--force`). Ordinary commands never write stored user data as a side effect.
|
|
60
|
+
- Overwriting an existing auth profile requires explicit `--force` on the CLI layer and `overwrite=True` on the helper layer; the refusal names the current owner's login.
|
|
61
|
+
- Replacing an existing `YANDEX_DIRECT_TOKEN` in the folder `.env` prints a warning naming the previous owner.
|
|
62
|
+
- New write paths for stored user data must go through the guarded helpers (`save_oauth_profile`, `save_env_credentials`); bypassing the guard is a contract violation.
|
|
63
|
+
- Production API mutations are always explicit commands, classified SAFE / WRITE_SANDBOX / DANGEROUS in `direct_cli/smoke_matrix.py`.
|
|
64
|
+
|
|
45
65
|
### Command Formatting Rules
|
|
46
66
|
|
|
47
67
|
- Every canonical CLI command must be written strictly on a single line.
|