Beispiel #1
0
def test_init():
    now = datetime.now(timezone("Asia/Tokyo"))
    message = Message(
        id="mid123456789",
        type="hogehoge",
        timestamp=now,
        channel="TEST",
        channel_detail="messaging",
        channel_user_id="user_id",
        channel_message={"text": "hello"},
        text="hello",
        token="token123456789",
        payloads=[Payload(content_type="image", url="https://image")],
        intent="OrderPan",
        intent_priority=Priority.High,
        entities={
            "menu": "Yakisoba Pan",
            "count": 20
        },
        is_adhoc=True)
    assert message.id == "mid123456789"
    assert message.type == "hogehoge"
    assert message.timestamp == now
    assert message.channel == "TEST"
    assert message.channel_detail == "messaging"
    assert message.channel_user_id == "user_id"
    assert message.channel_message == {"text": "hello"}
    assert message.text == "hello"
    assert message.token == "token123456789"
    assert message.payloads[0].url == "https://image"
    assert message.intent == "OrderPan"
    assert message.intent_priority == Priority.High
    assert message.entities == {"menu": "Yakisoba Pan", "count": 20}
    assert message.is_adhoc is True
Beispiel #2
0
def test_to_reply():
    now = datetime.now(timezone("Asia/Tokyo"))
    message = Message(id="mid123456789",
                      type="hogehoge",
                      timestamp=now,
                      channel="TEST",
                      channel_detail="messaging",
                      channel_user_id="user_id",
                      text="hello",
                      token="token123456789",
                      channel_message={
                          "text": "hello"
                      }).to_reply(text="nice talking to you",
                                  payloads=[
                                      Payload(content_type="image",
                                              url="https://image")
                                  ],
                                  type="image")
    assert message.id == "mid123456789"
    assert message.type == "image"
    assert isinstance(message.timestamp, datetime)
    assert str(message.timestamp.tzinfo) == "Asia/Tokyo"
    assert message.channel == "TEST"
    assert message.channel_detail == "messaging"
    assert message.channel_user_id == "user_id"
    assert message.text == "nice talking to you"
    assert message.token == "token123456789"
    assert message.payloads[0].url == "https://image"
    assert message.channel_message is None
Beispiel #3
0
def test_from_dict():
    now = datetime.now(timezone("Asia/Tokyo"))
    message = Message(
        id="mid123456789",
        type="hogehoge",
        timestamp=now,
        channel="TEST",
        channel_detail="messaging",
        channel_user_id="user_id",
        text="hello",
        token="token123456789",
        payloads=[Payload(content_type="image", url="https://image")],
        channel_message={"text": "hello"})
    msg_dict = message.to_dict()
    message = Message.from_dict(msg_dict)
    assert message.id == "mid123456789"
    assert message.type == "hogehoge"
    assert message.timestamp == now
    assert message.channel == "TEST"
    assert message.channel_detail == "messaging"
    assert message.channel_user_id == "user_id"
    assert message.text == "hello"
    assert message.token == "token123456789"
    assert message.payloads[0].url == "https://image"
    assert message.channel_message == str({"text": "hello"})
Beispiel #4
0
def test_init():
    payload = Payload(content_type="image/jpeg",
                      url="http://uezo.net/img/minette_architecture.png",
                      thumb="https://thumb")
    assert payload.content_type == "image/jpeg"
    assert payload.url == "http://uezo.net/img/minette_architecture.png"
    assert payload.thumb == "https://thumb"
    assert payload.headers == {}
    assert payload.content is None
Beispiel #5
0
def test_to_dict():
    now = datetime.now(timezone("Asia/Tokyo"))
    message = Message(
        id="mid123456789",
        type="hogehoge",
        timestamp=now,
        channel="TEST",
        channel_detail="messaging",
        channel_user_id="user_id",
        text="hello",
        token="token123456789",
        payloads=[Payload(content_type="image", url="https://image")],
        channel_message={"text": "hello"})
    msg_dict = message.to_dict()
    assert msg_dict["id"] == "mid123456789"
    assert msg_dict["timestamp"] == now
Beispiel #6
0
    def _to_minette_message(self, event):
        """
        Convert Symphony Event object to Minette Message object

        Parameters
        ----------
        event : Event
            Event from Symphony. See the url below for information
            https://developers.symphony.com/restapi/docs/real-time-events

        Returns
        -------
        message : minette.Message
            Request message object
        """
        if self.debug:
            self.logger.info(event)
        msg = Message(type=event["type"],
                      channel="Symphony",
                      channel_detail="",
                      channel_user_id=str(
                          event["initiator"]["user"]["userId"]),
                      channel_message=event)
        if msg.type == "MESSAGESENT":
            m = event["payload"]["messageSent"]["message"]
            msg.token = m["stream"]["streamId"]
            msg.text = lxml.html.fromstring(m["message"]).text_content()
            if m["stream"]["streamType"] == "ROOM":
                msg.group = Group(id=m["stream"]["streamId"], type="ROOM")
            if "attachments" in m:
                for a in m["attachments"]:
                    if len(a["images"]) > 0:
                        content_type = "image"
                    else:
                        content_type = "file"
                    msg.payloads.append(
                        Payload(content_type=content_type, content=a))
        return msg
Beispiel #7
0
def test_to_channel_message():
    #     payload = next(iter([p for p in message.payloads if p.content_type != "quick_reply"]), None)
    #     quick_reply = next(iter([p.content for p in message.payloads if p.content_type == "quick_reply"]), None)

    message = LineAdapter._to_channel_message(Message(text="hello"))
    assert isinstance(message, TextSendMessage)
    assert message.text == "hello"

    message = LineAdapter._to_channel_message(
        Message(type="image",
                payloads=[Payload(url="https://image",
                                  thumb="https://thumb")]))
    assert isinstance(message, ImageSendMessage)
    assert message.original_content_url == "https://image"
    assert message.preview_image_url == "https://thumb"

    message = LineAdapter._to_channel_message(
        Message(
            type="audio",
            payloads=[Payload(url="https://audio", content={"duration":
                                                            1.2})]))
    assert isinstance(message, AudioSendMessage)
    assert message.original_content_url == "https://audio"
    assert message.duration == 1.2

    message = LineAdapter._to_channel_message(
        Message(type="video",
                payloads=[Payload(url="https://video",
                                  thumb="https://thumb")]))
    assert isinstance(message, VideoSendMessage)
    assert message.original_content_url == "https://video"
    assert message.preview_image_url == "https://thumb"

    message = LineAdapter._to_channel_message(
        Message(type="location",
                payloads=[
                    Payload(
                        content={
                            "title": "Jiyugaoka",
                            "address": "1-2-3 Jiyugaoka, Meguro-ku, Tokyo",
                            "latitude": 35.607757,
                            "longitude": 139.668411
                        })
                ]))
    assert isinstance(message, LocationSendMessage)
    assert message.title == "Jiyugaoka"
    assert message.address == "1-2-3 Jiyugaoka, Meguro-ku, Tokyo"
    assert message.latitude == 35.607757
    assert message.longitude == 139.668411

    message = LineAdapter._to_channel_message(
        Message(type="sticker",
                payloads=[
                    Payload(content={
                        "package_id": "11537",
                        "sticker_id": "52002734"
                    })
                ]))
    assert isinstance(message, StickerSendMessage)
    assert message.package_id == "11537"
    assert message.sticker_id == "52002734"

    imagemap_action = {
        "type": "uri",
        "label": "https://example.com/",
        "linkUri": "https://example.com/",
        "area": {
            "x": 0,
            "y": 0,
            "width": 520,
            "height": 1040
        }
    }
    message = LineAdapter._to_channel_message(
        Message(type="imagemap",
                text="imagemap message",
                payloads=[
                    Payload(url="https://imagemap",
                            content={
                                "base_size": {
                                    "width": 1040,
                                    "height": 585
                                },
                                "actions": [imagemap_action]
                            })
                ]))
    assert isinstance(message, ImagemapSendMessage)
    assert message.alt_text == "imagemap message"
    assert message.base_url == "https://imagemap"
    assert message.base_size.width == 1040
    assert message.base_size.height == 585
    assert message.actions[0].type == "uri"
    assert message.actions[0].link_uri == "https://example.com/"
    assert message.actions[0].area.width == 520

    template = {
        "type":
        "buttons",
        "thumbnailImageUrl":
        "https://example.com/bot/images/image.jpg",
        "imageAspectRatio":
        "rectangle",
        "imageSize":
        "cover",
        "imageBackgroundColor":
        "#FFFFFF",
        "title":
        "Menu",
        "text":
        "Please select",
        "defaultAction": {
            "type": "uri",
            "label": "View detail",
            "uri": "http://example.com/page/123"
        },
        "actions": [{
            "type": "postback",
            "label": "Buy",
            "data": "action=buy&itemid=123"
        }, {
            "type": "postback",
            "label": "Add to cart",
            "data": "action=add&itemid=123"
        }, {
            "type": "uri",
            "label": "View detail",
            "uri": "http://example.com/page/123"
        }]
    }
    message = LineAdapter._to_channel_message(
        Message(type="template",
                text="template message",
                payloads=[Payload(content=template)]))
    assert isinstance(message, TemplateSendMessage)
    assert message.alt_text == "template message"
    assert isinstance(message.template, ButtonsTemplate)

    flex = {
        "type": "bubble",
        "body": {
            "type":
            "box",
            "layout":
            "vertical",
            "contents": [{
                "type": "text",
                "text": "hello"
            }, {
                "type": "text",
                "text": "world"
            }]
        }
    }
    message = LineAdapter._to_channel_message(
        Message(type="flex",
                text="flex message",
                payloads=[Payload(content=flex)]))
    assert isinstance(message, FlexSendMessage)
    assert message.alt_text == "flex message"
    assert isinstance(message.contents, FlexContainer)

    message = LineAdapter._to_channel_message(Message(type="unknown"))
    assert message is None
Beispiel #8
0
 def compose_response(self, request, context, connection):
     assert request.words == []
     request.words = self.dependencies.tagger.parse_as_generator(request.text, max_length=10)
     return request.to_reply(
         text=request.text,
         payloads=[Payload(content_type="data", content=request.words)])
Beispiel #9
0
 def compose_response(self, request, context, connection):
     return request.to_reply(
         text=request.text,
         payloads=[Payload(content_type="data", content=request.words)])