diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9595be5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +dev.env +.dev_opts.json +.idea +*.code-workspace +*.pyc +*.swp +*~ +*.egg-info/ +build +dist +.coverage +/htmlcov +.installed +.mypy_cache +.vscode +.theia +.venv/ + +# Created by unit tests +.pytest_cache/ diff --git a/build/lib/ovos_config/__init__.py b/build/lib/ovos_config/__init__.py deleted file mode 100644 index 0a3db76..0000000 --- a/build/lib/ovos_config/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from ovos_config.config import Configuration, LocalConf, RemoteConf -from ovos_config.locale import set_default_lf_lang, setup_locale, \ - set_default_tz, set_default_lang, get_default_tz, get_default_lang, \ - get_config_tz, get_primary_lang_code, load_languages, load_language -from ovos_config.locations import SYSTEM_CONFIG, USER_CONFIG, DEFAULT_CONFIG -from ovos_utils.configuration import get_ovos_config, get_xdg_config_locations diff --git a/build/lib/ovos_config/config.py b/build/lib/ovos_config/config.py deleted file mode 100644 index 4697b91..0000000 --- a/build/lib/ovos_config/config.py +++ /dev/null @@ -1,554 +0,0 @@ -# Copyright 2017 Mycroft AI Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -import json -import re -import yaml -from os.path import isfile -from mycroft_bus_client.message import Message -from ovos_config.locations import * -from ovos_utils.configuration import get_xdg_config_locations, get_xdg_config_save_path -from ovos_utils.network_utils import is_connected -from ovos_utils import camel_case_split -from ovos_utils.json_helper import load_commented_json, merge_dict -from ovos_utils.log import LOG -from ovos_utils.json_helper import flattened_delete -from ovos_config.utils import FileWatcher - -try: - import mycroft.api as selene_api -except ImportError: - # TODO https://github.com/OpenVoiceOS/selene_api - selene_api = None - - -def is_remote_list(values): - """Check if list corresponds to a backend formatted collection of dicts - """ - for v in values: - if not isinstance(v, dict): - return False - if "@type" not in v.keys(): - return False - return True - - -def translate_remote(config, setting): - """Translate config names from server to equivalents for mycroft-core. - - Args: - config: base config to populate - settings: remote settings to be translated - """ - IGNORED_SETTINGS = ["uuid", "@type", "active", "user", "device"] - - for k, v in setting.items(): - if k not in IGNORED_SETTINGS: - # Translate the CamelCase values stored remotely into the - # Python-style names used within mycroft-core. - key = re.sub(r"Setting(s)?", "", k) - key = camel_case_split(key).replace(" ", "_").lower() - if isinstance(v, dict): - config[key] = config.get(key, {}) - translate_remote(config[key], v) - elif isinstance(v, list): - if is_remote_list(v): - if key not in config: - config[key] = {} - translate_list(config[key], v) - else: - config[key] = v - else: - config[key] = v - - -def translate_list(config, values): - """Translate list formatted by mycroft server. - - Args: - config (dict): target config - values (list): list from mycroft server config - """ - for v in values: - module = v["@type"] - if v.get("active"): - config["module"] = module - config[module] = config.get(module, {}) - translate_remote(config[module], v) - - -class LocalConf(dict): - """Config dictionary from file.""" - - def __init__(self, path): - super().__init__(self) - self.path = path - if path: - self.load_local(path) - - def _get_file_format(self, path=None): - """The config file format - supported file extensions: - - json (.json) - - commented json (.conf) - - yaml (.yaml/.yml) - - returns "yaml" or "json" - """ - path = path or self.path - if not path: - return "dict" - if path.endswith(".yml") or path.endswith(".yaml"): - return "yaml" - else: - return "json" - - def load_local(self, path=None): - """Load local json file into self. - - Args: - path (str): file to load - """ - path = path or self.path - if not path: - LOG.error(f"in memory configuration, nothing to load") - return - if exists(path) and isfile(path): - try: - if self._get_file_format(path) == "yaml": - with open(path) as f: - config = yaml.safe_load(f) - else: - config = load_commented_json(path) - for key in config: - self.__setitem__(key, config[key]) - LOG.debug(f"Configuration {path} loaded") - except Exception as e: - LOG.exception(f"Error loading configuration '{path}'") - else: - LOG.debug(f"Configuration '{path}' not defined, skipping") - - def reload(self): - self.load_local(self.path) - - def store(self, path=None): - """Cache the received settings locally. - - The cache will be used if the remote is unreachable to load settings - that are as close to the user's as possible. - """ - path = path or self.path - if not path: - LOG.error(f"in memory configuration, no save location") - return - if self._get_file_format(path) == "yaml": - with open(path, 'w') as f: - yaml.dump(dict(self), f, allow_unicode=True, - default_flow_style=False, sort_keys=False) - else: - with open(path, 'w') as f: - json.dump(self, f, indent=2) - - def merge(self, conf): - merge_dict(self, conf) - - -class RemoteConf(LocalConf): - """Config dictionary fetched from mycroft.ai.""" - - def __init__(self, cache=WEB_CONFIG_CACHE): - super(RemoteConf, self).__init__(cache) - - def reload(self): - if selene_api is None: - self.load_local(self.path) - return - try: - if not selene_api.is_paired(): - self.load_local(self.path) - return - - if selene_api.is_backend_disabled(): - # disable options that require backend - config = { - "server": { - "metrics": False, - "sync_skill_settings": False - }, - "skills": {"upload_skill_manifest": False}, - "opt_in": False - } - for key in config: - self.__setitem__(key, config[key]) - else: - api = selene_api.DeviceApi() - setting = api.get_settings() - location = None - try: - location = api.get_location() - except Exception as e: - LOG.error(f"Exception fetching remote location: {e}") - if exists(self.path) and isfile(self.path): - location = load_commented_json(self.path).get('location') - - if location: - setting["location"] = location - # Remove server specific entries - config = {} - translate_remote(config, setting) - - for key in config: - self.__setitem__(key, config[key]) - self.store(self.path) - - except Exception as e: - LOG.error(f"Exception fetching remote configuration: {e}") - self.load_local(self.path) - - -def _log_old_location_deprecation(old_user_config=OLD_USER_CONFIG): - LOG.warning(" ===============================================") - LOG.warning(" == DEPRECATION WARNING ==") - LOG.warning(" ===============================================") - LOG.warning(f" You still have a config file at {old_user_config}") - LOG.warning(" Note that this location is deprecated and will" + - " not be used in the future") - LOG.warning(" Please move it to " + get_xdg_config_save_path()) - - -class Configuration(dict): - """Namespace for operations on the configuration singleton.""" - __patch = LocalConf(None) # Patch config that skills can update to override config - bus = None - default = LocalConf(DEFAULT_CONFIG) - system = LocalConf(SYSTEM_CONFIG) - remote = RemoteConf() - # This includes both the user config and - # /etc/xdg/mycroft/mycroft.conf - xdg_configs = [LocalConf(p) for p in get_xdg_config_locations()] - _old_user = LocalConf(OLD_USER_CONFIG) - # deprecation warning - if isfile(OLD_USER_CONFIG): - _log_old_location_deprecation(OLD_USER_CONFIG) - _watchdog = None - _callbacks = [] - - def __init__(self): - # python does not support proper overloading - # when instantiation a Configuration object (new style) - # the get method is replaced for proper dict behaviour - self.get = self._real_get - super().__init__(**self.load_all_configs()) - - # dict methods - def __setitem__(self, key, value): - Configuration.__patch[key] = value - super().__setitem__(key, value) - # sync with other processes connected to bus - if Configuration.bus: - Configuration.bus.emit(Message("configuration.patch", - {"config": {key: value}})) - - def __getitem__(self, item): - super().update(Configuration.load_all_configs()) - return super().get(item) - - def __str__(self): - super().update(Configuration.load_all_configs()) - try: - return json.dumps(self, sort_keys=True) - except: - return super().__str__() - - def __dict__(self): - super().update(Configuration.load_all_configs()) - return self - - def __repr__(self): - return self.__str__() - - def __iter__(self): - super().update(Configuration.load_all_configs()) - for k in super().__iter__(): - yield k - - def update(self, *args, **kwargs): - Configuration.__patch.update(*args, **kwargs) - super().update(*args, **kwargs) - - def pop(self, key): - # we can not pop the key because configs are read only - # we could do it for __patch but that does not make sense - # for the object as a whole which is - # supposed to behave like a python dict - self.__setitem__(key, None) - - def items(self): - super().update(Configuration.load_all_configs()) - return super().items() - - def keys(self): - super().update(Configuration.load_all_configs()) - return super().keys() - - def values(self): - super().update(Configuration.load_all_configs()) - return super().values() - - # config methods - @staticmethod - def load_config_stack(configs=None, cache=False, remote=True): - """Load a stack of config dicts into a single dict - - Args: - configs (list): list of dicts to load - cache (boolean): True if result should be cached - remote (boolean): False if the Mycroft Home settings shouldn't - be loaded - Returns: - (dict) merged dict of all configuration files - """ - LOG.warning("load_config_stack has been deprecated, use load_all_configs instead") - if configs: - return Configuration.filter_and_merge(configs) - system_constraints = Configuration.get_system_constraints() - if not remote: - system_constraints["disable_remote_config"] = True - return Configuration.load_all_configs(system_constraints) - - @staticmethod - def reset(): - Configuration.__patch = {} - Configuration.reload() - - @staticmethod - def reload(): - Configuration.default.reload() - Configuration.system.reload() - Configuration.remote.reload() - for cfg in Configuration.xdg_configs: - cfg.reload() - - @staticmethod - def get_system_constraints(): - # constraints must come from SYSTEM config - # if not defined then load the DEFAULT constraints - # these settings can not be set anywhere else! - return Configuration.system.get("system") or \ - Configuration.default.get("system") or \ - {} - - @staticmethod - def load_all_configs(system_constraints=None): - """Load the stack of config files into a single dict - - Returns: - (dict) merged dict of all configuration files - """ - # system administrators can define different constraints in how - # configurations are loaded - system_constraints = system_constraints or Configuration.get_system_constraints() - skip_user = system_constraints.get("disable_user_config", False) - skip_remote = system_constraints.get("disable_remote_config", False) - - configs = [Configuration.default, Configuration.system] - if not skip_remote: - configs.append(Configuration.remote) - if not skip_user: - # deprecation warning - if isfile(OLD_USER_CONFIG): - configs.append(Configuration._old_user) - configs += Configuration.xdg_configs - - # runtime patches by skills / bus events - configs.append(Configuration.__patch) - - # Merge all configs into one - return Configuration.filter_and_merge(configs) - - @staticmethod - def filter_and_merge(configs): - # ensure type - for index, item in enumerate(configs): - if isinstance(item, str): - configs[index] = LocalConf(item) - elif isinstance(item, dict): - configs[index] = LocalConf(None) - configs[index].merge(item) - - # system administrators can define different constraints in how - # configurations are loaded - system_conf = Configuration.get_system_constraints() - protected_keys = system_conf.get("protected_keys") or {} - protected_remote = protected_keys.get("remote") or [] - protected_user = protected_keys.get("user") or [] - skip_user = system_conf.get("disable_user_config", False) - skip_remote = system_conf.get("disable_remote_config", False) - - # Merge all configs into one - base = {} - for cfg in configs: - is_user = cfg.path is None or cfg.path not in [Configuration.default, Configuration.system] - is_remote = cfg.path == Configuration.remote.path - if (is_remote and skip_remote) or (is_user and skip_user): - continue - elif is_remote: - # delete protected keys from remote config - for protection in protected_remote: - flattened_delete(cfg, protection) - elif is_user: - # delete protected keys from user config - for protection in protected_user: - flattened_delete(cfg, protection) - merge_dict(base, cfg) - return base - - @staticmethod - def set_config_update_handlers(bus): - """Setup websocket handlers to update config. - - Args: - bus: Message bus client instance - """ - # remove any old event listeners - Configuration.deregister_bus() - - # attach new bus and listeners - Configuration.bus = bus - bus.on("configuration.updated", Configuration.updated) - bus.on("configuration.patch", Configuration.patch) - bus.on("configuration.patch.clear", Configuration.patch_clear) - bus.on("configuration.cache.clear", Configuration.clear_cache) - # TODO unify these namespaces, they seem to differ between dev/mk2/PHAL - bus.on("mycroft.paired", Configuration.handle_remote_update) - bus.on("mycroft.internet.connected", Configuration.handle_remote_update) - - Configuration.set_config_watcher() - - # do the initial remote fetch - if is_connected(): - Configuration.remote.reload() - - @staticmethod - def set_config_watcher(callback=None): - """Setup filewatcher to monitor for config file changes""" - paths = [Configuration.system.path] + \ - [c.path for c in Configuration.xdg_configs] - if callback: - Configuration._callbacks.append(callback) - if not Configuration._watchdog: - Configuration._watchdog = FileWatcher( - [p for p in paths if isfile(p)], - Configuration._on_file_change - ) - - @staticmethod - def _on_file_change(path): - LOG.info(f'{path} changed on disk, reloading!') - # reload updated config - for cfg in Configuration.xdg_configs + [Configuration.system]: - if cfg.path == path: - try: - cfg.reload() - except: - # got the file changed signal before write finished - sleep(0.5) - try: - cfg.reload() - except: - LOG.exception("Failed to load configuration, syntax seems invalid!") - break - else: - # reload all configs - try: - Configuration.reload() - except: - # got the file changed signal before write finished - sleep(0.5) - try: - Configuration.reload() - except: - LOG.exception("Failed to load configuration, syntax seems invalid!") - - for handler in Configuration._callbacks: - try: - handler() - except: - LOG.exception("Error in config update callback handler") - - @staticmethod - def deregister_bus(): - if Configuration.bus: - Configuration.bus.remove("configuration.updated", Configuration.updated) - Configuration.bus.remove("configuration.patch", Configuration.patch) - Configuration.bus.remove("configuration.patch.clear", Configuration.patch_clear) - Configuration.bus.remove("configuration.cache.clear", Configuration.clear_cache) - Configuration.bus.remove("mycroft.paired", Configuration.handle_remote_update) - Configuration.bus.remove("mycroft.internet.connected", Configuration.handle_remote_update) - - @staticmethod - def handle_remote_update(message): - """Handler for paired/internet connect - - Triggers an update of remote config. - """ - Configuration.remote.reload() - - @staticmethod - def updated(message): - """Handler for configuration.updated, - - Triggers an update of cached config. - """ - Configuration.reload() - - @staticmethod - def patch(message): - """Patch the volatile dict usable by skills - - Args: - message: Messagebus message should contain a config - in the data payload. - """ - config = message.data.get("config", {}) - for k, v in config.items(): - Configuration.__patch[k] = v - - @staticmethod - def patch_clear(message): - """Clear the config patch space. - - Args: - message: Messagebus message should contain a config - in the data payload. - """ - Configuration.__patch = {} - - # Backwards compat methods - @staticmethod - def get(configs=None, cache=True, remote=True): - """DEPRECATED - use Configuration class instead""" - LOG.warning("Configuration.get() has been deprecated, use Configuration() instead") - # NOTE: this is only called if using the class directly - # if using an instance (dict object) self._real_get is called instead - return Configuration.load_config_stack(configs, cache, remote) - - def _real_get(self, key, default=None): - return self.__getitem__(key) or default - - @staticmethod - def clear_cache(message=None): - """DEPRECATED - there is no cache anymore """ - Configuration.updated(message) - diff --git a/build/lib/ovos_config/locale.py b/build/lib/ovos_config/locale.py deleted file mode 100644 index 68e173e..0000000 --- a/build/lib/ovos_config/locale.py +++ /dev/null @@ -1,90 +0,0 @@ -from dateutil.tz import gettz, tzlocal -import ovos_config - -# lingua_franca is optional and might not be installed -# exceptions should only be raised in the parse and format utils - - -try: - import lingua_franca as LF -except ImportError: - LF = None - -_lang = "en-us" -_default_tz = None - - -def get_primary_lang_code(): - if LF: - return LF.get_primary_lang_code() - return _lang.split("-")[0] - - -def get_default_lang(): - if LF: - return LF.get_default_lang() - return _lang - - -def set_default_lang(lang): - global _lang - _lang = lang - if LF: - LF.set_default_lang(lang) - - -def get_config_tz(): - code = ovos_config.Configuration()["location"]["timezone"]["code"] - return gettz(code) - - -def get_default_tz(): - # if default was set at runtime use it else use the timezone from .conf - return _default_tz or get_config_tz() - - -def set_default_tz(tz=None): - """ configure LF """ - global _default_tz - tz = tz or get_config_tz() or tzlocal() - _default_tz = tz - if LF: - # tz added in recently, depends on version - try: - LF.time.set_default_tz(tz) - except: - pass - - -def load_languages(langs): - if LF: - LF.load_languages(langs) - - -def load_language(lang): - if LF: - LF.load_language(lang) - - -def setup_locale(lang=None, tz=None): - lang_code = lang or ovos_config.Configuration().get("lang", "en-us") - # Load language resources, currently en-us must also be loaded at all times - load_languages([lang_code, "en-us"]) - # Set the active lang to match the configured one - set_default_lang(lang_code) - # Set the default timezone to match the configured one - set_default_tz(tz) - - -# mycroft-core backwards compat LF only interface -def set_default_lf_lang(lang_code="en-us"): - """Set the default language of Lingua Franca for parsing and formatting. - - Note: this is a temporary method until a global set_default_lang() method - can be implemented that updates all Mycroft systems eg STT and TTS. - It will be deprecated at the earliest possible point. - - Args: - lang (str): BCP-47 language code, e.g. "en-us" or "es-mx" - """ - return set_default_lang(lang_code) diff --git a/build/lib/ovos_config/locations.py b/build/lib/ovos_config/locations.py deleted file mode 100644 index a34876c..0000000 --- a/build/lib/ovos_config/locations.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright 2018 Mycroft AI Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import os -from os.path import join, dirname, expanduser, exists -from time import sleep - -from ovos_utils.configuration import get_xdg_config_save_path, get_webcache_location, get_xdg_base, \ - get_config_filename, find_default_config as _fdc - - -def find_default_config(): - try: - return _fdc() - except FileNotFoundError: - # mycroft-core not found - return join(dirname(__file__), "mycroft.conf") - - -DEFAULT_CONFIG = find_default_config() -SYSTEM_CONFIG = os.environ.get('MYCROFT_SYSTEM_CONFIG', - f'/etc/{get_xdg_base()}/{get_config_filename()}') -# TODO: remove in 22.02 -# Make sure we support the old location still -# Deprecated and will be removed eventually -OLD_USER_CONFIG = join(expanduser('~'), '.' + get_xdg_base(), get_config_filename()) -USER_CONFIG = join(get_xdg_config_save_path(), get_config_filename()) -REMOTE_CONFIG = "mycroft.ai" -WEB_CONFIG_CACHE = os.environ.get('MYCROFT_WEB_CACHE') or get_webcache_location() - - -def __ensure_folder_exists(path): - """ Make sure the directory for the specified path exists. - - Args: - path (str): path to config file - """ - directory = dirname(path) - if not exists(directory): - try: - os.makedirs(directory) - except: - sleep(0.2) - if not exists(directory): - try: - os.makedirs(directory) - except Exception as e: - pass - - -__ensure_folder_exists(WEB_CONFIG_CACHE) -__ensure_folder_exists(USER_CONFIG) diff --git a/build/lib/ovos_config/ovos.py b/build/lib/ovos_config/ovos.py deleted file mode 100644 index c73233f..0000000 --- a/build/lib/ovos_config/ovos.py +++ /dev/null @@ -1,65 +0,0 @@ -"""This file will check a system level OpenVoiceOS specific config file - -The ovos config is json with comment support like the regular mycroft.conf - -Default locations tried by order until a file is found -- /etc/OpenVoiceOS/ovos.conf -- /etc/mycroft/ovos.conf - -XDG locations are then merged over the select default config (if found) - -Examples config: - -{ - // check xdg directories OR only check old style hardcoded paths - "xdg": true, - - // the "name of the core", - // eg, OVOS, Neon, Chatterbox... - // all XDG paths should respect this - // {xdg_path}/{base_folder}/some_resource - // "mycroft.conf" paths are derived from this - // ~/.{base_folder}/mycroft.conf - "base_folder": "OpenVoiceOS", - - // the filename of "mycroft.conf", - // eg, ovos.conf, chatterbox.conf, neon.conf... - // "mycroft.conf" paths are derived from this - // ~/.{base_folder}/{config_filename} - "config_filename": "mycroft.conf", - - // override the default.conf location, allows changing the default values - // eg, disable backend, disable skills, configure permissions - "default_config_path": "/etc/OpenVoiceOS/default_mycroft.conf", - - // this is intended for derivative products, if a module name is present - // in sys.modules then the values below will be used instead - // eg, chatterbox/mycroft/ovos/neon can coexist in the same machine - "module_overrides": { - "chatterbox": { - "xdg": false, - "base_folder": "chatterbox", - "config_filename": "chatterbox.conf", - "default_config_path": "/opt/chatterbox/chatterbox.conf" - }, - "neon_core": { - "xdg": true, - "base_folder": "neon", - "config_filename": "neon.conf", - "default_config_path": "/opt/neon/neon.conf" - } - }, - // essentially aliases for the above, useful for microservice architectures - "submodule_mappings": { - "chatterbox_stt": "chatterbox", - "chatterbox_playback": "chatterbox", - "chatterbox_admin": "chatterbox", - "chatterbox_blockly": "chatterbox", - "chatterbox_gpio_service": "chatterbox", - "neon_speech": "neon_core", - "neon_audio": "neon_core", - "neon_enclosure": "neon_core" - } -} -""" -from ovos_utils.configuration import get_ovos_config diff --git a/build/lib/ovos_config/utils.py b/build/lib/ovos_config/utils.py deleted file mode 100644 index c9bd341..0000000 --- a/build/lib/ovos_config/utils.py +++ /dev/null @@ -1,44 +0,0 @@ -# TODO move to ovos_utils - -import time -from os.path import dirname - -from watchdog.observers import Observer -from watchdog.events import FileSystemEventHandler - - -class FileWatcher: - def __init__(self, files, callback, recursive=False, ignore_creation=False): - self.observer = Observer() - self.handlers = [] - for file_path in files: - watch_dir = dirname(file_path) - self.observer.schedule(FileEventHandler(file_path, callback, ignore_creation), - watch_dir, recursive=recursive) - self.observer.start() - - def shutdown(self): - self.observer.unschedule_all() - self.observer.stop() - - -class FileEventHandler(FileSystemEventHandler): - def __init__(self, file_path, callback, ignore_creation=False): - super().__init__() - self._callback = callback - self._file_path = file_path - self._debounce = 1 - self._last_update = 0 - if ignore_creation: - self._events = ('modified') - else: - self._events = ('created', 'modified') - - def on_any_event(self, event): - if event.is_directory: - return - elif event.event_type in self._events: - if event.src_path == self._file_path: - if time.time() - self._last_update >= self._debounce: - self._callback(event.src_path) - self._last_update = time.time() diff --git a/build/lib/ovos_config/version.py b/build/lib/ovos_config/version.py deleted file mode 100644 index 76c4342..0000000 --- a/build/lib/ovos_config/version.py +++ /dev/null @@ -1,6 +0,0 @@ -# START_VERSION_BLOCK -VERSION_MAJOR = 0 -VERSION_MINOR = 0 -VERSION_BUILD = 1 -VERSION_ALPHA = 0 -# END_VERSION_BLOCK diff --git a/dist/ovos_config-0.0.1-py3-none-any.whl b/dist/ovos_config-0.0.1-py3-none-any.whl deleted file mode 100644 index 2029835..0000000 Binary files a/dist/ovos_config-0.0.1-py3-none-any.whl and /dev/null differ diff --git a/ovos_config.egg-info/PKG-INFO b/ovos_config.egg-info/PKG-INFO deleted file mode 100644 index 4a39709..0000000 --- a/ovos_config.egg-info/PKG-INFO +++ /dev/null @@ -1,10 +0,0 @@ -Metadata-Version: 1.0 -Name: ovos-config -Version: 0.0.1 -Summary: mycroft-core configuration module -Home-page: https://github.com/OpenVoiceOS/ovos-config -Author: UNKNOWN -Author-email: UNKNOWN -License: Apache-2.0 -Description: UNKNOWN -Platform: UNKNOWN diff --git a/ovos_config.egg-info/SOURCES.txt b/ovos_config.egg-info/SOURCES.txt deleted file mode 100644 index 4e8b4c3..0000000 --- a/ovos_config.egg-info/SOURCES.txt +++ /dev/null @@ -1,14 +0,0 @@ -README.md -setup.py -ovos_config/__init__.py -ovos_config/config.py -ovos_config/locale.py -ovos_config/locations.py -ovos_config/ovos.py -ovos_config/utils.py -ovos_config/version.py -ovos_config.egg-info/PKG-INFO -ovos_config.egg-info/SOURCES.txt -ovos_config.egg-info/dependency_links.txt -ovos_config.egg-info/requires.txt -ovos_config.egg-info/top_level.txt \ No newline at end of file diff --git a/ovos_config.egg-info/dependency_links.txt b/ovos_config.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/ovos_config.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/ovos_config.egg-info/requires.txt b/ovos_config.egg-info/requires.txt deleted file mode 100644 index 8d75385..0000000 --- a/ovos_config.egg-info/requires.txt +++ /dev/null @@ -1,4 +0,0 @@ -PyYAML~=5.4 -watchdog -mycroft-messagebus-client!=0.9.2,!=0.9.3,~=0.9 -python-dateutil~=2.6 diff --git a/ovos_config.egg-info/top_level.txt b/ovos_config.egg-info/top_level.txt deleted file mode 100644 index 292fa94..0000000 --- a/ovos_config.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -ovos_config