Как мне написать связующее программное обеспечение для пирамид / пилонов 2? - PullRequest
4 голосов
/ 08 февраля 2011

Я хочу использовать mongodb или redis для ведения журналов пользователей в пирамидах / пилонах, но не могу найти документ по созданию промежуточного программного обеспечения.Как мне это сделать?

Ответы [ 3 ]

9 голосов
/ 09 февраля 2011

Стандартное промежуточное ПО

class LoggerMiddleware(object):
    '''WSGI middleware'''

    def __init__(self, application):

        self.app = application

    def __call__(self, environ, start_response):

        # write logs

        try:
            return self.app(environ, start_response)
        except Exception, e:
            # write logs
            pass
        finally:
            # write logs
            pass

При создании пирамиды код приложения:

from paste.httpserver import serve
from pyramid.response import Response
from pyramid.view import view_config

@view_config()
def hello(request):
    return Response('Hello')

if __name__ == '__main__':
    from pyramid.config import Configurator
    config = Configurator()
    config.scan()
    app = config.make_wsgi_app()

    # Put middleware
    app = LoggerMiddleware(app)

    serve(app, host='0.0.0.0')
2 голосов
/ 08 февраля 2011

Невозможно найти какие-либо документы, это совершенно странно, поскольку документация Python по модулю ведения журнала довольно многословна и полна:

http://docs.python.org/library/logging.html#handler-objects

Вам необходимо реализовать собственный MongoDBHandler и прикрепитьМетод emit () с MongoDB через pymongo.

1 голос
/ 09 февраля 2011

Другой вариант в этом случае - вообще не использовать промежуточное программное обеспечение, а просто использовать событие BeforeRequest в пирамиде.

from pyramid.events import NewRequest
import logging

def mylogger(event):
    request = event.request
    logging.info('request occurred')

config.add_subscriber(mylogger, NewRequest)
...