boneIO 1.6.0.dev3__py3-none-any.whl → 1.6.0.dev4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- boneio/core/config/provenance.py +114 -0
- boneio/migrations/assets/MANIFEST.sha256 +1 -0
- boneio/migrations/assets/issue.d/10-boneio.issue +1 -0
- boneio/migrations/plans/1.6.12.json +1 -0
- boneio/migrations/plans/1.6.12.sig +2 -0
- boneio/migrations/plans/manifest.json +1 -1
- boneio/migrations/plans/manifest.sig +0 -0
- boneio/migrations/versions/v1_6_12_console_shows_ip.py +58 -0
- boneio/version.py +1 -1
- boneio/webui/app.py +16 -7
- {boneio-1.6.0.dev3.dist-info → boneio-1.6.0.dev4.dist-info}/METADATA +3 -3
- {boneio-1.6.0.dev3.dist-info → boneio-1.6.0.dev4.dist-info}/RECORD +16 -11
- {boneio-1.6.0.dev3.dist-info → boneio-1.6.0.dev4.dist-info}/WHEEL +0 -0
- {boneio-1.6.0.dev3.dist-info → boneio-1.6.0.dev4.dist-info}/entry_points.txt +0 -0
- {boneio-1.6.0.dev3.dist-info → boneio-1.6.0.dev4.dist-info}/licenses/LICENSE +0 -0
- {boneio-1.6.0.dev3.dist-info → boneio-1.6.0.dev4.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"""Tell a freshly flashed controller from one that has been in service.
|
|
2
|
+
|
|
3
|
+
The first-run wizard has two steps that are only appropriate on a blank
|
|
4
|
+
device. The import step offers to restore a configuration, which on a device
|
|
5
|
+
that already has one reads as "yours is gone". The devices step is worse than
|
|
6
|
+
misleading: it replaces the whole ``event`` section, so a controller with fifty
|
|
7
|
+
configured inputs loses them to a wizard its owner opened only to create an
|
|
8
|
+
account.
|
|
9
|
+
|
|
10
|
+
So the question has to be answered before those steps are offered, and the two
|
|
11
|
+
ways of getting it wrong are not equally bad:
|
|
12
|
+
|
|
13
|
+
* Treating an upgraded device as fresh costs the owner their configuration.
|
|
14
|
+
* Treating a fresh device as upgraded costs them a step in a wizard; they
|
|
15
|
+
can still import and bind inputs from the normal interface afterwards.
|
|
16
|
+
|
|
17
|
+
This module is therefore written to answer "is it fresh" and to say no when it
|
|
18
|
+
cannot tell. Freshness has to be demonstrated, not assumed.
|
|
19
|
+
|
|
20
|
+
The demonstration is that the configuration is still the factory one. The image
|
|
21
|
+
copies a variant out of ``~/.cache/boneio_configs/<variant>/`` verbatim, and
|
|
22
|
+
per-device work touches only ``mqtt.yaml`` (the broker password), so a
|
|
23
|
+
controller nobody has configured yet still has a ``config.yaml`` byte-identical
|
|
24
|
+
to its template.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from __future__ import annotations
|
|
28
|
+
|
|
29
|
+
import logging
|
|
30
|
+
import os
|
|
31
|
+
from pathlib import Path
|
|
32
|
+
|
|
33
|
+
_LOGGER = logging.getLogger(__name__)
|
|
34
|
+
|
|
35
|
+
#: Where the image leaves the per-variant templates it seeded the device from.
|
|
36
|
+
FACTORY_TEMPLATE_DIR = Path.home() / ".cache" / "boneio_configs"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _digest(path: Path) -> bytes | None:
|
|
40
|
+
"""Read a file for comparison.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
path: File to read.
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
Its contents, or None when it cannot be read.
|
|
47
|
+
"""
|
|
48
|
+
try:
|
|
49
|
+
return path.read_bytes()
|
|
50
|
+
except OSError:
|
|
51
|
+
return None
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def looks_factory_fresh(
|
|
55
|
+
config_path: str | os.PathLike[str],
|
|
56
|
+
template_dir: str | os.PathLike[str] | None = None,
|
|
57
|
+
) -> bool:
|
|
58
|
+
"""Whether this device still carries an untouched factory configuration.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
config_path: The device's ``config.yaml``.
|
|
62
|
+
template_dir: Where the per-variant templates live. Defaults to
|
|
63
|
+
:data:`FACTORY_TEMPLATE_DIR`.
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
True only when freshness can be positively shown: there is no
|
|
67
|
+
configuration at all, or the configuration is identical to one of the
|
|
68
|
+
templates the image ships. False whenever the answer is not certain.
|
|
69
|
+
"""
|
|
70
|
+
config = Path(config_path)
|
|
71
|
+
current = _digest(config)
|
|
72
|
+
if current is None:
|
|
73
|
+
# Nothing to lose, and nothing that an import could overwrite.
|
|
74
|
+
_LOGGER.debug("No configuration at %s — treating the device as fresh", config)
|
|
75
|
+
return True
|
|
76
|
+
|
|
77
|
+
root = Path(template_dir) if template_dir is not None else FACTORY_TEMPLATE_DIR
|
|
78
|
+
try:
|
|
79
|
+
variants = sorted(p for p in root.iterdir() if p.is_dir())
|
|
80
|
+
except OSError:
|
|
81
|
+
# No templates to compare against: the honest answer is "cannot tell",
|
|
82
|
+
# and the safe reading of that is "assume it has been configured".
|
|
83
|
+
_LOGGER.debug("No factory templates under %s — assuming configured", root)
|
|
84
|
+
return False
|
|
85
|
+
|
|
86
|
+
for variant in variants:
|
|
87
|
+
if current == _digest(variant / "config.yaml"):
|
|
88
|
+
_LOGGER.debug("Configuration matches the %s template", variant.name)
|
|
89
|
+
return True
|
|
90
|
+
|
|
91
|
+
return False
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def was_configured_before(
|
|
95
|
+
config_path: str | os.PathLike[str],
|
|
96
|
+
had_legacy_auth: bool = False,
|
|
97
|
+
template_dir: str | os.PathLike[str] | None = None,
|
|
98
|
+
) -> bool:
|
|
99
|
+
"""Whether the wizard should skip the steps that assume a blank device.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
config_path: The device's ``config.yaml``.
|
|
103
|
+
had_legacy_auth: Whether a pre-1.6 ``web.auth`` block was found. It
|
|
104
|
+
proves the device is not fresh, but its absence proves nothing —
|
|
105
|
+
most 1.5.x controllers never had web authentication at all, which
|
|
106
|
+
is exactly the case this used to get wrong.
|
|
107
|
+
template_dir: Passed through to :func:`looks_factory_fresh`.
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
True when the device already has a configuration of its own.
|
|
111
|
+
"""
|
|
112
|
+
if had_legacy_auth:
|
|
113
|
+
return True
|
|
114
|
+
return not looks_factory_fresh(config_path, template_dir)
|
|
@@ -12,6 +12,7 @@ e08f0e81a507e625398f87cad7b922c9af00cba2bda53280697178cbbf9eea86 helpers/boneio
|
|
|
12
12
|
dff0cd02daad2cbd525a0535f8f3562bb742e7e737b24c69e5afa986415e67e4 helpers/boneio-helpers-heal
|
|
13
13
|
643cfaea029d9b1a9ce6c7f12d1d6b63e8374cb4038a89b8fa48df9848f3af77 helpers/boneio-migrate-v2
|
|
14
14
|
9f9675297a2de2c708bb7cf72d96ecd18e58f97a9dc3eec3e2069bf1659f3fa5 helpers/boneio-system
|
|
15
|
+
485d37182fe6a1261b472cbc6b6e922d30e690333c27672497a7b13dc775499c issue.d/10-boneio.issue
|
|
15
16
|
e6013f4fbf11693f39123b1e6159c7d7224a7c832e994722120980f64039c17e journald/journald.conf
|
|
16
17
|
d28f2e9336b881b102c42f4278ec9ddf046c83dab4469dc5be7326768e074cb6 kernel/postinst-boneio-overlay
|
|
17
18
|
9681710e1a38b8ea7ba5558839e4ef8b5f01a75722dbf403913bad76437449ec migrations-recovery.pem
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
boneIO eth0 \4{eth0} (blank? press Enter to redraw)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"action":"install_file","dst":"/etc/issue.d/10-boneio.issue","expected_sha256":"485d37182fe6a1261b472cbc6b6e922d30e690333c27672497a7b13dc775499c","group":"root","mode":420,"owner":"root","src":"issue.d/10-boneio.issue","template_vars":{}}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"plans":{"1.3.0":"28f5b17fc82667ddfda08d567195b10466e673b8a62f72a1b07bb52581095629","1.3.1":"580381a4f6f40fc1bd4e903e591ad0d5c1db27daaccafc6f79dabf8c3b84259a","1.3.2":"7a69ffaf0c41438be25a656dcdc87783daac0eae79218d023648ef9d708e373f","1.4.0":"c50ba85a587c756f69ec4b3ee3ae4b5729281208c68ed138f4bd996d5dddc82f","1.4.3":"a8cfbabff09d21944a822c4a70f23a7ee14960c4054de151c9fbc7cdb29adff5","1.4.4":"a2089ad8d97d2de58a520fe633f519c8872b3052b911f040ce4957a308c6ccaa","1.5.0":"52d9d118da099abda0e0153cd16892e201681f6e4d3c6e5790284d1ac469a407","1.5.1":"d283cb8c01024338fb614ae2199744d883379f59579423e4eb9234f5c59ebdd8","1.5.10":"889e2f12614e6e67d342571c1c3bab8940659bfbbf43fa30a6847e73decb85d1","1.5.11":"4906e4de2b3a9c2f0b0181817c9dc168cb910ba6941691d4e86b8387802b624a","1.5.12":"c0a0dc085bb33d9718e869ed5effc2c1581deffd7ed0d5adc119b94312181625","1.5.13":"bfe58c8756f9b5f5e55d5acbb6f7cfc469d201004d312c14e022eb7c52369b7d","1.5.14":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.15":"0687a735cb4aaf8f8f74ad6e228ca1b14e045cba8821991c7d19fc9beaeac766","1.5.16":"3544ac754f39d56ecf2b06300b7cca1b6f8723f99885cd11bd690f1a704d3728","1.5.17":"cf1e9e0ff6812cb7092a82dd588392d625decbe3680fe003dfc554f9045809d3","1.5.18":"1fd873effa66b632217d674745722f712a48b36bb79957fefae722757a74bc30","1.5.2":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.3":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.4":"e86174ba5aff6f257f8a3f4721c7942885cd203469a9d8ddc15dbe6c704e0f45","1.5.5":"f93ed2d4342e447eb9900a0150331113918f2a8b3baeeb795c07231d80f0337c","1.5.6":"e3d90e6ceb20d760f1e9fa63224c5a070a16b3ca6e7dc4cc2c594138e929cce8","1.5.7":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.8":"f075b84fb04f4043658a28402d963494dd58481f164c0b371cec94322fe6d131","1.5.9":"ac170fc924019fc2acd69a90a82ba5c2552dce7a2c01a05e5407443e7a9e5af7","1.6.0":"c8286514d1a4f1805e727e13d3c350bb390378c6f31ad6920030412d61ec9b3f","1.6.1":"aa1d3934091853fc21208993930c1bf92e17136428d1d0baaefabfa65d13e7fa","1.6.10":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.6.11":"d136203e08e3b052254403815d4ccedb555b0a297686fe97952d275eb1f322eb","1.6.2":"6ef96b5e00a04a929d16f0e4a136bfcc5b8132a466d6907a99b2c8516a8952d5","1.6.3":"5c10db827bcb92b9322d4aa5751076b825da87c6d18d6953847ba72317cca862","1.6.4":"258b3fd6a5ba62067ee6743051b66686bb7640ccbad52de45d898034c3d65e67","1.6.5":"92417668ba1c0e9ddd2482fa9513b980dea8e92130a6b849c58ccda4956a8a1a","1.6.6":"535bb041b99d5ac1bc9028ea88bc2fbf3dbadc80ea8dea236cc219123c194114","1.6.7":"d59af413e270e6f34b1b9a1c8c4acef35328f00e26fad447cfe214545af78d8f","1.6.8":"7175f827b99c602df80436db588c87277ce50f2734051a444163b048f5d0b23e","1.6.9":"732d5a9bcd2e496a260263a643c78a6346e9f3cef5b48fe59ac6b120bd03ba4e"},"release":"1.6.0.
|
|
1
|
+
{"plans":{"1.3.0":"28f5b17fc82667ddfda08d567195b10466e673b8a62f72a1b07bb52581095629","1.3.1":"580381a4f6f40fc1bd4e903e591ad0d5c1db27daaccafc6f79dabf8c3b84259a","1.3.2":"7a69ffaf0c41438be25a656dcdc87783daac0eae79218d023648ef9d708e373f","1.4.0":"c50ba85a587c756f69ec4b3ee3ae4b5729281208c68ed138f4bd996d5dddc82f","1.4.3":"a8cfbabff09d21944a822c4a70f23a7ee14960c4054de151c9fbc7cdb29adff5","1.4.4":"a2089ad8d97d2de58a520fe633f519c8872b3052b911f040ce4957a308c6ccaa","1.5.0":"52d9d118da099abda0e0153cd16892e201681f6e4d3c6e5790284d1ac469a407","1.5.1":"d283cb8c01024338fb614ae2199744d883379f59579423e4eb9234f5c59ebdd8","1.5.10":"889e2f12614e6e67d342571c1c3bab8940659bfbbf43fa30a6847e73decb85d1","1.5.11":"4906e4de2b3a9c2f0b0181817c9dc168cb910ba6941691d4e86b8387802b624a","1.5.12":"c0a0dc085bb33d9718e869ed5effc2c1581deffd7ed0d5adc119b94312181625","1.5.13":"bfe58c8756f9b5f5e55d5acbb6f7cfc469d201004d312c14e022eb7c52369b7d","1.5.14":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.15":"0687a735cb4aaf8f8f74ad6e228ca1b14e045cba8821991c7d19fc9beaeac766","1.5.16":"3544ac754f39d56ecf2b06300b7cca1b6f8723f99885cd11bd690f1a704d3728","1.5.17":"cf1e9e0ff6812cb7092a82dd588392d625decbe3680fe003dfc554f9045809d3","1.5.18":"1fd873effa66b632217d674745722f712a48b36bb79957fefae722757a74bc30","1.5.2":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.3":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.4":"e86174ba5aff6f257f8a3f4721c7942885cd203469a9d8ddc15dbe6c704e0f45","1.5.5":"f93ed2d4342e447eb9900a0150331113918f2a8b3baeeb795c07231d80f0337c","1.5.6":"e3d90e6ceb20d760f1e9fa63224c5a070a16b3ca6e7dc4cc2c594138e929cce8","1.5.7":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.8":"f075b84fb04f4043658a28402d963494dd58481f164c0b371cec94322fe6d131","1.5.9":"ac170fc924019fc2acd69a90a82ba5c2552dce7a2c01a05e5407443e7a9e5af7","1.6.0":"c8286514d1a4f1805e727e13d3c350bb390378c6f31ad6920030412d61ec9b3f","1.6.1":"aa1d3934091853fc21208993930c1bf92e17136428d1d0baaefabfa65d13e7fa","1.6.10":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.6.11":"d136203e08e3b052254403815d4ccedb555b0a297686fe97952d275eb1f322eb","1.6.12":"fe4426b91a10a01fa2ebba9c818bf3ccb64103fbc6183f712507c38929645857","1.6.2":"6ef96b5e00a04a929d16f0e4a136bfcc5b8132a466d6907a99b2c8516a8952d5","1.6.3":"5c10db827bcb92b9322d4aa5751076b825da87c6d18d6953847ba72317cca862","1.6.4":"258b3fd6a5ba62067ee6743051b66686bb7640ccbad52de45d898034c3d65e67","1.6.5":"92417668ba1c0e9ddd2482fa9513b980dea8e92130a6b849c58ccda4956a8a1a","1.6.6":"535bb041b99d5ac1bc9028ea88bc2fbf3dbadc80ea8dea236cc219123c194114","1.6.7":"d59af413e270e6f34b1b9a1c8c4acef35328f00e26fad447cfe214545af78d8f","1.6.8":"7175f827b99c602df80436db588c87277ce50f2734051a444163b048f5d0b23e","1.6.9":"732d5a9bcd2e496a260263a643c78a6346e9f3cef5b48fe59ac6b120bd03ba4e"},"release":"1.6.0.dev4"}
|
|
Binary file
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""Show the device's address on the serial console login prompt.
|
|
2
|
+
|
|
3
|
+
A controller in a cabinet is reached over the network, and the first thing
|
|
4
|
+
anybody attaching a serial cable wants to know is which address it ended up
|
|
5
|
+
with. Until now the console said only the hostname, so the answer meant logging
|
|
6
|
+
in and running ``ip addr`` — on a device that, after the 1.6 hardening, an
|
|
7
|
+
installer may not have an account on.
|
|
8
|
+
|
|
9
|
+
``agetty`` expands the escape when it draws the prompt, not when it starts, so
|
|
10
|
+
the address is current rather than whatever DHCP had managed by the time the
|
|
11
|
+
getty came up. If the lease had not arrived yet the field is simply blank, and
|
|
12
|
+
pressing Enter redraws the prompt with the address filled in — which is what
|
|
13
|
+
the hint on the line is for.
|
|
14
|
+
|
|
15
|
+
The interface is named explicitly. A bare ``\\4`` means "the first fully
|
|
16
|
+
configured interface", and this device has ``docker0`` and a compose bridge
|
|
17
|
+
holding 172.17/172.18 addresses that are of no use to anybody standing at the
|
|
18
|
+
cabinet.
|
|
19
|
+
|
|
20
|
+
It goes in ``/etc/issue.d`` rather than into ``/etc/issue``, which belongs to
|
|
21
|
+
``base-files`` and already carries text the board vendor put there.
|
|
22
|
+
|
|
23
|
+
The line carries the address and nothing else — deliberately. A URL would have
|
|
24
|
+
to name a port, and the panel's port is ``web.port`` from the operator's
|
|
25
|
+
``config.yaml``, defaulting to 8090 but not fixed at it; there is also a TLS
|
|
26
|
+
front on 8443 that some deployments use instead. A signed plan is frozen at
|
|
27
|
+
release time and this file is static, so any port written here is a guess that
|
|
28
|
+
cannot be corrected on the device that proves it wrong. The address is the
|
|
29
|
+
thing somebody at the cabinet does not already know.
|
|
30
|
+
|
|
31
|
+
To retry on a device, delete ``/var/lib/boneio/migrations.d/1.6.12.applied``
|
|
32
|
+
and restart boneIO.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
from __future__ import annotations
|
|
36
|
+
|
|
37
|
+
from boneio.migrations.actions import InstallFile, MigrationAction
|
|
38
|
+
|
|
39
|
+
VERSION = "1.6.12"
|
|
40
|
+
DESCRIPTION = "Show the IP address on the serial console"
|
|
41
|
+
REQUIRES_ROOT = True
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def plan() -> list[MigrationAction]:
|
|
45
|
+
"""Return the ordered list of migration actions.
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
List of :class:`MigrationAction` to apply in order.
|
|
49
|
+
"""
|
|
50
|
+
return [
|
|
51
|
+
InstallFile(
|
|
52
|
+
src="issue.d/10-boneio.issue",
|
|
53
|
+
dst="/etc/issue.d/10-boneio.issue",
|
|
54
|
+
mode=0o644,
|
|
55
|
+
owner="root",
|
|
56
|
+
group="root",
|
|
57
|
+
)
|
|
58
|
+
]
|
boneio/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# flake8: noqa
|
|
2
|
-
__version__ = "1.6.0.
|
|
2
|
+
__version__ = "1.6.0.dev4"
|
boneio/webui/app.py
CHANGED
|
@@ -24,6 +24,7 @@ from boneio.const import COVER, NONE
|
|
|
24
24
|
from boneio.core.auth.migration import migrate_legacy_auth
|
|
25
25
|
from boneio.core.auth.store import UserStore, UserStoreError
|
|
26
26
|
from boneio.core.config import ConfigHelper
|
|
27
|
+
from boneio.core.config.provenance import was_configured_before
|
|
27
28
|
from boneio.core.events import GracefulExit
|
|
28
29
|
from boneio.core.manager import Manager
|
|
29
30
|
from boneio.models import (
|
|
@@ -785,14 +786,22 @@ def init_app(
|
|
|
785
786
|
"username": migration.username,
|
|
786
787
|
"used_secret_file": migration.used_secret_file,
|
|
787
788
|
}
|
|
788
|
-
#
|
|
789
|
-
#
|
|
790
|
-
#
|
|
791
|
-
#
|
|
792
|
-
#
|
|
793
|
-
#
|
|
789
|
+
# Whether the first-run wizard may offer the steps that assume a blank
|
|
790
|
+
# device — the import, and the one that replaces the whole event
|
|
791
|
+
# section.
|
|
792
|
+
#
|
|
793
|
+
# This used to be read off the web.auth block alone, which was wrong in
|
|
794
|
+
# the direction that costs the owner their configuration: most 1.5.x
|
|
795
|
+
# controllers never had web authentication, so an upgraded device with
|
|
796
|
+
# a full config.yaml looked exactly like a fresh one. Freshness is now
|
|
797
|
+
# something that has to be shown, not assumed — see
|
|
798
|
+
# boneio.core.config.provenance.
|
|
794
799
|
onboarding_module.set_configured_before(
|
|
795
|
-
|
|
800
|
+
was_configured_before(
|
|
801
|
+
yaml_config_file,
|
|
802
|
+
had_legacy_auth=bool(migration)
|
|
803
|
+
or migration.reason == "incomplete_legacy_auth",
|
|
804
|
+
)
|
|
796
805
|
)
|
|
797
806
|
except UserStoreError as err:
|
|
798
807
|
# Refusing to start would brick the UI over a file the user can fix,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boneio
|
|
3
|
-
Version: 1.6.0.
|
|
3
|
+
Version: 1.6.0.dev4
|
|
4
4
|
Summary: Python App for BoneIO
|
|
5
5
|
Author-email: Paweł Szafer <pszafer@gmail.com>
|
|
6
6
|
License: GNU General Public License v3.0
|
|
7
7
|
Project-URL: Homepage, https://boneio.eu
|
|
8
|
-
Project-URL: Repository, https://github.com/boneIO-eu/
|
|
8
|
+
Project-URL: Repository, https://github.com/boneIO-eu/app_black
|
|
9
9
|
Project-URL: Documentation, https://boneio.eu/docs/intro/
|
|
10
|
-
Project-URL: Changelog, https://github.com/boneIO-eu/
|
|
10
|
+
Project-URL: Changelog, https://github.com/boneIO-eu/app_black/releases
|
|
11
11
|
Requires-Python: >=3.13
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
@@ -3,7 +3,7 @@ boneio/bonecli.py,sha256=_MbWYilR4-Er0xNTi453pAiVmJJpzbNPHg1nCOcTk-Q,13324
|
|
|
3
3
|
boneio/const.py,sha256=90YIo-mqg2UVtBz7Pk8LfkQmTCyCcr7bsbKTR_HdRNw,7299
|
|
4
4
|
boneio/exceptions.py,sha256=cBph-TsLF7FSz6p4wYeMs3pjVmVRaNQRJP82JgYYV-c,810
|
|
5
5
|
boneio/runner.py,sha256=hwROkZmck0KusYen0X0BPNA6D_GNZWQy1D5S7dRWpKA,21964
|
|
6
|
-
boneio/version.py,sha256=
|
|
6
|
+
boneio/version.py,sha256=N9RYO59MLEBlX-N8VZrXvgpcDRygS6fIttx8jtpXFI8,42
|
|
7
7
|
boneio/boards/0.2/input.yaml,sha256=K5EcB44BZ8PxbPnH1izYwJ-ePo8gs4qZttMXhnMnfQ8,1259
|
|
8
8
|
boneio/boards/0.2/output_24_16.yaml,sha256=GQGM3gUK7UobdGL-Ejt9UKdCs1HLPgZ7kziVZ1tjQlA,1462
|
|
9
9
|
boneio/boards/0.2/output_32_10.yaml,sha256=169ubuzRqFLGiOr7zgB1xL1tKdQyOx2FJZvTCkxCA4U,1920
|
|
@@ -103,6 +103,7 @@ boneio/core/config/config_helper.py,sha256=wVhIgOYucaxY-5_uxQPnoGlXQ9TfnH8jVQSXZ
|
|
|
103
103
|
boneio/core/config/input_bindings.py,sha256=ItwftM6Ju0gjAFdROHLmZQtmwtFHkd7pa2vz9zquF6M,7853
|
|
104
104
|
boneio/core/config/package-lock.json,sha256=AeqhAJcsqGoKGJHoF_Qduy0gatmXV6nNesZwZYYrnWM,85
|
|
105
105
|
boneio/core/config/package.json,sha256=yj0WO6sFU4GCciYUBWjzvvfqrBh869doeOC2Pp5EI1Y,3
|
|
106
|
+
boneio/core/config/provenance.py,sha256=NNCxRi-mPhc8QWHhaYDgC6bW5fd4caUrK4grIDJ3cU8,4252
|
|
106
107
|
boneio/core/config/schema_converter.py,sha256=BczSQV8bnr9lSm83J5pbRXLpeeM-u_lz3dwFnUrYN-A,14896
|
|
107
108
|
boneio/core/config/secret_masking.py,sha256=SlyuJ3JPVsaE-2Ite3EwkEfACrc9cOFgZuflHc-1w_w,6608
|
|
108
109
|
boneio/core/config/yaml_compat.py,sha256=IgYpBswrJJ-rr7Psr1yQNVXIm34K-AJv8cqUXGO3BN4,1651
|
|
@@ -269,7 +270,7 @@ boneio/integration/lox_template.py,sha256=Lich2C57w0CV-BDWlivtXsdd1irUltHD2ZfdD0
|
|
|
269
270
|
boneio/migrations/__init__.py,sha256=ymImsxVT2PF3lfiqqANJSBugMT8IW9gSSUqWcDDaYrk,349
|
|
270
271
|
boneio/migrations/actions.py,sha256=9MEpjgM5avnv-AP_YrCQWbcUEMwxBsgjeWCHtu_2E3w,16899
|
|
271
272
|
boneio/migrations/runner.py,sha256=zrQitqwBeCLvd5GEWp301AK-lrvhbZ0_qcYu673Bls8,38640
|
|
272
|
-
boneio/migrations/assets/MANIFEST.sha256,sha256=
|
|
273
|
+
boneio/migrations/assets/MANIFEST.sha256,sha256=qLUleSCr1u47ziJ7wMrwtBk8jk2L5F14MT4sFBNI8D8,3780
|
|
273
274
|
boneio/migrations/assets/migrations-recovery.pem,sha256=loFxDho4uOp7pVWIOeTvi18Bp1ci2_QDkTutdkN0Sew,113
|
|
274
275
|
boneio/migrations/assets/migrations.pem,sha256=Fql8h17baOGWVblTtLqnc8waTleBBUPNpkaj4-g8DA4,113
|
|
275
276
|
boneio/migrations/assets/docker/daemon.json,sha256=8u0FxvWTShXxJXETm9wiWAT2e4yDVhzDmGj3siltJpc,96
|
|
@@ -282,6 +283,7 @@ boneio/migrations/assets/helpers/boneio-containers,sha256=4I8OgaUH5iU5j4fK17kiya
|
|
|
282
283
|
boneio/migrations/assets/helpers/boneio-helpers-heal,sha256=3_DNAtqtLL1SWgU1-PNWK7dC5-c3skxp5a-phkFeZ-Q,7089
|
|
283
284
|
boneio/migrations/assets/helpers/boneio-migrate-v2,sha256=ZDz66gKdmxqc5sfxLR1rY-g3TLQDiom4-kjfmEjzr3c,54825
|
|
284
285
|
boneio/migrations/assets/helpers/boneio-system,sha256=n5Z1KXot4scIu3z3LZbs0Y5Y-Xqdw-7D4gab8WWfP6U,24572
|
|
286
|
+
boneio/migrations/assets/issue.d/10-boneio.issue,sha256=SF03GC_moSYbRyy8a26SLTDmkDM8J2ckl6exPcd1SZw,55
|
|
285
287
|
boneio/migrations/assets/journald/journald.conf,sha256=5gE_T78RaT85EjseYVnH1yJKfIMumUciEgmA9kA5wX4,1929
|
|
286
288
|
boneio/migrations/assets/kernel/postinst-boneio-overlay,sha256=0o8ukza4gbECxC9CeOyd3wRsg9q0Rp3FvnMmdo4HTLY,2871
|
|
287
289
|
boneio/migrations/assets/modules-load.d/onewire.conf,sha256=deOYWqviFwAh3Nxw6wf_RRbOn3GQ4y3frjsOnZY6rIg,16
|
|
@@ -368,6 +370,8 @@ boneio/migrations/plans/1.6.10.json,sha256=QcOhbngZhXpLgm6UT8-095xY5xkssVGxBqOs1
|
|
|
368
370
|
boneio/migrations/plans/1.6.10.sig,sha256=4-qgEvgoWUbh5ZGEBAdlWupmeRubB0S2El8ZWvrttLM,64
|
|
369
371
|
boneio/migrations/plans/1.6.11.json,sha256=0TYgPgjjsFIlRAOBXUzO21VbCil2hv6XlS0nXrHzIus,68
|
|
370
372
|
boneio/migrations/plans/1.6.11.sig,sha256=9sXzurZBVYwt-JzyoI5vlSuCB_ld7AR4JxQS8Azm8zg,64
|
|
373
|
+
boneio/migrations/plans/1.6.12.json,sha256=_kQmuRoQoB-i67qcgYvzzLZBA_vGGD9xJQfDiSlkWFc,241
|
|
374
|
+
boneio/migrations/plans/1.6.12.sig,sha256=8Npe60FYbTUvmuVmQqfwd7VnHtYpLOx-qGrM1kLmDPs,64
|
|
371
375
|
boneio/migrations/plans/1.6.2.json,sha256=bvlrXgCgSpKdFvDkoTa_zFuBMqRm1pB6mbLIUWqJUtU,63
|
|
372
376
|
boneio/migrations/plans/1.6.2.sig,sha256=9KnV4GixPAxKeoZMOgJzhzze3OTpY4F-cxihFNpHT10,64
|
|
373
377
|
boneio/migrations/plans/1.6.3.json,sha256=XBDbgnvLkrkyLUqldRB2uCXah8bRjWlThHunIxfMqGI,178
|
|
@@ -384,8 +388,8 @@ boneio/migrations/plans/1.6.8.json,sha256=cXX4J7mcYC34BDbbWIyHJ3zlDyc0BRpEQWOwSP
|
|
|
384
388
|
boneio/migrations/plans/1.6.8.sig,sha256=fQOS_Ly_amrM_ucOCkZdjX9jn0Pe7JBnbWqTmVs9SHw,64
|
|
385
389
|
boneio/migrations/plans/1.6.9.json,sha256=cy1am80uSWomAmOmQ8eKY0bp8871tI_lmsaxIL0Duk4,540
|
|
386
390
|
boneio/migrations/plans/1.6.9.sig,sha256=s6Xj7sFKeHfBb9f9oBnYeEFDBAxFHvDzqR8LbmqOqHU,64
|
|
387
|
-
boneio/migrations/plans/manifest.json,sha256=
|
|
388
|
-
boneio/migrations/plans/manifest.sig,sha256=
|
|
391
|
+
boneio/migrations/plans/manifest.json,sha256=f751HgNcb9NOiRrdXwhw-BLhO7r5LWWNVkXWq1fE7rs,2896
|
|
392
|
+
boneio/migrations/plans/manifest.sig,sha256=k8cCPLVjf5JOofoqfME_8NyvU1fHObUNSF-z_aSPks8,64
|
|
389
393
|
boneio/migrations/versions/__init__.py,sha256=JfouqluRirihGluvLOivkL7Sz7PF4lEyiCfMnOoMLwI,53
|
|
390
394
|
boneio/migrations/versions/v1_3_0_baseline.py,sha256=wwb6MUiVsbLPwLMcvuPsdyxaEhyRmYhX8UUR2jPm56Q,6468
|
|
391
395
|
boneio/migrations/versions/v1_3_1_fix_oled_boot.py,sha256=afKamxSo-zsYrKCHr8tXiPmQqaehioEwtg4JxRp7SEU,2505
|
|
@@ -415,6 +419,7 @@ boneio/migrations/versions/v1_5_9_defer_nonessential.py,sha256=frVwXMrVpW2RZ817m
|
|
|
415
419
|
boneio/migrations/versions/v1_6_0_nodered_admin_auth.py,sha256=RWZwKNDCzQSPV_syEsuYVjwNG82BY3hpBvaV2dblYFU,2153
|
|
416
420
|
boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py,sha256=0xnfbu0Iu6Gzmkjrl4TyYhZliAEDHDSawcluWi5zIjM,1875
|
|
417
421
|
boneio/migrations/versions/v1_6_11_drop_docker_group.py,sha256=GmCN1xu9elFV1sDEGaelO75JZaPCMekQbBMcY7RDgGc,1811
|
|
422
|
+
boneio/migrations/versions/v1_6_12_console_shows_ip.py,sha256=HdRoZC62b1FD_Q8n8VZeIO5f7TaZHsi72mz09QAHG2U,2351
|
|
418
423
|
boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py,sha256=-7dTKHPB7X5rwYbuzPTWe7Fg082uLczPIeWj1dESTLs,1635
|
|
419
424
|
boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py,sha256=oOyBBsP1nv-siAVixRQcjPko86WZPW_Tv9rD6ywejU4,1733
|
|
420
425
|
boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py,sha256=3GdU_wevVUJv6fxVTRd87GoMr_sm84naWWDKWOJNVlQ,1435
|
|
@@ -494,7 +499,7 @@ boneio/schema/schema.yaml,sha256=v3kdA6itqw23Bnla1M6TstAjNVV-y6PfZk1H1vb7iGU,796
|
|
|
494
499
|
boneio/schema/temp_unit.yaml,sha256=m32VGz9RTW92Lz08l9n6RftkcVNZquOGPPr5mc3eZVc,65
|
|
495
500
|
boneio/schema/update_interval.yaml,sha256=RBuAFj1gGn89ydZkaUUP-f88utvth1Qtt5u6lau2iOc,186
|
|
496
501
|
boneio/webui/action_validation.py,sha256=LRTYziwe-TVe5gc10c4iwe4wsM0RbPF9PRVhMKImRK4,10343
|
|
497
|
-
boneio/webui/app.py,sha256=
|
|
502
|
+
boneio/webui/app.py,sha256=sY-7FzJfJNEyaW2q_0n3By4s-gLp2-OWpVz0zC_icVo,45487
|
|
498
503
|
boneio/webui/dashboard_cards.py,sha256=6vftTIoJN26UBSWgADromnGjmsnae-1wFkYXHpyWy-M,10547
|
|
499
504
|
boneio/webui/hvac_svg_templates.py,sha256=T9hVFtZtYK8fN9FtstMKZBk5QTVwOCkWDE0zH8GZJXM,8656
|
|
500
505
|
boneio/webui/modbus_card_templates.py,sha256=XMEpz4aumo5-vYctLGmp-TB2JUf8zdT_hLbsSFUWOMM,18568
|
|
@@ -677,9 +682,9 @@ boneio/webui/schema/virtual_energy_sensor.schema.json,sha256=BN6Egh-CAnXSa80bQ6Y
|
|
|
677
682
|
boneio/webui/schema/web.schema.json,sha256=SIvYzjoluAyhjZQdoHMYl2Dfyx__V5CNyuIi0oHCkBI,4406
|
|
678
683
|
boneio/webui/services/__init__.py,sha256=l_L3YUPhc0ZbrWqKH1RurC7UQ4q0k-5ABGTwOSS-YFQ,282
|
|
679
684
|
boneio/webui/services/logs.py,sha256=rKx-7jbNXNuQpuqJHtIHBCXZ3ELguDJL82RySAUT38Y,11980
|
|
680
|
-
boneio-1.6.0.
|
|
681
|
-
boneio-1.6.0.
|
|
682
|
-
boneio-1.6.0.
|
|
683
|
-
boneio-1.6.0.
|
|
684
|
-
boneio-1.6.0.
|
|
685
|
-
boneio-1.6.0.
|
|
685
|
+
boneio-1.6.0.dev4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
686
|
+
boneio-1.6.0.dev4.dist-info/METADATA,sha256=-Jd72qG5k7s725A9lb0w6JIznBSqLA_A7JD0sKLNqdw,1965
|
|
687
|
+
boneio-1.6.0.dev4.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
688
|
+
boneio-1.6.0.dev4.dist-info/entry_points.txt,sha256=JX7gluDIkQ6MBlzzxGHMItnBjciiJ73tsXwYcazMW_U,47
|
|
689
|
+
boneio-1.6.0.dev4.dist-info/top_level.txt,sha256=ag9S5n1_KXZfyk9tN8R0YUDYbdA--e5a2w2FOD_yMdg,7
|
|
690
|
+
boneio-1.6.0.dev4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|