Пример #1
0
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())