class DeclEnumType(SchemaType, TypeDecorator): """DeclEnum augmented so that it can persist to the database.""" def __init__(self, enum): self.enum = enum self.impl = ENUM(*enum.names(), name=self._sql_type_name(), create_type=True, schema="horse") # self.impl = Enum(*enum.names(), name=self._sql_type_name()) def _sql_type_name(self): return "ck%s" % re.sub('([A-Z])', lambda m: '_' + m.group(1).lower(), self.enum.__name__) def drop(self, bind=None, checkfirst=False): # print("drop "*10) z = self.impl.drop(bind, checkfirst) # print("drop "*10) return z return "DROP TYPE IF EXISTS {}".format(self._sql_type_name()) # def create(self, schema): # return "CREATE TYPE {} AS ENUM ({})".format( # schema, # ','.join([ "'{}'".format(n) for n in self.enum.names()])) def _set_table(self, table, column): self.impl._set_table(table, column) def copy(self): return DeclEnumType(self.enum) def process_bind_param(self, value, dialect): if isinstance(value, EnumSymbol): value = value.name return value def process_result_value(self, value, dialect): if value is not None: return getattr(self.enum, value.strip())