Skip to content

Commit

Permalink
Add explicit error when ModelResource lacks object_class and queryset (
Browse files Browse the repository at this point in the history
…#1518)

* Add explicit error when ModelResource lacks object_class and queryset
  • Loading branch information
georgedorn committed Jul 10, 2017
1 parent c2bbd60 commit 7dedb7b
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
6 changes: 5 additions & 1 deletion tastypie/resources.py
Expand Up @@ -1781,8 +1781,12 @@ def get_multiple(self, request, **kwargs):
class ModelDeclarativeMetaclass(DeclarativeMetaclass):
def __new__(cls, name, bases, attrs):
meta = attrs.get('Meta')
# Sanity check: ModelResource needs either a queryset or object_class:
if meta and not hasattr(meta, 'queryset') and not hasattr(meta, 'object_class'):
msg = "ModelResource (%s) requires Meta.object_class or Meta.queryset"
raise ImproperlyConfigured(msg % name)

if meta and hasattr(meta, 'queryset'):
if hasattr(meta, 'queryset') and not hasattr(meta, 'object_class'):
setattr(meta, 'object_class', meta.queryset.model)

new_class = super(ModelDeclarativeMetaclass, cls).__new__(cls, name, bases, attrs)
Expand Down
14 changes: 12 additions & 2 deletions tests/core/tests/resources.py
Expand Up @@ -16,7 +16,7 @@
from django import forms
from django.contrib.auth import get_user_model
from django.core.cache import cache
from django.core.exceptions import FieldError, MultipleObjectsReturned, ObjectDoesNotExist
from django.core.exceptions import FieldError, MultipleObjectsReturned, ObjectDoesNotExist, ImproperlyConfigured
from django.core import mail
try:
from django.urls import reverse
Expand Down Expand Up @@ -1609,6 +1609,16 @@ def test_fields(self):
self.assertEqual(annr.fields['updated'].readonly, False)
self.assertEqual(annr.fields['updated'].unique, False)

def test_invalid_model_resource(self):
"""
Test error message regarding ModelResource lacking object_class and queryset.
"""
with self.assertRaises(ImproperlyConfigured) as exception_context:
class InvalidNoteResource(ModelResource):
class Meta:
resource_name = 'invalidnotes'
self.assertTrue('InvalidNoteResource' in str(exception_context.exception))

def test_fields__empty_list(self):
class EmptyFieldsNoteResource(ModelResource):
class Meta:
Expand All @@ -1627,7 +1637,7 @@ class Meta:
object_class = Note

class EmptyFieldsNoteResource(FieldsNotSpecifiedNoteResource):
class Meta:
class Meta(FieldsNotSpecifiedNoteResource.Meta):
resource_name = 'emptyfieldsnotes'
fields = []

Expand Down

0 comments on commit 7dedb7b

Please sign in to comment.