WLM1ke / poptimizer

Оптимизация долгосрочного портфеля акций
The Unlicense
153 stars 28 forks source link

TypeError: 'type' object is not subscriptable #100

Open iDoka opened 2 years ago

iDoka commented 2 years ago

Приветствую! В первую очередь спасибо за разработку.

Мой сетап: OS: CentOS 7 64bit Python 3.6.8

Пытаюсь запустить на последнем коммите из ветки мастер:

$ python3 -m poptimizer
Traceback (most recent call last):
  File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/doka/proj/2022/poptimizer/poptimizer/__main__.py", line 6, in <module>
    from poptimizer import config
  File "/home/doka/proj/2022/poptimizer/poptimizer/config.py", line 9, in <module>
    from poptimizer.shared.log import get_handlers
  File "/home/doka/proj/2022/poptimizer/poptimizer/shared/log.py", line 48, in <module>
    ) -> list[Handler]:
TypeError: 'type' object is not subscriptable

pytest жалуется на аналогичную проблему:

$ pytest poptimizer -v --cov=poptimizer --cov-report=term-missing --cov-report=xml --setup-show
================================================================================================================================== test session starts ===================================================================================================================================
platform linux -- Python 3.6.8, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- /home/doka/proj/2022/poptimizer/.venv/bin/python3
cachedir: .pytest_cache
rootdir: /home/doka/proj/2022/poptimizer
plugins: asyncio-0.16.0, cov-3.0.0, mock-3.6.1
collected 0 items / 1 error                                                                                                                                                                                                                                                              
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/data/adapters/gateways/cpi.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/data/app/viewers.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/data/domain/factory.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/data/domain/tables/cbr.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/data/domain/tables/cpi.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/data/domain/tables/dividends.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/data/domain/tables/indexes.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/data/domain/tables/quotes.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/data/domain/tables/trading_dates.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/data/domain/tables/usd.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/dl/features/turnover.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/dl/model.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/evolve/evolve.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/evolve/population.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/portfolio/portfolio.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/shared/adapters.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/shared/connections.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")
/home/doka/proj/2022/poptimizer/.venv/lib64/python3.6/site-packages/coverage/report.py:81: CoverageWarning: Couldn't parse Python file '/home/doka/proj/2022/poptimizer/poptimizer/store/database.py' (couldnt-parse)
  coverage._warn(msg, slug="couldnt-parse")

========================================================================================================================================= ERRORS =========================================================================================================================================
_____________________________________________________________________________________________________________________________ ERROR collecting test session ______________________________________________________________________________________________________________________________
/usr/lib64/python3.6/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
<frozen importlib._bootstrap>:994: in _gcd_import
    ???
<frozen importlib._bootstrap>:971: in _find_and_load
    ???
<frozen importlib._bootstrap>:941: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:219: in _call_with_frames_removed
    ???
<frozen importlib._bootstrap>:994: in _gcd_import
    ???
<frozen importlib._bootstrap>:971: in _find_and_load
    ???
<frozen importlib._bootstrap>:941: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:219: in _call_with_frames_removed
    ???
<frozen importlib._bootstrap>:994: in _gcd_import
    ???
<frozen importlib._bootstrap>:971: in _find_and_load
    ???
<frozen importlib._bootstrap>:955: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:665: in _load_unlocked
    ???
<frozen importlib._bootstrap_external>:678: in exec_module
    ???
<frozen importlib._bootstrap>:219: in _call_with_frames_removed
    ???
poptimizer/reports/__init__.py:2: in <module>
    from poptimizer.reports.pdf import report
poptimizer/reports/pdf.py:5: in <module>
    from poptimizer.config import REPORTS_PATH, POptimizerError
poptimizer/config.py:9: in <module>
    from poptimizer.shared.log import get_handlers
poptimizer/shared/log.py:48: in <module>
    ) -> list[Handler]:
E   TypeError: 'type' object is not subscriptable

----------- coverage: platform linux, python 3.6.8-final-0 -----------
Name                                                  Stmts   Miss Branch BrPart  Cover   Missing
-------------------------------------------------------------------------------------------------
poptimizer/__init__.py                                    0      0      0      0   100%
poptimizer/__main__.py                                   20     20      0      0     0%   2-36
poptimizer/config.py                                     36     29      4      0    18%   12-65
poptimizer/conftest.py                                    8      3      0      0    62%   11-13
poptimizer/data/__init__.py                               0      0      0      0   100%
poptimizer/data/adapters/__init__.py                      0      0      0      0   100%
poptimizer/data/adapters/gateways/__init__.py             0      0      0      0   100%
poptimizer/data/adapters/gateways/bcs.py                 53     53     14      0     0%   2-83
poptimizer/data/adapters/gateways/cbr.py                 28     28      4      0     0%   2-57
poptimizer/data/adapters/gateways/close_reestry.py       52     52     14      0     0%   2-91
poptimizer/data/adapters/gateways/conomy.py              54     54      4      0     0%   2-105
poptimizer/data/adapters/gateways/dividends.py           24     24      8      0     0%   2-50
poptimizer/data/adapters/gateways/dohod.py               24     24      2      0     0%   2-50
poptimizer/data/adapters/gateways/finrange.py            38     38      4      0     0%   2-71
poptimizer/data/adapters/gateways/gateways.py            17     17      8      0     0%   2-39
poptimizer/data/adapters/gateways/invest_mint.py         54     54     12      0     0%   2-111
poptimizer/data/adapters/gateways/moex.py                56     56     14      0     0%   2-173
poptimizer/data/adapters/gateways/moex_status.py         25     25      4      0     0%   2-58
poptimizer/data/adapters/gateways/nasdaq.py              35     35      4      0     0%   2-72
poptimizer/data/adapters/gateways/smart_lab.py           19     19      2      0     0%   2-48
poptimizer/data/adapters/gateways/street_insider.py      25     25      2      0     0%   2-52
poptimizer/data/adapters/html/__init__.py                 0      0      0      0   100%
poptimizer/data/adapters/html/cell_parser.py             46     46     10      0     0%   2-64
poptimizer/data/adapters/html/chromium.py                28     28      6      0     0%   2-56
poptimizer/data/adapters/html/description.py             27     27     10      0     0%   2-56
poptimizer/data/adapters/html/parser.py                  52     52     13      0     0%   2-87
poptimizer/data/adapters/odm.py                          49     49     10      0     0%   2-107
poptimizer/data/app/__init__.py                           0      0      0      0   100%
poptimizer/data/app/bootstrap.py                         19     19      2      0     0%   2-47
poptimizer/data/domain/__init__.py                        0      0      0      0   100%
poptimizer/data/domain/events.py                         31     31     12      0     0%   2-64
poptimizer/data/domain/handlers.py                       51     51     12      0     0%   2-123
poptimizer/data/domain/tables/__init__.py                 0      0      0      0   100%
poptimizer/data/domain/tables/base.py                    64     64     24      0     0%   2-123
poptimizer/data/domain/tables/securities.py              39     39     10      0     0%   2-86
poptimizer/data/ports.py                                 12     12      0      0     0%   2-15
poptimizer/data/views/__init__.py                         0      0      0      0   100%
poptimizer/data/views/crop/__init__.py                    0      0      0      0   100%
poptimizer/data/views/crop/div.py                        17     17      2      0     0%   2-43
poptimizer/data/views/crop/not_div.py                    17     17      2      0     0%   2-37
poptimizer/data/views/div_status.py                      58     58     14      0     0%   2-124
poptimizer/data/views/go.py                               8      8      0      0     0%   2-13
poptimizer/data/views/indexes.py                         28     28      0      0     0%   2-65
poptimizer/data/views/listing.py                         24     24      0      0     0%   2-52
poptimizer/data/views/quotes.py                          34     34      8      0     0%   2-107
poptimizer/dl/__init__.py                                 4      4      0      0     0%   2-5
poptimizer/dl/data_loader.py                             38     38     12      0     0%   2-86
poptimizer/dl/features/__init__.py                       18     18      0      0     0%   2-19
poptimizer/dl/features/data_params.py                    79     79     12      0     0%   2-170
poptimizer/dl/features/day_of_period.py                  14     14      2      0     0%   2-29
poptimizer/dl/features/day_of_year.py                    16     16      2      0     0%   2-32
poptimizer/dl/features/dividends.py                      16     16      2      0     0%   2-28
poptimizer/dl/features/feature.py                        18     18      4      0     0%   2-40
poptimizer/dl/features/high.py                           20     20      2      0     0%   2-37
poptimizer/dl/features/imoex.py                          19     19      2      0     0%   2-38
poptimizer/dl/features/label.py                          28     28      2      0     0%   2-41
poptimizer/dl/features/low.py                            20     20      2      0     0%   2-37
poptimizer/dl/features/mcftrr.py                         19     19      2      0     0%   2-37
poptimizer/dl/features/meogtrr.py                        19     19      2      0     0%   2-33
poptimizer/dl/features/open.py                           21     21      2      0     0%   2-39
poptimizer/dl/features/prices.py                         17     17      2      0     0%   2-27
poptimizer/dl/features/rvi.py                            19     19      2      0     0%   2-37
poptimizer/dl/features/ticker.py                         16     16      2      0     0%   2-26
poptimizer/dl/features/ticker_type.py                    17     17      2      0     0%   2-32
poptimizer/dl/features/usd.py                            19     19      2      0     0%   2-38
poptimizer/dl/forecast.py                                19     19      2      0     0%   2-28
poptimizer/dl/ledoit_wolf.py                             33     33      0      0     0%   2-82
poptimizer/dl/ledoit_wolf_nonlinear.py                   52     52      4      0     0%   1-141
poptimizer/dl/models/__init__.py                          1      1      0      0     0%   2
poptimizer/dl/models/wave_net.py                        112    112     42      0     0%   2-334
poptimizer/evolve/__init__.py                             2      2      0      0     0%   2-3
poptimizer/evolve/chromosomes/__init__.py                 6      6      0      0     0%   2-7
poptimizer/evolve/chromosomes/chromosome.py              46     46     16      0     0%   2-134
poptimizer/evolve/chromosomes/data.py                    22     22     34      0     0%   2-154
poptimizer/evolve/chromosomes/model.py                   12     12      4      0     0%   2-75
poptimizer/evolve/chromosomes/optimizer.py                6      6      4      0     0%   2-33
poptimizer/evolve/chromosomes/scheduler.py               11     11      4      0     0%   2-73
poptimizer/evolve/chromosomes/utility.py                  5      5      2      0     0%   2-37
poptimizer/evolve/forecaster.py                          66     66     18      0     0%   2-137
poptimizer/evolve/genotype.py                            33     33     10      0     0%   2-80
poptimizer/evolve/seq.py                                 22     22      6      0     0%   10-109
poptimizer/evolve/store.py                               79     79     20      0     0%   2-151
poptimizer/portfolio/__init__.py                          1      1      0      0     0%   2
poptimizer/portfolio/metrics.py                         176    176     42      0     0%   2-346
poptimizer/portfolio/optimizer_hmean.py                  99     99     14      0     0%   2-199
poptimizer/portfolio/optimizer_resample.py               81     81     10      0     0%   2-191
poptimizer/reports/__init__.py                            2      1      0      0    50%   3
poptimizer/reports/excel.py                              14     14      4      0     0%   1-25
poptimizer/reports/pdf.py                                60     57     10      0     4%   6-153
poptimizer/reports/pdf_lower.py                          62     62      4      0     0%   2-144
poptimizer/reports/pdf_middle.py                         75     75      6      0     0%   3-130
poptimizer/reports/pdf_style.py                          36     36      0      0     0%   2-76
poptimizer/reports/pdf_upper.py                          85     85      8      0     0%   3-172
poptimizer/reports/simple.py                             49     49      2      0     0%   2-107
poptimizer/shared/__init__.py                             0      0      0      0   100%
poptimizer/shared/app.py                                 60     60     22      0     0%   2-133
poptimizer/shared/col.py                                 21     21      0      0     0%   2-30
poptimizer/shared/domain.py                              35     35     14      0     0%   2-78
poptimizer/shared/log.py                                 33     20      4      0    41%   16, 23-29, 33-37, 41, 50-65
poptimizer/store/__init__.py                              0      0      0      0   100%
-------------------------------------------------------------------------------------------------
TOTAL                                                  3025   2996    599      0     1%
Coverage XML written to file coverage.xml

================================================================================================================================ short test summary info =================================================================================================================================
ERROR  - TypeError: 'type' object is not subscriptable
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
==================================================================================================================================== 1 error in 2.17s ====================================================================================================================================

Я что-то делаю не так или есть какой-то более стабильно работающий коммит?

WLM1ke commented 2 years ago

У вас старая версия Python. В коде активно используются type hinting из версии 3.9

keepitsimple commented 2 years ago

@WLM1ke чтобы такой проблемы не возникало в будущем я добавил конфиг файл для poetry (https://python-poetry.org/). Poetry простой и очень удобный менеджер пакетов для проекта - это аналог npm / yarn в JS / TypeScript проектах. Он стал очень популярным в последнее время.

Если мой Pull Request будет принят, я сделаю еще один PR для Readme с описанием как разворачивать проект используя poetry.