Source code for cannabis_reports

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

from requests import Session

from .auth_proxy import AuthProxy
from .base_api import BaseApi
from .base_model import BaseModel

from . import exceptions


[docs]class CannabisReports(object): """This object is the primary point of interaction with CannabisReports. Properties will be set on this ``CannabisReports`` instance that will mirror the class names of APIs in the ``cannabis_reports.api`` module. These API classes are naive of authentication, so the actual properties set will be using the ``AuthProxy`` class, which will transparently inject authentication into the API requests while still allowing for a naive API object. This allows for the ``CannabisReports`` instance to act as a container for all of the authenticated API objects. Examples:: from cannabis_reports import CannabisReports cr = CannabisReports('api_key') for strain in cr.Strains.list(): print(strain.serialize()) """ __apis__ = {} def __init__(self, api_key=None): """Initialize a new CannabisReports client. Args: api_key (str, optional): The API key to use for this session. """ self.session = Session() if api_key: self.session.headers.update({ 'X-API-Key': api_key, }) self._load_apis() def _load_apis(self): """Find available APIs and set instances property auth proxies.""" cannabis_reports = __import__('cannabis_reports.apis') for class_name in cannabis_reports.apis.__all__: if not class_name.startswith('_'): cls = getattr(cannabis_reports.apis, class_name) api = AuthProxy(self.session, cls) setattr(self, class_name, api) self.__apis__[class_name] = api
__all__ = [ 'AuthProxy', 'BaseApi', 'BaseModel', 'exceptions', 'CannabisReports', ]