Даже при переключении на mstrio.project_objects.dashboard все равно отображается предупреждение об устаревании, игнорирование его не работает.
$ pip install -Uq mstrio-py
$ export PYTHONWARNINGS='ignore:mstrio.project_objects.dossier module is deprecated:DeprecationWarning'
$ python3 -c 'from mstrio.project_objects import dashboard'
DeprecationWarning: mstrio.project_objects.dossier module is deprecated and will not be supported starting from mstrio-py 11.5.03. Please use mstrio.project_objects.dashboard instead.
$ python3 -W "ignore:mstrio.project_objects.dossier module is deprecated:DeprecationWarning" -c "from mstrio.project_objects import dashboard"
DeprecationWarning: mstrio.project_objects.dossier module is deprecated and will not be supported starting from mstrio-py 11.5.03. Please use mstrio.project_objects.dashboard instead.
Защита импорта с помощью контекстного менеджера также не работает.
>>> import warnings
>>> with warnings.catch_warnings():
... warnings.filterwarnings("ignore", message = ".*mstrio.project_objects.dossier module is deprecated.*")
... from mstrio.project_objects import dashboard
...
DeprecationWarning: mstrio.project_objects.dossier module is deprecated and will not be supported starting from mstrio-py 11.5.03. Please use mstrio.project_objects.dashboard instead.
Почему оно не уходит? Как избежать этого предупреждения об устаревании?
Это последний mstrio-py, то есть 11.4.3.101.
@user70 user70 это уже последняя версия
попробуйте сделать это в одну строку, пожалуйста python3 -W "ignore:mstrio.project_objects.dossier module is deprecated:DeprecationWarning" -c "from mstrio.project_objects import dashboard" это работает?
@ user70 Нет, это не так.






mstrioпереопределяет фильтр предупреждений:
warnings.filterwarnings(action=print_warnings, module=module_path)
warnings.filterwarnings(
action=print_warnings, category=DeprecationWarning, module=module_path
)
warnings.filterwarnings(action='default', category=UserWarning, module=module_path)
Он также исправляет форматирование предупреждений, поэтому ваше предупреждающее сообщение не выглядит так, как обычно:
def custom_formatwarning(msg, category, *args, **kwargs):
# ignore everything except the message
return str(category.__name__) + ': ' + str(msg) + '\n'
warnings.formatwarning = custom_formatwarning
В этом файле есть много вещей, которые этот пакет действительно не должен делать. Лучшим вариантом может быть поднять проблему с MicroStrategy и попросить ее изменить это.
Но разве это не влияет на все, а не только на собственное пространство имен mstrio? Как импортировать mstrio, не портя глобальное состояние? И почему вместо этого предупреждается использование mstrio.project_objects.dashboard, когда это уже использовалось?
@nosteponsnek: Да, это влияет на все. Этот пакет действительно не должен делать ничего из этого. Этот код просто отстой.
Предупреждение появляется, потому что mstrio сам импортирует собственный устаревший mstrio.project_objects.dossier подмодуль, вызывая собственное предупреждение об устаревании.
Единственный хороший способ избежать подобного поведения — внести изменения на стороне MicroStrategy. Из плохих способов вам придется использовать такие варианты, как самостоятельное редактирование установленных файлов библиотеки или исправление обезьян __import__, чтобы предотвратить загрузку mstrio.config.
pip install --upgrade mstrio-py :D