1 """Support for Ombi."""
6 import voluptuous
as vol
31 SERVICE_MOVIE_REQUEST,
32 SERVICE_MUSIC_REQUEST,
36 _LOGGER = logging.getLogger(__name__)
40 """Validate and transform urlbase."""
42 raise vol.Invalid(
"string value is None")
43 value =
str(value).strip(
"/")
49 SUBMIT_MOVIE_REQUEST_SERVICE_SCHEMA = vol.Schema({vol.Required(ATTR_NAME): cv.string})
51 SUBMIT_MUSIC_REQUEST_SERVICE_SCHEMA = vol.Schema({vol.Required(ATTR_NAME): cv.string})
53 SUBMIT_TV_REQUEST_SERVICE_SCHEMA = vol.Schema(
55 vol.Required(ATTR_NAME): cv.string,
56 vol.Optional(ATTR_SEASON, default=DEFAULT_SEASON): vol.In(
57 [
"first",
"latest",
"all"]
62 CONFIG_SCHEMA = vol.Schema(
67 vol.Required(CONF_HOST): cv.string,
68 vol.Required(CONF_USERNAME): cv.string,
69 vol.Exclusive(CONF_API_KEY,
"auth"): cv.string,
70 vol.Exclusive(CONF_PASSWORD,
"auth"): cv.string,
71 vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
72 vol.Optional(CONF_URLBASE, default=DEFAULT_URLBASE): urlbase,
73 vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean,
76 cv.has_at_least_one_key(CONF_API_KEY, CONF_PASSWORD),
79 extra=vol.ALLOW_EXTRA,
83 def setup(hass: HomeAssistant, config: ConfigType) -> bool:
84 """Set up the Ombi component platform."""
87 ssl=config[DOMAIN][CONF_SSL],
88 host=config[DOMAIN][CONF_HOST],
89 port=config[DOMAIN][CONF_PORT],
90 urlbase=config[DOMAIN][CONF_URLBASE],
91 username=config[DOMAIN][CONF_USERNAME],
92 password=config[DOMAIN].
get(CONF_PASSWORD),
93 api_key=config[DOMAIN].
get(CONF_API_KEY),
98 ombi.test_connection()
99 except pyombi.OmbiError
as err:
100 _LOGGER.warning(
"Unable to setup Ombi: %s", err)
103 hass.data[DOMAIN] = {
"instance": ombi}
105 def submit_movie_request(call: ServiceCall) ->
None:
106 """Submit request for movie."""
107 name = call.data[ATTR_NAME]
108 movies = ombi.search_movie(name)
111 ombi.request_movie(movie[
"theMovieDbId"])
113 raise Warning(
"No movie found.")
115 def submit_tv_request(call: ServiceCall) ->
None:
116 """Submit request for TV show."""
117 name = call.data[ATTR_NAME]
118 tv_shows = ombi.search_tv(name)
121 season = call.data[ATTR_SEASON]
122 show = tv_shows[0][
"id"]
123 if season ==
"first":
124 ombi.request_tv(show, request_first=
True)
125 elif season ==
"latest":
126 ombi.request_tv(show, request_latest=
True)
127 elif season ==
"all":
128 ombi.request_tv(show, request_all=
True)
130 raise Warning(
"No TV show found.")
132 def submit_music_request(call: ServiceCall) ->
None:
133 """Submit request for music album."""
134 name = call.data[ATTR_NAME]
135 music = ombi.search_music_album(name)
137 ombi.request_music(music[0][
"foreignAlbumId"])
139 raise Warning(
"No music album found.")
141 hass.services.register(
143 SERVICE_MOVIE_REQUEST,
144 submit_movie_request,
145 schema=SUBMIT_MOVIE_REQUEST_SERVICE_SCHEMA,
147 hass.services.register(
149 SERVICE_MUSIC_REQUEST,
150 submit_music_request,
151 schema=SUBMIT_MUSIC_REQUEST_SERVICE_SCHEMA,
153 hass.services.register(
157 schema=SUBMIT_TV_REQUEST_SERVICE_SCHEMA,
web.Response get(self, web.Request request, str config_key)
bool setup(HomeAssistant hass, ConfigType config)
None load_platform(core.HomeAssistant hass, Platform|str component, str platform, DiscoveryInfoType|None discovered, ConfigType hass_config)