|
|
|
@ -11,6 +11,7 @@ import simplejson as json
@@ -11,6 +11,7 @@ import simplejson as json
|
|
|
|
|
from decimal import Decimal |
|
|
|
|
import os |
|
|
|
|
import base64 |
|
|
|
|
import copy |
|
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
import sys |
|
|
|
@ -31,19 +32,36 @@ _headers = {'Authorization':'Basic %s' % _auth}
@@ -31,19 +32,36 @@ _headers = {'Authorization':'Basic %s' % _auth}
|
|
|
|
|
ITEM_ONLY, DEPOSIT_ONLY, ITEM_AND_DEPOSIT = range(3) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _request(api_rel_url, para_map, method): |
|
|
|
|
if bool(os.environ.get('BARCODE_PLUGIN_DEBUG', False)): |
|
|
|
|
_h = urllib2.HTTPHandler(debuglevel=1) |
|
|
|
|
_opener = urllib2.build_opener(_h) |
|
|
|
|
_urlopen = _opener.open |
|
|
|
|
else: |
|
|
|
|
_urlopen = urllib2.urlopen |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _request(api_rel_url, data, method, headers=None): |
|
|
|
|
url = _BASE_URL + api_rel_url |
|
|
|
|
data = urllib.urlencode(para_map) |
|
|
|
|
|
|
|
|
|
if isinstance(data, dict): |
|
|
|
|
data = urllib.urlencode(data) |
|
|
|
|
|
|
|
|
|
# Add default headers |
|
|
|
|
if headers is None: |
|
|
|
|
final_headers = _headers |
|
|
|
|
else: |
|
|
|
|
final_headers = copy.copy(_headers) |
|
|
|
|
final_headers.update(headers) |
|
|
|
|
|
|
|
|
|
if method == 'GET': |
|
|
|
|
url = '%s?%s' % (url, data) |
|
|
|
|
req = urllib2.Request(url, headers=_headers) |
|
|
|
|
req = urllib2.Request(url, headers=final_headers) |
|
|
|
|
elif method == 'POST': |
|
|
|
|
req = urllib2.Request(url, data=data, headers=_headers) |
|
|
|
|
req = urllib2.Request(url, data=data, headers=final_headers) |
|
|
|
|
else: |
|
|
|
|
raise ValueError('Unsupported method "%s"' % method) |
|
|
|
|
|
|
|
|
|
response = urllib2.urlopen(req) |
|
|
|
|
response = _urlopen(req) |
|
|
|
|
return response.read() |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -63,6 +81,26 @@ def buy_item(item_id, what_about_it, user_name):
@@ -63,6 +81,26 @@ def buy_item(item_id, what_about_it, user_name):
|
|
|
|
|
raise ValueError('Server says "%s"' % content) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def bulk_buy(buycommands, user_name): |
|
|
|
|
item_ids = tuple(e.item_id() for e in buycommands if e.includes_commodity()) |
|
|
|
|
deposit_ids = tuple(e.item_id() for e in buycommands if e.includes_deposit()) |
|
|
|
|
|
|
|
|
|
request_dict = { |
|
|
|
|
'user':user_name, |
|
|
|
|
'items':item_ids, |
|
|
|
|
'deposits':deposit_ids |
|
|
|
|
} |
|
|
|
|
data = json.dumps(request_dict, sort_keys=True, indent=4 * ' ') |
|
|
|
|
|
|
|
|
|
headers = { |
|
|
|
|
'Content-Type':'application/json', |
|
|
|
|
'Content-Length':len(data) |
|
|
|
|
} |
|
|
|
|
content = _request('buyable/item/bulkbuy/', data, 'POST', headers=headers) |
|
|
|
|
if content != 'Created': |
|
|
|
|
raise ValueError('Server says "%s"' % content) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_item(barcode): |
|
|
|
|
content = _request('buyable/item/', |
|
|
|
|
{'barcode':barcode}, method='GET') |
|
|
|
@ -99,5 +137,14 @@ if __name__ == '__main__':
@@ -99,5 +137,14 @@ if __name__ == '__main__':
|
|
|
|
|
deposit(Decimal('0.01'), DEPOSIT_CASH, user_name) |
|
|
|
|
deposit(Decimal('0.01'), DEPOSIT_BANK, user_name) |
|
|
|
|
|
|
|
|
|
item = get_item(1) |
|
|
|
|
print('Item "%s" is %f Euro each' % (item.name, item.price)) |
|
|
|
|
def show(item): |
|
|
|
|
print('Item "%s" is %f Euro each' % (item.name, item.price)) |
|
|
|
|
|
|
|
|
|
item5 = get_item(5) |
|
|
|
|
item6 = get_item(6) |
|
|
|
|
for item in (item5, item6): |
|
|
|
|
show(item) |
|
|
|
|
|
|
|
|
|
from freitagslib.commands import BuyCommand |
|
|
|
|
buycommands = (BuyCommand(e) for e in (item5, item6)) |
|
|
|
|
bulk_buy(buycommands, user_name) |
|
|
|
|