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.
Files changed (219) hide show
  1. growsurf_python-1.18.0/.release-please-manifest.json +3 -0
  2. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/CHANGELOG.md +8 -0
  3. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/PKG-INFO +1 -1
  4. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/api.md +0 -14
  5. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/pyproject.toml +1 -1
  6. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_client.py +1 -38
  7. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_version.py +1 -1
  8. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/__init__.py +0 -14
  9. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/__init__.py +0 -2
  10. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/test_team_contract.py +1 -7
  11. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/uv.lock +1 -1
  12. growsurf_python-1.17.0/.release-please-manifest.json +0 -3
  13. growsurf_python-1.17.0/src/growsurf/resources/account.py +0 -219
  14. growsurf_python-1.17.0/src/growsurf/types/account_create_params.py +0 -23
  15. growsurf_python-1.17.0/src/growsurf/types/create_account_response.py +0 -29
  16. growsurf_python-1.17.0/tests/api_resources/test_account.py +0 -153
  17. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/.gitignore +0 -0
  18. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/CONTRIBUTING.md +0 -0
  19. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/LICENSE +0 -0
  20. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/README.md +0 -0
  21. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/SECURITY.md +0 -0
  22. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/bin/check-release-environment +0 -0
  23. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/bin/publish-pypi +0 -0
  24. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/examples/.keep +0 -0
  25. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/release-please-config.json +0 -0
  26. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/requirements-dev.lock +0 -0
  27. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/__init__.py +0 -0
  28. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_base_client.py +0 -0
  29. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_compat.py +0 -0
  30. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_constants.py +0 -0
  31. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_exceptions.py +0 -0
  32. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_files.py +0 -0
  33. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_models.py +0 -0
  34. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_qs.py +0 -0
  35. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_resource.py +0 -0
  36. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_response.py +0 -0
  37. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_streaming.py +0 -0
  38. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_types.py +0 -0
  39. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/__init__.py +0 -0
  40. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_compat.py +0 -0
  41. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_datetime_parse.py +0 -0
  42. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_json.py +0 -0
  43. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_logs.py +0 -0
  44. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_path.py +0 -0
  45. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_proxy.py +0 -0
  46. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_reflection.py +0 -0
  47. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_resources_proxy.py +0 -0
  48. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_streams.py +0 -0
  49. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_sync.py +0 -0
  50. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_transform.py +0 -0
  51. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_typing.py +0 -0
  52. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/_utils/_utils.py +0 -0
  53. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/lib/.keep +0 -0
  54. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/py.typed +0 -0
  55. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/__init__.py +0 -0
  56. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/campaign.py +0 -0
  57. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/commission.py +0 -0
  58. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/custom_domain.py +0 -0
  59. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/design.py +0 -0
  60. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/emails.py +0 -0
  61. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/installation.py +0 -0
  62. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/integrations.py +0 -0
  63. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/options.py +0 -0
  64. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/participant.py +0 -0
  65. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/program_resources.py +0 -0
  66. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/reward.py +0 -0
  67. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/rewards.py +0 -0
  68. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/campaign/webhooks.py +0 -0
  69. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/resources/team.py +0 -0
  70. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_application.py +0 -0
  71. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_application_answer.py +0 -0
  72. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_application_list_response.py +0 -0
  73. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_invite.py +0 -0
  74. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/affiliate_invite_list_response.py +0 -0
  75. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/analytics_availability.py +0 -0
  76. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/analytics_unavailable_reason.py +0 -0
  77. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/__init__.py +0 -0
  78. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign.py +0 -0
  79. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_custom_domain.py +0 -0
  80. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_design.py +0 -0
  81. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_emails.py +0 -0
  82. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_installation.py +0 -0
  83. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_options.py +0 -0
  84. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/campaign_reward_list_response.py +0 -0
  85. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/commission_approve_response.py +0 -0
  86. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/commission_delete_response.py +0 -0
  87. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/custom_domain_set_params.py +0 -0
  88. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_campaign_custom_domain_response.py +0 -0
  89. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_program_resource_response.py +0 -0
  90. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_reward_response.py +0 -0
  91. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/delete_webhook_response.py +0 -0
  92. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/email_participant_response.py +0 -0
  93. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/fraud_risk_level.py +0 -0
  94. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/integration.py +0 -0
  95. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/integration_list_response.py +0 -0
  96. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/language.py +0 -0
  97. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant.py +0 -0
  98. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_activation_analytics.py +0 -0
  99. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_activity_logs_response.py +0 -0
  100. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_add_params.py +0 -0
  101. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_analytics_params.py +0 -0
  102. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_analytics_response.py +0 -0
  103. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_bulk_delete_params.py +0 -0
  104. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_bulk_delete_response.py +0 -0
  105. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_delete_response.py +0 -0
  106. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_email_params.py +0 -0
  107. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_get_payout_destination_response.py +0 -0
  108. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_activity_logs_params.py +0 -0
  109. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_commissions_params.py +0 -0
  110. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_payouts_params.py +0 -0
  111. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_referrals_params.py +0 -0
  112. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_rewards_params.py +0 -0
  113. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_list_rewards_response.py +0 -0
  114. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_record_transaction_params.py +0 -0
  115. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_record_transaction_response.py +0 -0
  116. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_refund_transaction_params.py +0 -0
  117. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_refund_transaction_response.py +0 -0
  118. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_params.py +0 -0
  119. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_response.py +0 -0
  120. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_reward.py +0 -0
  121. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_send_invites_params.py +0 -0
  122. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_send_invites_response.py +0 -0
  123. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_trigger_referral_params.py +0 -0
  124. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_trigger_referral_response.py +0 -0
  125. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/participant_update_params.py +0 -0
  126. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/pending_analytics_erasure.py +0 -0
  127. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource.py +0 -0
  128. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource_list_response.py +0 -0
  129. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource_upload_result.py +0 -0
  130. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/program_resource_upload_ticket.py +0 -0
  131. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/referral_source.py +0 -0
  132. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/referral_status.py +0 -0
  133. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward.py +0 -0
  134. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_approve_params.py +0 -0
  135. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_approve_response.py +0 -0
  136. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_create_params.py +0 -0
  137. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_delete_response.py +0 -0
  138. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_fulfill_response.py +0 -0
  139. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_tax_valuation.py +0 -0
  140. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/reward_update_params.py +0 -0
  141. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook.py +0 -0
  142. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_create_params.py +0 -0
  143. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_event.py +0 -0
  144. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_list_response.py +0 -0
  145. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_test_params.py +0 -0
  146. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_test_response.py +0 -0
  147. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign/webhook_update_params.py +0 -0
  148. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_activation_analytics_response.py +0 -0
  149. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_affiliate_invite_params.py +0 -0
  150. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_mobile_participant_token_params.py +0 -0
  151. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_mobile_participant_token_response.py +0 -0
  152. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_create_params.py +0 -0
  153. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_engagement_analytics.py +0 -0
  154. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_affiliate_applications_params.py +0 -0
  155. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_affiliate_invites_params.py +0 -0
  156. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_commissions_params.py +0 -0
  157. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_leaderboard_params.py +0 -0
  158. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_participants_params.py +0 -0
  159. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_payouts_params.py +0 -0
  160. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_referrals_params.py +0 -0
  161. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_list_response.py +0 -0
  162. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_retrieve_activation_analytics_params.py +0 -0
  163. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_retrieve_analytics_params.py +0 -0
  164. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_retrieve_analytics_response.py +0 -0
  165. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_review_affiliate_application_params.py +0 -0
  166. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/campaign_update_params.py +0 -0
  167. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/commission_structure.py +0 -0
  168. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/email_analytics.py +0 -0
  169. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/participant_commission_list.py +0 -0
  170. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/participant_list.py +0 -0
  171. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/participant_payout_list.py +0 -0
  172. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/referral_flow_screenshot.py +0 -0
  173. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/referral_flow_screenshots_response.py +0 -0
  174. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/referral_list.py +0 -0
  175. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/rotate_api_key_response.py +0 -0
  176. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/team.py +0 -0
  177. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/team_update_params.py +0 -0
  178. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/src/growsurf/types/verification_email_response.py +0 -0
  179. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/__init__.py +0 -0
  180. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/__init__.py +0 -0
  181. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/__init__.py +0 -0
  182. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_commission.py +0 -0
  183. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_custom_domain.py +0 -0
  184. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_design.py +0 -0
  185. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_emails.py +0 -0
  186. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_installation.py +0 -0
  187. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_integrations.py +0 -0
  188. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_options.py +0 -0
  189. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_participant.py +0 -0
  190. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_program_resources.py +0 -0
  191. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_reward.py +0 -0
  192. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_rewards.py +0 -0
  193. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/campaign/test_webhooks.py +0 -0
  194. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/api_resources/test_campaign.py +0 -0
  195. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/conftest.py +0 -0
  196. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/sample_file.txt +0 -0
  197. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_client.py +0 -0
  198. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_extract_files.py +0 -0
  199. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_files.py +0 -0
  200. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_models.py +0 -0
  201. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_qs.py +0 -0
  202. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_required_args.py +0 -0
  203. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_response.py +0 -0
  204. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_streaming.py +0 -0
  205. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_transform.py +0 -0
  206. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_utils/test_datetime_parse.py +0 -0
  207. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_utils/test_json.py +0 -0
  208. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_utils/test_path.py +0 -0
  209. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_utils/test_proxy.py +0 -0
  210. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/test_utils/test_typing.py +0 -0
  211. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_affiliate_application.py +0 -0
  212. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_analytics_reward_status.py +0 -0
  213. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_email_analytics.py +0 -0
  214. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_lead_reward_events.py +0 -0
  215. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_participant_activation_engagement_analytics.py +0 -0
  216. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_participant_contract.py +0 -0
  217. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_payout_provider_forward_compat.py +0 -0
  218. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/types/test_referral_source.py +0 -0
  219. {growsurf_python-1.17.0 → growsurf_python-1.18.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.18.0"
3
+ }
@@ -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,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: growsurf-python
3
- Version: 1.17.0
3
+ Version: 1.18.0
4
4
  Summary: The official Python library for the growsurf API
5
5
  Project-URL: Homepage, https://growsurf.com/
6
6
  Project-URL: Repository, https://github.com/growsurf/growsurf-python
@@ -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:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "growsurf-python"
3
- version = "1.17.0"
3
+ version = "1.18.0"
4
4
  description = "The official Python library for the growsurf API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -36,9 +36,8 @@ from ._base_client import (
36
36
  )
37
37
 
38
38
  if TYPE_CHECKING:
39
- from .resources import team, account, campaign
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
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "growsurf"
4
- __version__ = "1.17.0" # x-release-please-version
4
+ __version__ = "1.18.0" # x-release-please-version
@@ -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 test_safe_team_and_onboarding_models() -> None:
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
- }
@@ -443,7 +443,7 @@ wheels = [
443
443
 
444
444
  [[package]]
445
445
  name = "growsurf-python"
446
- version = "1.17.0"
446
+ version = "1.18.0"
447
447
  source = { editable = "." }
448
448
  dependencies = [
449
449
  { name = "anyio" },
@@ -1,3 +0,0 @@
1
- {
2
- ".": "1.17.0"
3
- }
@@ -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