Make configurable: server URL, user, password, debugging

This commit is contained in:
Sebastian Pipping 2012-01-31 02:13:07 +01:00
parent e26563b946
commit 135fc1044c
3 changed files with 88 additions and 15 deletions

View File

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

View File

@ -18,39 +18,43 @@ if __name__ == '__main__':
sys.path.append('.') sys.path.append('.')
from freitagslib.item import Item from freitagslib.item import Item
from freitagslib.tools import require_type from freitagslib.tools import require_type
from freitagslib.settings import settings, Settings
DEPOSIT_CASH = 1 DEPOSIT_CASH = 1
DEPOSIT_BANK = 2 DEPOSIT_BANK = 2
_BASE_URL = 'https://k4ever.freitagsrunde.org:443/api2/'
_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) ITEM_ONLY, DEPOSIT_ONLY, ITEM_AND_DEPOSIT = range(3)
if bool(os.environ.get('BARCODE_PLUGIN_DEBUG', False)): def _urlopen(*args):
_h = urllib2.HTTPHandler(debuglevel=1) if settings.CLIENT_DEBUG:
_opener = urllib2.build_opener(_h) _h = urllib2.HTTPHandler(debuglevel=1)
_urlopen = _opener.open _opener = urllib2.build_opener(_h)
else: _func = _opener.open
_urlopen = urllib2.urlopen else:
_func = urllib2.urlopen
return _func(*args)
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): 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): if isinstance(data, dict):
data = urllib.urlencode(data) data = urllib.urlencode(data)
# Add default headers # Add default headers
if headers is None: if headers is None:
final_headers = _headers final_headers = _get_default_headers()
else: else:
final_headers = copy.copy(_headers) final_headers = copy.copy(_get_default_headers())
final_headers.update(headers) final_headers.update(headers)
if method == 'GET': if method == 'GET':
@ -118,7 +122,10 @@ def deposit(amount, transaction_type, user_name):
if __name__ == '__main__': if __name__ == '__main__':
user_name = get_user_name_from_auth_blob(os.environ['BARCODE_PLUGIN_TEST_AUTH_BLOB']) if not settings.load('freitagskasse.conf', (('TEST_AUTH_BLOB', str, None), )):
sys.exit(1)
user_name = get_user_name_from_auth_blob(settings.TEST_AUTH_BLOB)
print('User name: ' + user_name) print('User name: ' + user_name)
balance = get_balance(user_name) balance = get_balance(user_name)

View File

@ -0,0 +1,61 @@
#! /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
_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('client-barcode', key)
else:
value = cp.get('client-barcode', 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.' \
% (filename, key), file=sys.stderr)
valid = False
else:
setattr(self, key, value)
if self.CLIENT_DEBUG:
print('DEBUG: CONFIG: %s=%s("%s")' % (key, type(value).__name__, value))
return valid
settings = Settings()