Vous pouvez ajouter la propriété de requête avec la directive add_request_method de pyramid. (Dans le passé, il y avait une directive appelée add_request_property, mais elle est devenue obsolète à la hâte)
document: http://docs.pylonsproject.org/projects/pyramid/en/latest/api/config.html#pyramid.config.Configurator.add_request_method
Il y a deux options à garder à l'esprit:
--reify --Ajoute un attribut à la demande. Les attributs ajoutés sont mis en cache --property --Ajoute un attribut à la demande. L'attribut ajouté est calculé à chaque fois
Si rien n'est ajouté, il sera ajouté en tant que méthode. (De plus, si verify = True, il est automatiquement ajouté en tant que propriété)
## configuration
def includeme(config):
## request.get_foo()Peut être appelé comme
config.add_request_method(get_foo, "get_foo")
## request.Peut être consulté en tant que foo
config.add_request_method(get_foo2, "foo", reify=True)
config.add_request_method(get_foo2, "foo", property=True)
tester. S'il s'agit d'un test unitaire, vous pouvez utiliser une simulation pour le texte. D'une manière ou d'une autre, cela peut être fait en utilisant un mannequin. Une histoire sur ce qu'il faut faire pendant le test d'intégration.
Regardons le code de la pyramide. La réponse se trouve dans pyramid / router.py. En gros, nous pouvons voir ce qui suit.
--add_request_method stocke une interface appelée IRequestExtensions dans la clé
Un exemple de rédaction d'un test d'intégration en référence à ce qui précède Cette fois, définissez request.foo. Vérifiez simplement si vous pouvez l'obtenir avec request.foo.
# -*- coding:utf-8 -*-
import unittest
## definition
foo = object()
def get_foo(request):
return foo
def includeme(config):
config.add_request_method(get_foo, "foo", reify=True)
## test
class Tests(unittest.TestCase):
def _makeOne(self, config, path="/"):
from pyramid.request import Request
from pyramid.interfaces import IRequestExtensions
request = Request.blank(path)
extensions = config.registry.getUtility(IRequestExtensions)
request.registry = config.registry
request._set_extensions(extensions)
return request
def test_it(self):
from pyramid.testing import testConfig
with testConfig() as config:
config.include(includeme)
### request time
request = self._makeOne(config, path="/")
self.assertEqual(request.foo, foo)
Recommended Posts