Files
@ 8e59d3d66159
Branch filter:
Location: NPO-Accounting/experimental-accounting-api/accounting/transport.py - annotation
8e59d3d66159
1.8 KiB
text/x-python
[sql] Late init_app of SQLAlchemy
in order to be able to run sql/models.py alone (e.g. sphinx autodoc)
in order to be able to run sql/models.py alone (e.g. sphinx autodoc)
6f2c875c7b76 6f2c875c7b76 63c7b70000da 63c7b70000da 9656c39e9127 63c7b70000da f2b9decf2752 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da f2b9decf2752 63c7b70000da 63c7b70000da 032175cd26d9 032175cd26d9 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 032175cd26d9 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 9656c39e9127 63c7b70000da 63c7b70000da 6f2c875c7b76 6f2c875c7b76 6f2c875c7b76 6f2c875c7b76 6f2c875c7b76 63c7b70000da 63c7b70000da 63c7b70000da f2b9decf2752 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da 63c7b70000da f2b9decf2752 f2b9decf2752 63c7b70000da 63c7b70000da 63c7b70000da 6f2c875c7b76 6f2c875c7b76 6f2c875c7b76 63c7b70000da | from datetime import datetime
from flask import json
from accounting.models import Amount, Transaction, Posting, Account
class AccountingEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, Account):
return dict(
__type__=o.__class__.__name__,
name=o.name,
amounts=o.amounts,
accounts=o.accounts
)
elif isinstance(o, Transaction):
return dict(
__type__=o.__class__.__name__,
id=o.id,
date=o.date.strftime('%Y-%m-%d'),
payee=o.payee,
postings=o.postings,
metadata=o.metadata
)
elif isinstance(o, Posting):
return dict(
__type__=o.__class__.__name__,
account=o.account,
amount=o.amount,
metadata=o.metadata
)
elif isinstance(o, Amount):
return dict(
__type__=o.__class__.__name__,
amount=str(o.amount),
symbol=o.symbol
)
elif isinstance(o, Exception):
return dict(
__type__=o.__class__.__name__,
args=o.args
)
return json.JSONEncoder.default(self, o)
class AccountingDecoder(json.JSONDecoder):
def __init__(self):
json.JSONDecoder.__init__(self, object_hook=self.dict_to_object)
def dict_to_object(self, d):
if '__type__' not in d:
return d
types = {c.__name__: c for c in [Amount, Transaction, Posting,
Account]}
_type = d.pop('__type__')
if _type == 'Transaction':
d['date'] = datetime.strptime(d['date'], '%Y-%m-%d')
return types[_type](**d)
|