def all(self): """Queries the 'ListView' of a given endpoint. Returns all objects from an endpoint. :Returns: List of instantiated objects. :Examples: >>> nb.dcim.devices.all() [test1-a3-oobsw2, test1-a3-oobsw3, test1-a3-oobsw4] >>> """ req = Request( base='{}/'.format(self.url), token=self.token, session_key=self.session_key, version=self.version, ssl_verify=self.ssl_verify, ) ret_kwargs = dict( api_kwargs=self.api_kwargs, endpoint_meta=self.meta, ) return [ self.return_obj(i, **ret_kwargs) for i in req.get() ]
def filter(self, *args, **kwargs): r"""Queries the 'ListView' of a given endpoint. Takes named arguments that match the usable filters on a given endpoint. If an argument is passed then it's used as a freeform search argument if the endpoint supports it. :arg str,optional \*args: Freeform search string that's accepted on given endpoint. :arg str,optional \**kwargs: Any search argument the endpoint accepts can be added as a keyword arg. :Returns: A list of instantiated objects. :Examples: To return a list of objects matching a named argument filter. >>> nb.dcim.devices.filter(role='leaf-switch') [test1-a3-tor1b, test1-a3-tor1c, test1-a3-tor1d, test1-a3-tor2a] >>> Using a freeform query along with a named argument. >>> nb.dcim.devices.filter('a3', role='leaf-switch') [test1-a3-tor1b, test1-a3-tor1c, test1-a3-tor1d, test1-a3-tor2a] >>> Chaining multiple named arguments. >>> nb.dcim.devices.filter(role='leaf-switch', status=True) [test1-leaf2] >>> Passing a list as a named argument adds multiple filters of the same value. >>> nb.dcim.devices.filter(role=['leaf-switch', 'spine-switch']) [test1-a3-spine1, test1-a3-spine2, test1-a3-leaf1] >>> """ if len(args) > 0: kwargs.update({'q': args[0]}) req = Request( filters=kwargs, base=self.url, token=self.token, session_key=self.session_key, version=self.version, ssl_verify=self.ssl_verify, ) ret_kwargs = dict( api_kwargs=self.api_kwargs, endpoint_meta=self.meta, ) ret = [self.return_obj(i, **ret_kwargs) for i in req.get()] return ret
def get(self, *args, **kwargs): r"""Queries the DetailsView of a given endpoint. :arg int,optional key: id for the item to be retrieved. :arg str,optional \**kwargs: Accepts the same keyword args as filter(). Any search argeter the endpoint accepts can be added as a keyword arg. :returns: A single instantiated objects. :raises ValueError: if kwarg search return more than one value. :Examples: Referencing with a kwarg that only returns one value. >>> nb.dcim.devices.get(name='test1-a3-tor1b') test1-a3-tor1b >>> Referencing with an id. >>> nb.dcim.devices.get(1) test1-edge1 >>> """ try: key = args[0] except IndexError: key = None if not key: filter_lookup = self.filter(**kwargs) if len(filter_lookup) == 1: return filter_lookup[0] if len(filter_lookup) == 0: return None else: raise ValueError('get() returned more than one result.') req = Request( key=key, base=self.url, token=self.token, session_key=self.session_key, version=self.version, ssl_verify=self.ssl_verify, ) ret_kwargs = dict( api_kwargs=self.api_kwargs, endpoint_meta=self.meta, ) return self.return_obj(req.get(), **ret_kwargs)
def full_details(self): """Queries the hyperlinked endpoint if 'url' is defined. This method will populate the attributes from the detail endpoint when it's called. Sets the class-level `has_details` attribute when it's called to prevent being called more than once. :returns: True """ if self.url: req = Request(base=self.url, version=self.api_kwargs.get('version')) self._parse_values(req.get()) self.has_details = True return True return False