Bonsoir à tous,
Je m'en remets à vous pour un problème que je ne comprends pas. Je tenté de simplifier mon problème pour que vous puissiez le comprendre facilement.
J'ai un fichier adapters.py
avec une classe et une méthode :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class DefaultMemberAdapter(object): def get_login_redirect_url(self, request, url=None, redirect_field_name="next"): pass def perform_login(self, request, user, redirect_url): pass def perform_logout(self, request): pass def get_adapter(): """ Gets the right adapter according to the value specified in the settings of the member module. """ return import_attribute(app_settings.ADAPTER)() |
Je n'utilise jamais directement la classe DefaultMemberAdapter
au profit de la méthode get_adapter
qui va m'importer ma classe. Dans mes fichiers qui veulent utiliser l'adaptateur, je l'importe comme suit : from .adapters import get_adapter
.
Le problème c'est que je parviens à accéder aux méthodes perform_login
et get_login_redirect_url
sans problème mais impossible d'accéder à la méthode perform_logout
. Lorsque je tente d'y accéder, j'ai l'erreur suivante :
1 2 3 4 5 6 7 8 9 10 | Traceback (most recent call last): File "/Users/Gerard/.virtualenvs/zdsenv/lib/python2.7/site-packages/django/core/handlers/base.py", line 112, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Users/Gerard/.virtualenvs/zdsenv/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in view return self.dispatch(request, *args, **kwargs) File "/Users/Gerard/.virtualenvs/zdsenv/lib/python2.7/site-packages/django/views/generic/base.py", line 87, in dispatch return handler(request, *args, **kwargs) File "/Users/Gerard/Documents/workspace-django/zds-site/zds/member/views.py", line 666, in post return get_adapter().perform_logout(self.request) AttributeError: 'DefaultMemberAdapter' object has no attribute 'perform_logout' |
Si quelqu'un à une idée, je suis preneur parce que je commence à sécher.
Une information avec son importante : J'ai exécuter les instructions suivantes.
1 2 | print dir(DefaultMemberAdapter) print dir(get_adapter()) |
Le résultat du premier :
1 | ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'get_login_redirect_url', 'perform_login', 'perform_logout`] |
Le résultat du second :
1 | ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'get_login_redirect_url', 'perform_login'] |