######################## # ######################## from rels import Column, Relation # Enum EnumWithText # rels.Enum rels.EnumWithText # class Enum(Relation): # name = Column(primary=True) # value = Column(external=True) # # — - # , class EnumWithText(Enum): text = Column() class SOME_CONSTANTS(Enum): # records = ( ('NAME_1', 1), # ('NAME_2', 2)) class SOME_CONSTANTS_WITH_TEXT(EnumWithText): # records = ( ('NAME_1', 1, 'constant 1'), ('NAME_2', 2, 'constant 2')) # # SOME_CONSTANTS.NAME_1.name == 'NAME_1' # True SOME_CONSTANTS.NAME_1.value == 1 # True # «» SOME_CONSTANTS(1) == SOME_CONSTANTS.NAME_1 # True # SOME_CONSTANTS.NAME_2 == SOME_CONSTANTS.NAME_2 # True SOME_CONSTANTS.NAME_2 != SOME_CONSTANTS.NAME_1 # True # SOME_CONSTANTS.NAME_2.is_NAME_1 # False SOME_CONSTANTS.NAME_2.is_NAME_2 # True # — , # SOME_CONSTANTS.NAME_2 != SOME_CONSTANTS_WITH_TEXT.NAME_2 # True SOME_CONSTANTS.NAME_1 != SOME_CONSTANTS_WITH_TEXT.NAME_1 # True # — class EXTENDED_CONSTANTS(SOME_CONSTANTS_WITH_TEXT): # records = ( ('NAME_3', 3, 'constant 3'), ) # ######################## # ######################## class ENUM(Relation): name = Column(primary=True) # .index_name value = Column(external=True) # .index_value text = Column(unique=False, index_name='by_key') # records = ( ('NAME_1', 0, 'key_1'), ('NAME_2', 1, 'key_2'), ('NAME_3', 2, 'key_2'), ) # , ENUM.index_name # {'NAME_1': ENUM.NAME_1, 'NAME_2': ENUM.NAME_2, 'NAME_3': ENUM.NAME_3} # , ENUM.by_key # {'key_1': [ENUM.NAME_1], 'key_2': [ENUM.NAME_2, ENUM.NAME_3]} ######################## # ######################## # , class DESTINATION_ENUM(Relation): name = Column(primary=True) val = Column() records = ( ('STATE_1', 'value_1'), ('STATE_2', 'value_2') ) # , class SOURCE_ENUM(Relation): name = Column(primary=True) val = Column() rel = Column(related_name='rel_source') records = ( ('STATE_1', 'value_1', DESTINATION_ENUM.STATE_1), ('STATE_2', 'value_2', DESTINATION_ENUM.STATE_2) ) # DESTINATION_ENUM.STATE_1.rel_source == SOURCE_ENUM.STATE_1 # True DESTINATION_ENUM.STATE_2 == SOURCE_ENUM.STATE_2.rel # True
Source: https://habr.com/ru/post/208066/
All Articles