diff --git a/accounting/web.py b/accounting/web.py index 23a4ff2b92b291a9dca1379925e5b9849aacda93..abdc861f2252892a0afde51ecaaa8e70b68bbf00 100644 --- a/accounting/web.py +++ b/accounting/web.py @@ -1,3 +1,7 @@ +''' +This module contains the high-level webservice logic such as the Flask setup +and the Flask endpoints. +''' import sys import logging import argparse @@ -13,7 +17,16 @@ from accounting.decorators import jsonify_exceptions app = Flask('accounting') app.config.from_pyfile('config.py') -ledger = Ledger(ledger_file=app.config['LEDGER_FILE']) +ledger = None + +@app.before_request +def init_ledger(): + ''' + :py:meth:`flask.Flask.before_request`-decorated method that initializes an + :py:class:`accounting.Ledger` object. + ''' + global ledger + ledger = Ledger(ledger_file=app.config['LEDGER_FILE']) # These will convert output from our internal classes to JSON and back @@ -23,18 +36,24 @@ app.json_decoder = AccountingDecoder @app.route('/') def index(): + ''' Hello World! ''' return 'Hello World!' @app.route('/balance') def balance_report(): - ''' Returns the balance report from ledger ''' + ''' + Returns the JSON-serialized result of :meth:`accounting.Ledger.bal` + ''' report_data = ledger.bal() return jsonify(balance_report=report_data) @app.route('/transaction', methods=['GET']) def transaction_get(): + ''' + Returns the JSON-serialized output of :meth:`accounting.Ledger.reg` + ''' return jsonify(transactions=ledger.reg()) @app.route('/transaction', methods=['POST']) @@ -106,40 +125,42 @@ def parse_json(): Example: + .. code-block:: bash + wget http://127.0.0.1:5000/balance -O balance.json curl -X POST -H 'Content-Type: application/json' -d @balance.json \ http://127.0.0.1/parse-json # Logging output (linebreaks added for clarity) - DEBUG:accounting:json data: {'balance_report': - [, ] - [, ] - [] []>, - ] []>]>, - ] - [] - [] []>]>, - ] [ - ] []>]>]>, - , - ] - [] []>, - ] - [] []>]>, - ] []>]>]>]} + # DEBUG:accounting:json data: {'balance_report': + # [, ] + # [, ] + # [] []>, + # ] []>]>, + # ] + # [] + # [] []>]>, + # ] [ + # ] []>]>]>, + # , + # ] + # [] []>, + # ] + # [] []>]>, + # ] []>]>]>]} ''' app.logger.debug('json data: %s', request.json) return jsonify(foo='bar') @@ -147,7 +168,9 @@ def parse_json(): @app.route('/register') def register_report(): - ''' Returns the register report from ledger ''' + ''' + Returns the JSON-serialized output of :py:meth:`accounting.Ledger.reg` + ''' report_data = ledger.reg() return jsonify(register_report=report_data)