Skip to content

Commit

Permalink
Turn the manager inheritance error into a warning.
Browse files Browse the repository at this point in the history
Not all projects have queryset issues, for example the class could be a
leaf that doesn't get inherited further.

  class PolymorphicModel
    class ContentItem
      class TextItem   <-- gets error, but it's the leaf anyway.
  • Loading branch information
vdboor committed Feb 5, 2018
1 parent f898f80 commit 852ecf6
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions polymorphic/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
DUMPDATA_COMMAND = os.path.join('django', 'core', 'management', 'commands', 'dumpdata.py')


class ManagerInheritanceWarning(RuntimeWarning):
pass


###################################################################################
# PolymorphicModel meta class

Expand Down Expand Up @@ -142,13 +146,16 @@ def validate_model_manager(self, manager, model_name, manager_name):
else:
extra = ''
e = ('PolymorphicModel: "{0}.{1}" manager is of type "{2}", but must be a subclass of'
' PolymorphicManager.{extra}'.format(
' PolymorphicManager.{extra} to support retrieving subclasses'.format(
model_name, manager_name, type(manager).__name__, extra=extra))
raise ImproperlyConfigured(e)
warnings.warn(e, ManagerInheritanceWarning, stacklevel=3)
return manager

if not getattr(manager, 'queryset_class', None) or not issubclass(manager.queryset_class, PolymorphicQuerySet):
e = ('PolymorphicModel: "{0}.{1}" (PolymorphicManager) has been instantiated with a queryset class '
'which is not a subclass of PolymorphicQuerySet (which is required)'.format(model_name, manager_name))
raise ImproperlyConfigured(e)
e = ('PolymorphicModel: "{0}.{1}" has been instantiated with a queryset class '
'which is not a subclass of PolymorphicQuerySet (which is required)'.format(
model_name, manager_name))
warnings.warn(e, ManagerInheritanceWarning, stacklevel=3)
return manager

@property
Expand Down Expand Up @@ -187,6 +194,6 @@ def _default_manager(self):
if not isinstance(manager, PolymorphicManager):
warnings.warn("{0}._default_manager is not a PolymorphicManager".format(
self.__class__.__name__
), RuntimeWarning)
), ManagerInheritanceWarning)

return manager

0 comments on commit 852ecf6

Please sign in to comment.