Add authenticated finance REST API

This commit is contained in:
kai
2026-09-09 09:47:56 +02:00
parent afc6f74f36
commit ad452045be
13 changed files with 760 additions and 44 deletions
+12 -5
View File
@@ -23,13 +23,18 @@ def connect(path=None):
db.close()
def ensure_asset(db, name, asset_type='other', ticker=None):
def validate_asset(name, asset_type='other', ticker=None):
name = canonical_name(name)
if asset_type not in ASSET_TYPES:
raise ValueError('Ungültiger Positionstyp.')
ticker = (ticker or '').strip()
if len(ticker) > 30:
raise ValueError('Ticker darf maximal 30 Zeichen enthalten.')
return name, ticker or None
def ensure_asset(db, name, asset_type='other', ticker=None):
name, ticker = validate_asset(name, asset_type, ticker)
db.execute('INSERT INTO assets (name, normalized_name, ticker, asset_type) VALUES (?, ?, ?, ?) ON CONFLICT(normalized_name) DO NOTHING',
(name, name_key(name), ticker or None, asset_type))
return db.execute('SELECT id FROM assets WHERE normalized_name = ?', (name_key(name),)).fetchone()['id']
@@ -39,6 +44,7 @@ def initialize(path=None):
target = Path(path or db_path())
target.parent.mkdir(parents=True, exist_ok=True)
with connect(target) as db:
first_setup = db.execute("SELECT 1 FROM sqlite_master WHERE type='table' AND name='assets'").fetchone() is None
db.execute('PRAGMA journal_mode = WAL')
db.executescript('''
CREATE TABLE IF NOT EXISTS assets (
@@ -67,7 +73,8 @@ def initialize(path=None):
);
PRAGMA user_version = 1;
''')
for name, kind in [('AGNC','stock'), ('Main Street Capital','stock'), ('Capital Southwest','stock'),
('Ares Capital','stock'), ('Realty Income','stock'), ('Enbridge','stock'),
('Bayer','stock'), ('STOXX Global Select Dividend 100','etf'), ('airBaltic','bond')]:
ensure_asset(db, name, kind)
if first_setup:
for name, kind in [('AGNC','stock'), ('Main Street Capital','stock'), ('Capital Southwest','stock'),
('Ares Capital','stock'), ('Realty Income','stock'), ('Enbridge','stock'),
('Bayer','stock'), ('STOXX Global Select Dividend 100','etf'), ('airBaltic','bond')]:
ensure_asset(db, name, kind)