Skip to content

Commit 1c4eb48

Browse files
Developed stack Implementation
1 parent 4b0777e commit 1c4eb48

File tree

10 files changed

+218
-154
lines changed

10 files changed

+218
-154
lines changed

.talismanrc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,11 @@ fileignoreconfig:
2020
checksum: d2ea9ae192ae0f1b75ff2b68b6bcd9d40eb86d589fb2177535b93194d69a9e0e
2121
- filename: tests/test_user_session.py
2222
checksum: f5000644a471e6ac4ee5bfcb5cfc73762e53fa97980951063f787a83e97244f9
23+
version: ""
24+
25+
fileignoreconfig:
26+
- filename: tests/test_users.py
27+
checksum: 7c278a3b24fdcf01a30561326fbdadf45dffd52edcbbe421d192c360dc4be1e1
28+
- filename: contentstack_management/stack/stack.py
29+
checksum: 480b855afcc96875ce49f4da6cb433e0ba10183e1b73297c2d1c66565602ff0b
2330
version: ""

contentstack_management/core/client.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55

66
import requests
77
import json
8-
import logging
9-
108
from ..organizations.organizations import Organization
119
from ..users.user import User
1210
from ..stack.stack import Stack
@@ -48,7 +46,7 @@ def get(self, url, headers=None, params=None):
4846
"""
4947
return self._call_request('GET', url, headers=headers, params=params)
5048

51-
def put(self, url, headers=None, params=None, data=None, json=None):
49+
def put(self, url, headers=None, params=None, data=None, json_data=None):
5250
"""
5351
Perform an HTTP PUT request with the specified URL and parameters.
5452
@@ -59,9 +57,9 @@ def put(self, url, headers=None, params=None, data=None, json=None):
5957
:param json: Optional JSON data to include in the body of the request.
6058
:return: The response from the server.
6159
"""
62-
return self._call_request('PUT', url, headers=headers, params=params, data=data, json=json)
60+
return self._call_request('PUT', url, headers=headers, params=params, data=data, json_data=json)
6361

64-
def post(self, url, headers=None, params=None, data=None, json=None):
62+
def post(self, url, headers=None, params=None, data=None, json_data=None):
6563
"""
6664
Perform an HTTP POST request with the specified URL and parameters.
6765
@@ -72,7 +70,7 @@ def post(self, url, headers=None, params=None, data=None, json=None):
7270
:param json: Optional JSON data to include in the body of the request.
7371
:return: The response from the server.
7472
"""
75-
return self._call_request('POST', url, headers=headers, params=params, data=data, json=json)
73+
return self._call_request('POST', url, headers=headers, params=params, data=data, json_data=json_data)
7674

7775
def delete(self, url, headers=None, params=None):
7876
"""
@@ -87,19 +85,16 @@ def delete(self, url, headers=None, params=None):
8785

8886

8987

90-
def _call_request(self, method, url_path, headers=None, params=None, data=None, json=None):
88+
def _call_request(self, method, url_path, headers=None, params=None, data=None, json_data=None):
9189
url = f"{self.endpoint}/{url_path}"
9290
retries = self.failure_retry + 1
9391

9492
while retries > 0:
9593
try:
96-
response = requests.request(method, url, data=data, headers=headers, params=params, json=json)
97-
94+
response = requests.request(method, url, data=data, headers=headers, params=params, json=json_data)
9895
if response.status_code >= 400:
9996
if self.errors:
100-
101-
return (response)
102-
97+
return response
10398
elif retries > 1:
10499
retries -= 1
105100
else:
@@ -162,13 +157,10 @@ def user(self):
162157
return User(self.endpoint, self.auth_token, self.headers,self.api_client)
163158

164159

165-
def organizations(self):
166-
return Organization(self.endpoint, self.auth_token, self.headers,self.api_client)
160+
def organizations(self, organization_uid = None):
161+
return Organization(self.endpoint, self.auth_token, self.headers,self.api_client, organization_uid)
167162

168163
def stack(self, api_key = None):
169-
if api_key is None or api_key == '':
170-
raise PermissionError(
171-
'You are not permitted to the stack without valid api key')
172164
return Stack(self.endpoint, self.auth_token, self.headers,self.api_client, api_key)
173165

174166

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
import platform
2-
import os
3-
import contentstack_management
41

2+
import json
53

64
class Organization:
75
"""
@@ -11,51 +9,50 @@ class Organization:
119
methods each correspond to the CRUD
1210
operations that can be performed on the API """
1311

14-
def __init__(self, endpoint, authtoken, headers, api_client):
12+
def __init__(self, endpoint, authtoken, headers, api_client, organization_uid):
1513
self.api_client = api_client
1614
self.endpoint = endpoint
1715
self.authtoken = authtoken
1816
self.headers = headers
17+
self.organization_uid = organization_uid
1918

2019

2120
def get(self):
2221
url = "organizations"
23-
self.headers['authtoken'] = self.authtoken
24-
return self.api_client.get(url, headers = self.headers)
25-
26-
27-
28-
def get_organization(self, organization_uid):
29-
url = f"organizations/{organization_uid}"
22+
if self.organization_uid is None:
23+
url = "organizations"
24+
else:
25+
url = f"organizations/{self.organization_uid}"
3026
self.headers['authtoken'] = self.authtoken
3127
return self.api_client.get(url, headers = self.headers)
3228

3329

34-
def get_organization_roles(self, organization_uid):
35-
url = f"organizations/{organization_uid}/roles"
30+
def get_organization_roles(self):
31+
url = f"organizations/{self.organization_uid}/roles"
3632
self.headers['authtoken'] = self.authtoken
3733
return self.api_client.get(url, headers = self.headers)
3834

3935

40-
def organization_add_users(self, organization_uid):
41-
url = f"organizations/{organization_uid}/share"
36+
def organization_add_users(self):
37+
url = f"organizations/{self.organization_uid}/share"
4238
self.headers['authtoken'] = self.authtoken
4339
return self.api_client.get(url, headers = self.headers)
4440

45-
def transfer_organizations_ownership(self, organization_uid, data):
46-
url = f"organizations/{organization_uid}/transfer-ownership"
41+
def transfer_organizations_ownership(self, data):
42+
url = f"organizations/{self.organization_uid}/transfer-ownership"
4743
self.headers['authtoken'] = self.authtoken
44+
data = json.dumps(data)
4845
return self.api_client.post(url, headers = self.headers, data=data)
4946

5047

51-
def organization_stacks(self, organization_uid):
52-
url = f"organizations/{organization_uid}/stacks"
48+
def organization_stacks(self):
49+
url = f"organizations/{self.organization_uid}/stacks"
5350
self.headers['authtoken'] = self.authtoken
5451
return self.api_client.get(url, headers = self.headers)
5552

5653

57-
def organization_logs(self, organization_uid):
58-
url = f"organizations/{organization_uid}/logs"
54+
def organization_logs(self):
55+
url = f"organizations/{self.organization_uid}/logs"
5956
self.headers['authtoken'] = self.authtoken
6057
return self.api_client.get(url, headers = self.headers)
6158

contentstack_management/stack/stack.py

Lines changed: 94 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,6 @@
44
the CRUD operations that can be performed on the API """
55

66
import json
7-
from json import JSONDecodeError
8-
import requests
9-
from requests.adapters import HTTPAdapter
10-
from requests.exceptions import HTTPError, Timeout
11-
import contentstack_management
12-
13-
147

158
class Stack:
169
"""
@@ -33,5 +26,99 @@ def fetch(self):
3326
self.headers['api_key'] = self.api_key
3427
return self.api_client.get(url, headers = self.headers)
3528

29+
def all(self):
30+
url = "stacks"
31+
self.headers['authtoken'] = self.authtoken
32+
return self.api_client.get(url, headers = self.headers)
33+
34+
def create(self, organization_uid, data):
35+
url = "stacks"
36+
self.headers['authtoken'] = self.authtoken
37+
self.headers['organization_uid'] = organization_uid
38+
data = json.dumps(data)
39+
return self.api_client.post(url, headers = self.headers, data=data)
40+
41+
def update(self, data):
42+
url = "stacks"
43+
self.headers['authtoken'] = self.authtoken
44+
self.headers['api_key'] = self.api_key
45+
data = json.dumps(data)
46+
return self.api_client.put(url, headers = self.headers, data=data)
47+
48+
def delete(self):
49+
url = "stacks"
50+
self.headers['authtoken'] = self.authtoken
51+
self.headers['api_key'] = self.api_key
52+
return self.api_client.delete(url, headers = self.headers)
53+
54+
def fetch_all_user(self):
55+
url = "stacks/users"
56+
self.headers['authtoken'] = self.authtoken
57+
self.headers['api_key'] = self.api_key
58+
return self.api_client.get(url, headers = self.headers)
59+
60+
def update_user_role(self, data):
61+
url = "stacks/users/roles"
62+
self.headers['authtoken'] = self.authtoken
63+
self.headers['api_key'] = self.api_key
64+
data = json.dumps(data)
65+
return self.api_client.put(url, headers = self.headers, data=data)
66+
67+
def stack_transfer_ownership(self, data):
68+
url = "stacks/transfer_ownership"
69+
self.headers['authtoken'] = self.authtoken
70+
self.headers['api_key'] = self.api_key
71+
data = json.dumps(data)
72+
return self.api_client.post(url, headers = self.headers, data=data)
73+
74+
def accept_ownership(self, user_id, ownership_token):
75+
url = f"stacks/accept_ownership/{ownership_token}"
76+
self.headers['authtoken'] = self.authtoken
77+
params = {'api_key': self.api_key, 'uid': user_id}
78+
return self.api_client.get(url, headers = self.headers, params = params)
79+
80+
def get_stack_settings(self):
81+
url = "stacks/settings"
82+
self.headers['authtoken'] = self.authtoken
83+
self.headers['api_key'] = self.api_key
84+
return self.api_client.get(url, headers = self.headers)
85+
86+
87+
def create_stack_settings(self, data):
88+
url = "stacks/settings"
89+
self.headers['authtoken'] = self.authtoken
90+
self.headers['api_key'] = self.api_key
91+
data = json.dumps(data)
92+
return self.api_client.post(url, headers = self.headers, data=data)
93+
94+
def reset_stack_settings(self, data):
95+
url = "stacks/settings/reset"
96+
self.headers['authtoken'] = self.authtoken
97+
self.headers['api_key'] = self.api_key
98+
data = json.dumps(data)
99+
return self.api_client.post(url, headers = self.headers, data=data)
100+
101+
def share_stack(self, data):
102+
url = "stacks/share"
103+
self.headers['authtoken'] = self.authtoken
104+
self.headers['api_key'] = self.api_key
105+
data = json.dumps(data)
106+
return self.api_client.post(url, headers = self.headers, data=data)
107+
108+
def unshare_stack(self, data):
109+
url = "stacks/share"
110+
self.headers['authtoken'] = self.authtoken
111+
self.headers['api_key'] = self.api_key
112+
data = json.dumps(data)
113+
return self.api_client.post(url, headers = self.headers, data=data)
114+
115+
116+
117+
118+
119+
120+
121+
122+
36123

37124

contentstack_management/user_session/user_session.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def __init__(self, url = None, headers=None, data=None, api_client=None, endpoin
2222

2323

2424
def login(self):
25-
response = self.api_client._call_request('POST', self.url, headers=self.headers, params=None, data=self.data, json=None)
25+
response = self.api_client._call_request('POST', self.url, headers=self.headers, params=None, data=self.data, json_data=None)
2626
if response.status_code == 200:
2727
response_dict = response.json()
2828
token = response_dict['user']['authtoken']
@@ -55,7 +55,7 @@ def login(self):
5555

5656
def logout(self):
5757

58-
response = self.api_client._call_request('DELETE', self.url, headers=self.headers, params=None, data=self.data, json=None)
58+
response = self.api_client._call_request('DELETE', self.url, headers=self.headers, params=None, data=self.data, json_data=None)
5959
if response.status_code == 200:
6060
return response.json()
6161
return response

contentstack_management/users/user.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
import platform
2-
import json
3-
import contentstack_management
4-
5-
61

72
class User:
83
"""
@@ -22,25 +17,25 @@ def __init__(self, endpoint, authtoken, headers, api_client):
2217
def get(self):
2318
url = "user"
2419
self.headers['authtoken'] = self.authtoken
25-
return self.api_client.get(url, headers = self.headers).json()
20+
return self.api_client.get(url, headers = self.headers)
2621

2722

2823
def update_user(self, user_data):
2924
url = "user"
3025
self.headers['authtoken'] = self.authtoken
31-
return self.api_client.put(url, headers = self.headers, data = user_data, params = None).json()
26+
return self.api_client.put(url, headers = self.headers, data = user_data, params = None)
3227

3328
def active_user(self, user_activation_token, user_data):
3429
url = f"user/activate/{user_activation_token}"
3530
self.headers['authtoken'] = self.authtoken
36-
return self.api_client.post(url, headers = self.headers, data = user_data).json()
31+
return self.api_client.post(url, headers = self.headers, data = user_data)
3732

3833
def request_password(self, user_data):
3934
url = "user/forgot_password"
4035
self.headers['authtoken'] = self.authtoken
41-
return self.api_client.post(url, headers = self.headers, data = user_data).json()
36+
return self.api_client.post(url, headers = self.headers, data = user_data)
4237

4338
def reset_password(self, user_data):
4439
url = "user/reset_password"
4540
self.headers['authtoken'] = self.authtoken
46-
return self.api_client.post(url, headers = self.headers, data = user_data).json()
41+
return self.api_client.post(url, headers = self.headers, data = user_data)

tests/test_contentstack.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def setUp(self):
1111

1212
def test_contentstack(self):
1313
client = contentstack.client(host=config.host.host, endpoint=None)
14-
self.assertEqual('eu-api.contentstack.com', client.host) # add assertion here
14+
self.assertEqual('api.contentstack.io', client.host) # add assertion here
1515

1616

1717
def test_successful_get_login(self):

0 commit comments

Comments
 (0)