11import requests
2+ from requests .auth import HTTPBasicAuth
23from os import getenv
4+ from json import dumps as json_dumps
35
46
5- class SingleClient (object ):
6- _token = None
7+ class Client (object ):
8+ push_token = None
9+ push_host = 'https://push2new.databox.com'
710
811 class MissingToken (Exception ):
912 pass
1013
11- @property
12- def token (self ):
13- if self ._token is None :
14- self ._token = getenv ("DATABOX_PUSH_TOKEN" , None )
14+ class KPIValidationException (Exception ):
15+ pass
1516
16- if self ._token is None :
17- raise SingleClient .MissingToken ("Missing Databox push token" )
17+ def __init__ (self , token = None ):
18+ self .push_token = token
19+ if self .push_token is None :
20+ self .push_token = getenv ('DATABOX_PUSH_TOKEN' , None )
1821
19- return self ._token
22+ if self .push_token is None :
23+ raise self .MissingToken ('Push token is missing!' )
2024
21- def __init__ (self , token = None ):
22- if self ._token is None and token is not None :
23- self ._token = token
25+ self .push_host = getenv ('DATABOX_PUSH_HOST' , self .push_host )
2426
25- def push (self , key , value , date = None ):
26- print "--- push --- " , self .token
27- pass
27+ def process_kpi (self , ** args ):
28+ key = args .get ('key' , None )
29+ if key is None :
30+ raise self .KPIValidationException ('Missing "key"' )
2831
32+ value = args .get ('value' , None )
33+ if value is None :
34+ raise self .KPIValidationException ('Missing "value"' )
2935
36+ item = {("$%s" % args ['key' ]): args ['value' ]}
3037
31- class Client ( object ):
32- _instance = None
33- client_instance = None
38+ date = args . get ( 'date' , None )
39+ if date is not None :
40+ item [ 'date' ] = date
3441
35- def __init__ (self , token = None ):
36- self .client_instance = SingleClient (token )
42+ return item
3743
38- def __new__ (cls , * args , ** kwargs ):
39- if not cls ._instance :
40- cls ._instance = super (Client , cls ). \
41- __new__ (cls , * args , ** kwargs )
42- return cls ._instance
44+ def _push_json (self , data = {}):
45+ response = requests .post (
46+ self .push_host ,
47+ auth = HTTPBasicAuth (self .push_token , '' ),
48+ headers = {'Content-Type' : 'application/json' },
49+ data = json_dumps (data )
50+ )
4351
44- @property
45- def client (self ):
46- return self .client_instance
52+ return response .json ()['status' ] == 'ok'
4753
4854 def push (self , key , value , date = None ):
49- return self .client .push (key , value , date )
55+ return self ._push_json ({
56+ 'data' : [self .process_kpi (key = key , value = value , date = date )]
57+ })
58+
59+ def insert_all (self , rows ):
60+ return self ._push_json ({
61+ 'data' : [self .process_kpi (** row ) for row in rows ]
62+ })
5063
5164
5265def push (key , value , date = None , token = None ):
53- return Client ().push (key , value , date )
66+ return Client (token ).push (key , value , date )
67+
68+
69+ def insert_all (rows = [], token = None ):
70+ return Client (token ).insert_all (rows )
0 commit comments