Source code for aequilibrae.project.network.link_type

import string
from .safe_class import SafeClass
from aequilibrae.utils.db_utils import commit_and_close


[docs] class LinkType(SafeClass): """A link_type object represents a single record in the *link_types* table""" __alowed_characters = string.ascii_letters + "_"
[docs] def delete(self): with commit_and_close(self.connect_db()) as conn: conn.execute(f'DELETE FROM link_types where link_type_id="{self.link_type_id}"') del self
[docs] def save(self): conn = self.connect_db() try: sql = f'select count(*) from link_types where link_type_id="{self.link_type_id}"' if conn.execute(sql).fetchone()[0] == 0: data = [self.link_type_id, self.link_type] conn.execute("Insert into link_types (link_type_id, link_type) values(?,?)", data) for key, value in self.__dict__.items(): if key != "link_type_id" and key in self.__original__: v_old = self.__original__.get(key, None) if value != v_old and value is not None: self.__original__[key] = value conn.execute( f"update 'link_types' set '{key}'=? where link_type_id='{self.link_type_id}'", [value] ) finally: conn.commit() conn.close()
def __setattr__(self, instance, value) -> None: if instance == "link_type": if isinstance(value, str): if not len(value): raise ValueError("link_type cannot be zero-length") for letter in value: if letter not in self.__alowed_characters: raise ValueError('link_type can only contain letters and "_"') else: raise ValueError("link_type must be string") if instance == "link_type_id": raise ValueError("Changing a link_type_id is not supported. Create a new one and delete this") else: self.__dict__[instance] = value