WLM1ke / poptimizer

Оптимизация долгосрочного портфеля акций

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

V3. POptimizer: abnormal termination with uncaught error -> KeyError('positions')

vSINKS opened this issue · comments

Добрый день!
Новая версия "из коробки" не завелась.
Опытным путем удалось выяснить, что пока web-сервер "не рухнул" необходимо успеть добавить и сохранить тикер в портфель. После этого, при следующем старте - успеть создать новый счет (например Acc1), добавить ему баланс и сохранить изменения. После этого web-сервер более "не рушился".
Полагаю, при первом запуске (если БД data_new только создается) необходимо добавлять какой-нибудь "тикер по умолчанию" (Газпром, например), далее пользователь сам удалит "тикер. по умолчанию" если он ему не нужен. Правда потребуется защита, что нельзя удалять все тикеры (иначе после удаления "тикера по умолчанию" - снова может сломаться web-сервер)

На вкладке Tickers не очевидно, то необходимо начать набирать имя тикера, чтобы что-то стало отображаться, выглядит как будто не прогрузился интерфейс (может отображать там первые 100 тикеров, но серым цветом).

2022-10-01 21:12:54 INF POptimizer: starting...
2022-10-01 21:12:54 INF Server: started on http://localhost:5000 - press CTRL+C to quit
2022-10-01 21:12:54 INF Updater: started with last update for 1970-01-01
2022-10-01 21:12:54 INF Updater: checking new trading data for 2022-09-30
2022-10-01 21:12:55 INF Updater: updates are beginning
2022-10-01 21:12:55 INF Securities: update is completed
2022-10-01 21:12:55 INF USD: update is completed
2022-10-01 21:13:03 INF CPI: update is completed
2022-10-01 21:13:04 ERR POptimizer: abnormal termination with uncaught error -> KeyError('positions')
Traceback (most recent call last):
File "/home/poptimizer/poptimizer/main.py", line 43, in _run
await task
File "/usr/lib/python3.10/asyncio/tasks.py", line 571, in _wait_for_one
return f.result() # May raise f.exception().
File "/home/poptimizer/poptimizer/data/updater.py", line 84, in run
await self._try_to_update()
File "/home/poptimizer/poptimizer/data/updater.py", line 124, in _try_to_update
await self._update(new_update_day)
File "/home/poptimizer/poptimizer/data/updater.py", line 132, in _update
await asyncio.gather(
File "/home/poptimizer/poptimizer/data/updater.py", line 148, in _update_sec
await asyncio.gather(
File "/home/poptimizer/poptimizer/data/updater.py", line 155, in _update_raw_div
status_rows = await self._status_srv.update(update_day, sec)
File "/home/poptimizer/poptimizer/data/update/raw/status.py", line 75, in update
status = await self._update(update_day, sec)
File "/home/poptimizer/poptimizer/data/update/raw/status.py", line 89, in _update
selected = set(await self._adapter.tickers())
File "/home/poptimizer/poptimizer/portfolio/adapter.py", line 16, in tickers
return tuple(pos["ticker"] for pos in port["positions"])
KeyError: 'positions'
2022-10-01 21:13:13 INF Dividends: update is completed
2022-10-01 21:13:14 INF Server: PUT /tickers 200 OK 158b 12.3s
2022-10-01 21:13:14 INF Server: shutdown completed
2022-10-01 21:13:14 INF POptimizer: shutdown completed

Спасибо за отзыв.

Опытным путем удалось выяснить, что пока web-сервер "не рухнул" необходимо успеть добавить и сохранить тикер в портфель. После этого, при следующем старте - успеть создать новый счет (например Acc1), добавить ему баланс и сохранить изменения. После этого web-сервер более "не рушился".
Полагаю, при первом запуске (если БД data_new только создается) необходимо добавлять какой-нибудь "тикер по умолчанию" (Газпром, например), далее пользователь сам удалит "тикер. по умолчанию" если он ему не нужен. Правда потребуется защита, что нельзя удалять все тикеры (иначе после удаления "тикера по умолчанию" - снова может сломаться web-сервер)

То что она падает, если не успеть добавить - это ошибка, которую нужно поправить, а не решать добавлением одно тикера. Постараюсь исправить.

На вкладке Tickers не очевидно, то необходимо начать набирать имя тикера, чтобы что-то стало отображаться, выглядит как будто не прогрузился интерфейс (может отображать там первые 100 тикеров, но серым цветом).

Там вроде в поле написано - Type to find. Собираюсь мини хелп про использование написать.