Skip to content

Commit

Permalink
Renamed nested resource to extended resource. Updated sample project.
Browse files Browse the repository at this point in the history
  • Loading branch information
dekked committed Apr 2, 2012
1 parent d70d669 commit 3af6a0c
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 13 deletions.
6 changes: 3 additions & 3 deletions example/api/resources.py
Expand Up @@ -4,10 +4,10 @@

from models import Entry

from nested_resource import WithNestedModelResource
from extended_resource import ExtendedModelResource


class UserResource(WithNestedModelResource):
class UserResource(ExtendedModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'user'
Expand All @@ -16,7 +16,7 @@ class Nested:
entries = fields.ToManyField('api.resources.EntryResource', 'entries')


class EntryResource(WithNestedModelResource):
class EntryResource(ExtendedModelResource):
user = fields.ForeignKey(UserResource, 'user')

class Meta:
Expand Down
1 change: 1 addition & 0 deletions extended_resource/__init__.py
@@ -0,0 +1 @@
from extended_resource import ExtendedModelResource
Expand Up @@ -11,9 +11,9 @@
from tastypie.utils import trailing_slash


class AnyIdAttributeResourceOptions(ResourceOptions):
class ExtendedResourceOptions(ResourceOptions):
"""
A configuration class for ``WithNestedModelResource``.
A configuration class for ``ExtendedModelResource``.
Adds the ability to use an attribute in the URLs of the resources different
than the primary key of the objects.
Expand All @@ -38,28 +38,27 @@ class AnyIdAttributeResourceOptions(ResourceOptions):
used as default.
"""
def __new__(cls, meta=None):
new_class = super(AnyIdAttributeResourceOptions, cls).__new__(cls,
meta)
new_class = super(ExtendedResourceOptions, cls).__new__(cls, meta)

new_class.url_id_attribute = getattr(new_class,
'url_id_attribute',
'pk') # Defaults to pkey
return new_class


class WithNestedDeclarativeMetaclass(ModelDeclarativeMetaclass):
class ExtendedDeclarativeMetaclass(ModelDeclarativeMetaclass):
"""
Same as ``DeclarativeMetaclass`` but uses ``AnyIdAttributeResourceOptions``
instead of ``ResourceOptions`` and adds support for multiple nested fields
defined in a "Nested" class (the same way as "Meta") inside the resources.
"""

def __new__(cls, name, bases, attrs):
new_class = super(WithNestedDeclarativeMetaclass, cls).__new__(cls,
new_class = super(ExtendedDeclarativeMetaclass, cls).__new__(cls,
name, bases, attrs)

opts = getattr(new_class, 'Meta', None)
new_class._meta = AnyIdAttributeResourceOptions(opts)
new_class._meta = ExtendedResourceOptions(opts)

# Will map nested fields names to the actual fields
nested_fields = {}
Expand All @@ -80,9 +79,9 @@ def __new__(cls, name, bases, attrs):
return new_class


class WithNestedModelResource(ModelResource):
class ExtendedModelResource(ModelResource):

__metaclass__ = WithNestedDeclarativeMetaclass
__metaclass__ = ExtendedDeclarativeMetaclass

def get_url_id_attribute_regex(self):
"""
Expand Down
1 change: 0 additions & 1 deletion nested_resource/__init__.py

This file was deleted.

0 comments on commit 3af6a0c

Please sign in to comment.