1
0
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:
Otto Winter
2019-04-17 12:06:00 +02:00
committed by GitHub
parent 049807e3ab
commit 6682c43dfa
817 changed files with 54156 additions and 10830 deletions

View File

@@ -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]