-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdevless.py
103 lines (87 loc) · 4.21 KB
/
devless.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import requests
import random
import json
class Sdk(object):
connection = {};
headers = {};
payload = {};
def __init__(self, instance_url, token):
self.payload['user_token'] = ''
self.payload['params'] = {}
self.connection['instance_url'] = instance_url
self.headers = {
'content-type': "application/json",
'cache-control': "no-cache",
'devless-token': token
}
def add_data(self, service, table, data):
data = json.dumps({"resource": [ {'name':table,"field":[data] } ]})
sub_url = '/api/v1/service/{service}/db'.format(service=service)
return self.request_processor(data, sub_url, 'POST')
def get_data(self, service, table):
data = {}
params = self.payload['params'] if 'params' in self.payload else ''
def query_maker(params):
query_params = ''
for key, value in params.items():
if(type(value) == list):
for key_word in value:
query_params += "&{key}={key_word}".format(key=key, key_word=key_word)
else:
query_params = "&{key}={value}{query_params}".format(key=key, value=value,
query_params=query_params)
return query_params
query = query_maker(params) if params != None else ''
sub_url = '/api/v1/service/{service}/db?table={table}{query}'.format(service=service, table=table, query=query)
return self.request_processor(data, sub_url, 'GET')
def update_data(self, service, table, data):
params = self.payload['params']['where'][0]
data = json.dumps({"resource":[{"name":table,"params":[{"where":params,"data":[data]}]}]})
sub_url = '/api/v1/service/{service}/db'.format(service=service)
return self.request_processor(data, sub_url, 'PATCH')
def delete_data(self, service, table):
params = self.payload['params']['where'][0]
data = json.dumps({"resource":[{"name":table,"params":[{"where":params,"delete":"true"}]}]})
sub_url = '/api/v1/service/{service}/db'.format(service=service)
return self.request_processor(data, sub_url, 'DELETE')
def call(self, service, method, params={}):
call_id = random.randint(1, 200000)
params = json.dumps({ "jsonrpc":"2.0","method":service,"id":call_id,"params":params})
sub_url = "/api/v1/service/{service}/rpc?action={method}".format(service=service, method=method)
return self.request_processor(params, sub_url, 'POST')
def set_user_token(self, token):
self.headers['devless-user-token'] = token
return self
def where(self, column, value):
param = "{column},{value}".format(column=column, value=value)
self.bind_to_params('where', param)
return self
def offset(self, value):
self.bind_to_params('offset', value)
return self
def order_by(self, value):
self.bind_to_params('order_by', value)
return self
def size(self, value):
self.bind_to_params('size', value)
return self
def bind_to_params(self, method_name, args):
if method_name == 'where':
self.payload['params'][method_name] = [] if not method_name in self.payload['params'] else self.payload['params'][method_name]
self.payload['params'][method_name].append(args)
else:
self.payload['params'][method_name] = None if method_name in self.payload['params'] else ''
self.payload['params'][method_name] = args;
def seq_iter(self, obj):
return obj if isinstance(obj, list) else iter(obj)
def request_processor(self, data, sub_url, method):
url = "{instance_url}{sub_url}".format(
instance_url = self.connection['instance_url'], sub_url
= sub_url)
response = requests.request(method,
url, data=data, headers=self.headers)
output_text = response.text
start = output_text.find('{')
end = output_text.rfind('}')
json_output = output_text[start:end+1] if start is not -1 or end is not -1 else output_text
return json.loads(json_output)