mirror of
https://github.com/esphome/esphome.git
synced 2024-11-10 01:07:45 +01:00
Disallow _ in node name (#1632)
This commit is contained in:
parent
2e50e1f506
commit
eaf9735eda
6 changed files with 18 additions and 12 deletions
|
@ -10,7 +10,8 @@ ESP_PLATFORM_ESP32 = "ESP32"
|
||||||
ESP_PLATFORM_ESP8266 = "ESP8266"
|
ESP_PLATFORM_ESP8266 = "ESP8266"
|
||||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32, ESP_PLATFORM_ESP8266]
|
ESP_PLATFORMS = [ESP_PLATFORM_ESP32, ESP_PLATFORM_ESP8266]
|
||||||
|
|
||||||
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789_-"
|
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
|
||||||
|
|
||||||
# Lookup table from ESP32 arduino framework version to latest platformio
|
# Lookup table from ESP32 arduino framework version to latest platformio
|
||||||
# package with that version
|
# package with that version
|
||||||
# See also https://github.com/platformio/platform-espressif32/releases
|
# See also https://github.com/platformio/platform-espressif32/releases
|
||||||
|
|
|
@ -1012,6 +1012,10 @@ jQuery.validator.addMethod("nospaces", (value, element) => {
|
||||||
return value.indexOf(' ') < 0;
|
return value.indexOf(' ') < 0;
|
||||||
}, "Name cannot contain any spaces!");
|
}, "Name cannot contain any spaces!");
|
||||||
|
|
||||||
|
jQuery.validator.addMethod("nounderscores", (value, element) => {
|
||||||
|
return value.indexOf('_') < 0;
|
||||||
|
}, "Name cannot contain underscores!");
|
||||||
|
|
||||||
jQuery.validator.addMethod("lowercase", (value, element) => {
|
jQuery.validator.addMethod("lowercase", (value, element) => {
|
||||||
return value === value.toLowerCase();
|
return value === value.toLowerCase();
|
||||||
}, "Name must be all lower case!");
|
}, "Name must be all lower case!");
|
||||||
|
|
|
@ -359,12 +359,12 @@
|
||||||
<p>
|
<p>
|
||||||
Names must be all <strong>lowercase</strong> and <strong>must not contain any spaces</strong>!
|
Names must be all <strong>lowercase</strong> and <strong>must not contain any spaces</strong>!
|
||||||
Characters that are allowed are: <code class="inlinecode">a-z</code>,
|
Characters that are allowed are: <code class="inlinecode">a-z</code>,
|
||||||
<code class="inlinecode">0-9</code>, <code class="inlinecode">_</code> and <code class="inlinecode">-</code>.
|
<code class="inlinecode">0-9</code> and <code class="inlinecode">-</code>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="input-field col s12">
|
<div class="input-field col s12">
|
||||||
<input id="node_name" class="validate" type="text" name="name" data-rule-nospaces="true"
|
<input id="node_name" class="validate" type="text" name="name" data-rule-nospaces="true"
|
||||||
data-rule-lowercase="true" required>
|
data-rule-lowercase="true" data-rule-nounderscores="true" required>
|
||||||
<label for="node_name">Node Name</label>
|
<label for="node_name">Node Name</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -196,11 +196,11 @@ def wizard(path):
|
||||||
color(
|
color(
|
||||||
Fore.RED,
|
Fore.RED,
|
||||||
f'Oh noes, "{name}" isn\'t a valid name. Names can only '
|
f'Oh noes, "{name}" isn\'t a valid name. Names can only '
|
||||||
f"include numbers, lower-case letters, underscores and "
|
f"include numbers, lower-case letters and hyphens. ",
|
||||||
f"hyphens.",
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
name = strip_accents(name).lower().replace(" ", "_")
|
name = strip_accents(name).lower().replace(" ", "-")
|
||||||
|
name = strip_accents(name).lower().replace("_", "-")
|
||||||
name = "".join(c for c in name if c in ALLOWED_NAME_CHARS)
|
name = "".join(c for c in name if c in ALLOWED_NAME_CHARS)
|
||||||
safe_print(
|
safe_print(
|
||||||
'Shall I use "{}" as the name instead?'.format(color(Fore.CYAN, name))
|
'Shall I use "{}" as the name instead?'.format(color(Fore.CYAN, name))
|
||||||
|
|
|
@ -27,7 +27,7 @@ def test_alphanumeric__invalid(value):
|
||||||
config_validation.alphanumeric(value)
|
config_validation.alphanumeric(value)
|
||||||
|
|
||||||
|
|
||||||
@given(value=text(alphabet=string.ascii_lowercase + string.digits + "_-"))
|
@given(value=text(alphabet=string.ascii_lowercase + string.digits + "-_"))
|
||||||
def test_valid_name__valid(value):
|
def test_valid_name__valid(value):
|
||||||
actual = config_validation.valid_name(value)
|
actual = config_validation.valid_name(value)
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ from mock import MagicMock
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def default_config():
|
def default_config():
|
||||||
return {
|
return {
|
||||||
"name": "test_name",
|
"name": "test-name",
|
||||||
"platform": "test_platform",
|
"platform": "test_platform",
|
||||||
"board": "test_board",
|
"board": "test_board",
|
||||||
"ssid": "test_ssid",
|
"ssid": "test_ssid",
|
||||||
|
@ -21,7 +21,7 @@ def default_config():
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def wizard_answers():
|
def wizard_answers():
|
||||||
return [
|
return [
|
||||||
"test_node", # Name of the node
|
"test-node", # Name of the node
|
||||||
"ESP8266", # platform
|
"ESP8266", # platform
|
||||||
"nodemcuv2", # board
|
"nodemcuv2", # board
|
||||||
"SSID", # ssid
|
"SSID", # ssid
|
||||||
|
@ -305,13 +305,14 @@ def test_wizard_offers_better_node_name(tmpdir, monkeypatch, wizard_answers):
|
||||||
"""
|
"""
|
||||||
When the node name does not conform, a better alternative is offered
|
When the node name does not conform, a better alternative is offered
|
||||||
* Removes special chars
|
* Removes special chars
|
||||||
* Replaces spaces with underscores
|
* Replaces spaces with hyphens
|
||||||
|
* Replaces underscores with hyphens
|
||||||
* Converts all uppercase letters to lowercase
|
* Converts all uppercase letters to lowercase
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Given
|
# Given
|
||||||
wizard_answers[0] = "Küche #2"
|
wizard_answers[0] = "Küche_Unten #2"
|
||||||
expected_name = "kuche_2"
|
expected_name = "kuche-unten-2"
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
wz, "default_input", MagicMock(side_effect=lambda _, default: default)
|
wz, "default_input", MagicMock(side_effect=lambda _, default: default)
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue