TypeError: 'type' object is not subscriptable
Приветствую! В первую очередь спасибо за разработку.
Мой сетап: 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 ====================================================================================================================================
Я что-то делаю не так или есть какой-то более стабильно работающий коммит?
У вас старая версия Python. В коде активно используются type hinting из версии 3.9
@WLM1ke чтобы такой проблемы не возникало в будущем я добавил конфиг файл для poetry (https://python-poetry.org/). Poetry простой и очень удобный менеджер пакетов для проекта - это аналог npm / yarn в JS / TypeScript проектах. Он стал очень популярным в последнее время.
Если мой Pull Request будет принят, я сделаю еще один PR для Readme с описанием как разворачивать проект используя poetry.