1717
1818
1919class _Query (object ):
20- def __init__ (self , url , headers = {}):
20+ def __init__ (self , url , headers = {}, data = {}, method = 'GET' ):
2121 self ._headers = headers
22+ self ._data = data
2223 self ._url = url
24+ self ._method = method
2325
2426 self ._params = dict ()
2527 self ._urlkws = dict ()
@@ -33,10 +35,18 @@ def url(self):
3335 def headers (self ):
3436 return self ._headers
3537
38+ @property
39+ def data (self ):
40+ return self ._data
41+
3642 @property
3743 def params (self ):
3844 return self ._params
3945
46+ @property
47+ def method (self ):
48+ return self ._method
49+
4050 @property
4151 def urlkws (self ):
4252 return self ._urlkws
@@ -45,6 +55,12 @@ def add_path(self, path):
4555 self ._url = urljoin (self ._url , path )
4656 return self
4757
58+ def add_data (self , key , value , default = None ):
59+ assert_new (self ._data , key )
60+ if value != default :
61+ self ._data [key ] = value
62+ return self
63+
4864 def add_param (self , key , value , default = None ):
4965 assert_new (self ._params , key )
5066 if value != default :
@@ -57,12 +73,12 @@ def add_urlkw(self, kw, replacement):
5773 return self
5874
5975 def __str__ (self ):
60- return 'Query to {url}, params {params}, headers {headers}' .format (
61- url = self .url , params = self .params , headers = self .headers )
76+ return '{method} Query to {url}, params {params}, data {data}, headers {headers}' .format (
77+ url = self .url , params = self .params , headers = self .headers , data = self . data , method = self . method )
6278
6379 def execute (self , f ):
6480 try :
65- return f (self .url , self .params , self .headers )
81+ return f (self .url , self .params , self .headers , self . data , self . method )
6682 except :
6783 raise ResourceUnavailableException (str (self ))
6884
@@ -80,42 +96,42 @@ def execute(self):
8096
8197
8298class ApiQuery (JsonQuery ):
83- def __init__ (self , path , headers = {}):
99+ def __init__ (self , path , headers = {}, data = {}, method = 'GET' ):
84100 headers .setdefault ('Client-ID' , CLIENT_ID )
85101 headers .setdefault ('Authorization' , 'OAuth {access_token}' .format (access_token = OAUTH_TOKEN ))
86- super (ApiQuery , self ).__init__ (_kraken_baseurl , headers )
102+ super (ApiQuery , self ).__init__ (_kraken_baseurl , headers , data , method )
87103 self .add_path (path )
88104
89105
90106class HiddenApiQuery (JsonQuery ):
91- def __init__ (self , path , headers = {}):
107+ def __init__ (self , path , headers = {}, data = {}, method = 'GET' ):
92108 headers .setdefault ('Client-Id' , CLIENT_ID )
93109 headers .setdefault ('Authorization' , 'OAuth {access_token}' .format (access_token = OAUTH_TOKEN ))
94- super (HiddenApiQuery , self ).__init__ (_hidden_baseurl , headers )
110+ super (HiddenApiQuery , self ).__init__ (_hidden_baseurl , headers , data , method )
95111 self .add_path (path )
96112
97113
98114class UsherQuery (DownloadQuery ):
99- def __init__ (self , path , headers = {}):
115+ def __init__ (self , path , headers = {}, data = {}, method = 'GET' ):
100116 headers .setdefault ('Client-Id' , CLIENT_ID )
101117 headers .setdefault ('Authorization' , 'OAuth {access_token}' .format (access_token = OAUTH_TOKEN ))
102- super (UsherQuery , self ).__init__ (_usher_baseurl , headers )
118+ super (UsherQuery , self ).__init__ (_usher_baseurl , headers , data , method )
103119 self .add_path (path )
104120
105121
106122class V5Query (ApiQuery ):
107- def __init__ (self , path ):
108- super (V5Query , self ).__init__ (path , _v5_headers )
123+ def __init__ (self , path , method = 'GET' ):
124+ super (V5Query , self ).__init__ (path , _v5_headers , method = method )
109125
110126
111127class V3Query (ApiQuery ):
112- def __init__ (self , path ):
113- super (V3Query , self ).__init__ (path , _v3_headers )
128+ def __init__ (self , path , method = 'GET' ):
129+ super (V3Query , self ).__init__ (path , _v3_headers , method = method )
114130
115131
116132class V2Query (ApiQuery ):
117- def __init__ (self , path ):
118- super (V2Query , self ).__init__ (path , _v2_headers )
133+ def __init__ (self , path , method = 'GET' ):
134+ super (V2Query , self ).__init__ (path , _v2_headers , method = method )
119135
120136
121137def assert_new (d , k ):
@@ -132,8 +148,8 @@ def wrapper(*args, **kwargs):
132148 if not isinstance (qry , _Query ):
133149 raise ValueError ('{} did not return a Query, was: {}' .format (
134150 f .__name__ , repr (qry )))
135- log .debug ('QUERY: url: %s, params: %s, '
151+ log .debug ('%s QUERY: url: %s, params: %s, data : %s, '
136152 'headers: %r, target_func: %r' ,
137- qry .url , qry .params , qry .headers , f .__name__ )
153+ qry .method , qry . url , qry .params , qry . data , qry .headers , f .__name__ )
138154 return qry .execute ()
139155 return wrapper
0 commit comments