Я встречал сценарий, в котором мне нужно переопределить общее промежуточное ПО в CKAN. А в CKAN по умолчанию plugins/interface.py
:
class IMiddleware(Interface):
u'''Hook into CKAN middleware stack
Note that methods on this interface will be called two times,
one for the Pylons stack and one for the Flask stack (eventually
there will be only the Flask stack).
'''
def make_middleware(self, app, config):
u'''Return an app configured with this middleware
When called on the Flask stack, this method will get the actual Flask
app so plugins wanting to install Flask extensions can do it like
this::
import ckan.plugins as p
from flask_mail import Mail
class MyPlugin(p.SingletonPlugin):
p.implements(p.I18nMiddleware)
def make_middleware(app, config):
mail = Mail(app)
return app
'''
return app
Это показывает, что я должен определить класс "MyMiddleWare" под плагином, который я хочу реализовать в расширении. Однако, как показано в примере, фактическое промежуточное программное обеспечение Mail
импортируется из другого класса. Я хочу переопределить TrackingMiddleware
, особенно метод __call__(self, environ, start_response)
, в который environ
и start_response
передаются, когда make_pylons_stack
вызываются на этапе настройки. Если я хочу переопределить TrackingMiddleware
Должен ли я создать еще один config/middleware/myTrackingMiddleware.py
в ckanext-myext/
, а затем в plugin.py
я реализую следующее?:
from myTrackingMiddleware import MyTrackingMiddleware
class MyPlugin(plugins.SingletonPlugin):
plugins.implements(plugins.IMiddleware, inherit=True)
def make_middleware(self, app, config):
tracking = MytrackingMiddleware(app, config)
return app
Обновление:
Я пытался создать myTrackingMiddleware
в иерархии и импортировал его в plugin.py
, но я не получил ни одного запроса к '/_tracking'
в myTrackingMiddleware
.