edx-enterprise-subsidy-client 0.4.2__py2.py3-none-any.whl → 0.4.4__py2.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.
- edx_enterprise_subsidy_client/__init__.py +1 -1
- edx_enterprise_subsidy_client/client.py +75 -0
- {edx_enterprise_subsidy_client-0.4.2.dist-info → edx_enterprise_subsidy_client-0.4.4.dist-info}/METADATA +9 -1
- edx_enterprise_subsidy_client-0.4.4.dist-info/RECORD +8 -0
- edx_enterprise_subsidy_client-0.4.2.dist-info/RECORD +0 -8
- {edx_enterprise_subsidy_client-0.4.2.dist-info → edx_enterprise_subsidy_client-0.4.4.dist-info}/LICENSE +0 -0
- {edx_enterprise_subsidy_client-0.4.2.dist-info → edx_enterprise_subsidy_client-0.4.4.dist-info}/LICENSE.txt +0 -0
- {edx_enterprise_subsidy_client-0.4.2.dist-info → edx_enterprise_subsidy_client-0.4.4.dist-info}/WHEEL +0 -0
- {edx_enterprise_subsidy_client-0.4.2.dist-info → edx_enterprise_subsidy_client-0.4.4.dist-info}/top_level.txt +0 -0
|
@@ -73,6 +73,41 @@ class EnterpriseSubsidyAPIClient:
|
|
|
73
73
|
settings.BACKEND_SERVICE_EDX_OAUTH2_SECRET,
|
|
74
74
|
)
|
|
75
75
|
|
|
76
|
+
def get_subsidy_aggregates_by_learner_url(self, subsidy_uuid):
|
|
77
|
+
"""
|
|
78
|
+
Helper method to fetch subsidy learner aggregate data API url.
|
|
79
|
+
"""
|
|
80
|
+
return f"{self.SUBSIDIES_ENDPOINT}{subsidy_uuid}/aggregates-by-learner"
|
|
81
|
+
|
|
82
|
+
def get_subsidy_aggregates_by_learner_data(self, subsidy_uuid, policy_uuid=None):
|
|
83
|
+
"""
|
|
84
|
+
Client method to fetch subsidy specific learner aggregate data.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
subsidy_uuid (str): Subsidy record UUID
|
|
88
|
+
policy_uuid (string): Optional param to filter subsidy aggregate data by subsidy access policy UUID
|
|
89
|
+
Returns:
|
|
90
|
+
json subsidy learner aggregate data response:
|
|
91
|
+
[{
|
|
92
|
+
'lms_user_id': '1337',
|
|
93
|
+
'enrollment_count': 45,
|
|
94
|
+
} ... ]
|
|
95
|
+
"""
|
|
96
|
+
url = self.get_subsidy_aggregates_by_learner_url(subsidy_uuid)
|
|
97
|
+
if policy_uuid:
|
|
98
|
+
url += f"?subsidy_access_policy_uuid={policy_uuid}"
|
|
99
|
+
try:
|
|
100
|
+
resp = self.client.get(url)
|
|
101
|
+
response_data = resp
|
|
102
|
+
resp.raise_for_status()
|
|
103
|
+
except requests.exceptions.HTTPError as exc:
|
|
104
|
+
logger.exception(
|
|
105
|
+
f'Subsidy client failed to fetch aggregate data for {subsidy_uuid} '
|
|
106
|
+
f'and policy: {policy_uuid}'
|
|
107
|
+
)
|
|
108
|
+
raise exc
|
|
109
|
+
return response_data.json()
|
|
110
|
+
|
|
76
111
|
def get_content_metadata_url(self, content_identifier):
|
|
77
112
|
"""Helper method to generate the subsidy service metadata API url, with a trailing slash."""
|
|
78
113
|
return self.CONTENT_METADATA_ENDPOINT + content_identifier + '/'
|
|
@@ -256,6 +291,7 @@ class EnterpriseSubsidyAPIClientV2(EnterpriseSubsidyAPIClient): # pylint: disab
|
|
|
256
291
|
"""
|
|
257
292
|
V2_BASE_URL = EnterpriseSubsidyAPIClient.API_BASE_URL + 'v2/'
|
|
258
293
|
TRANSACTIONS_LIST_ENDPOINT = V2_BASE_URL + 'subsidies/{subsidy_uuid}/admin/transactions/'
|
|
294
|
+
DEPOSITS_CREATE_ENDPOINT = V2_BASE_URL + 'subsidies/{subsidy_uuid}/admin/deposits/'
|
|
259
295
|
|
|
260
296
|
def list_subsidy_transactions(
|
|
261
297
|
self, subsidy_uuid, include_aggregates=True,
|
|
@@ -335,3 +371,42 @@ class EnterpriseSubsidyAPIClientV2(EnterpriseSubsidyAPIClient): # pylint: disab
|
|
|
335
371
|
)
|
|
336
372
|
response.raise_for_status()
|
|
337
373
|
return response.json()
|
|
374
|
+
|
|
375
|
+
def create_subsidy_deposit(
|
|
376
|
+
self,
|
|
377
|
+
subsidy_uuid,
|
|
378
|
+
desired_deposit_quantity,
|
|
379
|
+
sales_contract_reference_id,
|
|
380
|
+
sales_contract_reference_provider,
|
|
381
|
+
metadata,
|
|
382
|
+
idempotency_key=None,
|
|
383
|
+
):
|
|
384
|
+
"""
|
|
385
|
+
Creates a deposit in the given subsidy, requires operator-level permissions.
|
|
386
|
+
|
|
387
|
+
Raises:
|
|
388
|
+
requests.exceptions.HTTPError:
|
|
389
|
+
- 403 Forbidden: If auth failed.
|
|
390
|
+
- 429 Too Many Requests: If the ledger was locked (resource contention, try again later).
|
|
391
|
+
- 400 Bad Request: If any of the values were invalid. Reasons include:
|
|
392
|
+
* non-positive quantity.
|
|
393
|
+
* provider slug does not exist in database.
|
|
394
|
+
- 422 Unprocessable Entity: Catchall status for anything that prevented the deposit from being
|
|
395
|
+
created. Reasons include, but are not limited to:
|
|
396
|
+
* Subsidy is inactive.
|
|
397
|
+
* Another deposit with same idempotency_key already exists.
|
|
398
|
+
"""
|
|
399
|
+
request_payload = {
|
|
400
|
+
'desired_deposit_quantity': desired_deposit_quantity,
|
|
401
|
+
'sales_contract_reference_id': sales_contract_reference_id,
|
|
402
|
+
'sales_contract_reference_provider': sales_contract_reference_provider,
|
|
403
|
+
'metadata': metadata,
|
|
404
|
+
}
|
|
405
|
+
if idempotency_key is not None:
|
|
406
|
+
request_payload['idempotency_key'] = idempotency_key
|
|
407
|
+
response = self.client.post(
|
|
408
|
+
self.DEPOSITS_CREATE_ENDPOINT.format(subsidy_uuid=subsidy_uuid),
|
|
409
|
+
json=request_payload,
|
|
410
|
+
)
|
|
411
|
+
response.raise_for_status()
|
|
412
|
+
return response.json()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: edx-enterprise-subsidy-client
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: Client for interacting with the enterprise-subsidy service.
|
|
5
5
|
Home-page: https://github.com/openedx/edx-enterprise-subsidy-client
|
|
6
6
|
Author: edX
|
|
@@ -225,6 +225,14 @@ Change Log
|
|
|
225
225
|
Unreleased
|
|
226
226
|
**********
|
|
227
227
|
|
|
228
|
+
[0.4.4]
|
|
229
|
+
*******
|
|
230
|
+
* feat: add support for deposit creation (ENT-9133)
|
|
231
|
+
|
|
232
|
+
[0.4.3]
|
|
233
|
+
*******
|
|
234
|
+
* feat: adding new subsidy client method to fetch subsidy aggregate data
|
|
235
|
+
|
|
228
236
|
[0.4.2]
|
|
229
237
|
*******
|
|
230
238
|
* Switch from ``edx-sphinx-theme`` to ``sphinx-book-theme`` since the former is
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
edx_enterprise_subsidy_client/__init__.py,sha256=Zdci1Zm-K660uWJ1Y_Vs13g1SARbGrIhH5KBHBQwbWM,205
|
|
2
|
+
edx_enterprise_subsidy_client/client.py,sha256=z2LwIaS3Wf2j16eTjfFKJDR4DKZNegO9mlESLgb_pJQ,14993
|
|
3
|
+
edx_enterprise_subsidy_client-0.4.4.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
|
4
|
+
edx_enterprise_subsidy_client-0.4.4.dist-info/LICENSE.txt,sha256=QTW2QN7q3XszgUAXm9Dzgtu5LXYKbR1SGnqMa7ufEuY,35139
|
|
5
|
+
edx_enterprise_subsidy_client-0.4.4.dist-info/METADATA,sha256=6hG5lkL-BlcmYA7qb_n3UbXGV4wqsiOr-nEZkaHCy1c,9654
|
|
6
|
+
edx_enterprise_subsidy_client-0.4.4.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
7
|
+
edx_enterprise_subsidy_client-0.4.4.dist-info/top_level.txt,sha256=X3PxOH44rjQXFaA8EX-ZpUEL4SjfMM_yUkS-KbvNIZk,30
|
|
8
|
+
edx_enterprise_subsidy_client-0.4.4.dist-info/RECORD,,
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
edx_enterprise_subsidy_client/__init__.py,sha256=pVBRY-wyZG5jjNn36RKC6TwPZOewHBLgPB9X51mm9dA,205
|
|
2
|
-
edx_enterprise_subsidy_client/client.py,sha256=56yVQkW6Mgbcm1qTYpJInBVMyIqG3QQSIm4q5MB1MHc,11836
|
|
3
|
-
edx_enterprise_subsidy_client-0.4.2.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
|
4
|
-
edx_enterprise_subsidy_client-0.4.2.dist-info/LICENSE.txt,sha256=QTW2QN7q3XszgUAXm9Dzgtu5LXYKbR1SGnqMa7ufEuY,35139
|
|
5
|
-
edx_enterprise_subsidy_client-0.4.2.dist-info/METADATA,sha256=hN5GPSj3BnKA78NVjG5S9PeBSQvkNKBEgPdBMZ2ybUo,9495
|
|
6
|
-
edx_enterprise_subsidy_client-0.4.2.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
7
|
-
edx_enterprise_subsidy_client-0.4.2.dist-info/top_level.txt,sha256=X3PxOH44rjQXFaA8EX-ZpUEL4SjfMM_yUkS-KbvNIZk,30
|
|
8
|
-
edx_enterprise_subsidy_client-0.4.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|