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