class T1Client(BasicT1Client): def __init__(self, url, prefix = None, serializer = None, certfile = None, keyfile = None, *args, **kw): if not serializer: from T1Serializer import T1Serializer serializer = T1Serializer(self) super(T1Client, self).__init__(url = url, prefix = prefix, serializer = serializer, *args, **kw) self.result_serializer = ResultSerializer() self.__t1 = RestClient(url, cache = False, content_type = "text/xml", certfile = certfile, keyfile = keyfile) self.logger.debug("Created T1 client: url=%s prefix=%s certfile=%s keyfile=%s", url, prefix, certfile, keyfile) @property def uri(self): return self.__t1.uri def _get_path(self, identifier): return unicode(identifier) @_t1method def _add_resource(self, parent, xml): with self.__t1.post(self._get_path(parent) + "/", xml) as resp: _tn, cfg, _act = self.serializer.unserialize(resp) return self._make_entity(cfg.pop("identifier"), _tn, cfg) @_t1method def _update_resource(self, identifier, xml): with self.__t1.put(self._get_path(identifier), xml) as resp: _tn, cfg, _act = self.serializer.unserialize(resp) return self._make_entity(identifier, _tn, cfg) @_t1method def _get_resource(self, identifier): with self.__t1.get(self._get_path(identifier)) as cfg: _tn, cfg, _act = self.serializer.unserialize(cfg) identifier = self._convert_identifier(cfg.get("identifier", identifier)) return self._make_entity(identifier, _tn, cfg) @_t1method def list_resources(self, identifier, typename = None): identifier = self._convert_identifier(identifier) try: response = self.__t1.get(self._get_path(identifier)) except HTTPError, e: if e.reason.startswith("No adapters found for") or e.reason.startswith("NoAdapterFound"): return [] raise with response: xml = parse(response) try: l = [] child = xml.firstChild.childNodes for node in child: if node.nodeName != "#text": identifier = node.firstChild.data identifier = Identifier(identifier, default_prefix = self.prefix) l.append(self._make_entity(identifier, None, None)) return l finally: xml.unlink()
class T1Client(object): def __init__(self, url, prefix = None, serializer = None, *args, **kw): super(T1Client, self).__init__(*args, **kw) self.__t1 = RestClient(url, cache = False) if not serializer: serializer = T1EntitySerializer(self, prefix = prefix) self.serializer = serializer self.__prefix = prefix @property def prefix(self): return self.__prefix def add(self, parent, name, typename, config): parent = GlobalIdentifier(parent, prefix = self.prefix).identifier wfile = StringIO.StringIO() self.serializer.assist_serialize(typename, None, config, wfile) xml = wfile.getvalue() print xml wfile.close() #self.conn.request("POST", parent, params, headers) with self.__t1.post(parent, xml) as resp: _tn, cfg, _act = self.serializer.unserialize(resp) return T1Entity(cfg.pop("identifier"), self, cfg) add_resource = add def update(self, identifier, config): identifier = GlobalIdentifier(identifier, prefix = self.prefix) #wfile = StringIO.StringIO() req = self.serializer.assist_serialize(identifier.typename, None, config, None, "update") with self.__t1.put(identifier, req) as resp: _tn, cfg, _act = self.serializer.unserialize(resp) return T1Entity(identifier, self, cfg) update_resource = update def get_entity(self, identifier): #raise Exception("hjhu", identifier, self.prefix) #raise Exception(identifier, type(identifier)) identifier = unicode(GlobalIdentifier(identifier, prefix = self.prefix)) #raise Exception("hjhu", identifier, self.prefix) if identifier.endswith("/"): identifier = identifier[:-1] with self.__t1.get(identifier) as cfg: _tn, cfg, _act = self.serializer.unserialize(cfg) #raise Exception("huu", identifier, cfg) identifier = GlobalIdentifier(cfg.get("identifier", identifier), default_prefix = self.prefix) return T1Entity(identifier, self, cfg) get_resource = get_entity def list_entities(self, identifier): identifier = GlobalIdentifier(identifier, prefix = self.prefix) try: response = self.__t1.get(unicode(identifier)) except HTTPError, e: if e.reason.startswith("No adapters found for") or e.reason.startswith("NoAdapterFoundError"): raise NoAdapterFoundError(identifier) raise with response: xml = parse(response) try: l = [] child = xml.firstChild.childNodes for node in child: if node.nodeName != "#text": identifier = node.firstChild.data identifier = GlobalIdentifier(identifier, prefix = self.prefix) l.append(T1Entity(identifier, self, None)) return l finally: xml.unlink()