def _discard(self, label=None, return_label=False, raise_error=False): if not label: label = self._labels.pop() try: url = "{}/{}".format(self._url, smart_quote(label)) except AttributeError: url = "{}/{}".format(self._url, smart_quote(label._label)) response = Request(**self._auth).delete(url) if response.status_code == 204: _label = label if not isinstance(_label, Label): _label = Label(self._url, label) if _label in self._labels: self._labels.remove(_label) if return_label: return _label elif raise_error: if options.SMART_ERRORS: raise KeyError("'{}' not found".format(_label)) else: msg = "Unable to remove label" try: msg += ": " + response.json().get('message') except (ValueError, AttributeError, KeyError): pass raise StatusException(response.status_code, msg)
def get(self, **kwargs): data = u"" if kwargs: data = [] for k, v in kwargs.items(): data.append("{}={}".format(smart_quote(k), smart_quote(json.dumps(v)))) data = u"?{}".format(u"&".join(data)) url = self._url.replace( u"labels", u"label/{}/nodes{}".format(smart_quote(self._label), data)) response = Request(**self._auth).get(url) if response.status_code == 200: results_list = response.json() if not results_list: return [] elif isinstance(results_list, (tuple, list)): return Iterable(self._node_cls, results_list, "self", auth=self._auth) else: msg = "Unable to read label(s)" try: msg += ": " + response.json().get('message') except (ValueError, AttributeError, KeyError): pass raise StatusException(response.status_code, msg)