Source code for SDF.data_model.name
from xml.etree.ElementTree import Element
from SDF.data_model._helper_functions import pop_element_text, element_is_empty
from SDF.data_model.abstract import XMLWritable
[docs]class Name:
"""Represents an SDF <name> element"""
def __init__(self, name: str):
if not isinstance(name, str):
raise TypeError(f"Expected a string, got {type(name)}")
if "\n" in name:
raise ValueError("Name must be a single line")
if not name or name.isspace():
raise ValueError("Name cannot be empty")
if name[0].isspace() or name[-1].isspace():
raise ValueError("Name cannot start or end with whitespace")
self.__name = name
@property
def name(self):
return self.__name
def __repr__(self):
return f"{self.__class__.__name__}({self.name!r})"
def __eq__(self, other):
if isinstance(other, Name):
return self.name == other.name
return False
[docs]class NameElement(Name, XMLWritable):
def __init__(self, name: str):
super().__init__(name)
[docs] def to_xml_element(self) -> Element:
element = Element("name")
element.text = self.name
return element
[docs] @classmethod
def from_xml_element(cls, element: Element) -> "NameElement":
if element.tag != "name":
raise ValueError(f"Expected a <name> element, got {element.tag}")
text = pop_element_text(element)
if not element_is_empty(element):
raise ValueError("Element is not empty")
return cls(text.strip())