Skip to content

Commit 4e0cfb3

Browse files
stack refactored
1 parent a436138 commit 4e0cfb3

File tree

8 files changed

+176
-167
lines changed

8 files changed

+176
-167
lines changed

contentstack/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@
1313
from .config import Config
1414
from .content_type import ContentType
1515
from .errors import Error, ConfigError
16-
from .group import Group
17-
from .http_request import HTTPRequestConnection
16+
from .http_connection import HTTPConnection
1817

1918

2019
# Set a default logger to prevent "No handler found" warnings

contentstack/asset_library.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626

2727
class AssetLibrary:
28+
2829
"""
2930
contentstack.asset_library
3031
~~~~~~~~~~~~~~~~~~

contentstack/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
logging.getLogger("Config")
3030

3131

32-
class Config():
32+
class Config:
3333

3434
def __init__(self):
3535
self.defaultConfig = dict(protocol="https://", host="cdn.contentstack.io", port=443, version="v3", path={

contentstack/errors.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ class Error(Exception):
3434
"""
3535

3636
def __init__(self):
37-
self.error_code = ''
38-
self.msg = ''
39-
self.cause_err = ''
37+
self.error_code = str
38+
self.msg = str
39+
self.cause_err = str
4040

4141
errors_str = {
4242

contentstack/group.py

Lines changed: 0 additions & 63 deletions
This file was deleted.

contentstack/http_connection.py

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
class HTTPConnection:
2+
3+
def __init__(self, url: str, query: dict, headers: dict):
4+
5+
if url is not None and query is not None and headers is not None:
6+
if len(url) > 0 and len(query) > 0 and len(headers) > 0:
7+
self.url = url
8+
self.query = query
9+
self.headers = headers
10+
else:
11+
raise TypeError('Arguments can not be empty')
12+
else:
13+
raise TypeError('Invalid Arguments')
14+
15+
def get_result(self, url: str, query: dict, headers: dict) -> tuple:
16+
17+
import requests
18+
from urllib import parse
19+
from requests import Response
20+
from contentstack.stack import SyncResult
21+
22+
if url is not None and len(url) > 0:
23+
self.url = url
24+
if query is not None and len(query) > 0:
25+
self.query = query
26+
if headers is not None and len(headers) > 0:
27+
self.headers = headers
28+
29+
# Adding user agent to headers
30+
self.headers.update(self.__user_agents())
31+
# Encoding query to string
32+
payload = parse.urlencode(query=self.query, encoding='UTF-8')
33+
34+
try:
35+
36+
# requesting for url, payload and headers
37+
response: Response = requests.get(self.url, params=payload, headers=self.headers)
38+
# if response.status_code = 200
39+
if response.ok:
40+
41+
# Decode byte response to json
42+
result = response.json()
43+
# If result contains stack, return json response
44+
if 'stack' in result:
45+
return result['stack']
46+
# If result contains entry, return Entry
47+
if 'entry' in result:
48+
dict_entry = result['entry']
49+
return self.__parse_entries(dict_entry)
50+
# If result contains entries, return list[Entry]
51+
if 'entries' in result:
52+
entry_list = result['entries']
53+
return self.__parse_entries(entry_list)
54+
# If result contains asset, return Asset
55+
if 'asset' in result:
56+
dict_asset = result['asset']
57+
return self.__parse_assets(dict_asset)
58+
# If result contains assets, return list[Asset]
59+
if 'assets' in result:
60+
asset_list = result['assets']
61+
return self.__parse_assets(asset_list)
62+
# If result contains content_type, return content_type json
63+
if 'content_type' in result:
64+
return result['content_type']
65+
# If result contains items, return SyncResult json
66+
if 'items' in result:
67+
sync_result = SyncResult().configure(result)
68+
return sync_result
69+
70+
else:
71+
# Decode byte response to json
72+
return response.json()
73+
74+
except requests.RequestException as err:
75+
raise ConnectionError(err)
76+
77+
@staticmethod
78+
def __parse_entries(result):
79+
from contentstack import Entry
80+
entries: list[Entry] = []
81+
entry = Entry()
82+
83+
if result is not None and len(result) > 0:
84+
if isinstance(result, dict):
85+
return entry.configure(result)
86+
if isinstance(result, list):
87+
for entry_obj in result:
88+
each_entry = Entry().configure(entry_obj)
89+
entries.append(each_entry)
90+
return entries
91+
92+
@staticmethod
93+
def __parse_assets(result):
94+
from contentstack import Asset
95+
assets: list[Asset] = []
96+
asset = Asset()
97+
98+
if result is not None and len(result) > 0:
99+
if isinstance(result, dict):
100+
return asset.configure(result)
101+
if isinstance(result, list):
102+
for asset_obj in result:
103+
itr_asset = asset.configure(asset_obj)
104+
assets.append(itr_asset)
105+
return assets
106+
107+
@staticmethod
108+
def __user_agents() -> dict:
109+
110+
import contentstack
111+
import platform
112+
113+
"""
114+
Contentstack-User-Agent.
115+
116+
"""
117+
header = {'sdk': dict(name=contentstack.__package__, version=contentstack.__version__)}
118+
os_name = platform.system()
119+
120+
if os_name == 'Darwin':
121+
os_name = 'macOS'
122+
123+
elif not os_name or os_name == 'Java':
124+
os_name = None
125+
126+
elif os_name and os_name not in ['macOS', 'Windows']:
127+
os_name = 'Linux'
128+
129+
header['os'] = {
130+
'name': os_name,
131+
'version': platform.release()
132+
}
133+
local_headers = {'X-User-Agent': str(header), "Content-Type": 'application/json'}
134+
return local_headers

contentstack/http_request.py

Lines changed: 0 additions & 60 deletions
This file was deleted.

contentstack/utils.py

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2020
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121
* SOFTWARE ]
22-
*
22+
2323
"""
2424

2525
import logging
@@ -31,49 +31,47 @@ class NullHandler(logging.Handler):
3131
def emit(self, record):
3232
pass
3333

34+
logging.basicConfig(filename='contentstack.log', format='%(asctime)s - %(message)s', level=logging.INFO)
35+
logging.getLogger("Config")
3436

35-
# logging.basicConfig(filename='contentstack.log', format='%(asctime)s - %(message)s', level=logging.INFO)
36-
# logging.getLogger("Config")
3737

38-
def log(message: str):
39-
logging.debug(message)
38+
def log(message: str):
39+
logging.debug(message)
4040

4141

42-
def is_connected(cls):
43-
import socket
44-
try:
45-
host = socket.gethostbyname('cdn.contentstack.io')
46-
s = socket.create_connection((host, 80), 2)
47-
s.close()
48-
return True
49-
except:
50-
pass
42+
def is_connected():
43+
import socket
44+
try:
45+
host = socket.gethostbyname('cdn.contentstack.io')
46+
s = socket.create_connection((host, 80), 2)
47+
s.close()
48+
return True
49+
except:
5150
return False
5251

5352

54-
def header_agents() -> dict:
55-
56-
import contentstack
57-
import platform
53+
def header_agents() -> dict:
54+
import contentstack
55+
import platform
5856

59-
"""
60-
Contentstack-User-Agent header.
61-
"""
62-
header = {'sdk': {
63-
'name': contentstack.__package__,
64-
'version': contentstack.__version__
65-
}}
66-
os_name = platform.system()
67-
if os_name == 'Darwin':
68-
os_name = 'macOS'
69-
elif not os_name or os_name == 'Java':
70-
os_name = None
71-
elif os_name and os_name not in ['macOS', 'Windows']:
72-
os_name = 'Linux'
73-
header['os'] = {
74-
'name': os_name,
75-
'version': platform.release()
76-
}
57+
"""
58+
Contentstack-User-Agent header.
59+
"""
60+
header = {'sdk': {
61+
'name': contentstack.__package__,
62+
'version': contentstack.__version__
63+
}}
64+
os_name = platform.system()
65+
if os_name == 'Darwin':
66+
os_name = 'macOS'
67+
elif not os_name or os_name == 'Java':
68+
os_name = None
69+
elif os_name and os_name not in ['macOS', 'Windows']:
70+
os_name = 'Linux'
71+
header['os'] = {
72+
'name': os_name,
73+
'version': platform.release()
74+
}
7775

78-
local_headers = {'X-User-Agent': header, "Content-Type": 'application/json'}
79-
return local_headers
76+
local_headers = {'X-User-Agent': header, "Content-Type": 'application/json'}
77+
return local_headers

0 commit comments

Comments
 (0)