From 472074d87ab71439be522230f283b0043a43cfbf Mon Sep 17 00:00:00 2001 From: Konsta Vesterinen Date: Wed, 7 May 2014 09:37:09 +0300 Subject: [PATCH] Add docs for dependencies func --- docs/model_helpers.rst | 6 +++++ sqlalchemy_utils/__init__.py | 2 ++ sqlalchemy_utils/functions/__init__.py | 1 + sqlalchemy_utils/functions/orm.py | 34 +++++++++++++++++--------- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/docs/model_helpers.rst b/docs/model_helpers.rst index 61f535a..138dc29 100644 --- a/docs/model_helpers.rst +++ b/docs/model_helpers.rst @@ -4,6 +4,12 @@ Model helpers .. module:: sqlalchemy_utils.functions +dependencies +^^^^^^^^^^^^ + +.. autofunction:: dependencies + + escape_like ^^^^^^^^^^^ diff --git a/sqlalchemy_utils/__init__.py b/sqlalchemy_utils/__init__.py index c310539..2907d94 100644 --- a/sqlalchemy_utils/__init__.py +++ b/sqlalchemy_utils/__init__.py @@ -8,6 +8,7 @@ from .functions import ( create_mock_engine, database_exists, defer_except, + dependencies, drop_database, escape_like, get_columns, @@ -74,6 +75,7 @@ __all__ = ( create_mock_engine, database_exists, defer_except, + dependencies, drop_database, escape_like, force_auto_coercion, diff --git a/sqlalchemy_utils/functions/__init__.py b/sqlalchemy_utils/functions/__init__.py index b62ad46..f68245f 100644 --- a/sqlalchemy_utils/functions/__init__.py +++ b/sqlalchemy_utils/functions/__init__.py @@ -12,6 +12,7 @@ from .database import ( non_indexed_foreign_keys, ) from .orm import ( + dependencies, get_columns, get_declarative_base, get_primary_keys, diff --git a/sqlalchemy_utils/functions/orm.py b/sqlalchemy_utils/functions/orm.py index 26c8f2f..ddd3cc4 100644 --- a/sqlalchemy_utils/functions/orm.py +++ b/sqlalchemy_utils/functions/orm.py @@ -27,6 +27,9 @@ def dependencies(obj, foreign_keys=None): :: + from sqlalchemy_utils import dependencies + + dependencies(user) @@ -37,22 +40,29 @@ def dependencies(obj, foreign_keys=None): dependencies(user).limit(5) - The common use case is checking for all dependent objects before delete - operation occurs on parent object and inform the user if there are - dependent objects with ondelete='RESTRICT' foreign keys. This can be - achieved as follows:: + The common use case is checking for all dependent objects before deleting + parent object and inform the user if there are dependent objects with + ondelete='RESTRICT' foreign keys. If this kind of checking is not used + it will lead to nasty IntegrityErrors being raised. This can be achieved + as follows:: - dependencies( - user, - ( - fk for fk in get_referencing_foreign_keys(obj) - # On most databases RESTRICT is the default mode hence we check - # for None values also - if fk.ondelete='RESTRICT' or fk.ondelete is None - ) + deps = list( + dependencies( + user, + ( + fk for fk in get_referencing_foreign_keys(obj) + # On most databases RESTRICT is the default mode hence we + # check for None values also + if fk.ondelete='RESTRICT' or fk.ondelete is None + ) + ).limit(5) ) + if deps: + # Do something to inform the user + pass + :param obj: SQLAlchemy declarative model object :param foreign_keys: