Пример #1
0
        async def async_say_handle(service: ServiceCall) -> None:
            """Service handle for say."""
            entity_ids = service.data[ATTR_ENTITY_ID]
            message = service.data[ATTR_MESSAGE]
            cache = service.data.get(ATTR_CACHE)
            language = service.data.get(ATTR_LANGUAGE)
            options = service.data.get(ATTR_OPTIONS)

            tts.process_options(p_type, language, options)
            params = {
                "message": message,
            }
            if cache is not None:
                params["cache"] = "true" if cache else "false"
            if language is not None:
                params["language"] = language
            if options is not None:
                params.update(options)

            await hass.services.async_call(
                DOMAIN_MP,
                SERVICE_PLAY_MEDIA,
                {
                    ATTR_ENTITY_ID: entity_ids,
                    ATTR_MEDIA_CONTENT_ID: generate_media_source_id(
                        DOMAIN,
                        str(yarl.URL.build(path=p_type, query=params)),
                    ),
                    ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_MUSIC,
                },
                blocking=True,
                context=service.context,
            )
Пример #2
0
async def test_async_resolve_media(hass):
    """Test browse media."""
    assert await async_setup_component(hass, const.DOMAIN, {})
    await hass.async_block_till_done()

    media = await media_source.async_resolve_media(
        hass,
        media_source.generate_media_source_id(const.DOMAIN, "local/test.mp3"),
    )
    assert isinstance(media, media_source.models.PlayMedia)
Пример #3
0
def test_media_source():
    query1 = {"template": "{{message}}"}
    id1 = utils.encode_media_source(query1)
    assert id1 == "74656d706c6174653d7b7b6d6573736167657d7d"

    query2 = {"message": "Привет?!"}
    id2 = utils.encode_media_source({**query2})
    assert id2 == "?message=Привет?!"

    id3 = utils.encode_media_source({**query1, **query2})
    assert id3 == id1 + id2

    media_id = media_source.generate_media_source_id("tts", id1)
    assert utils.decode_media_source(media_id) == query1

    media_id = media_source.generate_media_source_id("tts", id2)
    assert utils.decode_media_source(media_id) == query2

    media_id = media_source.generate_media_source_id("tts", id1 + id2)
    assert utils.decode_media_source(media_id) == {**query1, **query2}
Пример #4
0
async def test_async_resolve_media(hass):
    """Test browse media."""
    assert await async_setup_component(hass, media_source.DOMAIN, {})
    await hass.async_block_till_done()

    media = await media_source.async_resolve_media(
        hass,
        media_source.generate_media_source_id(media_source.DOMAIN, "local/test.mp3"),
        None,
    )
    assert isinstance(media, media_source.models.PlayMedia)
    assert media.url == "/media/local/test.mp3"
    assert media.mime_type == "audio/mpeg"
Пример #5
0
async def test_generate_media_source_id():
    """Test identifier generation."""
    tests = [
        (None, None),
        (None, ""),
        ("", ""),
        ("domain", None),
        ("domain", ""),
        ("domain", "identifier"),
    ]

    for domain, identifier in tests:
        assert media_source.is_media_source_id(
            media_source.generate_media_source_id(domain, identifier))
Пример #6
0
async def test_async_resolve_media_no_entity(hass, caplog):
    """Test browse media."""
    assert await async_setup_component(hass, media_source.DOMAIN, {})
    await hass.async_block_till_done()

    media = await media_source.async_resolve_media(
        hass,
        media_source.generate_media_source_id(media_source.DOMAIN, "local/test.mp3"),
    )
    assert isinstance(media, media_source.models.PlayMedia)
    assert media.url == "/media/local/test.mp3"
    assert media.mime_type == "audio/mpeg"
    assert (
        "calls media_source.async_resolve_media without passing an entity_id"
        in caplog.text
    )