608ffd9663
Adds basic labels support to the registry code (V2), and the API. Note that this does not yet add any UI related support.
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
import logging
|
|
|
|
from sqlalchemy.types import TypeDecorator, Text, String
|
|
from sqlalchemy.dialects.mysql import TEXT as MySQLText, LONGTEXT, VARCHAR as MySQLString
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class UTF8LongText(TypeDecorator):
|
|
""" Platform-independent UTF-8 LONGTEXT type.
|
|
|
|
Uses MySQL's LongText with charset utf8mb4, otherwise uses TEXT, because
|
|
other engines default to UTF-8 and have longer TEXT fields.
|
|
"""
|
|
impl = Text
|
|
|
|
def load_dialect_impl(self, dialect):
|
|
if dialect.name == 'mysql':
|
|
return dialect.type_descriptor(LONGTEXT(charset='utf8mb4', collation='utf8mb4_unicode_ci'))
|
|
else:
|
|
return dialect.type_descriptor(Text())
|
|
|
|
|
|
class UTF8CharField(TypeDecorator):
|
|
""" Platform-independent UTF-8 Char type.
|
|
|
|
Uses MySQL's VARCHAR with charset utf8mb4, otherwise uses String, because
|
|
other engines default to UTF-8.
|
|
"""
|
|
impl = String
|
|
|
|
def load_dialect_impl(self, dialect):
|
|
if dialect.name == 'mysql':
|
|
return dialect.type_descriptor(MySQLString(charset='utf8mb4', collation='utf8mb4_unicode_ci',
|
|
length=self.impl.length))
|
|
else:
|
|
return dialect.type_descriptor(String(length=self.impl.length))
|