mirror of
https://github.com/esphome/esphome.git
synced 2025-09-03 20:02:22 +01:00
🏗 Merge C++ into python codebase (#504)
## Description: Move esphome-core codebase into esphome (and a bunch of other refactors). See https://github.com/esphome/feature-requests/issues/97 Yes this is a shit ton of work and no there's no way to automate it :( But it will be worth it 👍 Progress: - Core support (file copy etc): 80% - Base Abstractions (light, switch): ~50% - Integrations: ~10% - Working? Yes, (but only with ported components). Other refactors: - Moves all codegen related stuff into a single class: `esphome.codegen` (imported as `cg`) - Rework coroutine syntax - Move from `component/platform.py` to `domain/component.py` structure as with HA - Move all defaults out of C++ and into config validation. - Remove `make_...` helpers from Application class. Reason: Merge conflicts with every single new integration. - Pointer Variables are stored globally instead of locally in setup(). Reason: stack size limit. Future work: - Rework const.py - Move all `CONF_...` into a conf class (usage `conf.UPDATE_INTERVAL` vs `CONF_UPDATE_INTERVAL`). Reason: Less convoluted import block - Enable loading from `custom_components` folder. **Related issue (if applicable):** https://github.com/esphome/feature-requests/issues/97 **Pull request in [esphome-docs](https://github.com/esphome/esphome-docs) with documentation (if applicable):** esphome/esphome-docs#<esphome-docs PR number goes here> ## Checklist: - [ ] The code change is tested and works locally. - [ ] Tests have been added to verify that the new code works (under `tests/` folder). If user exposed functionality or configuration variables are added/changed: - [ ] Documentation added/updated in [esphomedocs](https://github.com/OttoWinter/esphomedocs).
This commit is contained in:
@@ -35,17 +35,14 @@ def trash_storage_path(base_path): # type: (str) -> str
|
||||
|
||||
# pylint: disable=too-many-instance-attributes
|
||||
class StorageJSON(object):
|
||||
def __init__(self, storage_version, name, esphome_core_version, esphome_version,
|
||||
def __init__(self, storage_version, name, esphome_version,
|
||||
src_version, arduino_version, address, esp_platform, board, build_path,
|
||||
firmware_bin_path, use_legacy_ota):
|
||||
firmware_bin_path):
|
||||
# Version of the storage JSON schema
|
||||
assert storage_version is None or isinstance(storage_version, int)
|
||||
self.storage_version = storage_version # type: int
|
||||
# The name of the node
|
||||
self.name = name # type: str
|
||||
# The esphome-core version in use
|
||||
assert esphome_core_version is None or isinstance(esphome_core_version, dict)
|
||||
self.esphome_core_version = esphome_core_version # type: Dict[str, str]
|
||||
# The esphome version this was compiled with
|
||||
self.esphome_version = esphome_version # type: str
|
||||
# The version of the file in src/main.cpp - Used to migrate the file
|
||||
@@ -64,14 +61,11 @@ class StorageJSON(object):
|
||||
self.build_path = build_path # type: str
|
||||
# The absolute path to the firmware binary
|
||||
self.firmware_bin_path = firmware_bin_path # type: str
|
||||
# Whether to use legacy OTA, will be off after the first successful flash
|
||||
self.use_legacy_ota = use_legacy_ota
|
||||
|
||||
def as_dict(self):
|
||||
return {
|
||||
'storage_version': self.storage_version,
|
||||
'name': self.name,
|
||||
'esphome_core_version': self.esphome_core_version,
|
||||
'esphome_version': self.esphome_version,
|
||||
'src_version': self.src_version,
|
||||
'arduino_version': self.arduino_version,
|
||||
@@ -80,7 +74,6 @@ class StorageJSON(object):
|
||||
'board': self.board,
|
||||
'build_path': self.build_path,
|
||||
'firmware_bin_path': self.firmware_bin_path,
|
||||
'use_legacy_ota': self.use_legacy_ota,
|
||||
}
|
||||
|
||||
def to_json(self):
|
||||
@@ -96,7 +89,6 @@ class StorageJSON(object):
|
||||
return StorageJSON(
|
||||
storage_version=1,
|
||||
name=esph.name,
|
||||
esphome_core_version=esph.esphome_core_version,
|
||||
esphome_version=const.__version__,
|
||||
src_version=1,
|
||||
arduino_version=esph.arduino_version,
|
||||
@@ -105,7 +97,6 @@ class StorageJSON(object):
|
||||
board=esph.board,
|
||||
build_path=esph.build_path,
|
||||
firmware_bin_path=esph.firmware_bin,
|
||||
use_legacy_ota=True if old is None else old.use_legacy_ota,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
@@ -114,7 +105,6 @@ class StorageJSON(object):
|
||||
return StorageJSON(
|
||||
storage_version=1,
|
||||
name=name,
|
||||
esphome_core_version=None,
|
||||
esphome_version=const.__version__,
|
||||
src_version=1,
|
||||
arduino_version=None,
|
||||
@@ -123,7 +113,6 @@ class StorageJSON(object):
|
||||
board=board,
|
||||
build_path=None,
|
||||
firmware_bin_path=None,
|
||||
use_legacy_ota=False,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
@@ -133,8 +122,6 @@ class StorageJSON(object):
|
||||
storage = json.loads(text, encoding='utf-8')
|
||||
storage_version = storage['storage_version']
|
||||
name = storage.get('name')
|
||||
esphome_core_version = storage.get('esphome_core_version',
|
||||
storage.get('esphomelib_version'))
|
||||
esphome_version = storage.get('esphome_version', storage.get('esphomeyaml_version'))
|
||||
src_version = storage.get('src_version')
|
||||
arduino_version = storage.get('arduino_version')
|
||||
@@ -143,10 +130,9 @@ class StorageJSON(object):
|
||||
board = storage.get('board')
|
||||
build_path = storage.get('build_path')
|
||||
firmware_bin_path = storage.get('firmware_bin_path')
|
||||
use_legacy_ota = storage.get('use_legacy_ota')
|
||||
return StorageJSON(storage_version, name, esphome_core_version, esphome_version,
|
||||
return StorageJSON(storage_version, name, esphome_version,
|
||||
src_version, arduino_version, address, esp_platform, board, build_path,
|
||||
firmware_bin_path, use_legacy_ota)
|
||||
firmware_bin_path)
|
||||
|
||||
@staticmethod
|
||||
def load(path): # type: (str) -> Optional[StorageJSON]
|
||||
|
Reference in New Issue
Block a user