growsurf-python 1.16.0__tar.gz → 1.18.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.
- growsurf_python-1.18.0/.release-please-manifest.json +3 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/CHANGELOG.md +31 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/PKG-INFO +1 -1
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/api.md +19 -14
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/pyproject.toml +1 -1
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/requirements-dev.lock +1 -1
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_client.py +1 -38
- growsurf_python-1.18.0/src/growsurf/_exceptions.py +199 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_version.py +1 -1
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/__init__.py +0 -14
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/__init__.py +14 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/campaign.py +73 -25
- growsurf_python-1.18.0/src/growsurf/resources/campaign/custom_domain.py +450 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/design.py +12 -6
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/emails.py +4 -4
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/installation.py +4 -4
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/options.py +10 -10
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/participant.py +52 -32
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/rewards.py +76 -16
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/webhooks.py +40 -8
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/team.py +34 -2
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/__init__.py +0 -2
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/__init__.py +8 -0
- growsurf_python-1.18.0/src/growsurf/types/campaign/campaign_custom_domain.py +49 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_design.py +16 -12
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_options.py +1 -1
- growsurf_python-1.18.0/src/growsurf/types/campaign/custom_domain_set_params.py +15 -0
- growsurf_python-1.18.0/src/growsurf/types/campaign/delete_campaign_custom_domain_response.py +13 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant.py +25 -64
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_add_params.py +13 -3
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_email_params.py +11 -8
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_get_payout_destination_response.py +8 -5
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_referrals_params.py +1 -1
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_response.py +1 -1
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_create_params.py +26 -6
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_update_params.py +26 -6
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_create_params.py +11 -1
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_mobile_participant_token_params.py +13 -3
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_params.py +10 -5
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_referrals_params.py +1 -1
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_update_params.py +3 -2
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/commission_structure.py +5 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/referral_flow_screenshot.py +8 -7
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/referral_list.py +12 -0
- growsurf_python-1.18.0/tests/api_resources/campaign/test_custom_domain.py +127 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_participant.py +2 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/test_campaign.py +2 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/test_team_contract.py +1 -7
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/uv.lock +305 -239
- growsurf_python-1.16.0/.release-please-manifest.json +0 -3
- growsurf_python-1.16.0/src/growsurf/_exceptions.py +0 -108
- growsurf_python-1.16.0/src/growsurf/resources/account.py +0 -219
- growsurf_python-1.16.0/src/growsurf/types/account_create_params.py +0 -23
- growsurf_python-1.16.0/src/growsurf/types/create_account_response.py +0 -29
- growsurf_python-1.16.0/tests/api_resources/test_account.py +0 -153
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/.gitignore +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/CONTRIBUTING.md +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/LICENSE +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/README.md +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/SECURITY.md +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/bin/check-release-environment +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/bin/publish-pypi +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/examples/.keep +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/release-please-config.json +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/__init__.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_base_client.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_compat.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_constants.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_files.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_models.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_qs.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_resource.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_streaming.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_types.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/__init__.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_compat.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_datetime_parse.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_json.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_logs.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_path.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_proxy.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_reflection.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_resources_proxy.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_streams.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_sync.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_transform.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_typing.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_utils.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/lib/.keep +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/py.typed +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/commission.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/integrations.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/program_resources.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/reward.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_application.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_application_answer.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_application_list_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_invite.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_invite_list_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/analytics_availability.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/analytics_unavailable_reason.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_emails.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_installation.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_reward_list_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/commission_approve_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/commission_delete_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_program_resource_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_reward_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_webhook_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/email_participant_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/fraud_risk_level.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/integration.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/integration_list_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/language.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_activation_analytics.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_activity_logs_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_analytics_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_analytics_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_bulk_delete_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_bulk_delete_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_delete_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_activity_logs_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_commissions_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_payouts_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_rewards_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_rewards_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_record_transaction_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_record_transaction_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_refund_transaction_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_refund_transaction_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_reward.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_send_invites_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_send_invites_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_trigger_referral_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_trigger_referral_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_update_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/pending_analytics_erasure.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource_list_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource_upload_result.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource_upload_ticket.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/referral_source.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/referral_status.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_approve_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_approve_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_delete_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_fulfill_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_tax_valuation.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_event.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_list_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_test_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_test_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_update_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_activation_analytics_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_affiliate_invite_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_mobile_participant_token_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_engagement_analytics.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_affiliate_applications_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_affiliate_invites_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_commissions_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_leaderboard_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_participants_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_payouts_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_retrieve_activation_analytics_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_retrieve_analytics_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_retrieve_analytics_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_review_affiliate_application_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/email_analytics.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/participant_commission_list.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/participant_list.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/participant_payout_list.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/referral_flow_screenshots_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/rotate_api_key_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/team.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/team_update_params.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/types/verification_email_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/__init__.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/__init__.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/__init__.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_commission.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_design.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_emails.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_installation.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_integrations.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_options.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_program_resources.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_reward.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_rewards.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_webhooks.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/conftest.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/sample_file.txt +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_client.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_extract_files.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_files.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_models.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_qs.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_required_args.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_response.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_streaming.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_transform.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_utils/test_json.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_utils/test_path.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_utils/test_proxy.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/test_utils/test_typing.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/types/test_affiliate_application.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/types/test_analytics_reward_status.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/types/test_email_analytics.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/types/test_lead_reward_events.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/types/test_participant_activation_engagement_analytics.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/types/test_participant_contract.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/types/test_payout_provider_forward_compat.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/types/test_referral_source.py +0 -0
- {growsurf_python-1.16.0 → growsurf_python-1.18.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.18.0](https://github.com/growsurf/growsurf-python/compare/v1.17.0...v1.18.0) (2026-11-03)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* remove account create method (endpoint retired) ([0a464f2](https://github.com/growsurf/growsurf-python/commit/0a464f2e5d7bcb644d333545907b1847117936a2))
|
|
9
|
+
* remove account create method (endpoint retired) ([7a60066](https://github.com/growsurf/growsurf-python/commit/7a60066f82a98eb1715fd457c76a7e1dc63bd386))
|
|
10
|
+
|
|
11
|
+
## [1.17.0](https://github.com/growsurf/growsurf-python/compare/v1.16.0...v1.17.0) (2026-11-03)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* add Tint and Glass program styles ([a975c13](https://github.com/growsurf/growsurf-python/commit/a975c13b267bf97ff9d57f26673f92bc29642b35))
|
|
17
|
+
* **api:** add languages.flagCountries to Campaign Options ([d5663f0](https://github.com/growsurf/growsurf-python/commit/d5663f08a9fa3e4ec421a90af9b4491ba4eb6dc4))
|
|
18
|
+
* **api:** sync REST v2 contract changes ([2a0e777](https://github.com/growsurf/growsurf-python/commit/2a0e7778a0bdddadbdfe7b55c225723d2c813d02))
|
|
19
|
+
* expose documented error-body fields and sync campaign and participant models ([65db348](https://github.com/growsurf/growsurf-python/commit/65db34829db847313e17757832f6d8f2324535ba))
|
|
20
|
+
* expose program visual style in campaign design ([0d93f91](https://github.com/growsurf/growsurf-python/commit/0d93f917180557f492016acc623cf449962b7120))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
* **deps:** bump aiohttp to 3.14.5 and certifi to 2026.10.23 for security advisories ([c9640ee](https://github.com/growsurf/growsurf-python/commit/c9640eeb58f96838f52b3b24f2168a24b5402e74))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Documentation
|
|
29
|
+
|
|
30
|
+
* clarify Add Participant claim-offer wording and page title defaults ([5fc74e8](https://github.com/growsurf/growsurf-python/commit/5fc74e8666defb009a7870ee20701c0ce8ca0506))
|
|
31
|
+
* clarify referral reward metadata amounts ([1bf9897](https://github.com/growsurf/growsurf-python/commit/1bf9897e437a67f4c912fcec24f234d24ebbf155))
|
|
32
|
+
* correct default program style ([4f6bbd5](https://github.com/growsurf/growsurf-python/commit/4f6bbd5425ceb84889d14ddd70b0e2653ef94f04))
|
|
33
|
+
|
|
3
34
|
## [1.16.0](https://github.com/growsurf/growsurf-python/compare/v1.15.1...v1.16.0) (2026-10-19)
|
|
4
35
|
|
|
5
36
|
|
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
# Account
|
|
2
|
-
|
|
3
|
-
Types:
|
|
4
|
-
|
|
5
|
-
```python
|
|
6
|
-
from growsurf.types import (
|
|
7
|
-
CreateAccountResponse,
|
|
8
|
-
)
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Methods:
|
|
12
|
-
|
|
13
|
-
- <code title="post /accounts">client.account.<a href="./src/growsurf/resources/account.py">create</a>(\*\*<a href="src/growsurf/types/account_create_params.py">params</a>) -> <a href="./src/growsurf/types/create_account_response.py">CreateAccountResponse</a></code>
|
|
14
|
-
|
|
15
1
|
# Team
|
|
16
2
|
|
|
17
3
|
Types:
|
|
@@ -287,3 +273,22 @@ Methods:
|
|
|
287
273
|
|
|
288
274
|
- <code title="get /campaign/{id}/installation">client.campaign.installation.<a href="./src/growsurf/resources/campaign/installation.py">retrieve</a>(id) -> <a href="./src/growsurf/types/campaign/campaign_installation.py">CampaignInstallation</a></code>
|
|
289
275
|
- <code title="patch /campaign/{id}/installation">client.campaign.installation.<a href="./src/growsurf/resources/campaign/installation.py">update</a>(id, \*, body) -> <a href="./src/growsurf/types/campaign/campaign_installation.py">CampaignInstallation</a></code>
|
|
276
|
+
|
|
277
|
+
## CustomDomain
|
|
278
|
+
|
|
279
|
+
Types:
|
|
280
|
+
|
|
281
|
+
```python
|
|
282
|
+
from growsurf.types.campaign import (
|
|
283
|
+
CampaignCustomDomain,
|
|
284
|
+
CampaignCustomDomainDNSRecord,
|
|
285
|
+
DeleteCampaignCustomDomainResponse,
|
|
286
|
+
)
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Methods:
|
|
290
|
+
|
|
291
|
+
- <code title="get /campaign/{id}/custom-domain">client.campaign.custom_domain.<a href="./src/growsurf/resources/campaign/custom_domain.py">retrieve</a>(id) -> <a href="./src/growsurf/types/campaign/campaign_custom_domain.py">CampaignCustomDomain</a></code>
|
|
292
|
+
- <code title="put /campaign/{id}/custom-domain">client.campaign.custom_domain.<a href="./src/growsurf/resources/campaign/custom_domain.py">set</a>(id, \*\*<a href="src/growsurf/types/campaign/custom_domain_set_params.py">params</a>) -> <a href="./src/growsurf/types/campaign/campaign_custom_domain.py">CampaignCustomDomain</a></code>
|
|
293
|
+
- <code title="post /campaign/{id}/custom-domain/verify">client.campaign.custom_domain.<a href="./src/growsurf/resources/campaign/custom_domain.py">verify</a>(id) -> <a href="./src/growsurf/types/campaign/campaign_custom_domain.py">CampaignCustomDomain</a></code>
|
|
294
|
+
- <code title="delete /campaign/{id}/custom-domain">client.campaign.custom_domain.<a href="./src/growsurf/resources/campaign/custom_domain.py">delete</a>(id) -> <a href="./src/growsurf/types/campaign/delete_campaign_custom_domain_response.py">DeleteCampaignCustomDomainResponse</a></code>
|
|
@@ -36,9 +36,8 @@ from ._base_client import (
|
|
|
36
36
|
)
|
|
37
37
|
|
|
38
38
|
if TYPE_CHECKING:
|
|
39
|
-
from .resources import team,
|
|
39
|
+
from .resources import team, campaign
|
|
40
40
|
from .resources.team import TeamResource, AsyncTeamResource
|
|
41
|
-
from .resources.account import AccountResource, AsyncAccountResource
|
|
42
41
|
from .resources.campaign.campaign import CampaignResource, AsyncCampaignResource
|
|
43
42
|
|
|
44
43
|
__all__ = [
|
|
@@ -116,12 +115,6 @@ class Growsurf(SyncAPIClient):
|
|
|
116
115
|
)
|
|
117
116
|
self._idempotency_header = "Idempotency-Key"
|
|
118
117
|
|
|
119
|
-
@cached_property
|
|
120
|
-
def account(self) -> AccountResource:
|
|
121
|
-
from .resources.account import AccountResource
|
|
122
|
-
|
|
123
|
-
return AccountResource(self)
|
|
124
|
-
|
|
125
118
|
@cached_property
|
|
126
119
|
def team(self) -> TeamResource:
|
|
127
120
|
from .resources.team import TeamResource
|
|
@@ -319,12 +312,6 @@ class AsyncGrowsurf(AsyncAPIClient):
|
|
|
319
312
|
)
|
|
320
313
|
self._idempotency_header = "Idempotency-Key"
|
|
321
314
|
|
|
322
|
-
@cached_property
|
|
323
|
-
def account(self) -> AsyncAccountResource:
|
|
324
|
-
from .resources.account import AsyncAccountResource
|
|
325
|
-
|
|
326
|
-
return AsyncAccountResource(self)
|
|
327
|
-
|
|
328
315
|
@cached_property
|
|
329
316
|
def team(self) -> AsyncTeamResource:
|
|
330
317
|
from .resources.team import AsyncTeamResource
|
|
@@ -465,12 +452,6 @@ class GrowsurfWithRawResponse:
|
|
|
465
452
|
def __init__(self, client: Growsurf) -> None:
|
|
466
453
|
self._client = client
|
|
467
454
|
|
|
468
|
-
@cached_property
|
|
469
|
-
def account(self) -> account.AccountResourceWithRawResponse:
|
|
470
|
-
from .resources.account import AccountResourceWithRawResponse
|
|
471
|
-
|
|
472
|
-
return AccountResourceWithRawResponse(self._client.account)
|
|
473
|
-
|
|
474
455
|
@cached_property
|
|
475
456
|
def team(self) -> team.TeamResourceWithRawResponse:
|
|
476
457
|
from .resources.team import TeamResourceWithRawResponse
|
|
@@ -490,12 +471,6 @@ class AsyncGrowsurfWithRawResponse:
|
|
|
490
471
|
def __init__(self, client: AsyncGrowsurf) -> None:
|
|
491
472
|
self._client = client
|
|
492
473
|
|
|
493
|
-
@cached_property
|
|
494
|
-
def account(self) -> account.AsyncAccountResourceWithRawResponse:
|
|
495
|
-
from .resources.account import AsyncAccountResourceWithRawResponse
|
|
496
|
-
|
|
497
|
-
return AsyncAccountResourceWithRawResponse(self._client.account)
|
|
498
|
-
|
|
499
474
|
@cached_property
|
|
500
475
|
def team(self) -> team.AsyncTeamResourceWithRawResponse:
|
|
501
476
|
from .resources.team import AsyncTeamResourceWithRawResponse
|
|
@@ -515,12 +490,6 @@ class GrowsurfWithStreamedResponse:
|
|
|
515
490
|
def __init__(self, client: Growsurf) -> None:
|
|
516
491
|
self._client = client
|
|
517
492
|
|
|
518
|
-
@cached_property
|
|
519
|
-
def account(self) -> account.AccountResourceWithStreamingResponse:
|
|
520
|
-
from .resources.account import AccountResourceWithStreamingResponse
|
|
521
|
-
|
|
522
|
-
return AccountResourceWithStreamingResponse(self._client.account)
|
|
523
|
-
|
|
524
493
|
@cached_property
|
|
525
494
|
def team(self) -> team.TeamResourceWithStreamingResponse:
|
|
526
495
|
from .resources.team import TeamResourceWithStreamingResponse
|
|
@@ -540,12 +509,6 @@ class AsyncGrowsurfWithStreamedResponse:
|
|
|
540
509
|
def __init__(self, client: AsyncGrowsurf) -> None:
|
|
541
510
|
self._client = client
|
|
542
511
|
|
|
543
|
-
@cached_property
|
|
544
|
-
def account(self) -> account.AsyncAccountResourceWithStreamingResponse:
|
|
545
|
-
from .resources.account import AsyncAccountResourceWithStreamingResponse
|
|
546
|
-
|
|
547
|
-
return AsyncAccountResourceWithStreamingResponse(self._client.account)
|
|
548
|
-
|
|
549
512
|
@cached_property
|
|
550
513
|
def team(self) -> team.AsyncTeamResourceWithStreamingResponse:
|
|
551
514
|
from .resources.team import AsyncTeamResourceWithStreamingResponse
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Dict, List, cast
|
|
6
|
+
from typing_extensions import Literal
|
|
7
|
+
|
|
8
|
+
import httpx
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"BadRequestError",
|
|
12
|
+
"AuthenticationError",
|
|
13
|
+
"PermissionDeniedError",
|
|
14
|
+
"NotFoundError",
|
|
15
|
+
"ConflictError",
|
|
16
|
+
"UnprocessableEntityError",
|
|
17
|
+
"RateLimitError",
|
|
18
|
+
"InternalServerError",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class GrowsurfError(Exception):
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class APIError(GrowsurfError):
|
|
27
|
+
message: str
|
|
28
|
+
request: httpx.Request
|
|
29
|
+
|
|
30
|
+
body: object | None
|
|
31
|
+
"""The API response body.
|
|
32
|
+
|
|
33
|
+
If the API responded with a valid JSON structure then this property will be the
|
|
34
|
+
decoded result.
|
|
35
|
+
|
|
36
|
+
If it isn't a valid JSON structure then this will be the raw response.
|
|
37
|
+
|
|
38
|
+
If there was no response associated with this error then it will be `None`.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
def __init__(self, message: str, request: httpx.Request, *, body: object | None) -> None: # noqa: ARG002
|
|
42
|
+
super().__init__(message)
|
|
43
|
+
self.request = request
|
|
44
|
+
self.message = message
|
|
45
|
+
self.body = body
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class APIResponseValidationError(APIError):
|
|
49
|
+
response: httpx.Response
|
|
50
|
+
status_code: int
|
|
51
|
+
|
|
52
|
+
def __init__(self, response: httpx.Response, body: object | None, *, message: str | None = None) -> None:
|
|
53
|
+
super().__init__(message or "Data returned by API invalid for expected schema.", response.request, body=body)
|
|
54
|
+
self.response = response
|
|
55
|
+
self.status_code = response.status_code
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class APIStatusError(APIError):
|
|
59
|
+
"""Raised when an API response has a status code of 4xx or 5xx."""
|
|
60
|
+
|
|
61
|
+
response: httpx.Response
|
|
62
|
+
status_code: int
|
|
63
|
+
|
|
64
|
+
# Documented error-body fields. Each is `None` when the body omits it or sends another
|
|
65
|
+
# type; `body` keeps the complete response body, including fields added later.
|
|
66
|
+
error_name: str | None
|
|
67
|
+
"""Error name returned for the failed request."""
|
|
68
|
+
|
|
69
|
+
error_code: str | None
|
|
70
|
+
"""Stable machine-readable error code."""
|
|
71
|
+
|
|
72
|
+
error_message: str | None
|
|
73
|
+
"""Human-readable error message."""
|
|
74
|
+
|
|
75
|
+
errors: List[Dict[str, object]] | None
|
|
76
|
+
"""Optional validation details for specific request fields."""
|
|
77
|
+
|
|
78
|
+
support_url: str | None
|
|
79
|
+
"""Support URL related to the error, when available."""
|
|
80
|
+
|
|
81
|
+
policy_name: str | None
|
|
82
|
+
"""Rate-limit policy name for `429` errors, when available."""
|
|
83
|
+
|
|
84
|
+
level: str | None
|
|
85
|
+
"""Error severity level, when available."""
|
|
86
|
+
|
|
87
|
+
timestamp: str | None
|
|
88
|
+
"""When the error response was created."""
|
|
89
|
+
|
|
90
|
+
fraud_risk_level: str | None
|
|
91
|
+
"""Fraud risk level assigned to the blocked signup."""
|
|
92
|
+
|
|
93
|
+
fraud_reason_code: str | None
|
|
94
|
+
"""Machine-readable reason code for the fraud decision."""
|
|
95
|
+
|
|
96
|
+
matched_participant_ids: List[str] | None
|
|
97
|
+
"""Existing participant IDs related to the fraud match."""
|
|
98
|
+
|
|
99
|
+
email: str | None
|
|
100
|
+
"""Email address from the blocked signup attempt."""
|
|
101
|
+
|
|
102
|
+
referrer_id: str | None
|
|
103
|
+
"""Referrer participant ID supplied with the blocked signup, or `null`."""
|
|
104
|
+
|
|
105
|
+
ip_address: str | None
|
|
106
|
+
"""IP address supplied with the blocked signup, or `null`."""
|
|
107
|
+
|
|
108
|
+
fingerprint: str | None
|
|
109
|
+
"""Browser fingerprint supplied with the blocked signup, or `null`."""
|
|
110
|
+
|
|
111
|
+
blocked_at: str | None
|
|
112
|
+
"""When the signup was blocked."""
|
|
113
|
+
|
|
114
|
+
def __init__(self, message: str, *, response: httpx.Response, body: object | None) -> None:
|
|
115
|
+
super().__init__(message, response.request, body=body)
|
|
116
|
+
self.response = response
|
|
117
|
+
self.status_code = response.status_code
|
|
118
|
+
|
|
119
|
+
fields = cast(Dict[str, object], body) if isinstance(body, dict) else {}
|
|
120
|
+
self.error_name = _str_or_none(fields.get("name"))
|
|
121
|
+
self.error_code = _str_or_none(fields.get("code"))
|
|
122
|
+
self.error_message = _str_or_none(fields.get("message"))
|
|
123
|
+
self.errors = _record_list_or_none(fields.get("errors"))
|
|
124
|
+
self.support_url = _str_or_none(fields.get("supportUrl"))
|
|
125
|
+
self.policy_name = _str_or_none(fields.get("policyName"))
|
|
126
|
+
self.level = _str_or_none(fields.get("level"))
|
|
127
|
+
self.timestamp = _str_or_none(fields.get("timestamp"))
|
|
128
|
+
self.fraud_risk_level = _str_or_none(fields.get("fraudRiskLevel"))
|
|
129
|
+
self.fraud_reason_code = _str_or_none(fields.get("fraudReasonCode"))
|
|
130
|
+
self.matched_participant_ids = _str_list_or_none(fields.get("matchedParticipantIds"))
|
|
131
|
+
self.email = _str_or_none(fields.get("email"))
|
|
132
|
+
self.referrer_id = _str_or_none(fields.get("referrerId"))
|
|
133
|
+
self.ip_address = _str_or_none(fields.get("ipAddress"))
|
|
134
|
+
self.fingerprint = _str_or_none(fields.get("fingerprint"))
|
|
135
|
+
self.blocked_at = _str_or_none(fields.get("blockedAt"))
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class APIConnectionError(APIError):
|
|
139
|
+
def __init__(self, *, message: str = "Connection error.", request: httpx.Request) -> None:
|
|
140
|
+
super().__init__(message, request, body=None)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class APITimeoutError(APIConnectionError):
|
|
144
|
+
def __init__(self, request: httpx.Request) -> None:
|
|
145
|
+
super().__init__(message="Request timed out.", request=request)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
class BadRequestError(APIStatusError):
|
|
149
|
+
status_code: Literal[400] = 400 # pyright: ignore[reportIncompatibleVariableOverride]
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
class AuthenticationError(APIStatusError):
|
|
153
|
+
status_code: Literal[401] = 401 # pyright: ignore[reportIncompatibleVariableOverride]
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class PermissionDeniedError(APIStatusError):
|
|
157
|
+
status_code: Literal[403] = 403 # pyright: ignore[reportIncompatibleVariableOverride]
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
class NotFoundError(APIStatusError):
|
|
161
|
+
status_code: Literal[404] = 404 # pyright: ignore[reportIncompatibleVariableOverride]
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class ConflictError(APIStatusError):
|
|
165
|
+
status_code: Literal[409] = 409 # pyright: ignore[reportIncompatibleVariableOverride]
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
class UnprocessableEntityError(APIStatusError):
|
|
169
|
+
status_code: Literal[422] = 422 # pyright: ignore[reportIncompatibleVariableOverride]
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
class RateLimitError(APIStatusError):
|
|
173
|
+
status_code: Literal[429] = 429 # pyright: ignore[reportIncompatibleVariableOverride]
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class InternalServerError(APIStatusError):
|
|
177
|
+
pass
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def _str_or_none(value: object) -> str | None:
|
|
181
|
+
return value if isinstance(value, str) else None
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def _str_list_or_none(value: object) -> List[str] | None:
|
|
185
|
+
if not isinstance(value, list):
|
|
186
|
+
return None
|
|
187
|
+
items = cast(List[object], value)
|
|
188
|
+
if not all(isinstance(item, str) for item in items):
|
|
189
|
+
return None
|
|
190
|
+
return cast(List[str], items)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def _record_list_or_none(value: object) -> List[Dict[str, object]] | None:
|
|
194
|
+
if not isinstance(value, list):
|
|
195
|
+
return None
|
|
196
|
+
items = cast(List[object], value)
|
|
197
|
+
if not all(isinstance(item, dict) for item in items):
|
|
198
|
+
return None
|
|
199
|
+
return cast(List[Dict[str, object]], items)
|
|
@@ -8,14 +8,6 @@ from .team import (
|
|
|
8
8
|
TeamResourceWithStreamingResponse,
|
|
9
9
|
AsyncTeamResourceWithStreamingResponse,
|
|
10
10
|
)
|
|
11
|
-
from .account import (
|
|
12
|
-
AccountResource,
|
|
13
|
-
AsyncAccountResource,
|
|
14
|
-
AccountResourceWithRawResponse,
|
|
15
|
-
AsyncAccountResourceWithRawResponse,
|
|
16
|
-
AccountResourceWithStreamingResponse,
|
|
17
|
-
AsyncAccountResourceWithStreamingResponse,
|
|
18
|
-
)
|
|
19
11
|
from .campaign import (
|
|
20
12
|
CampaignResource,
|
|
21
13
|
AsyncCampaignResource,
|
|
@@ -26,12 +18,6 @@ from .campaign import (
|
|
|
26
18
|
)
|
|
27
19
|
|
|
28
20
|
__all__ = [
|
|
29
|
-
"AccountResource",
|
|
30
|
-
"AsyncAccountResource",
|
|
31
|
-
"AccountResourceWithRawResponse",
|
|
32
|
-
"AsyncAccountResourceWithRawResponse",
|
|
33
|
-
"AccountResourceWithStreamingResponse",
|
|
34
|
-
"AsyncAccountResourceWithStreamingResponse",
|
|
35
21
|
"TeamResource",
|
|
36
22
|
"AsyncTeamResource",
|
|
37
23
|
"TeamResourceWithRawResponse",
|
{growsurf_python-1.16.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/__init__.py
RENAMED
|
@@ -88,6 +88,14 @@ from .integrations import (
|
|
|
88
88
|
IntegrationsResourceWithStreamingResponse,
|
|
89
89
|
AsyncIntegrationsResourceWithStreamingResponse,
|
|
90
90
|
)
|
|
91
|
+
from .custom_domain import (
|
|
92
|
+
CustomDomainResource,
|
|
93
|
+
AsyncCustomDomainResource,
|
|
94
|
+
CustomDomainResourceWithRawResponse,
|
|
95
|
+
AsyncCustomDomainResourceWithRawResponse,
|
|
96
|
+
CustomDomainResourceWithStreamingResponse,
|
|
97
|
+
AsyncCustomDomainResourceWithStreamingResponse,
|
|
98
|
+
)
|
|
91
99
|
from .program_resources import (
|
|
92
100
|
ProgramResourcesResource,
|
|
93
101
|
AsyncProgramResourcesResource,
|
|
@@ -158,6 +166,12 @@ __all__ = [
|
|
|
158
166
|
"AsyncInstallationResourceWithRawResponse",
|
|
159
167
|
"InstallationResourceWithStreamingResponse",
|
|
160
168
|
"AsyncInstallationResourceWithStreamingResponse",
|
|
169
|
+
"CustomDomainResource",
|
|
170
|
+
"AsyncCustomDomainResource",
|
|
171
|
+
"CustomDomainResourceWithRawResponse",
|
|
172
|
+
"AsyncCustomDomainResourceWithRawResponse",
|
|
173
|
+
"CustomDomainResourceWithStreamingResponse",
|
|
174
|
+
"AsyncCustomDomainResourceWithStreamingResponse",
|
|
161
175
|
"CommissionResource",
|
|
162
176
|
"AsyncCommissionResource",
|
|
163
177
|
"CommissionResourceWithRawResponse",
|