Disallow _ in node name (#1632)

This commit is contained in:
Peter Kuehne 2021-04-08 13:26:01 +01:00 committed by GitHub
parent 2e50e1f506
commit eaf9735eda
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 18 additions and 12 deletions

View file

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

View file

@ -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!");

View file

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

View file

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

View file

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

View file

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