stigg-api-client-v2 0.693.0__py3-none-any.whl → 5.9.0__py3-none-any.whl

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 (75) hide show
  1. stigg/_edge_utils.py +58 -0
  2. stigg/client.py +97 -21
  3. stigg/generated/__init__.py +734 -42
  4. stigg/generated/apply_subscription.py +4 -12
  5. stigg/generated/archive_customer.py +2 -3
  6. stigg/generated/async_base_client.py +187 -29
  7. stigg/generated/async_client.py +3659 -620
  8. stigg/generated/base_client.py +144 -23
  9. stigg/generated/base_model.py +16 -47
  10. stigg/generated/cancel_subscription.py +2 -3
  11. stigg/generated/cancel_subscription_updates.py +1 -4
  12. stigg/generated/client.py +3661 -616
  13. stigg/generated/create_payment_session.py +20 -0
  14. stigg/generated/create_subscription.py +2 -3
  15. stigg/generated/delegate_subscription_to_customer.py +22 -0
  16. stigg/generated/detach_customer_payment_method.py +20 -0
  17. stigg/generated/enums.py +426 -7
  18. stigg/generated/estimate_subscription.py +2 -3
  19. stigg/generated/estimate_subscription_update.py +2 -3
  20. stigg/generated/exceptions.py +9 -5
  21. stigg/generated/fragments.py +1864 -701
  22. stigg/generated/get_active_subscriptions.py +2 -3
  23. stigg/generated/get_active_subscriptions_list.py +22 -0
  24. stigg/generated/get_checkout_state.py +2 -3
  25. stigg/generated/get_coupons.py +4 -5
  26. stigg/generated/get_credit_balance.py +20 -0
  27. stigg/generated/get_credit_grants.py +36 -0
  28. stigg/generated/get_credit_ledger.py +25 -0
  29. stigg/generated/get_credit_usage.py +18 -0
  30. stigg/generated/get_customer_by_id.py +2 -3
  31. stigg/generated/get_customer_portal_by_ref_id.py +2 -3
  32. stigg/generated/get_customer_statistics.py +2 -3
  33. stigg/generated/get_entitlement.py +2 -3
  34. stigg/generated/get_entitlements.py +2 -3
  35. stigg/generated/get_entitlements_state.py +31 -0
  36. stigg/generated/get_mock_paywall.py +3 -5
  37. stigg/generated/get_paywall.py +2 -3
  38. stigg/generated/get_products.py +4 -5
  39. stigg/generated/get_sdk_configuration.py +3 -3
  40. stigg/generated/get_subscription.py +18 -0
  41. stigg/generated/get_subscriptions.py +35 -0
  42. stigg/generated/get_usage_history.py +2 -3
  43. stigg/generated/get_usage_history_v_2.py +18 -0
  44. stigg/generated/grant_credits.py +20 -0
  45. stigg/generated/grant_promotional_entitlements.py +2 -3
  46. stigg/generated/grant_promotional_entitlements_group.py +24 -0
  47. stigg/generated/import_customer.py +2 -3
  48. stigg/generated/import_customer_bulk.py +1 -4
  49. stigg/generated/import_subscriptions_bulk.py +1 -4
  50. stigg/generated/input_types.py +3871 -1878
  51. stigg/generated/migrate_subscription_to_latest.py +2 -3
  52. stigg/generated/preview_next_invoice.py +20 -0
  53. stigg/generated/preview_subscription.py +2 -3
  54. stigg/generated/provision_customer.py +4 -22
  55. stigg/generated/provision_subscription.py +4 -15
  56. stigg/generated/report_entitlement_check_requested.py +1 -4
  57. stigg/generated/report_event.py +1 -4
  58. stigg/generated/report_usage.py +6 -13
  59. stigg/generated/report_usage_bulk.py +22 -0
  60. stigg/generated/revoke_promotional_entitlement.py +5 -4
  61. stigg/generated/revoke_promotional_entitlements_group.py +24 -0
  62. stigg/generated/transfer_subscription.py +2 -3
  63. stigg/generated/transfer_subscription_to_resource.py +22 -0
  64. stigg/generated/unarchive_customer.py +2 -3
  65. stigg/generated/unlink_promotional_entitlements_group.py +24 -0
  66. stigg/generated/update_customer.py +2 -3
  67. stigg/generated/update_subscription.py +2 -3
  68. stigg/generated/void_credit_grant.py +18 -0
  69. {stigg_api_client_v2-0.693.0.dist-info → stigg_api_client_v2-5.9.0.dist-info}/METADATA +3 -4
  70. stigg_api_client_v2-5.9.0.dist-info/RECORD +73 -0
  71. stigg/edge_utils.py +0 -28
  72. stigg/generated/scalars.py +0 -6
  73. stigg_api_client_v2-0.693.0.dist-info/RECORD +0 -54
  74. {stigg_api_client_v2-0.693.0.dist-info → stigg_api_client_v2-5.9.0.dist-info}/LICENSE +0 -0
  75. {stigg_api_client_v2-0.693.0.dist-info → stigg_api_client_v2-5.9.0.dist-info}/WHEEL +0 -0
stigg/_edge_utils.py ADDED
@@ -0,0 +1,58 @@
1
+ from typing import Tuple, Dict
2
+
3
+ from stigg.generated import FetchEntitlementsQuery, GetPaywallInput, FetchEntitlementQuery, GetActiveSubscriptionsInput
4
+
5
+
6
+ def build_get_entitlement_data(edge_url: str, query: FetchEntitlementQuery) -> Tuple[str, Dict]:
7
+ url = f"{edge_url}/v1/c/{query.customer_id}/entitlements.json"
8
+ params = {}
9
+ if query.resource_id is not None:
10
+ params["resourceId"] = query.resource_id
11
+
12
+ if query.feature_id is not None:
13
+ params["featureId"] = query.feature_id
14
+
15
+ if query.options is not None and query.options.requested_usage is not None:
16
+ params['requestedUsage'] = query.options.requested_usage
17
+
18
+ return url, params
19
+
20
+
21
+ def build_get_entitlements_data(edge_url: str, query: FetchEntitlementsQuery) -> Tuple[str, Dict]:
22
+ url = f"{edge_url}/v1/c/{query.customer_id}/entitlements.json"
23
+ params = {}
24
+ if query.resource_id is not None:
25
+ params["resourceId"] = query.resource_id
26
+
27
+ return url, params
28
+
29
+
30
+ def build_get_paywall_data(edge_url: str, _input: GetPaywallInput) -> Tuple[str, Dict]:
31
+ if _input.product_id is not None:
32
+ url = f"{edge_url}/v1/p/{_input.product_id}/paywall.json"
33
+ else:
34
+ url = f"{edge_url}/v1/paywall.json"
35
+
36
+ params = {}
37
+ if _input.billing_country_code is not None:
38
+ params["billingCountryCode"] = _input.billing_country_code
39
+
40
+ if _input.fetch_all_countries_prices is not None:
41
+ params["fetchAllCountriesPrices"] = _input.fetch_all_countries_prices
42
+
43
+ if _input.include_hidden_plans is not None:
44
+ params["includeHiddenPlans"] = _input.include_hidden_plans
45
+
46
+ return url, params
47
+
48
+ def build_get_subscriptions_data(edge_url: str, _input: GetActiveSubscriptionsInput) -> Tuple[str, Dict]:
49
+ url = f"{edge_url}/v1/c/{_input.customer_id}/subscriptions.json"
50
+
51
+ params = {}
52
+ if _input.resource_id is not None:
53
+ params["resourceId"] = _input.resource_id
54
+
55
+ if _input.resource_ids is not None:
56
+ params["resourceIds"] = _input.resource_ids
57
+
58
+ return url, params
stigg/client.py CHANGED
@@ -1,3 +1,5 @@
1
+ from typing import Union, Optional, Dict, Any
2
+
1
3
  import httpx
2
4
  from httpx import Timeout
3
5
  from tenacity import retry, retry_if_exception_type, stop_after_attempt
@@ -5,8 +7,9 @@ from tenacity import retry, retry_if_exception_type, stop_after_attempt
5
7
  from stigg.generated.client import Client
6
8
  from stigg.generated.async_client import AsyncClient
7
9
  from stigg.generated import FetchEntitlementsQuery, GetEntitlements, GraphQLClientHttpError, GetPaywallInput, \
8
- GetPaywall, GraphQlClientInvalidResponseError
9
- from stigg.edge_utils import build_get_entitlements_data, build_get_paywall_data
10
+ GetPaywall, GraphQLClientInvalidResponseError, FetchEntitlementQuery, GetEntitlement, UsageMeasurementCreateInput, \
11
+ ReportUsage, ReportUsageInput, GetActiveSubscriptionsInput, GetActiveSubscriptionsList
12
+ from stigg._edge_utils import build_get_entitlements_data, build_get_paywall_data, build_get_entitlement_data, build_get_subscriptions_data
10
13
 
11
14
  PRODUCTION_API_URL = "https://api.stigg.io/graphql"
12
15
  PRODUCTION_EDGE_API_URL = "https://edge.api.stigg.io"
@@ -18,12 +21,13 @@ HTTP_TRANSPORT_RETRY_COUNT = 5
18
21
 
19
22
  RETRY_KWARGS = {
20
23
  "retry": (
21
- retry_if_exception_type(GraphQLClientHttpError) | retry_if_exception_type(GraphQlClientInvalidResponseError)
24
+ retry_if_exception_type(GraphQLClientHttpError) | retry_if_exception_type(GraphQLClientInvalidResponseError)
22
25
  ),
23
26
  "stop": stop_after_attempt(STIGG_REQUESTS_RETRY_COUNT),
24
27
  "reraise": True,
25
28
  }
26
29
 
30
+ X_GRAPHQL_OPERATION_NAME = 'x-graphql-operation-name'
27
31
 
28
32
  class StiggClient(Client):
29
33
  def __init__(self, enable_edge: bool, edge_api_url: str, *args, **kwargs):
@@ -32,29 +36,64 @@ class StiggClient(Client):
32
36
 
33
37
  super().__init__(*args, **kwargs)
34
38
 
39
+ def execute(
40
+ self,
41
+ query: str,
42
+ operation_name: Optional[str] = None,
43
+ variables: Optional[Dict[str, Any]] = None,
44
+ **kwargs: Any,
45
+ ) -> httpx.Response:
46
+ headers = kwargs.get("headers", {})
47
+ headers[X_GRAPHQL_OPERATION_NAME] = operation_name
48
+ kwargs['headers'] = headers
49
+
50
+ return super().execute(query, operation_name, variables, **kwargs)
51
+
35
52
  @retry(**RETRY_KWARGS)
36
53
  def get_data(self, *args, **kwargs):
37
54
  return super().get_data(*args, **kwargs)
38
55
 
39
- def get_entitlements(self, query: FetchEntitlementsQuery) -> GetEntitlements:
56
+ def get_entitlement(self, input: FetchEntitlementQuery, **kwargs: Any) -> GetEntitlement:
40
57
  if self.enable_edge is False:
41
- return super().get_entitlements(query)
58
+ return super().get_entitlement(input, **kwargs)
42
59
 
43
- url, params = build_get_entitlements_data(self.edge_api_url, query)
60
+ url, params = build_get_entitlement_data(self.edge_api_url, input)
61
+
62
+ response = self.http_client.get(url=url, params=params, **kwargs)
63
+ data = self.get_data(response)
64
+ return GetEntitlement.model_validate(data)
65
+
66
+ def get_entitlements(self, query: FetchEntitlementsQuery, **kwargs: Any) -> GetEntitlements:
67
+ if self.enable_edge is False:
68
+ return super().get_entitlements(query, **kwargs)
44
69
 
45
- response = self.http_client.get(url=url, params=params)
70
+ url, params = build_get_entitlements_data(self.edge_api_url, query)
71
+ response = self.http_client.get(url=url, params=params, **kwargs)
46
72
  data = self.get_data(response)
47
- return GetEntitlements.parse_obj(data)
73
+ return GetEntitlements.model_validate(data)
48
74
 
49
- def get_paywall(self, input: GetPaywallInput) -> GetPaywall:
75
+ def get_active_subscriptions_list(self, input: GetActiveSubscriptionsInput, **kwargs: Any) -> GetActiveSubscriptionsList:
50
76
  if self.enable_edge is False:
51
- return super().get_paywall(input)
77
+ return super().get_active_subscriptions_list(input, **kwargs)
78
+
79
+ url, params = build_get_subscriptions_data(self.edge_api_url, input)
80
+
81
+ response = self.http_client.get(url=url, params=params, **kwargs)
82
+ data = self.get_data(response)
83
+ return GetActiveSubscriptionsList.model_validate(data)
84
+
85
+ def get_paywall(self, input: GetPaywallInput, **kwargs: Any) -> GetPaywall:
86
+ if input.customer_id is not None or self.enable_edge is False:
87
+ return super().get_paywall(input, **kwargs)
52
88
 
53
89
  url, params = build_get_paywall_data(self.edge_api_url, input)
54
90
 
55
- response = self.http_client.get(url=url, params=params)
91
+ response = self.http_client.get(url=url, params=params, **kwargs)
56
92
  data = self.get_data(response)
57
- return GetPaywall.parse_obj(data)
93
+ return GetPaywall.model_validate(data)
94
+
95
+ def report_usage(self, input: Union[UsageMeasurementCreateInput, ReportUsageInput], **kwargs: Any) -> ReportUsage:
96
+ return super().report_usage(input, **kwargs)
58
97
 
59
98
 
60
99
  class AsyncStiggClient(AsyncClient):
@@ -64,33 +103,70 @@ class AsyncStiggClient(AsyncClient):
64
103
 
65
104
  super().__init__(*args, **kwargs)
66
105
 
106
+ def execute(
107
+ self,
108
+ query: str,
109
+ operation_name: Optional[str] = None,
110
+ variables: Optional[Dict[str, Any]] = None,
111
+ **kwargs: Any,
112
+ ) -> httpx.Response:
113
+ headers = kwargs.get("headers", {})
114
+ headers[X_GRAPHQL_OPERATION_NAME] = operation_name
115
+ kwargs['headers'] = headers
116
+
117
+ return super().execute(query, operation_name, variables, **kwargs)
118
+
119
+
67
120
  @retry(**RETRY_KWARGS)
68
121
  def get_data(self, *args, **kwargs):
69
122
  return super().get_data(*args, **kwargs)
70
123
 
71
- async def get_entitlements(self, query: FetchEntitlementsQuery) -> GetEntitlements:
124
+ async def get_entitlement(self, input: FetchEntitlementQuery, **kwargs: Any) -> GetEntitlement:
72
125
  if self.enable_edge is False:
73
- return await super().get_entitlements(query)
126
+ return await super().get_entitlement(input, **kwargs)
127
+
128
+ url, params = build_get_entitlement_data(self.edge_api_url, input)
129
+
130
+ response = await self.http_client.get(url=url, params=params, **kwargs)
131
+ data = self.get_data(response)
132
+ return GetEntitlement.model_validate(data)
133
+
134
+ async def get_entitlements(self, query: FetchEntitlementsQuery, **kwargs: Any) -> GetEntitlements:
135
+ if self.enable_edge is False:
136
+ return await super().get_entitlements(query, **kwargs)
74
137
 
75
138
  url, params = build_get_entitlements_data(self.edge_api_url, query)
76
139
 
77
- response = await self.http_client.get(url=url, params=params)
140
+ response = await self.http_client.get(url=url, params=params, **kwargs)
78
141
  data = self.get_data(response)
79
- return GetEntitlements.parse_obj(data)
142
+ return GetEntitlements.model_validate(data)
80
143
 
81
- async def get_paywall(self, input: GetPaywallInput) -> GetPaywall:
144
+ async def get_active_subscriptions_list(self, input: GetActiveSubscriptionsInput, **kwargs: Any) -> GetActiveSubscriptionsList:
82
145
  if self.enable_edge is False:
83
- return await super().get_paywall(input)
146
+ return await super().get_active_subscriptions_list(input, **kwargs)
147
+
148
+ url, params = build_get_subscriptions_data(self.edge_api_url, input)
149
+
150
+ response = await self.http_client.get(url=url, params=params, **kwargs)
151
+ data = self.get_data(response)
152
+ return GetActiveSubscriptionsList.model_validate(data)
153
+
154
+ async def get_paywall(self, input: GetPaywallInput, **kwargs: Any) -> GetPaywall:
155
+ if input.customer_id is not None or self.enable_edge is False:
156
+ return await super().get_paywall(input, **kwargs)
84
157
 
85
158
  url, params = build_get_paywall_data(self.edge_api_url, input)
86
159
 
87
- response = await self.http_client.get(url=url, params=params)
160
+ response = await self.http_client.get(url=url, params=params, **kwargs)
88
161
  data = self.get_data(response)
89
- return GetPaywall.parse_obj(data)
162
+ return GetPaywall.model_validate(data)
163
+
164
+ async def report_usage(self, input: Union[UsageMeasurementCreateInput, ReportUsageInput], **kwargs: Any) -> ReportUsage:
165
+ return await super().report_usage(input, **kwargs)
90
166
 
91
167
 
92
168
  def get_headers(api_key: str):
93
- return {"X-API-KEY": api_key, "Content-Type": "application/json"}
169
+ return {"X-API-KEY": api_key, "X-API-VERSION": "1", "Content-Type": "application/json"}
94
170
 
95
171
 
96
172
  class Stigg: