Как правильно использовать PEP 604 – разрешить запись типов объединения как X | Да ⇐ Python
-
Anonymous
Как правильно использовать PEP 604 – разрешить запись типов объединения как X | Да
У меня есть следующий код:
импорт журнала из синапса импорта Module_api из synapse.events импортировать EventBase из synapse.module_api импорт ModuleApi класс SpamCheckerConfig: проходить класс СпамЧекер: API: МодульApi logger = logging.getLogger(__name__) def __init__(self, config: SpamCheckerConfig, API: ModuleApi): self.api = API self.logger.info("Инициализированный модуль %s", __name__) async def check_event_for_spam(self, event: EventBase) -> Module_api.NOT_SPAM | модуль_api.errors.Коды: self.logger.info("Проверка события на спам: %s", event) вернуть модуль_api.NOT_SPAM Сигнатура метода взята из документации Synapse: https://matrix-org.github.io/synapse/de ... t_for_spam
Используется версия Python 3.11
Однако я получаю следующую ошибку:
Запуск синапса с помощью args -m synapse.app.homeserver --config-path /data/homeserver.yaml Traceback (последний вызов последний): Файл «», строка 198, в _run_module_as_main Файл «», строка 88, в _run_code Файл «/usr/local/lib/python3.11/site-packages/synapse/app/homeserver.py», строка 399, в основной() Файл "/usr/local/lib/python3.11/site-packages/synapse/app/homeserver.py", строка 389, в основном файле. hs = настройка(sys.argv[1:]) ^^^^^^^^^^^^^^^^^^^^ Файл «/usr/local/lib/python3.11/site-packages/synapse/app/homeserver.py», строка 298, в настройке config = HomeServerConfig.load_or_generate_config( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «/usr/local/lib/python3.11/site-packages/synapse/config/_base.py», строка 802, в load_or_generate_config obj.parse_config_dict( Файл «/usr/local/lib/python3.11/site-packages/synapse/config/_base.py», строка 823, в parse_config_dict self.invoke_all( Файл «/usr/local/lib/python3.11/site-packages/synapse/config/_base.py», строка 422, в вызове_all res[config_class.section] = getattr(config, func_name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «/usr/local/lib/python3.11/site-packages/synapse/config/modules.py», строка 33, в read_config self.loaded_modules.append(load_module(модуль, config_path)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «/usr/local/lib/python3.11/site-packages/synapse/util/module_loader.py», строка 47, в load_module модуль = importlib.import_module(имя_модуля) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «/usr/local/lib/python3.11/importlib/__init__.py», строка 126, в import_module return _bootstrap._gcd_import(имя[уровень:], пакет, уровень) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ Файл «», строка 1204, в _gcd_import Файл «», строка 1176, в _find_and_load Файл «», строка 1147, в _find_and_load_unlocked Файл «», строка 690, в _load_unlocked Файл «», строка 940, в exec_module Файл «», строка 241, в _call_with_frames_removed Файл «/app/modules/mportal/spam_checker.py», строка 12, в класс СпамЧекер: Файл «/app/modules/mportal/spam_checker.py», строка 20, в SpamChecker. async def check_event_for_spam(self, event: EventBase) -> Module_api.NOT_SPAM | модуль_api.errors.Коды: ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ TypeError: неподдерживаемые типы операндов для |: 'str' и 'EnumType' Почему это происходит? PEP 604 предполагает, что это должно работать. Как заставить код работать?
У меня есть следующий код:
импорт журнала из синапса импорта Module_api из synapse.events импортировать EventBase из synapse.module_api импорт ModuleApi класс SpamCheckerConfig: проходить класс СпамЧекер: API: МодульApi logger = logging.getLogger(__name__) def __init__(self, config: SpamCheckerConfig, API: ModuleApi): self.api = API self.logger.info("Инициализированный модуль %s", __name__) async def check_event_for_spam(self, event: EventBase) -> Module_api.NOT_SPAM | модуль_api.errors.Коды: self.logger.info("Проверка события на спам: %s", event) вернуть модуль_api.NOT_SPAM Сигнатура метода взята из документации Synapse: https://matrix-org.github.io/synapse/de ... t_for_spam
Используется версия Python 3.11
Однако я получаю следующую ошибку:
Запуск синапса с помощью args -m synapse.app.homeserver --config-path /data/homeserver.yaml Traceback (последний вызов последний): Файл «», строка 198, в _run_module_as_main Файл «», строка 88, в _run_code Файл «/usr/local/lib/python3.11/site-packages/synapse/app/homeserver.py», строка 399, в основной() Файл "/usr/local/lib/python3.11/site-packages/synapse/app/homeserver.py", строка 389, в основном файле. hs = настройка(sys.argv[1:]) ^^^^^^^^^^^^^^^^^^^^ Файл «/usr/local/lib/python3.11/site-packages/synapse/app/homeserver.py», строка 298, в настройке config = HomeServerConfig.load_or_generate_config( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «/usr/local/lib/python3.11/site-packages/synapse/config/_base.py», строка 802, в load_or_generate_config obj.parse_config_dict( Файл «/usr/local/lib/python3.11/site-packages/synapse/config/_base.py», строка 823, в parse_config_dict self.invoke_all( Файл «/usr/local/lib/python3.11/site-packages/synapse/config/_base.py», строка 422, в вызове_all res[config_class.section] = getattr(config, func_name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «/usr/local/lib/python3.11/site-packages/synapse/config/modules.py», строка 33, в read_config self.loaded_modules.append(load_module(модуль, config_path)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «/usr/local/lib/python3.11/site-packages/synapse/util/module_loader.py», строка 47, в load_module модуль = importlib.import_module(имя_модуля) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «/usr/local/lib/python3.11/importlib/__init__.py», строка 126, в import_module return _bootstrap._gcd_import(имя[уровень:], пакет, уровень) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ Файл «», строка 1204, в _gcd_import Файл «», строка 1176, в _find_and_load Файл «», строка 1147, в _find_and_load_unlocked Файл «», строка 690, в _load_unlocked Файл «», строка 940, в exec_module Файл «», строка 241, в _call_with_frames_removed Файл «/app/modules/mportal/spam_checker.py», строка 12, в класс СпамЧекер: Файл «/app/modules/mportal/spam_checker.py», строка 20, в SpamChecker. async def check_event_for_spam(self, event: EventBase) -> Module_api.NOT_SPAM | модуль_api.errors.Коды: ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ TypeError: неподдерживаемые типы операндов для |: 'str' и 'EnumType' Почему это происходит? PEP 604 предполагает, что это должно работать. Как заставить код работать?