Оформление метода RESTful для колбы

#python-3.x #logging #python-decorators #flask-restful

#python-3.x #ведение журнала #python-декораторы #flask-restful

Вопрос:

Я получаю null значение, когда перехожу к 127.0.0.1:5111/ со следующим кодом:

 import logging
from logging import getLogger
import time

logging.basicConfig(level='DEBUG')

class MyDec:
    def __init__(self, logger):
        self.logger = logger

    def __call__(self, f):
        def wrapper(*args, **kwargs):
            self.logger.info('Started task.')
            f(*args, **kwargs)
            self.logger.info('Completed task.')
        return wrapper
        
        
logger = getLogger('My Logger')

from flask import Flask
from flask_restful import Api, Resource

app = Flask('App')
api = Api(app)

class Foo(Resource):
    @MyDec(logger)
    def get(self):
        return 'Hello'
    
api.add_resource(Foo, '/')
    
app.run(port=5111, debug=True)
  

Это работает нормально:

 class Foo:
    @MyDec(logger)
    def bar(self, x, y=3):
         print(x, y)
         time.sleep(0.5)
        
        
foo = Foo()
foo.bar(x=1)
  

Итак, есть кое-что, что метод get() делает под капотом, что я, похоже, не могу понять.

Ответ №1:

__call__ Метод в вашем декораторе на данный момент ничего не возвращает, поэтому он проглатывает return "Hello" из вашего get . Попробуйте что-то вроде этого:

     def __call__(self, f):
        def wrapper(*args, **kwargs):
            self.logger.info('Started task.')
            data = f(*args, **kwargs)
            self.logger.info('Completed task.')
            return data
        return wrapper
  

Комментарии:

1. Ох. Это смущает с моей стороны. Спасибо, Крис.