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',
]