Source code for helpscout.auth_proxy

# -*- coding: utf-8 -*-
# Copyright 2017-TODAY LasLabs Inc.
# License MIT (https://opensource.org/licenses/MIT).


[docs]class AuthProxy(object): """This object acts as a transparent authentication proxy for the API. This is required because the API objects are naive of the authentication that is setup in ``HelpScout``, and all of the API interface methods are ``classmethods`` because they are instantiating. """ # These methods will not pass through to ``proxy_class``. METHOD_NO_PROXY = [ 'auth_proxy', ] def __init__(self, session, proxy_class): """Instantiate an API Authentication Proxy. Args: auth (requests.Session): Authenticated requests Session. proxy_class (type): A class implementing the ``BaseApi`` interface. """ assert isinstance(proxy_class, type) self.session = session self.proxy_class = proxy_class def __getattr__(self, item): """Override attribute getter to act as a proxy for``proxy_class``. If ``item`` is contained in ``METHOD_NO_PROXY``, it will not be proxied to the ``proxy_class`` and will instead return the attribute on this object. Args: item (str): Name of attribute to get. """ if item in self.METHOD_NO_PROXY: return super(AuthProxy, self).__getattr__(item) attr = getattr(self.proxy_class, item) if callable(attr): return self.auth_proxy(attr)
[docs] def auth_proxy(self, method): """Authentication proxy for API requests. This is required because the API objects are naive of ``HelpScout``, so they would otherwise be unauthenticated. Args: method (callable): A method call that should be authenticated. It should accept a ``requests.Session`` as its first parameter, which should be used for the actual API call. Returns: mixed: The results of the authenticated callable. """ def _proxy(*args, **kwargs): """The actual proxy, which instantiates and authenticates the API. Args: *args (mixed): Args to send to class instantiation. **kwargs (mixed): Kwargs to send to class instantiation. Returns: mixed: The result of the authenticated callable. """ return method(self.session, *args, **kwargs) return _proxy