From 814855acf91d359d7e40ef96ae2a80f447c39255 Mon Sep 17 00:00:00 2001 From: Konsta Vesterinen Date: Mon, 10 Jun 2013 10:05:53 +0300 Subject: [PATCH] Added table_name utility function --- CHANGES.rst | 6 ++++++ setup.py | 2 +- sqlalchemy_utils/__init__.py | 5 ++++- sqlalchemy_utils/functions.py | 10 ++++++++++ tests/test_table_name.py | 18 ++++++++++++++++++ 5 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 tests/test_table_name.py diff --git a/CHANGES.rst b/CHANGES.rst index 8a648cd..79adb2f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,12 @@ Changelog Here you can see the full list of changes between each SQLAlchemy-Utils release. +0.13.0 (2013-06-05) +^^^^^^^^^^^^^^^^^^^ + +- Added table_name utility function. + + 0.12.5 (2013-06-05) ^^^^^^^^^^^^^^^^^^^ diff --git a/setup.py b/setup.py index 169ac49..39e9fde 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ class PyTest(Command): setup( name='SQLAlchemy-Utils', - version='0.12.5', + version='0.13.0', url='https://github.com/kvesteri/sqlalchemy-utils', license='BSD', author='Konsta Vesterinen', diff --git a/sqlalchemy_utils/__init__.py b/sqlalchemy_utils/__init__.py index f22e195..065e730 100644 --- a/sqlalchemy_utils/__init__.py +++ b/sqlalchemy_utils/__init__.py @@ -1,4 +1,6 @@ -from .functions import sort_query, defer_except, escape_like, primary_keys +from .functions import ( + sort_query, defer_except, escape_like, primary_keys, table_name +) from .listeners import coercion_listener from .merge import merge, Merger from .proxy_dict import ProxyDict, proxy_dict @@ -27,6 +29,7 @@ __all__ = ( merge, primary_keys, proxy_dict, + table_name, ColorType, EmailType, InstrumentedList, diff --git a/sqlalchemy_utils/functions.py b/sqlalchemy_utils/functions.py index 057b7ed..2425b80 100644 --- a/sqlalchemy_utils/functions.py +++ b/sqlalchemy_utils/functions.py @@ -201,3 +201,13 @@ def primary_keys(class_): for column in class_.__table__.c: if column.primary_key: yield column + + +def table_name(class_): + """ + Return table name of given declarative class. + """ + try: + return class_.__tablename__ + except AttributeError: + return class_.__table__.name diff --git a/tests/test_table_name.py b/tests/test_table_name.py new file mode 100644 index 0000000..c1eead8 --- /dev/null +++ b/tests/test_table_name.py @@ -0,0 +1,18 @@ +import sqlalchemy as sa +from sqlalchemy_utils import table_name +from tests import DatabaseTestCase + + +class TestTableName(DatabaseTestCase): + def create_models(self): + class Building(self.Base): + __tablename__ = 'building' + id = sa.Column(sa.Integer, primary_key=True) + name = sa.Column(sa.Unicode(255)) + + self.Building = Building + + def test_table_name(self): + assert table_name(self.Building) == 'building' + del self.Building.__tablename__ + assert table_name(self.Building) == 'building'