Add docs for dependencies func

This commit is contained in:
Konsta Vesterinen
2014-05-07 09:37:09 +03:00
parent f32c56a0ee
commit 472074d87a
4 changed files with 31 additions and 12 deletions

View File

@@ -4,6 +4,12 @@ Model helpers
.. module:: sqlalchemy_utils.functions .. module:: sqlalchemy_utils.functions
dependencies
^^^^^^^^^^^^
.. autofunction:: dependencies
escape_like escape_like
^^^^^^^^^^^ ^^^^^^^^^^^

View File

@@ -8,6 +8,7 @@ from .functions import (
create_mock_engine, create_mock_engine,
database_exists, database_exists,
defer_except, defer_except,
dependencies,
drop_database, drop_database,
escape_like, escape_like,
get_columns, get_columns,
@@ -74,6 +75,7 @@ __all__ = (
create_mock_engine, create_mock_engine,
database_exists, database_exists,
defer_except, defer_except,
dependencies,
drop_database, drop_database,
escape_like, escape_like,
force_auto_coercion, force_auto_coercion,

View File

@@ -12,6 +12,7 @@ from .database import (
non_indexed_foreign_keys, non_indexed_foreign_keys,
) )
from .orm import ( from .orm import (
dependencies,
get_columns, get_columns,
get_declarative_base, get_declarative_base,
get_primary_keys, get_primary_keys,

View File

@@ -27,6 +27,9 @@ def dependencies(obj, foreign_keys=None):
:: ::
from sqlalchemy_utils import dependencies
dependencies(user) dependencies(user)
@@ -37,22 +40,29 @@ def dependencies(obj, foreign_keys=None):
dependencies(user).limit(5) dependencies(user).limit(5)
The common use case is checking for all dependent objects before delete The common use case is checking for all dependent objects before deleting
operation occurs on parent object and inform the user if there are parent object and inform the user if there are dependent objects with
dependent objects with ondelete='RESTRICT' foreign keys. This can be ondelete='RESTRICT' foreign keys. If this kind of checking is not used
achieved as follows:: it will lead to nasty IntegrityErrors being raised. This can be achieved
as follows::
deps = list(
dependencies( dependencies(
user, user,
( (
fk for fk in get_referencing_foreign_keys(obj) fk for fk in get_referencing_foreign_keys(obj)
# On most databases RESTRICT is the default mode hence we check # On most databases RESTRICT is the default mode hence we
# for None values also # check for None values also
if fk.ondelete='RESTRICT' or fk.ondelete is None 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 obj: SQLAlchemy declarative model object
:param foreign_keys: :param foreign_keys: