1import re 2import string 3 4from .namedelement import NamedElement 5 6""" Class for parsing 'service_name' definition eleemnts from an interface. 7""" 8 9 10class ServiceName(NamedElement): 11 def __init__(self, **kwargs): 12 if "default" in kwargs: 13 kwargs["name"] = "DefaultService" 14 self.value = kwargs.pop("default") 15 else: 16 self.value = kwargs.pop("value", False) 17 18 # Validate service name format. 19 if len(self.value) == 0: 20 raise ValueError("Invalid empty service-name") 21 for s in self.value.split("."): 22 if len(s) == 0: 23 raise ValueError( 24 "Service names cannot have consecutive .:" 25 f" {self.value} {s}" 26 ) 27 if re.search("[^a-zA-Z0-9_]", s): 28 raise ValueError( 29 f"Service name contains illegal characters: {self.value}" 30 ) 31 if s[0] in string.digits: 32 raise ValueError( 33 "Service name segments may not start with a number:" 34 f" {self.value} {s}" 35 ) 36 37 super(ServiceName, self).__init__(**kwargs) 38