Cleanup json / api code with new options (#137)

* Cleanup json / api code with new options

* fix lint
This commit is contained in:
Pascal Vizeli 2017-08-08 10:47:39 +02:00 committed by GitHub
parent 99cf44aacd
commit cd3b382902
5 changed files with 37 additions and 49 deletions

6
API.md
View File

@ -222,10 +222,8 @@ Return QR-Code
```json
{
"audio": {
"input": "0,0",
"output": "0,0"
}
"audio_input": "0,0",
"audio_output": "0,0"
}
```

View File

@ -7,7 +7,8 @@ import voluptuous as vol
from .util import api_process_hostcontrol, api_process, api_validate
from ..const import (
ATTR_VERSION, ATTR_LAST_VERSION, ATTR_TYPE, ATTR_HOSTNAME, ATTR_FEATURES,
ATTR_OS, ATTR_SERIAL, ATTR_INPUT, ATTR_DISK, ATTR_AUDIO, ATTR_OUTPUT)
ATTR_OS, ATTR_SERIAL, ATTR_INPUT, ATTR_DISK, ATTR_AUDIO, ATTR_AUDIO_INPUT,
ATTR_AUDIO_OUTPUT)
from ..validate import ALSA_CHANNEL
_LOGGER = logging.getLogger(__name__)
@ -17,10 +18,8 @@ SCHEMA_VERSION = vol.Schema({
})
SCHEMA_OPTIONS = vol.Schema({
vol.Optional(ATTR_AUDIO): vol.Schema({
vol.Optional(ATTR_OUTPUT): ALSA_CHANNEL,
vol.Optional(ATTR_INPUT): ALSA_CHANNEL,
})
vol.Optional(ATTR_AUDIO_OUTPUT): ALSA_CHANNEL,
vol.Optional(ATTR_AUDIO_INPUT): ALSA_CHANNEL,
})
@ -51,11 +50,11 @@ class APIHost(object):
"""Process host options."""
body = await api_validate(SCHEMA_OPTIONS, request)
if ATTR_AUDIO in body:
if ATTR_OUTPUT in body[ATTR_AUDIO]:
self.config.audio_output = body[ATTR_AUDIO][ATTR_OUTPUT]
if ATTR_INPUT in body[ATTR_AUDIO]:
self.config.audio_input = body[ATTR_AUDIO][ATTR_INPUT]
if ATTR_AUDIO_OUTPUT in body:
self.config.audio_output = body[ATTR_AUDIO_OUTPUT]
if ATTR_AUDIO_INPUT in body:
self.config.audio_input = body[ATTR_AUDIO_INPUT]
return True

View File

@ -7,8 +7,7 @@ from pathlib import Path, PurePath
from .const import (
FILE_HASSIO_CONFIG, HASSIO_DATA, ATTR_SECURITY, ATTR_SESSIONS,
ATTR_PASSWORD, ATTR_TOTP, ATTR_TIMEZONE, ATTR_API_ENDPOINT,
ATTR_INITIALIZE, ATTR_ADDONS_CUSTOM_LIST, ATTR_AUDIO, ATTR_INPUT,
ATTR_OUTPUT)
ATTR_ADDONS_CUSTOM_LIST, ATTR_AUDIO_INPUT, ATTR_AUDIO_OUTPUT)
from .tools import JsonConfig
from .validate import SCHEMA_HASSIO_CONFIG
@ -168,80 +167,74 @@ class CoreConfig(JsonConfig):
@property
def security_initialize(self):
"""Return is security was initialize."""
return self._data[ATTR_SECURITY][ATTR_INITIALIZE]
return self._data[ATTR_SECURITY]
@security_initialize.setter
def security_initialize(self, value):
"""Set is security initialize."""
self._data[ATTR_SECURITY][ATTR_INITIALIZE] = value
self._data[ATTR_SECURITY] = value
self.save()
@property
def security_totp(self):
"""Return the TOTP key."""
return self._data[ATTR_SECURITY].get(ATTR_TOTP)
return self._data.get(ATTR_TOTP)
@security_totp.setter
def security_totp(self, value):
"""Set the TOTP key."""
self._data[ATTR_SECURITY][ATTR_TOTP] = value
self._data[ATTR_TOTP] = value
self.save()
@property
def security_password(self):
"""Return the password key."""
return self._data[ATTR_SECURITY].get(ATTR_PASSWORD)
return self._data.get(ATTR_PASSWORD)
@security_password.setter
def security_password(self, value):
"""Set the password key."""
self._data[ATTR_SECURITY][ATTR_PASSWORD] = value
self._data[ATTR_PASSWORD] = value
self.save()
@property
def security_sessions(self):
"""Return api sessions."""
if ATTR_SESSIONS not in self._data[ATTR_SECURITY]:
return {}
return {
session: datetime.strptime(until, DATETIME_FORMAT) for
session, until in self._data[ATTR_SECURITY][ATTR_SESSIONS].items()
session, until in self._data[ATTR_SESSIONS].items()
}
def add_security_session(self, session, valid):
"""Set the a new session."""
self._data[ATTR_SECURITY][ATTR_SESSIONS].update(
self._data[ATTR_SESSIONS].update(
{session: valid.strftime(DATETIME_FORMAT)}
)
self.save()
def drop_security_session(self, session):
"""Delete the a session."""
if ATTR_SESSIONS not in self._data[ATTR_SECURITY]:
return
self._data[ATTR_SECURITY][ATTR_SESSIONS].pop(session, None)
self._data[ATTR_SESSIONS].pop(session, None)
self.save()
@property
def audio_output(self):
"""Return ALSA audio output card,dev."""
return self._data[ATTR_AUDIO].get(ATTR_OUTPUT)
return self._data.get(ATTR_AUDIO_OUTPUT)
@audio_output.setter
def audio_output(self, value):
"""Set ALSA audio output card,dev."""
self._data[ATTR_AUDIO][ATTR_OUTPUT] = value
self._data[ATTR_AUDIO_OUTPUT] = value
self.save()
@property
def audio_input(self):
"""Return ALSA audio input card,dev."""
return self._data[ATTR_AUDIO].get(ATTR_INPUT)
return self._data.get(ATTR_AUDIO_INPUT)
@audio_input.setter
def audio_input(self, value):
"""Set ALSA audio input card,dev."""
self._data[ATTR_AUDIO][ATTR_INPUT] = value
self._data[ATTR_AUDIO_INPUT] = value
self.save()

View File

@ -103,6 +103,8 @@ ATTR_TIMEOUT = 'timeout'
ATTR_AUTO_UPDATE = 'auto_update'
ATTR_CUSTOM = 'custom'
ATTR_AUDIO = 'audio'
ATTR_AUDIO_INPUT = 'audio_input'
ATTR_AUDIO_OUTPUT = 'audio_output'
ATTR_INPUT = 'input'
ATTR_OUTPUT = 'output'
ATTR_DISK = 'disk'

View File

@ -5,9 +5,9 @@ import pytz
from .const import (
ATTR_DEVICES, ATTR_IMAGE, ATTR_LAST_VERSION, ATTR_SESSIONS, ATTR_PASSWORD,
ATTR_TOTP, ATTR_INITIALIZE, ATTR_BETA_CHANNEL, ATTR_TIMEZONE, ATTR_INPUT,
ATTR_SECURITY, ATTR_API_ENDPOINT, ATTR_ADDONS_CUSTOM_LIST, ATTR_AUDIO,
ATTR_OUTPUT, ATTR_HOMEASSISTANT, ATTR_HASSIO)
ATTR_TOTP, ATTR_SECURITY, ATTR_BETA_CHANNEL, ATTR_TIMEZONE,
ATTR_API_ENDPOINT, ATTR_ADDONS_CUSTOM_LIST, ATTR_AUDIO_OUTPUT,
ATTR_AUDIO_INPUT, ATTR_HOMEASSISTANT, ATTR_HASSIO)
NETWORK_PORT = vol.All(vol.Coerce(int), vol.Range(min=1, max=65535))
@ -75,15 +75,11 @@ SCHEMA_HASSIO_CONFIG = vol.Schema({
vol.Optional(ATTR_API_ENDPOINT): vol.Coerce(str),
vol.Optional(ATTR_TIMEZONE, default='UTC'): validate_timezone,
vol.Optional(ATTR_ADDONS_CUSTOM_LIST, default=[]): [vol.Url()],
vol.Optional(ATTR_SECURITY, default={}): vol.Schema({
vol.Optional(ATTR_INITIALIZE, default=False): vol.Boolean(),
vol.Optional(ATTR_TOTP): vol.Coerce(str),
vol.Optional(ATTR_PASSWORD): vol.Coerce(str),
vol.Optional(ATTR_SESSIONS, default={}):
vol.Schema({vol.Coerce(str): vol.Coerce(str)}),
}),
vol.Optional(ATTR_AUDIO, default={}): vol.Schema({
vol.Optional(ATTR_OUTPUT): ALSA_CHANNEL,
vol.Optional(ATTR_INPUT): ALSA_CHANNEL,
}),
vol.Optional(ATTR_SECURITY, default=False): vol.Boolean(),
vol.Optional(ATTR_TOTP): vol.Coerce(str),
vol.Optional(ATTR_PASSWORD): vol.Coerce(str),
vol.Optional(ATTR_SESSIONS, default={}):
vol.Schema({vol.Coerce(str): vol.Coerce(str)}),
vol.Optional(ATTR_AUDIO_OUTPUT): ALSA_CHANNEL,
vol.Optional(ATTR_AUDIO_INPUT): ALSA_CHANNEL,
}, extra=vol.REMOVE_EXTRA)