def __init__(self, service, *path, **conf): self.__dict__["service"] = service self.__dict__["path"] = tuple(path) for key, value in conf.items(): try: value = serialize.load(serialize.dump(value)) except serialize.UnregisteredType: raise SessionError("can not serialize key %r value %r" % (key, value)) conf[key] = value self.__dict__["_conf"] = frozenset(conf.items())
def _start(self, jid, service_id, element): service = self.services.get(service_id, None) if service is None: raise SessionError("Service '%s' not available" % service_id) path = None for child in element.children("path").children(): path = serialize.load(child) break for child in element.children("config").children(): conf = serialize.load(child) break else: raise SessionError("Did not get session configuration") session_id = uuid.uuid4().hex session = service.open_session(path, conf) sessions = self.jids.setdefault(jid, dict()) sessions[session_id] = session session | self._catch(jid, session_id) return Element("start", xmlns=SERVICE_NS, id=session_id)