Skip to content

Commit d53b945

Browse files
author
Vishal Rana
committed
Added store service
Signed-off-by: Vishal Rana <vishal.rana@verizon.com>
1 parent 5a62159 commit d53b945

File tree

3 files changed

+94
-1
lines changed

3 files changed

+94
-1
lines changed

labstack/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
from .client import Client
2-
from .email import EmailMessage, EmailError
2+
from .email import EmailMessage, EmailError
3+
from .store import StoreError

labstack/client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import requests
22
from .email import _Email
33
from .log import _Log
4+
from .store import _Store
45

56
class Client():
67
def __init__(self, api_key):
@@ -16,6 +17,9 @@ def log(self):
1617
log.app_id = self.app_id
1718
log.app_name = self.app_name
1819
return log
20+
21+
def store(self):
22+
return _Store(self.interceptor)
1923

2024
class _Interceptor(requests.auth.AuthBase):
2125
def __init__(self, api_key):

labstack/store.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import os
2+
import requests
3+
import json
4+
from .common import API_URL
5+
6+
class _Store():
7+
def __init__(self, interceptor):
8+
self.path = '/store'
9+
self.interceptor = interceptor
10+
11+
def insert(self, key, value):
12+
entry = StoreEntry(key, value)
13+
r = requests.post(API_URL + self.path, auth=self.interceptor, data=entry.to_json())
14+
data = r.json()
15+
if not 200 <= r.status_code < 300:
16+
raise StoreError(data['code'], data['message'])
17+
return StoreEntry.from_json(data)
18+
19+
def get(self, key):
20+
r = requests.get(API_URL + self.path + '/' + key, auth=self.interceptor)
21+
data = r.json()
22+
if not 200 <= r.status_code < 300:
23+
raise StoreError(data['code'], data['message'])
24+
return StoreEntry.from_json(data)
25+
26+
def query(self, filters='', limit=None, offset=None):
27+
params = {
28+
'filters': filters,
29+
'limit': limit,
30+
'offset': offset
31+
}
32+
r = requests.get(API_URL + self.path, auth=self.interceptor, params=params)
33+
data = r.json()
34+
if not 200 <= r.status_code < 300:
35+
raise StoreError(data['code'], data['message'])
36+
return StoreQueryResponse.from_json(data)
37+
38+
def update(self, key, value):
39+
entry = StoreEntry(key, value)
40+
r = requests.put(API_URL + self.path + '/' + key, auth=self.interceptor, data=entry.to_json())
41+
if not 200 <= r.status_code < 300:
42+
raise StoreError(data['code'], data['message'])
43+
44+
def delete(self, key):
45+
r = requests.delete(API_URL + self.path + '/' + key, auth=self.interceptor)
46+
if not 200 <= r.status_code < 300:
47+
raise StoreError(data['code'], data['message'])
48+
49+
class StoreEntry():
50+
def __init__(self, key=None, value=None):
51+
self.key = key
52+
self.value = value
53+
self.created_at = None
54+
self.updated_at = None
55+
56+
def to_json(self):
57+
return json.dumps({
58+
'key': self.key,
59+
'value': self.value
60+
})
61+
62+
@classmethod
63+
def from_json(self, entry):
64+
se = StoreEntry(entry['key'], entry['value'])
65+
se.created_at = entry['created_at']
66+
se.updated_at = entry['updated_at']
67+
return se
68+
69+
class StoreQueryResponse():
70+
def __init__(self):
71+
self.total = 0
72+
self.entries = []
73+
74+
@classmethod
75+
def from_json(self, response):
76+
qr = StoreQueryResponse()
77+
qr.total = response['total']
78+
qr.entries = response['entries']
79+
return qr
80+
81+
class StoreError(Exception):
82+
def __init__(self, code, message):
83+
self.code = code
84+
self.message = message
85+
86+
def __str__(self):
87+
return 'store error, code={0}, message={1}'.format(self.code, self.message)
88+

0 commit comments

Comments
 (0)