Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 56 additions & 7 deletions finary_uapi/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
finary_uapi timeseries <period> <type>
finary_uapi checking_accounts transactions [--page=<page>] [--perpage=<perpage>] [--account=<account_ids>] [--institution=<institution_ids>] [--query=<query>] [--start-date=<start_date>] [--end-date=<end_date>] [--marked=<marked>]
finary_uapi fonds_euro [--org-id=<org_id>]
finary_uapi fonds_euro add <fond_name> <amount> <account_name>
finary_uapi fonds_euro update <fond_id> <amount>
finary_uapi fonds_euro delete <fond_id>
finary_uapi startups
finary_uapi investments [--org-id=<org_id>]
finary_uapi investments dividends
Expand Down Expand Up @@ -59,6 +62,7 @@
finary_uapi import crypto_csv FILENAME [(--new=NAME | --edit=account_id | --add=account_id)]
finary_uapi import stocks_csv FILENAME [(--new=NAME | --edit=account_id | --add=account_id)] [-d]
finary_uapi import stocks_json FILENAME [(--new=NAME | --edit=account_id | --add=account_id)] [-d]
finary_uapi import fonds_euro_json FILENAME [(--new=NAME | --edit=account_id | --add=account_id)] [-d]


Options:
Expand Down Expand Up @@ -142,7 +146,13 @@
get_user_cryptos,
update_user_crypto_by_code,
)
from .user_fonds_euro import get_user_fonds_euro
from .user_fonds_euro import (
add_imported_fonds_euro_to_account,
add_user_fonds_euro,
delete_user_fonds_euro,
get_user_fonds_euro,
update_user_fonds_euro,
)
from .user_me import (
get_family_org_id,
get_user_me,
Expand Down Expand Up @@ -213,11 +223,6 @@ def main() -> int: # pragma: nocover
end_date=args["--end-date"],
marked=args["--marked"],
)
elif args["fonds_euro"]:
if org_id:
result = get_organization_fonds_euro(session, org_id)
else:
result = get_user_fonds_euro(session)
elif args["startups"]:
result = get_user_startups(session)
elif args["search"]:
Expand Down Expand Up @@ -259,6 +264,20 @@ def main() -> int: # pragma: nocover
args["<price>"],
args["<account_id>"],
)
elif args["fonds_euro"]:
account = get_holdings_account_per_name_or_id(session, args["<account_name>"])
if not account:
print(
"Error: no account by that name",
file=sys.stderr,
)
return 1
result = add_user_fonds_euro(
session,
account["bank"],
args["<fond_name>"],
args["<amount>"],
)
elif args["generic_assets"]:
result = add_user_generic_asset(
session,
Expand Down Expand Up @@ -324,6 +343,12 @@ def main() -> int: # pragma: nocover
args["<price>"],
args["<account_id>"],
)
elif args["fonds_euro"]:
result = update_user_fonds_euro(
session,
{ 'id': args["<fond_id>"] },
args["<amount>"],
)
elif args["generic_assets"]:
result = update_user_generic_asset(
session,
Expand Down Expand Up @@ -365,6 +390,8 @@ def main() -> int: # pragma: nocover
delete_user_generic_asset(session, args["<asset_id>"])
elif args["real_estates"]:
delete_user_real_estates(session, args["<asset_id>"])
elif args["fonds_euro"]:
result = delete_user_fonds_euro(session, args["<fond_id>"])
elif args["holdings_accounts"]:
result = delete_holdings_account(session, args["<account_id>"])
elif args["precious_metals"]:
Expand All @@ -385,6 +412,11 @@ def main() -> int: # pragma: nocover
result = get_organization_cryptos(session, org_id)
else:
result = get_user_cryptos(session)
elif args["fonds_euro"]:
if org_id:
result = get_organization_fonds_euro(session, org_id)
else:
result = get_user_fonds_euro(session)
elif args["investments"]:
if args["dividends"]:
result = get_portfolio_investments_dividends(session)
Expand Down Expand Up @@ -466,7 +498,7 @@ def main() -> int: # pragma: nocover
to_be_imported = import_crypto_generic_csv(args["FILENAME"])
elif args["stocks_csv"]:
to_be_imported = import_stocks_generic_csv(args["FILENAME"])
elif args["stocks_json"]:
elif args["stocks_json"] or args["fonds_euro_json"]:
with open(args["FILENAME"], "r") as input_file:
to_be_imported = json.loads(input_file.read())

Expand Down Expand Up @@ -520,6 +552,23 @@ def main() -> int: # pragma: nocover
add_imported_securities_to_account(
session, args["--add"], to_be_imported, dry_run=args["-d"]
)
elif args["fonds_euro_json"]: # fonds_euro import
if args["--new"]:
add_imported_fonds_euro_to_account(
session, args["--new"], to_be_imported, dry_run=args["-d"]
)
elif args["--edit"]:
add_imported_fonds_euro_to_account(
session,
args["--edit"],
to_be_imported,
edit=True,
dry_run=args["-d"],
)
elif args["--add"]:
add_imported_fonds_euro_to_account(
session, args["--add"], to_be_imported, dry_run=args["-d"]
)
else: # crowdlending
add_imported_user_crowdlendings(
session, to_be_imported, dry_run=args["-d"], clean=args["-f"]
Expand Down
112 changes: 109 additions & 3 deletions finary_uapi/user_fonds_euro.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,115 @@
import json
import logging
from .constants import API_ROOT
from curl_cffi import requests
from .utils import get_and_print

fe_url = f"{API_ROOT}/users/me/fonds_euro"

from .user_holdings_accounts import (
get_holdings_account_per_name_or_id,
add_holdings_account,
)

def get_user_fonds_euro(session: requests.Session):
fe_url = f"{API_ROOT}/users/me/fonds_euro"
return get_and_print(session, fe_url)


def add_user_fonds_euro(session: requests.Session, bank, name, buying_price):
url = f"{API_ROOT}/users/me/fonds_euro"
data = {}
#data["annual_yield"] = annual_yield
data["bank"] = bank
data["current_price"] = buying_price
data["buying_price"] = buying_price
data["name"] = name
data_json = json.dumps(data)
headers = {}
headers["Content-Length"] = str(len(data_json))
headers["Content-Type"] = "application/json"
x = session.post(url, data=data_json, headers=headers)
logging.debug(x.status_code)
logging.debug(json.dumps(x.json(), indent=4))
return x.json()

def update_user_fonds_euro(session: requests.Session, fond, current_price):
url = f"{API_ROOT}/users/me/fonds_euro/{fond['id']}"
data = {}
#data["annual_yield"] = annual_yield
data["current_price"] = current_price
#data["buying_price"] = buying_price
data_json = json.dumps(data)
headers = {}
headers["Content-Length"] = str(len(data_json))
headers["Content-Type"] = "application/json"
x = session.put(url, data=data_json, headers=headers)
logging.debug(x.status_code)
logging.debug(json.dumps(x.json(), indent=4))
return x.json()

def delete_user_fonds_euro(session: requests.Session, fond_id):
url = f"{API_ROOT}/users/me/fonds_euro/{fond_id}"
x = session.delete(url)
logging.debug(x.status_code)
return x.status_code

def add_imported_fonds_euro_to_account(session: requests.Session, account_name_id: str, to_be_imported, edit=False, delete=False, dry_run=False):
account = get_holdings_account_per_name_or_id(session, account_name_id)
if not account:
account = add_holdings_account(session, account_name_id, "stocks")
account = account["result"]

if edit:
for fonds_euro in account["fonds_euro"]:
found = False
for line in to_be_imported:
if fonds_euro["name"] == line["description"]:
found = True
break
if not found:
logging.info(f'-- Delete {fonds_euro["name"]}')
if not dry_run:
delete_user_fonds_euro(session, fonds_euro["id"])

for line in to_be_imported:
if edit:
found = False
for fonds_euro in account["fonds_euro"]:
if (
line["description"]
== fonds_euro["name"]
):
if (
line["price"] != fonds_euro["current_price"]
):
logging.info(
f'** Update [{line["description"]}]: [{fonds_euro["current_price"]} -> {line["price"]}]' # noqa
)
if not dry_run:
update_user_fonds_euro(
session,
fonds_euro,
line["price"],
)
found = True
break
if not found:
logging.info(
f'++ Add [{line["description"]}]: {line["price"]}' # noqa
)
if not dry_run:
add_user_fonds_euro(
session,
account["bank"],
line["description"],
line["price"],
)
else:
logging.info(
f'+ Add [{line["description"]}]: {line["price"]}'
)
if not dry_run:
add_user_fonds_euro(
session,
account["bank"],
line["description"],
line["price"],
)
10 changes: 10 additions & 0 deletions tests/data/fond_euros.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[
{
"description": "FG Bonus +2.6",
"price": 48.05
},
{
"description": "FG Bonus +3",
"price": 50.3
}
]