growsurf-python 1.8.0__tar.gz → 1.10.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.10.0/.release-please-manifest.json +3 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/CHANGELOG.md +19 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/PKG-INFO +1 -1
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/api.md +3 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/pyproject.toml +1 -1
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_transform.py +4 -2
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_version.py +1 -1
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/campaign.py +91 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/rewards.py +6 -6
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/__init__.py +2 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/campaign_design.py +5 -1
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant.py +12 -0
- growsurf_python-1.10.0/src/growsurf/types/referral_flow_screenshot.py +33 -0
- growsurf_python-1.10.0/src/growsurf/types/referral_flow_screenshots_response.py +22 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/test_campaign.py +85 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_transform.py +18 -0
- growsurf_python-1.8.0/.release-please-manifest.json +0 -3
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/.gitignore +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/CONTRIBUTING.md +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/LICENSE +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/README.md +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/SECURITY.md +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/bin/check-release-environment +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/bin/publish-pypi +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/examples/.keep +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/release-please-config.json +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/requirements-dev.lock +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/__init__.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_base_client.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_client.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_compat.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_constants.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_exceptions.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_files.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_models.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_qs.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_resource.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_streaming.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_types.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/__init__.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_compat.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_datetime_parse.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_json.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_logs.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_path.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_proxy.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_reflection.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_resources_proxy.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_streams.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_sync.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_typing.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/_utils/_utils.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/lib/.keep +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/py.typed +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/__init__.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/account.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/__init__.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/commission.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/design.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/emails.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/installation.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/integrations.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/options.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/participant.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/program_resources.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/reward.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/webhooks.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/team.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/account_create_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/affiliate_application.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/affiliate_application_answer.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/affiliate_application_list_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/affiliate_invite.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/affiliate_invite_list_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/analytics_availability.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/analytics_unavailable_reason.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/__init__.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/campaign.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/campaign_emails.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/campaign_installation.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/campaign_options.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/campaign_reward_list_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/commission_approve_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/commission_delete_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/delete_program_resource_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/delete_reward_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/delete_webhook_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/email_participant_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/fraud_risk_level.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/integration.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/integration_list_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_activation_analytics.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_activity_logs_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_add_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_analytics_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_analytics_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_bulk_delete_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_bulk_delete_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_delete_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_email_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_get_payout_destination_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_list_activity_logs_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_list_commissions_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_list_payouts_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_list_referrals_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_list_rewards_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_list_rewards_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_record_transaction_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_record_transaction_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_refund_transaction_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_refund_transaction_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_reward.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_send_invites_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_send_invites_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_trigger_referral_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_trigger_referral_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/participant_update_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/pending_analytics_erasure.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/program_resource.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/program_resource_list_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/program_resource_upload_result.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/program_resource_upload_ticket.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/referral_source.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/referral_status.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/reward.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/reward_approve_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/reward_approve_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/reward_create_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/reward_delete_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/reward_fulfill_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/reward_tax_valuation.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/reward_update_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/webhook.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/webhook_create_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/webhook_event.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/webhook_list_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/webhook_test_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/webhook_test_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/webhook_update_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_activation_analytics_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_create_affiliate_invite_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_create_mobile_participant_token_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_create_mobile_participant_token_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_create_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_engagement_analytics.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_list_affiliate_applications_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_list_affiliate_invites_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_list_commissions_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_list_leaderboard_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_list_participants_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_list_payouts_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_list_referrals_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_list_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_retrieve_activation_analytics_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_retrieve_analytics_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_retrieve_analytics_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_review_affiliate_application_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign_update_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/commission_structure.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/create_account_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/email_analytics.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/participant_commission_list.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/participant_list.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/participant_payout_list.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/referral_list.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/rotate_api_key_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/team.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/team_update_params.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/verification_email_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/__init__.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/__init__.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/__init__.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_commission.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_design.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_emails.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_installation.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_integrations.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_options.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_participant.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_program_resources.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_reward.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_rewards.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/campaign/test_webhooks.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/test_account.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/api_resources/test_team_contract.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/conftest.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/sample_file.txt +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_client.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_extract_files.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_files.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_models.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_qs.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_required_args.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_response.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_streaming.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_utils/test_json.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_utils/test_path.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_utils/test_proxy.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/test_utils/test_typing.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/types/test_affiliate_application.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/types/test_analytics_reward_status.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/types/test_email_analytics.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/types/test_lead_reward_events.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/types/test_participant_activation_engagement_analytics.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/types/test_participant_contract.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/types/test_payout_provider_forward_compat.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/types/test_referral_source.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/tests/utils.py +0 -0
- {growsurf_python-1.8.0 → growsurf_python-1.10.0}/uv.lock +0 -0
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.10.0](https://github.com/growsurf/growsurf-python/compare/v1.9.0...v1.10.0) (2026-09-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **api:** update SDK campaign contracts and request handling ([fbc6468](https://github.com/growsurf/growsurf-python/commit/fbc6468fcb946a5363aec2fd21d9b2f697f5334d))
|
|
9
|
+
|
|
10
|
+
## [1.9.0](https://github.com/growsurf/growsurf-python/compare/v1.8.0...v1.9.0) (2026-09-21)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **api:** add referral-flow screenshot capture and participant leadCount ([609e999](https://github.com/growsurf/growsurf-python/commit/609e99910a61e62eb764c3ea52fd880d3b7cdabf))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Chores
|
|
19
|
+
|
|
20
|
+
* merge origin/main ([7c2e7cc](https://github.com/growsurf/growsurf-python/commit/7c2e7cc12f1bb7ce33db786b7e75450c74ebae37))
|
|
21
|
+
|
|
3
22
|
## [1.8.0](https://github.com/growsurf/growsurf-python/compare/v1.7.1...v1.8.0) (2026-09-19)
|
|
4
23
|
|
|
5
24
|
|
|
@@ -52,6 +52,8 @@ from growsurf.types import (
|
|
|
52
52
|
CampaignListResponse,
|
|
53
53
|
CampaignCreateMobileParticipantTokenResponse,
|
|
54
54
|
CampaignRetrieveAnalyticsResponse,
|
|
55
|
+
ReferralFlowScreenshot,
|
|
56
|
+
ReferralFlowScreenshotsResponse,
|
|
55
57
|
)
|
|
56
58
|
```
|
|
57
59
|
|
|
@@ -63,6 +65,7 @@ Methods:
|
|
|
63
65
|
- <code title="get /campaigns">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">list</a>() -> <a href="./src/growsurf/types/campaign_list_response.py">CampaignListResponse</a></code>
|
|
64
66
|
- <code title="post /campaign/{id}/clone">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">clone</a>(id) -> <a href="./src/growsurf/types/campaign/campaign.py">Campaign</a></code>
|
|
65
67
|
- <code title="post /campaign/{id}/mobile-participant-token">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">create_mobile_participant_token</a>(id, \*\*<a href="src/growsurf/types/campaign_create_mobile_participant_token_params.py">params</a>) -> <a href="./src/growsurf/types/campaign_create_mobile_participant_token_response.py">CampaignCreateMobileParticipantTokenResponse</a></code>
|
|
68
|
+
- <code title="post /campaign/{id}/referral-flow-screenshots">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">capture_referral_flow_screenshots</a>(id) -> <a href="./src/growsurf/types/referral_flow_screenshots_response.py">ReferralFlowScreenshotsResponse</a></code>
|
|
66
69
|
- <code title="get /campaign/{id}/commissions">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">list_commissions</a>(id, \*\*<a href="src/growsurf/types/campaign_list_commissions_params.py">params</a>) -> <a href="./src/growsurf/types/participant_commission_list.py">ParticipantCommissionList</a></code>
|
|
67
70
|
- <code title="get /campaign/{id}/leaderboard">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">list_leaderboard</a>(id, \*\*<a href="src/growsurf/types/campaign_list_leaderboard_params.py">params</a>) -> <a href="./src/growsurf/types/participant_list.py">ParticipantList</a></code>
|
|
68
71
|
- <code title="get /campaign/{id}/participants">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">list_participants</a>(id, \*\*<a href="src/growsurf/types/campaign_list_participants_params.py">params</a>) -> <a href="./src/growsurf/types/participant_list.py">ParticipantList</a></code>
|
|
@@ -218,7 +218,8 @@ def _transform_recursive(
|
|
|
218
218
|
return data
|
|
219
219
|
|
|
220
220
|
if isinstance(data, pydantic.BaseModel):
|
|
221
|
-
|
|
221
|
+
# Request bodies use API field names, so dump aliased fields (e.g. `maxAmount`) by alias.
|
|
222
|
+
return model_dump(data, exclude_unset=True, mode="json", by_alias=True)
|
|
222
223
|
|
|
223
224
|
annotated_type = _get_annotated_type(annotation)
|
|
224
225
|
if annotated_type is None:
|
|
@@ -384,7 +385,8 @@ async def _async_transform_recursive(
|
|
|
384
385
|
return data
|
|
385
386
|
|
|
386
387
|
if isinstance(data, pydantic.BaseModel):
|
|
387
|
-
|
|
388
|
+
# Request bodies use API field names, so dump aliased fields (e.g. `maxAmount`) by alias.
|
|
389
|
+
return model_dump(data, exclude_unset=True, mode="json", by_alias=True)
|
|
388
390
|
|
|
389
391
|
annotated_type = _get_annotated_type(annotation)
|
|
390
392
|
if annotated_type is None:
|
{growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/campaign.py
RENAMED
|
@@ -133,6 +133,7 @@ from ...types.participant_payout_list import ParticipantPayoutList
|
|
|
133
133
|
from ...types.campaign.referral_status import ReferralStatus
|
|
134
134
|
from ...types.participant_commission_list import ParticipantCommissionList
|
|
135
135
|
from ...types.affiliate_invite_list_response import AffiliateInviteListResponse
|
|
136
|
+
from ...types.referral_flow_screenshots_response import ReferralFlowScreenshotsResponse
|
|
136
137
|
from ...types.affiliate_application_list_response import AffiliateApplicationListResponse
|
|
137
138
|
from ...types.campaign_retrieve_analytics_response import CampaignRetrieveAnalyticsResponse
|
|
138
139
|
from ...types.campaign_activation_analytics_response import CampaignActivationAnalyticsResponse
|
|
@@ -500,6 +501,45 @@ class CampaignResource(SyncAPIResource):
|
|
|
500
501
|
cast_to=CampaignCreateMobileParticipantTokenResponse,
|
|
501
502
|
)
|
|
502
503
|
|
|
504
|
+
def capture_referral_flow_screenshots(
|
|
505
|
+
self,
|
|
506
|
+
id: str,
|
|
507
|
+
*,
|
|
508
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
509
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
510
|
+
extra_headers: Headers | None = None,
|
|
511
|
+
extra_query: Query | None = None,
|
|
512
|
+
extra_body: Body | None = None,
|
|
513
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
514
|
+
) -> ReferralFlowScreenshotsResponse:
|
|
515
|
+
"""
|
|
516
|
+
Renders the program's current saved configuration into two preview images: the
|
|
517
|
+
referrer window a participant sees, and the referred-friend experience. Use them
|
|
518
|
+
to show a person what the draft looks like before anything launches. The images
|
|
519
|
+
render GrowSurf's own preview, not the program's installed website, so they do
|
|
520
|
+
not prove an installation. Each `url` is private and expires; capture again when
|
|
521
|
+
you need a fresh view. Only the account owner's credential can capture
|
|
522
|
+
screenshots, and the endpoint takes no request body.
|
|
523
|
+
|
|
524
|
+
Args:
|
|
525
|
+
extra_headers: Send extra headers
|
|
526
|
+
|
|
527
|
+
extra_query: Add additional query parameters to the request
|
|
528
|
+
|
|
529
|
+
extra_body: Add additional JSON properties to the request
|
|
530
|
+
|
|
531
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
532
|
+
"""
|
|
533
|
+
if not id:
|
|
534
|
+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
535
|
+
return self._post(
|
|
536
|
+
path_template("/campaign/{id}/referral-flow-screenshots", id=id),
|
|
537
|
+
options=make_request_options(
|
|
538
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
539
|
+
),
|
|
540
|
+
cast_to=ReferralFlowScreenshotsResponse,
|
|
541
|
+
)
|
|
542
|
+
|
|
503
543
|
def list_commissions(
|
|
504
544
|
self,
|
|
505
545
|
id: str,
|
|
@@ -1687,6 +1727,45 @@ class AsyncCampaignResource(AsyncAPIResource):
|
|
|
1687
1727
|
cast_to=CampaignCreateMobileParticipantTokenResponse,
|
|
1688
1728
|
)
|
|
1689
1729
|
|
|
1730
|
+
async def capture_referral_flow_screenshots(
|
|
1731
|
+
self,
|
|
1732
|
+
id: str,
|
|
1733
|
+
*,
|
|
1734
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
1735
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
1736
|
+
extra_headers: Headers | None = None,
|
|
1737
|
+
extra_query: Query | None = None,
|
|
1738
|
+
extra_body: Body | None = None,
|
|
1739
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
1740
|
+
) -> ReferralFlowScreenshotsResponse:
|
|
1741
|
+
"""
|
|
1742
|
+
Renders the program's current saved configuration into two preview images: the
|
|
1743
|
+
referrer window a participant sees, and the referred-friend experience. Use them
|
|
1744
|
+
to show a person what the draft looks like before anything launches. The images
|
|
1745
|
+
render GrowSurf's own preview, not the program's installed website, so they do
|
|
1746
|
+
not prove an installation. Each `url` is private and expires; capture again when
|
|
1747
|
+
you need a fresh view. Only the account owner's credential can capture
|
|
1748
|
+
screenshots, and the endpoint takes no request body.
|
|
1749
|
+
|
|
1750
|
+
Args:
|
|
1751
|
+
extra_headers: Send extra headers
|
|
1752
|
+
|
|
1753
|
+
extra_query: Add additional query parameters to the request
|
|
1754
|
+
|
|
1755
|
+
extra_body: Add additional JSON properties to the request
|
|
1756
|
+
|
|
1757
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
1758
|
+
"""
|
|
1759
|
+
if not id:
|
|
1760
|
+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
1761
|
+
return await self._post(
|
|
1762
|
+
path_template("/campaign/{id}/referral-flow-screenshots", id=id),
|
|
1763
|
+
options=make_request_options(
|
|
1764
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
1765
|
+
),
|
|
1766
|
+
cast_to=ReferralFlowScreenshotsResponse,
|
|
1767
|
+
)
|
|
1768
|
+
|
|
1690
1769
|
async def list_commissions(
|
|
1691
1770
|
self,
|
|
1692
1771
|
id: str,
|
|
@@ -2537,6 +2616,9 @@ class CampaignResourceWithRawResponse:
|
|
|
2537
2616
|
self.create_mobile_participant_token = to_raw_response_wrapper(
|
|
2538
2617
|
campaign.create_mobile_participant_token,
|
|
2539
2618
|
)
|
|
2619
|
+
self.capture_referral_flow_screenshots = to_raw_response_wrapper(
|
|
2620
|
+
campaign.capture_referral_flow_screenshots,
|
|
2621
|
+
)
|
|
2540
2622
|
self.list_commissions = to_raw_response_wrapper(
|
|
2541
2623
|
campaign.list_commissions,
|
|
2542
2624
|
)
|
|
@@ -2656,6 +2738,9 @@ class AsyncCampaignResourceWithRawResponse:
|
|
|
2656
2738
|
self.create_mobile_participant_token = async_to_raw_response_wrapper(
|
|
2657
2739
|
campaign.create_mobile_participant_token,
|
|
2658
2740
|
)
|
|
2741
|
+
self.capture_referral_flow_screenshots = async_to_raw_response_wrapper(
|
|
2742
|
+
campaign.capture_referral_flow_screenshots,
|
|
2743
|
+
)
|
|
2659
2744
|
self.list_commissions = async_to_raw_response_wrapper(
|
|
2660
2745
|
campaign.list_commissions,
|
|
2661
2746
|
)
|
|
@@ -2775,6 +2860,9 @@ class CampaignResourceWithStreamingResponse:
|
|
|
2775
2860
|
self.create_mobile_participant_token = to_streamed_response_wrapper(
|
|
2776
2861
|
campaign.create_mobile_participant_token,
|
|
2777
2862
|
)
|
|
2863
|
+
self.capture_referral_flow_screenshots = to_streamed_response_wrapper(
|
|
2864
|
+
campaign.capture_referral_flow_screenshots,
|
|
2865
|
+
)
|
|
2778
2866
|
self.list_commissions = to_streamed_response_wrapper(
|
|
2779
2867
|
campaign.list_commissions,
|
|
2780
2868
|
)
|
|
@@ -2894,6 +2982,9 @@ class AsyncCampaignResourceWithStreamingResponse:
|
|
|
2894
2982
|
self.create_mobile_participant_token = async_to_streamed_response_wrapper(
|
|
2895
2983
|
campaign.create_mobile_participant_token,
|
|
2896
2984
|
)
|
|
2985
|
+
self.capture_referral_flow_screenshots = async_to_streamed_response_wrapper(
|
|
2986
|
+
campaign.capture_referral_flow_screenshots,
|
|
2987
|
+
)
|
|
2897
2988
|
self.list_commissions = async_to_streamed_response_wrapper(
|
|
2898
2989
|
campaign.list_commissions,
|
|
2899
2990
|
)
|
|
@@ -327,9 +327,9 @@ class RewardsResource(SyncAPIResource):
|
|
|
327
327
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
328
328
|
) -> CampaignRewardListResponse:
|
|
329
329
|
"""
|
|
330
|
-
Retrieves
|
|
331
|
-
|
|
332
|
-
|
|
330
|
+
Retrieves configured Campaign Rewards, including switched-off rewards and rewards
|
|
331
|
+
whose group is not selected. Deleted rewards are excluded. The campaign response's
|
|
332
|
+
embedded rewards array includes only enabled, visible rewards.
|
|
333
333
|
|
|
334
334
|
Args:
|
|
335
335
|
extra_headers: Send extra headers
|
|
@@ -692,9 +692,9 @@ class AsyncRewardsResource(AsyncAPIResource):
|
|
|
692
692
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
693
693
|
) -> CampaignRewardListResponse:
|
|
694
694
|
"""
|
|
695
|
-
Retrieves
|
|
696
|
-
|
|
697
|
-
|
|
695
|
+
Retrieves configured Campaign Rewards, including switched-off rewards and rewards
|
|
696
|
+
whose group is not selected. Deleted rewards are excluded. The campaign response's
|
|
697
|
+
embedded rewards array includes only enabled, visible rewards.
|
|
698
698
|
|
|
699
699
|
Args:
|
|
700
700
|
extra_headers: Send extra headers
|
|
@@ -23,6 +23,7 @@ from .campaign_update_params import CampaignUpdateParams as CampaignUpdateParams
|
|
|
23
23
|
from .create_account_response import CreateAccountResponse as CreateAccountResponse
|
|
24
24
|
from .participant_payout_list import ParticipantPayoutList as ParticipantPayoutList
|
|
25
25
|
from .rotate_api_key_response import RotateApiKeyResponse as RotateApiKeyResponse
|
|
26
|
+
from .referral_flow_screenshot import ReferralFlowScreenshot as ReferralFlowScreenshot
|
|
26
27
|
from .participant_commission_list import ParticipantCommissionList as ParticipantCommissionList
|
|
27
28
|
from .verification_email_response import VerificationEmailResponse as VerificationEmailResponse
|
|
28
29
|
from .affiliate_application_answer import AffiliateApplicationAnswer as AffiliateApplicationAnswer
|
|
@@ -35,6 +36,7 @@ from .campaign_list_commissions_params import CampaignListCommissionsParams as C
|
|
|
35
36
|
from .campaign_list_leaderboard_params import CampaignListLeaderboardParams as CampaignListLeaderboardParams
|
|
36
37
|
from .campaign_list_participants_params import CampaignListParticipantsParams as CampaignListParticipantsParams
|
|
37
38
|
from .campaign_retrieve_analytics_params import CampaignRetrieveAnalyticsParams as CampaignRetrieveAnalyticsParams
|
|
39
|
+
from .referral_flow_screenshots_response import ReferralFlowScreenshotsResponse as ReferralFlowScreenshotsResponse
|
|
38
40
|
from .affiliate_application_list_response import AffiliateApplicationListResponse as AffiliateApplicationListResponse
|
|
39
41
|
from .campaign_retrieve_analytics_response import CampaignRetrieveAnalyticsResponse as CampaignRetrieveAnalyticsResponse
|
|
40
42
|
from .campaign_activation_analytics_response import (
|
{growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/types/campaign/campaign_design.py
RENAMED
|
@@ -55,7 +55,11 @@ class CampaignDesignResources(TypedDict, total=False):
|
|
|
55
55
|
# `widget` is the website widget shown in a corner of your own site — a button or a
|
|
56
56
|
# card, its placement and offsets, when it appears, and which pages it appears on —
|
|
57
57
|
# with its colors under `theme.widget`. Both of its audience switches start off, so a
|
|
58
|
-
# program shows nothing until you turn one on.
|
|
58
|
+
# program shows nothing until you turn one on. `trafficInsights` is the participant
|
|
59
|
+
# Traffic report: visits to a participant's share link and where they came from. It
|
|
60
|
+
# starts on for new affiliate programs and hidden for referral programs; `GET` returns
|
|
61
|
+
# every setting with its default copy, and a `PATCH` changes only the settings you
|
|
62
|
+
# send. Its labels cannot be blank.
|
|
59
63
|
# `GET` returns the fields configured for the program;
|
|
60
64
|
# `payoutDestinationConfirmation` is omitted when no confirmation fields are
|
|
61
65
|
# stored. Stored `null` fields are returned as `null`; omitted and `null` fields
|
|
@@ -49,6 +49,12 @@ class Referrer(BaseModel):
|
|
|
49
49
|
|
|
50
50
|
last_name: Optional[str] = FieldInfo(alias="lastName", default=None)
|
|
51
51
|
|
|
52
|
+
lead_count: Optional[int] = FieldInfo(alias="leadCount", default=None)
|
|
53
|
+
"""
|
|
54
|
+
The number of pending referrals the participant made that have not converted
|
|
55
|
+
into successful referrals yet.
|
|
56
|
+
"""
|
|
57
|
+
|
|
52
58
|
metadata: Optional[Dict[str, object]] = None
|
|
53
59
|
"""Shallow custom metadata object."""
|
|
54
60
|
|
|
@@ -145,6 +151,12 @@ class Participant(BaseModel):
|
|
|
145
151
|
|
|
146
152
|
last_name: Optional[str] = FieldInfo(alias="lastName", default=None)
|
|
147
153
|
|
|
154
|
+
lead_count: Optional[int] = FieldInfo(alias="leadCount", default=None)
|
|
155
|
+
"""
|
|
156
|
+
The number of pending referrals the participant made that have not converted
|
|
157
|
+
into successful referrals yet.
|
|
158
|
+
"""
|
|
159
|
+
|
|
148
160
|
metadata: Optional[Dict[str, object]] = None
|
|
149
161
|
"""Shallow custom metadata object."""
|
|
150
162
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing_extensions import Literal
|
|
5
|
+
|
|
6
|
+
from pydantic import Field as FieldInfo
|
|
7
|
+
|
|
8
|
+
from .._models import BaseModel
|
|
9
|
+
|
|
10
|
+
__all__ = ["ReferralFlowScreenshot"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ReferralFlowScreenshot(BaseModel):
|
|
14
|
+
view: Literal["referrer", "referredFriend"]
|
|
15
|
+
"""Which side of the referral flow the image shows."""
|
|
16
|
+
|
|
17
|
+
label: str
|
|
18
|
+
"""Short human-readable name for the view, such as `Referrer window`."""
|
|
19
|
+
|
|
20
|
+
url: str
|
|
21
|
+
"""Private URL of the image. It stops working at `expiresAt`."""
|
|
22
|
+
|
|
23
|
+
expires_at: datetime = FieldInfo(alias="expiresAt")
|
|
24
|
+
"""ISO 8601 time after which `url` no longer resolves."""
|
|
25
|
+
|
|
26
|
+
width: int
|
|
27
|
+
"""Image width in pixels."""
|
|
28
|
+
|
|
29
|
+
height: int
|
|
30
|
+
"""Image height in pixels."""
|
|
31
|
+
|
|
32
|
+
content_type: str = FieldInfo(alias="contentType")
|
|
33
|
+
"""MIME type of the image."""
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from typing import List
|
|
4
|
+
from datetime import datetime
|
|
5
|
+
|
|
6
|
+
from pydantic import Field as FieldInfo
|
|
7
|
+
|
|
8
|
+
from .._models import BaseModel
|
|
9
|
+
from .referral_flow_screenshot import ReferralFlowScreenshot
|
|
10
|
+
|
|
11
|
+
__all__ = ["ReferralFlowScreenshotsResponse"]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ReferralFlowScreenshotsResponse(BaseModel):
|
|
15
|
+
generated_at: datetime = FieldInfo(alias="generatedAt")
|
|
16
|
+
"""ISO 8601 time the images were rendered."""
|
|
17
|
+
|
|
18
|
+
expires_at: datetime = FieldInfo(alias="expiresAt")
|
|
19
|
+
"""ISO 8601 time after which every `url` in `screenshots` stops working."""
|
|
20
|
+
|
|
21
|
+
screenshots: List[ReferralFlowScreenshot]
|
|
22
|
+
"""One entry per view, in referrer then referred-friend order."""
|
|
@@ -20,6 +20,7 @@ from growsurf.types import (
|
|
|
20
20
|
ParticipantPayoutList,
|
|
21
21
|
ParticipantCommissionList,
|
|
22
22
|
AffiliateInviteListResponse,
|
|
23
|
+
ReferralFlowScreenshotsResponse,
|
|
23
24
|
AffiliateApplicationListResponse,
|
|
24
25
|
CampaignRetrieveAnalyticsResponse,
|
|
25
26
|
CampaignCreateMobileParticipantTokenResponse,
|
|
@@ -362,6 +363,48 @@ class TestCampaign:
|
|
|
362
363
|
email="dev@stainless.com",
|
|
363
364
|
)
|
|
364
365
|
|
|
366
|
+
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
367
|
+
@parametrize
|
|
368
|
+
def test_method_capture_referral_flow_screenshots(self, client: Growsurf) -> None:
|
|
369
|
+
campaign = client.campaign.capture_referral_flow_screenshots(
|
|
370
|
+
"id",
|
|
371
|
+
)
|
|
372
|
+
assert_matches_type(ReferralFlowScreenshotsResponse, campaign, path=["response"])
|
|
373
|
+
|
|
374
|
+
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
375
|
+
@parametrize
|
|
376
|
+
def test_raw_response_capture_referral_flow_screenshots(self, client: Growsurf) -> None:
|
|
377
|
+
response = client.campaign.with_raw_response.capture_referral_flow_screenshots(
|
|
378
|
+
"id",
|
|
379
|
+
)
|
|
380
|
+
|
|
381
|
+
assert response.is_closed is True
|
|
382
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
383
|
+
campaign = response.parse()
|
|
384
|
+
assert_matches_type(ReferralFlowScreenshotsResponse, campaign, path=["response"])
|
|
385
|
+
|
|
386
|
+
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
387
|
+
@parametrize
|
|
388
|
+
def test_streaming_response_capture_referral_flow_screenshots(self, client: Growsurf) -> None:
|
|
389
|
+
with client.campaign.with_streaming_response.capture_referral_flow_screenshots(
|
|
390
|
+
"id",
|
|
391
|
+
) as response:
|
|
392
|
+
assert not response.is_closed
|
|
393
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
394
|
+
|
|
395
|
+
campaign = response.parse()
|
|
396
|
+
assert_matches_type(ReferralFlowScreenshotsResponse, campaign, path=["response"])
|
|
397
|
+
|
|
398
|
+
assert cast(Any, response.is_closed) is True
|
|
399
|
+
|
|
400
|
+
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
401
|
+
@parametrize
|
|
402
|
+
def test_path_params_capture_referral_flow_screenshots(self, client: Growsurf) -> None:
|
|
403
|
+
with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"):
|
|
404
|
+
client.campaign.with_raw_response.capture_referral_flow_screenshots(
|
|
405
|
+
"",
|
|
406
|
+
)
|
|
407
|
+
|
|
365
408
|
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
366
409
|
@parametrize
|
|
367
410
|
def test_method_list_commissions(self, client: Growsurf) -> None:
|
|
@@ -1384,6 +1427,48 @@ class TestAsyncCampaign:
|
|
|
1384
1427
|
email="dev@stainless.com",
|
|
1385
1428
|
)
|
|
1386
1429
|
|
|
1430
|
+
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
1431
|
+
@parametrize
|
|
1432
|
+
async def test_method_capture_referral_flow_screenshots(self, async_client: AsyncGrowsurf) -> None:
|
|
1433
|
+
campaign = await async_client.campaign.capture_referral_flow_screenshots(
|
|
1434
|
+
"id",
|
|
1435
|
+
)
|
|
1436
|
+
assert_matches_type(ReferralFlowScreenshotsResponse, campaign, path=["response"])
|
|
1437
|
+
|
|
1438
|
+
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
1439
|
+
@parametrize
|
|
1440
|
+
async def test_raw_response_capture_referral_flow_screenshots(self, async_client: AsyncGrowsurf) -> None:
|
|
1441
|
+
response = await async_client.campaign.with_raw_response.capture_referral_flow_screenshots(
|
|
1442
|
+
"id",
|
|
1443
|
+
)
|
|
1444
|
+
|
|
1445
|
+
assert response.is_closed is True
|
|
1446
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
1447
|
+
campaign = await response.parse()
|
|
1448
|
+
assert_matches_type(ReferralFlowScreenshotsResponse, campaign, path=["response"])
|
|
1449
|
+
|
|
1450
|
+
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
1451
|
+
@parametrize
|
|
1452
|
+
async def test_streaming_response_capture_referral_flow_screenshots(self, async_client: AsyncGrowsurf) -> None:
|
|
1453
|
+
async with async_client.campaign.with_streaming_response.capture_referral_flow_screenshots(
|
|
1454
|
+
"id",
|
|
1455
|
+
) as response:
|
|
1456
|
+
assert not response.is_closed
|
|
1457
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
1458
|
+
|
|
1459
|
+
campaign = await response.parse()
|
|
1460
|
+
assert_matches_type(ReferralFlowScreenshotsResponse, campaign, path=["response"])
|
|
1461
|
+
|
|
1462
|
+
assert cast(Any, response.is_closed) is True
|
|
1463
|
+
|
|
1464
|
+
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
1465
|
+
@parametrize
|
|
1466
|
+
async def test_path_params_capture_referral_flow_screenshots(self, async_client: AsyncGrowsurf) -> None:
|
|
1467
|
+
with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"):
|
|
1468
|
+
await async_client.campaign.with_raw_response.capture_referral_flow_screenshots(
|
|
1469
|
+
"",
|
|
1470
|
+
)
|
|
1471
|
+
|
|
1387
1472
|
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
1388
1473
|
@parametrize
|
|
1389
1474
|
async def test_method_list_commissions(self, async_client: AsyncGrowsurf) -> None:
|
|
@@ -7,6 +7,7 @@ from datetime import date, datetime
|
|
|
7
7
|
from typing_extensions import Required, Annotated, TypedDict
|
|
8
8
|
|
|
9
9
|
import pytest
|
|
10
|
+
from pydantic import Field
|
|
10
11
|
|
|
11
12
|
from growsurf._types import Base64FileInput, omit, not_given
|
|
12
13
|
from growsurf._utils import (
|
|
@@ -317,6 +318,23 @@ async def test_pydantic_mismatched_object_type(use_async: bool) -> None:
|
|
|
317
318
|
assert cast(Any, params) == {"foo": {"hello": "world"}}
|
|
318
319
|
|
|
319
320
|
|
|
321
|
+
class ModelWithAlias(BaseModel):
|
|
322
|
+
max_amount: Optional[int] = Field(alias="maxAmount", default=None)
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
class TypedDictWithAliasedModel(TypedDict, total=False):
|
|
326
|
+
commission_structure: Annotated[ModelWithAlias, PropertyInfo(alias="commissionStructure")]
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
@parametrize
|
|
330
|
+
@pytest.mark.asyncio
|
|
331
|
+
async def test_pydantic_model_uses_api_field_names(use_async: bool) -> None:
|
|
332
|
+
params = {"commission_structure": ModelWithAlias(maxAmount=5000)}
|
|
333
|
+
assert cast(Any, await transform(params, TypedDictWithAliasedModel, use_async)) == {
|
|
334
|
+
"commissionStructure": {"maxAmount": 5000}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
|
|
320
338
|
class ModelNestedObjects(BaseModel):
|
|
321
339
|
nested: MyModel
|
|
322
340
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/__init__.py
RENAMED
|
File without changes
|
{growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/commission.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{growsurf_python-1.8.0 → growsurf_python-1.10.0}/src/growsurf/resources/campaign/installation.py
RENAMED
|
File without changes
|