Source code for watson.db.meta

# -*- coding: utf-8 -*-
from sqlalchemy import Column
from sqlalchemy.ext.declarative import DeclarativeMeta
from watson.common import strings


NAME = 'sqlalchemy_declarative_base'


[docs]class _DeclarativeMeta(DeclarativeMeta): """Responsible for automatically assigning a tablename to a model. Tablenames will be pluralized. """ @staticmethod def has_primary_key(dict_): for k, v in dict_.items(): if isinstance(v, Column) and v.primary_key: return True return False def __new__(cls, classname, bases, dict_): tablename = dict_.get('__tablename__') if not tablename and not dict_.get('__table__') \ and _DeclarativeMeta.has_primary_key(dict_): dict_['__tablename__'] = strings.pluralize( strings.snakecase(classname)) return DeclarativeMeta.__new__(cls, classname, bases, dict_)