1.0.0 рд░рд┐рд▓реАрдЬрд╝ рдЬрд┐рд╕реЗ 2 рдШрдВрдЯреЗ рдкрд╣рд▓реЗ рдкреБрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлреНрд▓рд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рдерд╛ рдФрд░ рдлреНрд▓рд╛рд╕реНрдХ рдХреЛ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрд┐рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдпрджрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдЖрддреА рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдкреВрд░реНрдг рдЯреНрд░реЗрд╕рдмреИрдХ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВред
рд╕рдорд╕реНрдпрд╛ рдлреНрд▓рд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реИ, рдФрд░ Werkzeug рдЗрди рдмрд╣рд┐рд╖реНрдХреГрдд рдЖрдпрд╛рддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦреЗрдЧрд╛ред 0.16 5 рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реИред рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдордзреНрдпрд╡рд░реНрддреА рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ рдХрд┐ рдХреМрди рд╕реЗ рдЖрдпрд╛рдд рдмрджрд▓ рдЧрдП рд╣реИрдВред
рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╢реНрдпреВ рдЦреЛрд▓рдХрд░ рдпрд╛ рдкреАрдЖрд░ рд╕рдмрдорд┐рдЯ рдХрд░рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Traceback (most recent call last):
File "/usr/local/bin/pytest", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 73, in main
config = _prepareconfig(args, plugins)
File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 224, in _prepareconfig
pluginmanager=pluginmanager, args=args
File "/usr/local/lib/python3.7/site-packages/pluggy/hooks.py", line 286, in __call__
return self._hookexec(self, self.get_hookimpls(), kwargs)
File "/usr/local/lib/python3.7/site-packages/pluggy/manager.py", line 93, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/usr/local/lib/python3.7/site-packages/pluggy/manager.py", line 87, in <lambda>
firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
File "/usr/local/lib/python3.7/site-packages/pluggy/callers.py", line 203, in _multicall
gen.send(outcome)
File "/usr/local/lib/python3.7/site-packages/_pytest/helpconfig.py", line 89, in pytest_cmdline_parse
config = outcome.get_result()
File "/usr/local/lib/python3.7/site-packages/pluggy/callers.py", line 80, in get_result
raise ex[1].with_traceback(ex[2])
File "/usr/local/lib/python3.7/site-packages/pluggy/callers.py", line 187, in _multicall
res = hook_impl.function(*args)
File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 794, in pytest_cmdline_parse
self.parse(args)
File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 1000, in parse
self._preparse(args, addopts=addopts)
File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 948, in _preparse
self.pluginmanager.load_setuptools_entrypoints("pytest11")
File "/usr/local/lib/python3.7/site-packages/pluggy/manager.py", line 299, in load_setuptools_entrypoints
plugin = ep.load()
File "/usr/local/lib/python3.7/site-packages/importlib_metadata/__init__.py", line 94, in load
module = import_module(match.group('module'))
File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "/usr/local/lib/python3.7/site-packages/_pytest/assertion/rewrite.py", line 143, in exec_module
exec(co, module.__dict__)
File "/usr/local/lib/python3.7/site-packages/pytest_flask/plugin.py", line 14, in <module>
from werkzeug import cached_property
ImportError: cannot import name 'cached_property' from 'werkzeug' (/usr/local/lib/python3.7/site-packages/werkzeug/__init__.py)
рд╡рд╣ рдкрд╛рдЗрдЯреЗрд╕реНрдЯ-рдлреНрд▓рд╛рд╕реНрдХ рд╣реИ, рдЖрдк рдЙрдирд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pytest-flask 0.15.1 рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
+1, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реИ:
packages/flask_wtf/recaptcha/widgets.py", line 5, in <module>
from werkzeug import url_encode
ImportError: cannot import name 'url_encode'
+1 рдпрд╣ рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬрд╝ рд╣рдорд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рднреА рддреЛрдбрд╝ рд░рд╣реА рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ V1.0.0 рдореБрджреНрджрд╛ рд╣реИ
``` рдЯреНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо):
рдлрд╝рд╛рдЗрд▓ "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask/cli.py", рд▓рд╛рдЗрди 240, рд▓реЛрдХреЗрдЯ_рдПрдк рдореЗрдВ
__рдЖрдпрд╛рдд__(рдореЙрдбреНрдпреВрд▓_рдирд╛рдо)
рдлрд╝рд╛рдЗрд▓ "/home/ec2-user/butter_web/butter.py", рдкрдВрдХреНрддрд┐ 1, рдореЗрдВ
рдРрдк рдЖрдпрд╛рдд рдРрдк рд╕реЗ, рдбреАрдмреА
рдлрд╝рд╛рдЗрд▓ "/home/ec2-user/butter_web/app/__init__.py", рдкрдВрдХреНрддрд┐ 8, рдореЗрдВ
рдлреНрд▓рд╛рд╕реНрдХ_рдПрдбрдорд┐рди.contrib.sqla рд╕реЗ ModelView рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдлрд╝рд╛рдЗрд▓ "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py", рд▓рд╛рдЗрди 2, рдореЗрдВ
рд╕реЗ .view рдЖрдпрд╛рдд ModelView
рдлрд╝рд╛рдЗрд▓ "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/view.py", рд▓рд╛рдЗрди 19, рдореЗрдВ
рдлреНрд▓рд╛рд╕реНрдХ_рдПрдбрдорд┐рди.рдореЙрдбрд▓ рд╕реЗ рдмреЗрд╕рдореЙрдбрд▓ рд╡реНрдпреВ рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдлрд╝рд╛рдЗрд▓ "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/__init__.py", рд▓рд╛рдЗрди 2, рдореЗрдВ
.base рдЖрдпрд╛рдд рд╕реЗ BaseModelView
рдлрд╝рд╛рдЗрд▓ "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/base.py", рд▓рд╛рдЗрди 8, рдореЗрдВ
Werkzeug рд╕реЗ рдЖрдпрд╛рдд safe_filename
рдЖрдпрд╛рдд рддреНрд░реБрдЯрд┐: 'рд╕рд┐рдХреНрдпреЛрд░_рдлрд╛рдЗрд▓рдирд╛рдо' рдирд╛рдо рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
рдпрд╣рд╛рдБ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ? рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 0.16.1 рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рд╕реЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
@ tjohnson4 рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЗрд╕рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВред рдлреНрд▓рд╛рд╕реНрдХ рдореБрджреНрджреЗ рдкрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдереАред
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрдпрд╛рдирдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рд╣реИред рдлреНрд▓рд╛рд╕реНрдХ-рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл 0.14.3 рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдШрдВрдЯреЛрдВ рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрдм рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рдереЗ, рддреЛ рд╣рдо рд╕рдорд░реНрдерди рдХреЛ рд╣рдЯрд╛рдиреЗ рд╡рд╛рд▓реА рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛ рд░рд╣реЗ рд╣реИрдВ?
рдпрд╣ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рддреАрд╕рд░реА рдмрд╛рд░ рдкреИрд▓реЗрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЕрдкрдбреЗрдЯ рдиреЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдЬреЛ рдореИрдВрдиреЗ рдЫрд╣ рдорд╣реАрдиреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдерд╛ред
рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдореБрджреНрджрд╛
Traceback (most recent call last):
File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/ubuntu/swagger-codegen/samples/server/petstore/flaskConnexion/swagger_server/__main__.py", line 3, in <module>
import connexion
File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/__init__.py", line 3, in <module>
from .apis import AbstractAPI # NOQA
File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/apis/__init__.py", line 1, in <module>
from .abstract import AbstractAPI # NOQA
File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/apis/abstract.py", line 14, in <module>
from ..operation import Operation
File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/operation.py", line 7, in <module>
from .decorators import validation
File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/decorators/validation.py", line 9, in <module>
from werkzeug import FileStorage
ImportError: cannot import name 'FileStorage'
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓
рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ werkzeug == 0.16.1
рдЬреЛрдбрд╝реЗрдВред txt рдиреЗ рдЗрд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╣рд▓ рдХрд░ рджрд┐рдпрд╛
@ рдЕрдмреНрджреБрд▓рд╕рд▓рд╛рдо-рдЕрдмреНрдмрд╛рд╕ рдХрдиреЗрдХреНрд╢рди рдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдЕрдХреНрдЯреВрдмрд░ 2019 рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдпрд╛рдд рдХрд░реЗрдВ - рд╢рд╛рдпрдж рдЖрдк рдПрдХ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ?
https://github.com/zalando/connexion/releases/tag/2.4.0
рдпрджрд┐ рдЖрдкрдХрд╛ рдлреНрд▓рд╛рд╕реНрдХ-рд╕рддреНрд░ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ:
File "/usr/local/lib/python3.8/site-packages/flask_session/__init__.py", line 61, in init_app
app.session_interface = self._get_interface(app)
File "/usr/local/lib/python3.8/site-packages/flask_session/__init__.py", line 90, in _get_interface
session_interface = FileSystemSessionInterface(
File "/usr/local/lib/python3.8/site-packages/flask_session/sessions.py", line 313, in __init__
from werkzeug.contrib.cache import FileSystemCache
ModuleNotFoundError: No module named 'werkzeug.contrib'
рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ werkzeug == 0.16.1
рдЬреЛрдбрд╝реЗрдВред txt рдиреЗ рдЗрд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╣рд▓ рдХрд░ рджрд┐рдпрд╛
рдпрджрд┐ рдЖрдкрдХрд╛ рдлреНрд▓рд╛рд╕реНрдХ-рд░реЗрд╕реНрдЯрдкреНрд▓рд╕ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ:
Traceback (most recent call last):
File "/export/home/hysdsops/sciflo/lib/python3.7/site-packages/flask/cli.py", line 240, in locate_app
__import__(module_name)
File "/export/home/hysdsops/sciflo/ops/pele/app.py", line 4, in <module>
from pele import create_app, db
File "/export/home/hysdsops/sciflo/ops/pele/pele/__init__.py", line 5, in <module>
from flask_restplus import apidoc
File "/export/home/hysdsops/sciflo/lib/python3.7/site-packages/flask_restplus/__init__.py", line 4, in <module>
from . import fields, reqparse, apidoc, inputs, cors
File "/export/home/hysdsops/sciflo/lib/python3.7/site-packages/flask_restplus/fields.py", line 17, in <module>
from werkzeug import cached_property
ImportError: cannot import name 'cached_property' from 'werkzeug' (/export/home/hysdsops/sciflo/lib/python3.7/site-packages/werkzeug/__init__.py)
рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ werkzeug == 0.16.1
рдЬреЛрдбрд╝реЗрдВред txt рдиреЗ рдЗрд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ред
рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдХрд┐ рдореЗрд░рд╛ рдлреНрд▓рд╛рд╕реНрдХ рдЕрдиреБрд░реЛрдз рдСрдмреНрдЬреЗрдХреНрдЯ werkzeug
LocalProxy
рдХреНрдпреЛрдВ рд▓реМрдЯрд╛, рдПрдХ рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╣реИ рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рд╣реИ?
рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рд╕реЗ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ:
File "/Users/lucas/Software/anaconda3/envs/pytest/lib/python3.6/site-packages/flask/json.py", line 251, in jsonify
if current_app.config['JSONIFY_PRETTYPRINT_REGULAR'] and not request.is_xhr:
File "/Users/lucas/Software/anaconda3/envs/pytest/lib/python3.6/site-packages/werkzeug/local.py", line 347, in __getattr__
return getattr(self._get_current_object(), name)
AttributeError: 'Request' object has no attribute 'is_xhr'
is_xhr
рдПрдХ рдРрд╕реА рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдлреНрд▓рд╛рд╕реНрдХ 1.0
рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ 0.12.2
рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдмрд╕ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдмрдЧ рдлреНрд▓рд╛рд╕реНрдХ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдореИрдВ рдмрд╕ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВ/рдХреИрд╕реЗ LocalProxy
рдЗрд╕ рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдореИрдВ рд╣реВрдВ рдЙрдореНрдореАрджред
@LucasLLC is_xhr
рд╕реАрдзреЗ рдлреНрд▓рд╛рд╕реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдерд╛ (рдХреНрдпрд╛ рдХреЛрдИ рд╕рдВрджрд░реНрдн рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдлреНрд▓рд╛рд╕реНрдХ 1.0 рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдореИрдВ рдЗрд╕реЗ рдЪреЗрдВрдЬрд▓реЙрдЧ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛) рдмрд▓реНрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ Werkzeug API рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдлреНрд▓рд╛рд╕реНрдХ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред Werkzeug рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ 81e10efbf3a83daf09c55cd7cc13ac6c6464d405 рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдореИрдВ рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдЙрдиреНрдирдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛, рдПрдХ рдРрд╕рд╛ рдХрд╛рдо рдЬрд┐рд╕реЗ рдХрд╡рд┐рддрд╛ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ рдЧрдпрд╛
@pgjones рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рдлреНрд▓рд╛рд╕реНрдХ 0.12 рдХрд╛ рд╡рд░реНрдХрдЬрд╝реЗрдЧ рдХреЛ <1.0.0.0 рдкрд░ рдкрд┐рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдлреНрд▓рд╛рд╕реНрдХ рдореЗрдВ рдПрдХ рдЦрд░рд╛рдм рдкрд┐рди рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рд╛рдБ, рдпрд╣ рдПрдкреАрдЖрдИ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдлреНрд▓рд╛рд╕реНрдХ рдПрдкреАрдЖрдИ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: https://flask.palletsprojects.com/en/0.12.x/api/#flask.Request.is_xhr
@LucasLLC
is_xhr
рд╕реАрдзреЗ рдлреНрд▓рд╛рд╕реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдерд╛ (рдХреНрдпрд╛ рдХреЛрдИ рд╕рдВрджрд░реНрдн рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдлреНрд▓рд╛рд╕реНрдХ 1.0 рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдореИрдВ рдЗрд╕реЗ рдЪреЗрдВрдЬрд▓реЙрдЧ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛) рдмрд▓реНрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ Werkzeug API рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдлреНрд▓рд╛рд╕реНрдХ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред Werkzeug рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ 81e10ef рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЖрд╣, рдореЗрд░реА рдЧрд▓рддреАред рдореИрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд░рд╣рд╛ рдерд╛, рдФрд░ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ Werkzeug рд╕реЗ рдЖ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдореИрдВ рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдЙрдиреНрдирдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛, рдПрдХ рдРрд╕рд╛ рдХрд╛рдо рдЬрд┐рд╕реЗ рдХрд╡рд┐рддрд╛ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ рдЧрдпрд╛
рдкрд╛рд░рд┐рддреЛрд╖рд┐рдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╣рдо рдХрд╡рд┐рддрд╛ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред
Odoo12 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛ рдереА:
import werkzeug.contrib.fixers
ImportError: No module named 'werkzeug.contrib'
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛
Werkzeug==0.16.1
рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реБрдИ
рдореЙрдбреНрдпреВрд▓ рдиреЙрдЯрдлрд╛рдЙрдВрдб рддреНрд░реБрдЯрд┐: 'werkzeug.contrib' рдирд╛рдо рдХрд╛ рдХреЛрдИ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ
рдлреНрд▓рд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛрдирд╛
Werkzeug==0.16.1
рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИред
```
рдлреНрд▓рд╛рд╕реНрдХ_рдПрдбрдорд┐рди.contrib.sqla рд╕реЗ ModelView рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдлрд╝рд╛рдЗрд▓ "/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py", рд▓рд╛рдЗрди 2, рдореЗрдВ
рд╕реЗ .view рдЖрдпрд╛рдд ModelView
рдлрд╝рд╛рдЗрд▓ "/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/view.py", рд▓рд╛рдЗрди 18, рдореЗрдВ
рдлреНрд▓рд╛рд╕реНрдХ_рдПрдбрдорд┐рди.рдореЙрдбрд▓ рд╕реЗ рдмреЗрд╕рдореЙрдбрд▓ рд╡реНрдпреВ рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдлрд╝рд╛рдЗрд▓ "/usr/local/lib/python3.6/site-packages/flask_admin/model/__init__.py", рд▓рд╛рдЗрди 2, рдореЗрдВ
.base рдЖрдпрд╛рдд рд╕реЗ BaseModelView
рдлрд╝рд╛рдЗрд▓ "/usr/local/lib/python3.6/site-packages/flask_admin/model/base.py", рд▓рд╛рдЗрди 8, рдореЗрдВ
Werkzeug рд╕реЗ рдЖрдпрд╛рдд safe_filename
рдЖрдпрд╛рдд рддреНрд░реБрдЯрд┐: 'рд╕рд┐рдХреНрдпреЛрд░_рдлрд╛рдЗрд▓рдирд╛рдо' рдирд╛рдо рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрдпрд╛рдирдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рд╣реИред рдлреНрд▓рд╛рд╕реНрдХ-рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл 0.14.3 рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдШрдВрдЯреЛрдВ рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрдм рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рдереЗ, рддреЛ рд╣рдо рд╕рдорд░реНрдерди рдХреЛ рд╣рдЯрд╛рдиреЗ рд╡рд╛рд▓реА рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛ рд░рд╣реЗ рд╣реИрдВ?
рдпрд╣ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рддреАрд╕рд░реА рдмрд╛рд░ рдкреИрд▓реЗрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЕрдкрдбреЗрдЯ рдиреЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдЬреЛ рдореИрдВрдиреЗ рдЫрд╣ рдорд╣реАрдиреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдерд╛ред