Пример #1
0
    def _establish_session(self, jid, service_id, path, conf):
        start = Element("start", xmlns=SERVICE_NS, id=service_id)
        if path:
            path_element = Element("path")
            path_element.add(serialize.dump(path))
            start.add(path_element)
        conf_element = Element("config")
        conf_element.add(serialize.dump(conf))
        start.add(conf_element)

        try:
            result = yield self.xmpp.core.iq_set(start, to=jid)
        except XMPPError as error:
            if error.type != "cancel":
                raise
            if error.condition == "session-failure":
                raise SessionError("session for service " + repr(service_id) +
                                   " failed: " + error.text)
            idiokit.stop()
        except Unavailable:
            idiokit.stop()

        for start in result.children("start", SERVICE_NS).with_attrs("id"):
            session_id = start.get_attr("id")
            session = self._catch(jid, session_id)
            idiokit.pipe(self.fork(), session)

            sessions = self.jids.setdefault(jid, dict())
            sessions[session_id] = session
            idiokit.stop(session)
        else:
            raise SessionError("no session ID for service " +
                               repr(service_id) + "received")
Пример #2
0
def events_to_elements_with_delay_element(inner):

    while True:
        event = yield inner

        stamp = event.value('start')
        eid = event.value('id')
        body = Element("body")
        body.text = events._escape(unicode(event))
        #set delay for faking the event arrival time
        delay = Element("delay")
        delay.text = "Greetings earthlings"
        delay.set_attr("xmlns", 'urn:xmpp:delay')
        strstamp = time.strftime("%Y-%m-%dT%H:%M:%SZ",
                                 time.strptime(stamp, "%Y-%m-%d %H:%M:%S"))
        delay.set_attr("stamp", strstamp)
        inner.send(body, event.to_element(), delay)

        stamp = event.value('end')
        body = Element("body")
        close_event = events.Event()
        close_event.add('id', eid)
        body.text = events._escape(unicode(close_event))
        #set delay for faking the event arrival time
        delay = Element("delay")
        delay.text = "Greetings earthlings"
        delay.set_attr("xmlns", 'urn:xmpp:delay')
        strstamp = time.strftime("%Y-%m-%dT%H:%M:%SZ",
                                 time.strptime(stamp, "%Y-%m-%d %H:%M:%S"))
        delay.set_attr("stamp", strstamp)
        inner.send(body, close_event.to_element(), delay)
Пример #3
0
    def to_elements(self, include_body=True):
        element = Element("event", xmlns=EVENT_NS)

        for key, value in self.items():
            key = _replace_non_xml_chars(key)
            value = _replace_non_xml_chars(value)
            attr = Element("attr", key=key, value=value)
            element.add(attr)

        if not include_body:
            return element

        body = Element("body")
        body.text = _replace_non_xml_chars(unicode(self))
        return Elements(body, element)
Пример #4
0
 def _catch(self, jid, session_id):
     try:
         yield idiokit.consume()
     finally:
         end = Element("end", xmlns=SERVICE_NS, id=session_id)
         self.xmpp.core.message(jid, end)
         self._discard_session(jid, session_id)
Пример #5
0
    def _start(self, iq, jid, service_id, element):
        try:
            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 = yield service.open_session(path, conf)
            session_id = uuid.uuid4().hex

            sessions = self.jids.setdefault(jid, dict())
            sessions[session_id] = session
            session | self._catch(jid, session_id)
        except SessionError as se:
            msg = se.args[0]
            error = self.xmpp.core.build_error("cancel", "session-failure", msg)
            self.xmpp.core.iq_error(iq, error)
        except BaseException as exc:
            error = self.xmpp.core.build_error("cancel", "session-failure", repr(exc))
            self.xmpp.core.iq_error(iq, error)
        else:
            result = Element("start", xmlns=SERVICE_NS, id=session_id)
            self.xmpp.core.iq_result(iq, result)
Пример #6
0
 def post_receive(self, alert):
     body = Element("body")
     body.text = "*[%s] %s %s - _%s on %s_* <%s/#/alert/%s|%s>" % (
         alert.status.capitalize(), alert.environment,
         alert.severity.capitalize(), alert.event, alert.resource,
         DASHBOARD_URL, alert.id, alert.get_id(short=True))
     yield room.send(body)
Пример #7
0
    def emit(self, record):
        try:
            event = getattr(record, "event", None)

            body = Element("body")
            body.text = self.format(record)

            if event is not None:
                self.room.send(event.to_elements(include_body=False), body)
            else:
                self.room.send(body)
        except (KeyboardInterrupt, SystemExit):
            raise
        except:
            self.handleError(record)
Пример #8
0
 def _update_presence(self):
     services = Element("services", xmlns=SERVICE_NS)
     for service_id, service in self.services.items():
         element = Element("service", id=service_id)
         services.add(element)
     self.xmpp.core.presence(services, to=self.room.jid)
Пример #9
0
 def dump(self, obj, name, context):
     element = Element(name)
     element.add(context.dump(obj.dump()))
     return element
Пример #10
0
 def dump(self, obj, name, context):
     return Element(name, _text=unicode(int(bool(obj))))
Пример #11
0
 def dump(self, obj, name, context):
     return Element(name, _text=b64encode(obj))
Пример #12
0
 def dump(self, obj, name, context):
     return Element(name)
Пример #13
0
 def dump(self, obj, name, context):
     return Element(name, _text=repr(obj))
Пример #14
0
 def dump(self, obj, name, context):
     element = Element(name)
     for item in obj:
         element.add(context.dump(item))
     return element