1
0
Fork 0

Merge branch 'morejson-barcode' into morejson

master
Sebastian Pipping vor 12 Jahren
Commit 00d4c81b28

@ -0,0 +1,5 @@
[client-barcode]
SERVER_URL = https://example.org:443/api2/
SERVER_USER = user
SERVER_PASSWORD = password
#CLIENT_DEBUG = 1

@ -8,6 +8,7 @@ from __future__ import print_function
import freitagslib.network as net
from freitagslib.commands import BuyCommand, DepositCommand
from freitagslib.encoding import asciify
from freitagslib.settings import settings, Settings
import colorama
from colorama import Fore, Style
@ -519,6 +520,10 @@ def read_line(f, timeout, timeout_func):
def main():
colorama.init()
if not settings.load("freitagskasse.conf"):
sys.exit(1)
status = Status()
global scroll_line1,scroll_line2
global myDisplay

@ -53,7 +53,7 @@ class BuyCommand(object):
raise ValueError("BuyCommand in illegal state")
def run(self, user_name):
net.buy_item(self._item.id, what_about_it=self._what_to_buy(), user_name=user_name)
raise NotImplementedError('BuyCommand.run(user_name)')
def item_name(self):
return self._item.name

@ -18,39 +18,43 @@ if __name__ == '__main__':
sys.path.append('.')
from freitagslib.item import Item
from freitagslib.tools import require_type
from freitagslib.settings import settings, Settings
DEPOSIT_CASH = 1
DEPOSIT_BANK = 2
_BASE_URL = 'https://k4ever.freitagsrunde.org:443/api2/'
ITEM_ONLY, DEPOSIT_ONLY, ITEM_AND_DEPOSIT = range(3)
_auth = base64.encodestring('%s:%s' % (os.environ['BARCODE_PLUGIN_USER'], os.environ['BARCODE_PLUGIN_PASS'])).rstrip()
_headers = {'Authorization':'Basic %s' % _auth}
ITEM_ONLY, DEPOSIT_ONLY, ITEM_AND_DEPOSIT = range(3)
def _urlopen(*args):
if settings.CLIENT_DEBUG:
_h = urllib2.HTTPHandler(debuglevel=1)
_opener = urllib2.build_opener(_h)
_func = _opener.open
else:
_func = urllib2.urlopen
return _func(*args)
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 _get_default_headers():
_auth = base64.encodestring('%s:%s' % (settings.SERVER_USER, settings.SERVER_PASSWORD)).rstrip()
_headers = {'Authorization':'Basic %s' % _auth}
return _headers
def _request(api_rel_url, data, method, headers=None):
url = _BASE_URL + api_rel_url
url = settings.SERVER_URL + api_rel_url
if isinstance(data, dict):
data = urllib.urlencode(data)
# Add default headers
if headers is None:
final_headers = _headers
final_headers = _get_default_headers()
else:
final_headers = copy.copy(_headers)
final_headers = copy.copy(_get_default_headers())
final_headers.update(headers)
if method == 'GET':
@ -71,16 +75,6 @@ def get_user_name_from_auth_blob(authblob):
return d['username']
def buy_item(item_id, what_about_it, user_name):
require_type(int, item_id)
assert(what_about_it in (ITEM_ONLY, DEPOSIT_ONLY, ITEM_AND_DEPOSIT))
content = _request('buyable/item/' + urllib.quote(str(item_id)),
{'user':user_name, 'deposit':what_about_it, 'amount':1}, method='POST')
if content != 'Created':
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())
@ -99,7 +93,8 @@ def bulk_buy(buycommands, user_name):
'Content-Length':len(data)
}
content = _request('buyable/item/bulkbuy/', data, 'POST', headers=headers)
if content != 'Created':
d = json.loads(content)
if not d['success']:
raise ValueError('Server says "%s"' % content)
@ -123,15 +118,17 @@ def deposit(amount, transaction_type, user_name):
content = _request('account/transactions/transact/',
{'user':user_name, 'amount':amount, 'type':transaction_type}, method='POST')
if content != 'OK':
d = json.loads(content)
if not d['success']:
raise ValueError('Server says "%s"' % content)
if __name__ == '__main__':
user_name = get_user_name_from_auth_blob(os.environ['BARCODE_PLUGIN_TEST_AUTH_BLOB'])
print('User name: ' + user_name)
if not settings.load('freitagskasse.conf', (('TEST_AUTH_BLOB', str, None), )):
sys.exit(1)
buy_item(1, True, user_name)
user_name = get_user_name_from_auth_blob(settings.TEST_AUTH_BLOB)
print('User name: ' + user_name)
balance = get_balance(user_name)
print('Balance is %f, type is "%s"' % (balance, type(balance).__name__))

@ -0,0 +1,63 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2011 Sebastian Pipping <sebastian@pipping.org>
# Licensed under GPL v3 or later
from __future__ import print_function
import sys
import ConfigParser
_SECTION = 'client-barcode'
_KEYS = (
# Key, type, default
('CLIENT_DEBUG', bool, False), # Should go first to enable debugging as early as possible
('SERVER_URL', str, None),
('SERVER_USER', str, None),
('SERVER_PASSWORD', str, None),
)
_DEFAULTS = dict([(key, str(default))
for (key, _type, default)
in _KEYS
if default is not None])
class Settings:
def __init__(self):
pass
def load(self, filename, _additional_keys=None):
additional_keys = () if _additional_keys is None else _additional_keys
cp = ConfigParser.ConfigParser(_DEFAULTS)
if not cp.read(filename):
print('FATAL: Config file "%s" could not be parsed.' % (filename), file=sys.stderr)
return False
valid = True
for key, _type, dummy in _KEYS + additional_keys:
try:
if _type is bool:
value = cp.getboolean(_SECTION, key)
else:
value = cp.get(_SECTION, key)
except ValueError:
print('ERROR: Key "%s" in config file "%s" must be of type "%s".' \
% (key, filename, _type.__name__), file=sys.stderr)
valid = False
except ConfigParser.NoOptionError:
print('ERROR: Config file "%s" misses required key "%s.%s".' \
% (filename, _SECTION, key), file=sys.stderr)
valid = False
else:
setattr(self, key, value)
if self.CLIENT_DEBUG:
print('DEBUG: CONFIG: %s.%s=%s("%s")' % (_SECTION, key, type(value).__name__, value))
return valid
settings = Settings()
Laden…
Abbrechen
Speichern