Source code for cannabis_reports.apis.abstract_item_endpoint

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

from .. import BaseApi, BaseModel

from ..exceptions import CannabisReportsValidationException

from ..models.effects_flavors import EffectsFlavors
from ..models.menu_item import MenuItemSummary
from ..models.review import Review
from ..models.user import User


[docs]class AbstractItemEndpoint(BaseApi): """This represents an abstract item endpoint. The Strains API and AbstractProductEndpoint inherit from this. """
[docs] @classmethod def get_user(cls, session, ucpc): """Get the user who added the object to the database. Args: session (requests.sessions.Session): Authenticated session. ucpc (str): `UCPC <https://developers.cannabisreports.com/ v1.0/docs/ucpc-universal-cannabis-product-code>`_ for the cannabis object you want the user from. Returns: cannabis_reports.models.User: The user who added the object to the database. """ return cls( '/%s/%s/user' % (cls.__endpoint__, ucpc), session=session, singleton=True, out_type=User, )
[docs] @classmethod def get_reviews(cls, session, ucpc, limit=None): """Get the reviews for a cannabis object. Args: session (requests.sessions.Session): Authenticated session. ucpc (str): `UCPC <https://developers.cannabisreports.com/ v1.0/docs/ucpc-universal-cannabis-product-code>`_ for the cannabis object you want the reviews from. limit (int, optional): Stop after iterating this many pages. Returns: RequestPaginator(output_type=cannabis_reports.models.Review): Reviews iterator. """ return cls( '/%s/%s/reviews' % (cls.__endpoint__, ucpc), session=session, out_type=Review, iteration_limit=limit, )
[docs] @classmethod def get_effects_flavors(cls, session, ucpc): """Get the average effects and flavors from reviews for this object. Args: session (requests.sessions.Session): Authenticated session. ucpc (str): `UCPC <https://developers.cannabisreports.com/ v1.0/docs/ucpc-universal-cannabis-product-code>`_ for the cannabis object you want the effect and flavor profile from. Returns: cannabis_reports.models.EffectsFlavors: The effect and flavor profile for this object. """ return cls( '/%s/%s/effectsFlavors' % (cls.__endpoint__, ucpc), session=session, out_type=EffectsFlavors, singleton=True, )
[docs] @classmethod def get_available(cls, session, ucpc, lat, lng, radius=10, limit=None): """Get information about the availability of the given UCPC. Args: session (requests.sessions.Session): Authenticated session. ucpc (str): `UCPC <https://developers.cannabisreports.com/ v1.0/docs/ucpc-universal-cannabis-product-code>`_ for the cannabis object you want the children from. lat (float): Latitude for the center of your availability search. lng (float): Longitude for the center of your availability search. radius (int): Radius to search for in miles, max 25. limit (int, optional): Stop after iterating this many pages. Returns: RequestPaginator(output_type=cls.__object__): An iterator of child objects. """ if radius > 25: raise CannabisReportsValidationException( 'The max search radius is 25.', ) return cls( '/%s/%s/availability/geo/%s/%s/%s' % ( cls.__endpoint__, ucpc, lat, lng, radius, ), session=session, out_type=MenuItemSummary, iteration_limit=limit, )
[docs] @classmethod def search(cls, session, query, sort='created_at', path='type', limit=None): """Return search results for objects. Args: session (requests.sessions.Session): Authenticated session. query (str): Search query to find objects in our system. Must be at least 2 characters. sort (str): Snake cased field name to sort on. Prefix with a `-` for descending. path (str): The path for the search (eg for ``strains`` it is ``search`` and for ``flowers`` it is ``type``. limit (int, optional): Stop after iterating this many pages. Returns: RequestPaginator(output_type=cls.__object__): Objects iterator. """ if not query or len(query) < 2: raise CannabisReportsValidationException( 'Search query must be at least 2 characters.', ) data = { sort: BaseModel._to_camel_case(sort) } return cls( '/%s/%s/%s' % (cls.__endpoint__, path, query), session=session, data=data, iteration_limit=limit, )