Exemple #1
0
    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()
        ]
Exemple #2
0
    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
Exemple #3
0
    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)
Exemple #4
0
    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