38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
import re
|
|
from iottb import definitions
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def normalize_string(s, chars_to_replace=None, replacement=None, allow_unicode=False):
|
|
pass
|
|
|
|
|
|
def make_canonical_name(name):
|
|
"""
|
|
Normalize the device name to a canonical form:
|
|
- Replace the first two occurrences of spaces
|
|
- transform characters with dashes.
|
|
- Remove remaining spaces.
|
|
- Convert to lowercase.
|
|
"""
|
|
aliases = [name]
|
|
# We first normalize
|
|
chars_to_replace = definitions.REPLACEMENT_SET_CANONICAL_DEVICE_NAMES
|
|
pattern = re.compile('|'.join(re.escape(char) for char in chars_to_replace))
|
|
norm_name = pattern.sub('-', name)
|
|
# Remove non ascii chars
|
|
norm_name = re.sub(r'[^\x00-\x7F]+', '', norm_name)
|
|
|
|
aliases.append(norm_name)
|
|
# Lower case
|
|
norm_name = norm_name.lower()
|
|
aliases.append(norm_name)
|
|
# canoncial name is only first two tokens
|
|
parts = norm_name.split('-')
|
|
canonical_name = canonical_name = '-'.join(parts[:2])
|
|
aliases.append(canonical_name)
|
|
aliases = list(set(aliases))
|
|
return canonical_name, aliases
|