mirror of
https://github.com/CCOSTAN/Home-AssistantConfig.git
synced 2025-02-23 09:12:19 +00:00
67 lines
1.9 KiB
Python
67 lines
1.9 KiB
Python
|
# -*- coding:utf-8 -*-
|
||
|
# a module of helper functions
|
||
|
# mostly for the configuration
|
||
|
|
||
|
import contextlib
|
||
|
import os
|
||
|
|
||
|
from . import nest
|
||
|
|
||
|
# use six for python2/python3 compatibility
|
||
|
from six.moves import configparser
|
||
|
|
||
|
|
||
|
class MissingCredentialsError(ValueError):
|
||
|
pass
|
||
|
|
||
|
|
||
|
def get_config(config_path=None, prog='nest'):
|
||
|
if not config_path:
|
||
|
config_path = os.path.sep.join(('~', '.config', prog, 'config'))
|
||
|
|
||
|
defaults = {'celsius': False}
|
||
|
config_file = os.path.expanduser(config_path)
|
||
|
if os.path.exists(config_file):
|
||
|
config = configparser.SafeConfigParser()
|
||
|
config.read([config_file])
|
||
|
if config.has_section('nest'):
|
||
|
defaults.update(dict(config.items('nest')))
|
||
|
|
||
|
return defaults
|
||
|
|
||
|
|
||
|
def get_auth_credentials(config_path=None):
|
||
|
config = get_config(config_path)
|
||
|
username = config.get('user')
|
||
|
password = config.get('password')
|
||
|
return username, password
|
||
|
|
||
|
|
||
|
@contextlib.contextmanager
|
||
|
def nest_login(config_path=None, username=None, password=None, **kwargs):
|
||
|
"""
|
||
|
This a context manager for creating a Nest object using
|
||
|
authentication credentials either provided as keyword arguments
|
||
|
or read from the configuration file.
|
||
|
|
||
|
:param config_path: Path to the config file.
|
||
|
The default is used if none is provided.
|
||
|
Optional if the the credentials are provided as arguments.
|
||
|
:param username: Optional if the config file contains the username.
|
||
|
:param password: Optional if the config file contains the password.
|
||
|
:param kwargs: Keyword arguments to pass onto the Nest initializer.
|
||
|
:return: Nest object
|
||
|
"""
|
||
|
|
||
|
credentials_config = get_auth_credentials(config_path)
|
||
|
if not username:
|
||
|
username = credentials_config[0]
|
||
|
if not password:
|
||
|
password = credentials_config[1]
|
||
|
|
||
|
if username and password:
|
||
|
yield nest.Nest(username, password, **kwargs)
|
||
|
else:
|
||
|
raise MissingCredentialsError(
|
||
|
'The login credentials have not been provided.')
|