growsurf-python 1.17.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.17.0 → growsurf_python-1.18.0}/CHANGELOG.md +8 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/PKG-INFO +1 -1
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/api.md +0 -14
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/pyproject.toml +1 -1
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_client.py +1 -38
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_version.py +1 -1
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/__init__.py +0 -14
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/__init__.py +0 -2
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/test_team_contract.py +1 -7
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/uv.lock +1 -1
- growsurf_python-1.17.0/.release-please-manifest.json +0 -3
- growsurf_python-1.17.0/src/growsurf/resources/account.py +0 -219
- growsurf_python-1.17.0/src/growsurf/types/account_create_params.py +0 -23
- growsurf_python-1.17.0/src/growsurf/types/create_account_response.py +0 -29
- growsurf_python-1.17.0/tests/api_resources/test_account.py +0 -153
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/.gitignore +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/CONTRIBUTING.md +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/LICENSE +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/README.md +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/SECURITY.md +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/bin/check-release-environment +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/bin/publish-pypi +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/examples/.keep +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/release-please-config.json +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/requirements-dev.lock +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/__init__.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_base_client.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_compat.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_constants.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_exceptions.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_files.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_models.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_qs.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_resource.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_streaming.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_types.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/__init__.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_compat.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_datetime_parse.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_json.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_logs.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_path.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_proxy.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_reflection.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_resources_proxy.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_streams.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_sync.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_transform.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_typing.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_utils.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/lib/.keep +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/py.typed +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/__init__.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/campaign.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/commission.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/custom_domain.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/design.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/emails.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/installation.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/integrations.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/options.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/participant.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/program_resources.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/reward.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/rewards.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/webhooks.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/team.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_application.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_application_answer.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_application_list_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_invite.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_invite_list_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/analytics_availability.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/analytics_unavailable_reason.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/__init__.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_custom_domain.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_design.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_emails.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_installation.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_options.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_reward_list_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/commission_approve_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/commission_delete_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/custom_domain_set_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_campaign_custom_domain_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_program_resource_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_reward_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_webhook_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/email_participant_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/fraud_risk_level.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/integration.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/integration_list_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/language.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_activation_analytics.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_activity_logs_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_add_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_analytics_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_analytics_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_bulk_delete_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_bulk_delete_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_delete_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_email_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_get_payout_destination_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_activity_logs_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_commissions_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_payouts_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_referrals_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_rewards_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_rewards_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_record_transaction_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_record_transaction_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_refund_transaction_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_refund_transaction_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_reward.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_send_invites_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_send_invites_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_trigger_referral_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_trigger_referral_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_update_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/pending_analytics_erasure.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource_list_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource_upload_result.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource_upload_ticket.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/referral_source.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/referral_status.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_approve_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_approve_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_create_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_delete_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_fulfill_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_tax_valuation.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_update_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_create_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_event.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_list_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_test_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_test_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_update_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_activation_analytics_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_affiliate_invite_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_mobile_participant_token_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_mobile_participant_token_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_engagement_analytics.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_affiliate_applications_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_affiliate_invites_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_commissions_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_leaderboard_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_participants_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_payouts_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_referrals_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_retrieve_activation_analytics_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_retrieve_analytics_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_retrieve_analytics_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_review_affiliate_application_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_update_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/commission_structure.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/email_analytics.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/participant_commission_list.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/participant_list.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/participant_payout_list.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/referral_flow_screenshot.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/referral_flow_screenshots_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/referral_list.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/rotate_api_key_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/team.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/team_update_params.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/verification_email_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/__init__.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/__init__.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/__init__.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_commission.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_custom_domain.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_design.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_emails.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_installation.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_integrations.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_options.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_participant.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_program_resources.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_reward.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_rewards.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_webhooks.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/test_campaign.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/conftest.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/sample_file.txt +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_client.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_extract_files.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_files.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_models.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_qs.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_required_args.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_response.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_streaming.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_transform.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_utils/test_json.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_utils/test_path.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_utils/test_proxy.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_utils/test_typing.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_affiliate_application.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_analytics_reward_status.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_email_analytics.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_lead_reward_events.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_participant_activation_engagement_analytics.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_participant_contract.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_payout_provider_forward_compat.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_referral_source.py +0 -0
- {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
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
|
+
|
|
3
11
|
## [1.17.0](https://github.com/growsurf/growsurf-python/compare/v1.16.0...v1.17.0) (2026-11-03)
|
|
4
12
|
|
|
5
13
|
|
|
@@ -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:
|
|
@@ -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
|
|
@@ -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",
|
|
@@ -14,13 +14,11 @@ from .affiliate_invite import AffiliateInvite as AffiliateInvite
|
|
|
14
14
|
from .participant_list import ParticipantList as ParticipantList
|
|
15
15
|
from .team_update_params import TeamUpdateParams as TeamUpdateParams
|
|
16
16
|
from .commission_structure import CommissionStructure as CommissionStructure
|
|
17
|
-
from .account_create_params import AccountCreateParams as AccountCreateParams
|
|
18
17
|
from .affiliate_application import AffiliateApplication as AffiliateApplication
|
|
19
18
|
from .analytics_availability import AnalyticsAvailability as AnalyticsAvailability
|
|
20
19
|
from .campaign_create_params import CampaignCreateParams as CampaignCreateParams
|
|
21
20
|
from .campaign_list_response import CampaignListResponse as CampaignListResponse
|
|
22
21
|
from .campaign_update_params import CampaignUpdateParams as CampaignUpdateParams
|
|
23
|
-
from .create_account_response import CreateAccountResponse as CreateAccountResponse
|
|
24
22
|
from .participant_payout_list import ParticipantPayoutList as ParticipantPayoutList
|
|
25
23
|
from .rotate_api_key_response import RotateApiKeyResponse as RotateApiKeyResponse
|
|
26
24
|
from .referral_flow_screenshot import ReferralFlowScreenshot as ReferralFlowScreenshot
|
|
@@ -7,7 +7,6 @@ import pytest
|
|
|
7
7
|
from respx import MockRouter
|
|
8
8
|
|
|
9
9
|
from growsurf import Growsurf
|
|
10
|
-
from growsurf.types import CreateAccountResponse
|
|
11
10
|
from growsurf._compat import get_model_fields
|
|
12
11
|
|
|
13
12
|
from ..conftest import base_url
|
|
@@ -45,7 +44,7 @@ def test_final_team_request_paths(client: Growsurf, respx_mock: MockRouter) -> N
|
|
|
45
44
|
assert rotate.called
|
|
46
45
|
|
|
47
46
|
|
|
48
|
-
def
|
|
47
|
+
def test_safe_team_model() -> None:
|
|
49
48
|
team_type = import_module("growsurf.types.team").Team
|
|
50
49
|
|
|
51
50
|
assert set(get_model_fields(team_type)) == {
|
|
@@ -53,8 +52,3 @@ def test_safe_team_and_onboarding_models() -> None:
|
|
|
53
52
|
"verification_status",
|
|
54
53
|
"verification_requested_at",
|
|
55
54
|
}
|
|
56
|
-
assert set(get_model_fields(CreateAccountResponse)) == {
|
|
57
|
-
"email",
|
|
58
|
-
"api_key",
|
|
59
|
-
"verification_status",
|
|
60
|
-
}
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import httpx
|
|
6
|
-
|
|
7
|
-
from ..types import account_create_params
|
|
8
|
-
from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
|
|
9
|
-
from .._utils import maybe_transform, async_maybe_transform
|
|
10
|
-
from .._compat import cached_property
|
|
11
|
-
from .._resource import SyncAPIResource, AsyncAPIResource
|
|
12
|
-
from .._response import (
|
|
13
|
-
to_raw_response_wrapper,
|
|
14
|
-
to_streamed_response_wrapper,
|
|
15
|
-
async_to_raw_response_wrapper,
|
|
16
|
-
async_to_streamed_response_wrapper,
|
|
17
|
-
)
|
|
18
|
-
from .._base_client import make_request_options
|
|
19
|
-
from ..types.create_account_response import CreateAccountResponse
|
|
20
|
-
|
|
21
|
-
__all__ = ["AccountResource", "AsyncAccountResource"]
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class AccountResource(SyncAPIResource):
|
|
25
|
-
"""Create a GrowSurf account and its initial API key."""
|
|
26
|
-
|
|
27
|
-
@cached_property
|
|
28
|
-
def with_raw_response(self) -> AccountResourceWithRawResponse:
|
|
29
|
-
"""Return the raw response object instead of parsed content."""
|
|
30
|
-
return AccountResourceWithRawResponse(self)
|
|
31
|
-
|
|
32
|
-
@cached_property
|
|
33
|
-
def with_streaming_response(self) -> AccountResourceWithStreamingResponse:
|
|
34
|
-
"""Stream the response instead of reading it eagerly."""
|
|
35
|
-
return AccountResourceWithStreamingResponse(self)
|
|
36
|
-
|
|
37
|
-
def create(
|
|
38
|
-
self,
|
|
39
|
-
*,
|
|
40
|
-
email: str,
|
|
41
|
-
company: str | Omit = omit,
|
|
42
|
-
first_name: str | Omit = omit,
|
|
43
|
-
last_name: str | Omit = omit,
|
|
44
|
-
extra_headers: Headers | None = None,
|
|
45
|
-
extra_query: Query | None = None,
|
|
46
|
-
extra_body: Body | None = None,
|
|
47
|
-
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
48
|
-
) -> CreateAccountResponse:
|
|
49
|
-
"""
|
|
50
|
-
Creates a new GrowSurf account. This is the only endpoint that does not require an API key.
|
|
51
|
-
Before calling it, an authorized account owner must review and approve GrowSurf's [Terms of
|
|
52
|
-
Service](https://growsurf.com/terms) and [Privacy Policy](https://growsurf.com/privacy). The
|
|
53
|
-
account starts a 14-day Business trial without a credit card. The response includes an API
|
|
54
|
-
key for the new account, shown once in the response. The key is a secret: store it in a
|
|
55
|
-
secret manager and do not put it in logs, screenshots, URLs, model context, analytics, or
|
|
56
|
-
generated output. A lost key cannot be recovered through this API, so do not create an
|
|
57
|
-
account here unless you can store the key somewhere that outlives the current conversation.
|
|
58
|
-
If you cannot, ask the account owner to connect GrowSurf's hosted MCP server at
|
|
59
|
-
`https://mcp.growsurf.com` instead, which keeps the credential with your tool rather than in
|
|
60
|
-
chat. The key is locked until the team owner's email address is verified: authenticated
|
|
61
|
-
program and resource endpoints return a `403` with error code `EMAIL_NOT_VERIFIED_ERROR`
|
|
62
|
-
until then (resend the email via `POST /team/owner/verification-email`, then retry).
|
|
63
|
-
Verification unlocks this same key - keep it and retry rather than requesting a replacement.
|
|
64
|
-
A welcome email is sent to the address with the verification link and a set-password link
|
|
65
|
-
for dashboard access. Accounts whose email is never verified are deleted automatically after
|
|
66
|
-
7 days. Separately, for security, the API key is replaced the first time the account owner
|
|
67
|
-
signs in to the GrowSurf dashboard; email verification does not trigger that, and the
|
|
68
|
-
previous key then returns a `403` with error code `NOT_AUTHORIZED_ERROR`. Some actions (such
|
|
69
|
-
as emailing participants) additionally require GrowSurf to verify the team first. Calling
|
|
70
|
-
this endpoint accepts those policies on the account holder's behalf.
|
|
71
|
-
|
|
72
|
-
Args:
|
|
73
|
-
email: The email address for the new GrowSurf account. Personal emails and disposable email addresses are not accepted.
|
|
74
|
-
|
|
75
|
-
company: Company name for the new account.
|
|
76
|
-
|
|
77
|
-
first_name: First name for the new account owner.
|
|
78
|
-
|
|
79
|
-
last_name: Last name for the new account owner.
|
|
80
|
-
|
|
81
|
-
extra_headers: Send extra headers
|
|
82
|
-
|
|
83
|
-
extra_query: Add additional query parameters to the request
|
|
84
|
-
|
|
85
|
-
extra_body: Add additional JSON properties to the request
|
|
86
|
-
|
|
87
|
-
timeout: Override the client-level default timeout for this request, in seconds
|
|
88
|
-
"""
|
|
89
|
-
return self._post(
|
|
90
|
-
"/accounts",
|
|
91
|
-
body=maybe_transform(
|
|
92
|
-
{
|
|
93
|
-
"email": email,
|
|
94
|
-
"company": company,
|
|
95
|
-
"first_name": first_name,
|
|
96
|
-
"last_name": last_name,
|
|
97
|
-
},
|
|
98
|
-
account_create_params.AccountCreateParams,
|
|
99
|
-
),
|
|
100
|
-
options=make_request_options(
|
|
101
|
-
extra_headers=extra_headers,
|
|
102
|
-
extra_query=extra_query,
|
|
103
|
-
extra_body=extra_body,
|
|
104
|
-
timeout=timeout,
|
|
105
|
-
security={"api_key_auth": False},
|
|
106
|
-
),
|
|
107
|
-
cast_to=CreateAccountResponse,
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
class AsyncAccountResource(AsyncAPIResource):
|
|
112
|
-
"""Create a GrowSurf account and its initial API key."""
|
|
113
|
-
|
|
114
|
-
@cached_property
|
|
115
|
-
def with_raw_response(self) -> AsyncAccountResourceWithRawResponse:
|
|
116
|
-
"""Return the raw response object instead of parsed content."""
|
|
117
|
-
return AsyncAccountResourceWithRawResponse(self)
|
|
118
|
-
|
|
119
|
-
@cached_property
|
|
120
|
-
def with_streaming_response(self) -> AsyncAccountResourceWithStreamingResponse:
|
|
121
|
-
"""Stream the response instead of reading it eagerly."""
|
|
122
|
-
return AsyncAccountResourceWithStreamingResponse(self)
|
|
123
|
-
|
|
124
|
-
async def create(
|
|
125
|
-
self,
|
|
126
|
-
*,
|
|
127
|
-
email: str,
|
|
128
|
-
company: str | Omit = omit,
|
|
129
|
-
first_name: str | Omit = omit,
|
|
130
|
-
last_name: str | Omit = omit,
|
|
131
|
-
extra_headers: Headers | None = None,
|
|
132
|
-
extra_query: Query | None = None,
|
|
133
|
-
extra_body: Body | None = None,
|
|
134
|
-
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
135
|
-
) -> CreateAccountResponse:
|
|
136
|
-
"""
|
|
137
|
-
Creates a new GrowSurf account. This is the only endpoint that does not require an API key.
|
|
138
|
-
Before calling it, an authorized account owner must review and approve GrowSurf's [Terms of
|
|
139
|
-
Service](https://growsurf.com/terms) and [Privacy Policy](https://growsurf.com/privacy). The
|
|
140
|
-
account starts a 14-day Business trial without a credit card. The response includes an API
|
|
141
|
-
key for the new account, shown once in the response. The key is a secret: store it in a
|
|
142
|
-
secret manager and do not put it in logs, screenshots, URLs, model context, analytics, or
|
|
143
|
-
generated output. A lost key cannot be recovered through this API, so do not create an
|
|
144
|
-
account here unless you can store the key somewhere that outlives the current conversation.
|
|
145
|
-
If you cannot, ask the account owner to connect GrowSurf's hosted MCP server at
|
|
146
|
-
`https://mcp.growsurf.com` instead, which keeps the credential with your tool rather than in
|
|
147
|
-
chat. The key is locked until the team owner's email address is verified: authenticated
|
|
148
|
-
program and resource endpoints return a `403` with error code `EMAIL_NOT_VERIFIED_ERROR`
|
|
149
|
-
until then (resend the email via `POST /team/owner/verification-email`, then retry).
|
|
150
|
-
Verification unlocks this same key - keep it and retry rather than requesting a replacement.
|
|
151
|
-
A welcome email is sent to the address with the verification link and a set-password link
|
|
152
|
-
for dashboard access. Accounts whose email is never verified are deleted automatically after
|
|
153
|
-
7 days. Separately, for security, the API key is replaced the first time the account owner
|
|
154
|
-
signs in to the GrowSurf dashboard; email verification does not trigger that, and the
|
|
155
|
-
previous key then returns a `403` with error code `NOT_AUTHORIZED_ERROR`. Some actions (such
|
|
156
|
-
as emailing participants) additionally require GrowSurf to verify the team first. Calling
|
|
157
|
-
this endpoint accepts those policies on the account holder's behalf.
|
|
158
|
-
|
|
159
|
-
Args:
|
|
160
|
-
email: The email address for the new GrowSurf account. Personal emails and disposable email addresses are not accepted.
|
|
161
|
-
|
|
162
|
-
company: Company name for the new account.
|
|
163
|
-
|
|
164
|
-
first_name: First name for the new account owner.
|
|
165
|
-
|
|
166
|
-
last_name: Last name for the new account owner.
|
|
167
|
-
|
|
168
|
-
extra_headers: Send extra headers
|
|
169
|
-
|
|
170
|
-
extra_query: Add additional query parameters to the request
|
|
171
|
-
|
|
172
|
-
extra_body: Add additional JSON properties to the request
|
|
173
|
-
|
|
174
|
-
timeout: Override the client-level default timeout for this request, in seconds
|
|
175
|
-
"""
|
|
176
|
-
return await self._post(
|
|
177
|
-
"/accounts",
|
|
178
|
-
body=await async_maybe_transform(
|
|
179
|
-
{
|
|
180
|
-
"email": email,
|
|
181
|
-
"company": company,
|
|
182
|
-
"first_name": first_name,
|
|
183
|
-
"last_name": last_name,
|
|
184
|
-
},
|
|
185
|
-
account_create_params.AccountCreateParams,
|
|
186
|
-
),
|
|
187
|
-
options=make_request_options(
|
|
188
|
-
extra_headers=extra_headers,
|
|
189
|
-
extra_query=extra_query,
|
|
190
|
-
extra_body=extra_body,
|
|
191
|
-
timeout=timeout,
|
|
192
|
-
security={"api_key_auth": False},
|
|
193
|
-
),
|
|
194
|
-
cast_to=CreateAccountResponse,
|
|
195
|
-
)
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
class AccountResourceWithRawResponse:
|
|
199
|
-
def __init__(self, account: AccountResource) -> None:
|
|
200
|
-
self._account = account
|
|
201
|
-
self.create = to_raw_response_wrapper(account.create)
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
class AsyncAccountResourceWithRawResponse:
|
|
205
|
-
def __init__(self, account: AsyncAccountResource) -> None:
|
|
206
|
-
self._account = account
|
|
207
|
-
self.create = async_to_raw_response_wrapper(account.create)
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
class AccountResourceWithStreamingResponse:
|
|
211
|
-
def __init__(self, account: AccountResource) -> None:
|
|
212
|
-
self._account = account
|
|
213
|
-
self.create = to_streamed_response_wrapper(account.create)
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
class AsyncAccountResourceWithStreamingResponse:
|
|
217
|
-
def __init__(self, account: AsyncAccountResource) -> None:
|
|
218
|
-
self._account = account
|
|
219
|
-
self.create = async_to_streamed_response_wrapper(account.create)
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from typing_extensions import Required, Annotated, TypedDict
|
|
6
|
-
|
|
7
|
-
from .._utils import PropertyInfo
|
|
8
|
-
|
|
9
|
-
__all__ = ["AccountCreateParams"]
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class AccountCreateParams(TypedDict, total=False):
|
|
13
|
-
email: Required[str]
|
|
14
|
-
"""The email address for the new account.
|
|
15
|
-
|
|
16
|
-
Personal emails and disposable email addresses are not accepted.
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
company: str
|
|
20
|
-
|
|
21
|
-
first_name: Annotated[str, PropertyInfo(alias="firstName")]
|
|
22
|
-
|
|
23
|
-
last_name: Annotated[str, PropertyInfo(alias="lastName")]
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
-
|
|
3
|
-
from typing_extensions import Literal
|
|
4
|
-
|
|
5
|
-
from pydantic import Field as FieldInfo
|
|
6
|
-
|
|
7
|
-
from .._models import BaseModel
|
|
8
|
-
|
|
9
|
-
__all__ = ["CreateAccountResponse"]
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class CreateAccountResponse(BaseModel):
|
|
13
|
-
email: str
|
|
14
|
-
"""Email address for the new account."""
|
|
15
|
-
|
|
16
|
-
api_key: str = FieldInfo(alias="apiKey")
|
|
17
|
-
"""An API key for the new account.
|
|
18
|
-
|
|
19
|
-
Use it as the `Bearer` token on subsequent requests. It is shown once and locked
|
|
20
|
-
(`403` `EMAIL_NOT_VERIFIED_ERROR`) until the account's email is verified;
|
|
21
|
-
verification unlocks this same key, so keep it and retry. It is replaced only when
|
|
22
|
-
the account owner first signs in to the GrowSurf dashboard.
|
|
23
|
-
"""
|
|
24
|
-
|
|
25
|
-
verification_status: Literal["NOT_REQUESTED", "REQUESTED", "VERIFIED"] = FieldInfo(alias="verificationStatus")
|
|
26
|
-
"""GrowSurf team verification state.
|
|
27
|
-
|
|
28
|
-
`VERIFIED` is required before a program can send participant emails.
|
|
29
|
-
"""
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import os
|
|
6
|
-
from typing import Any, cast
|
|
7
|
-
|
|
8
|
-
import httpx
|
|
9
|
-
import pytest
|
|
10
|
-
|
|
11
|
-
from growsurf import Growsurf, AsyncGrowsurf
|
|
12
|
-
from tests.utils import assert_matches_type
|
|
13
|
-
from growsurf.types import CreateAccountResponse
|
|
14
|
-
|
|
15
|
-
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class TestAccount:
|
|
19
|
-
parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
|
|
20
|
-
|
|
21
|
-
@pytest.mark.parametrize("configured_api_key", [None, "My API Key"], ids=["keyless", "configured-key"])
|
|
22
|
-
def test_create_never_sends_authorization(
|
|
23
|
-
self,
|
|
24
|
-
monkeypatch: pytest.MonkeyPatch,
|
|
25
|
-
configured_api_key: str | None,
|
|
26
|
-
) -> None:
|
|
27
|
-
monkeypatch.delenv("GROWSURF_API_KEY", raising=False)
|
|
28
|
-
requests: list[httpx.Request] = []
|
|
29
|
-
|
|
30
|
-
def handler(request: httpx.Request) -> httpx.Response:
|
|
31
|
-
requests.append(request)
|
|
32
|
-
return httpx.Response(
|
|
33
|
-
200,
|
|
34
|
-
json={
|
|
35
|
-
"email": "richard@piedpiper.com",
|
|
36
|
-
"apiKey": "new_key",
|
|
37
|
-
"verificationStatus": "NOT_REQUESTED",
|
|
38
|
-
},
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
with httpx.Client(transport=httpx.MockTransport(handler)) as http_client:
|
|
42
|
-
with Growsurf(
|
|
43
|
-
api_key=configured_api_key,
|
|
44
|
-
base_url="http://localhost:4010",
|
|
45
|
-
http_client=http_client,
|
|
46
|
-
) as account_client:
|
|
47
|
-
account_client.account.create(email="richard@piedpiper.com")
|
|
48
|
-
|
|
49
|
-
assert len(requests) == 1
|
|
50
|
-
assert "Authorization" not in requests[0].headers
|
|
51
|
-
|
|
52
|
-
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
53
|
-
@parametrize
|
|
54
|
-
def test_method_create(self, client: Growsurf) -> None:
|
|
55
|
-
account = client.account.create(email="richard@piedpiper.com")
|
|
56
|
-
assert_matches_type(CreateAccountResponse, account, path=["response"])
|
|
57
|
-
|
|
58
|
-
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
59
|
-
@parametrize
|
|
60
|
-
def test_method_create_with_all_params(self, client: Growsurf) -> None:
|
|
61
|
-
account = client.account.create(
|
|
62
|
-
email="richard@piedpiper.com",
|
|
63
|
-
company="Pied Piper",
|
|
64
|
-
first_name="Richard",
|
|
65
|
-
last_name="Hendricks",
|
|
66
|
-
)
|
|
67
|
-
assert_matches_type(CreateAccountResponse, account, path=["response"])
|
|
68
|
-
|
|
69
|
-
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
70
|
-
@parametrize
|
|
71
|
-
def test_raw_response_create(self, client: Growsurf) -> None:
|
|
72
|
-
response = client.account.with_raw_response.create(email="richard@piedpiper.com")
|
|
73
|
-
assert response.is_closed is True
|
|
74
|
-
account = response.parse()
|
|
75
|
-
assert_matches_type(CreateAccountResponse, account, path=["response"])
|
|
76
|
-
|
|
77
|
-
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
78
|
-
@parametrize
|
|
79
|
-
def test_streaming_response_create(self, client: Growsurf) -> None:
|
|
80
|
-
with client.account.with_streaming_response.create(email="richard@piedpiper.com") as response:
|
|
81
|
-
assert not response.is_closed
|
|
82
|
-
account = response.parse()
|
|
83
|
-
assert_matches_type(CreateAccountResponse, account, path=["response"])
|
|
84
|
-
assert cast(Any, response.is_closed) is True
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
class TestAsyncAccount:
|
|
88
|
-
parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"])
|
|
89
|
-
|
|
90
|
-
@pytest.mark.parametrize("configured_api_key", [None, "My API Key"], ids=["keyless", "configured-key"])
|
|
91
|
-
async def test_create_never_sends_authorization(
|
|
92
|
-
self,
|
|
93
|
-
monkeypatch: pytest.MonkeyPatch,
|
|
94
|
-
configured_api_key: str | None,
|
|
95
|
-
) -> None:
|
|
96
|
-
monkeypatch.delenv("GROWSURF_API_KEY", raising=False)
|
|
97
|
-
requests: list[httpx.Request] = []
|
|
98
|
-
|
|
99
|
-
def handler(request: httpx.Request) -> httpx.Response:
|
|
100
|
-
requests.append(request)
|
|
101
|
-
return httpx.Response(
|
|
102
|
-
200,
|
|
103
|
-
json={
|
|
104
|
-
"email": "richard@piedpiper.com",
|
|
105
|
-
"apiKey": "new_key",
|
|
106
|
-
"verificationStatus": "NOT_REQUESTED",
|
|
107
|
-
},
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
async with httpx.AsyncClient(transport=httpx.MockTransport(handler)) as http_client:
|
|
111
|
-
async with AsyncGrowsurf(
|
|
112
|
-
api_key=configured_api_key,
|
|
113
|
-
base_url="http://localhost:4010",
|
|
114
|
-
http_client=http_client,
|
|
115
|
-
) as account_client:
|
|
116
|
-
await account_client.account.create(email="richard@piedpiper.com")
|
|
117
|
-
|
|
118
|
-
assert len(requests) == 1
|
|
119
|
-
assert "Authorization" not in requests[0].headers
|
|
120
|
-
|
|
121
|
-
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
122
|
-
@parametrize
|
|
123
|
-
async def test_method_create(self, async_client: AsyncGrowsurf) -> None:
|
|
124
|
-
account = await async_client.account.create(email="richard@piedpiper.com")
|
|
125
|
-
assert_matches_type(CreateAccountResponse, account, path=["response"])
|
|
126
|
-
|
|
127
|
-
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
128
|
-
@parametrize
|
|
129
|
-
async def test_method_create_with_all_params(self, async_client: AsyncGrowsurf) -> None:
|
|
130
|
-
account = await async_client.account.create(
|
|
131
|
-
email="richard@piedpiper.com",
|
|
132
|
-
company="Pied Piper",
|
|
133
|
-
first_name="Richard",
|
|
134
|
-
last_name="Hendricks",
|
|
135
|
-
)
|
|
136
|
-
assert_matches_type(CreateAccountResponse, account, path=["response"])
|
|
137
|
-
|
|
138
|
-
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
139
|
-
@parametrize
|
|
140
|
-
async def test_raw_response_create(self, async_client: AsyncGrowsurf) -> None:
|
|
141
|
-
response = await async_client.account.with_raw_response.create(email="richard@piedpiper.com")
|
|
142
|
-
assert response.is_closed is True
|
|
143
|
-
account = await response.parse()
|
|
144
|
-
assert_matches_type(CreateAccountResponse, account, path=["response"])
|
|
145
|
-
|
|
146
|
-
@pytest.mark.skip(reason="Mock server tests are disabled")
|
|
147
|
-
@parametrize
|
|
148
|
-
async def test_streaming_response_create(self, async_client: AsyncGrowsurf) -> None:
|
|
149
|
-
async with async_client.account.with_streaming_response.create(email="richard@piedpiper.com") as response:
|
|
150
|
-
assert not response.is_closed
|
|
151
|
-
account = await response.parse()
|
|
152
|
-
assert_matches_type(CreateAccountResponse, account, path=["response"])
|
|
153
|
-
assert cast(Any, response.is_closed) is True
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|