diff --git a/ietf/api/__init__.py b/ietf/api/__init__.py
index e568c48e5..958a14ff1 100644
--- a/ietf/api/__init__.py
+++ b/ietf/api/__init__.py
@@ -5,9 +5,11 @@ import datetime
from django.conf import settings
from django.http import HttpResponse
from django.core.urlresolvers import reverse
+from django.utils.encoding import force_text
from tastypie.api import Api
-from tastypie.serializers import Serializer
+from tastypie.bundle import Bundle
+from tastypie.serializers import Serializer as BaseSerializer
from tastypie.exceptions import BadRequest, ApiFieldError
from tastypie.utils.mime import determine_format, build_content_type
from tastypie.utils import is_valid_jsonp_callback_value
@@ -17,6 +19,58 @@ import debug # pyflakes:ignore
_api_list = []
+class Serializer(BaseSerializer):
+ def to_html(self, data, options=None):
+ """
+ Reserved for future usage.
+
+ The desire is to provide HTML output of a resource, making an API
+ available to a browser. This is on the TODO list but not currently
+ implemented.
+ """
+ from django.template.loader import render_to_string as render
+
+ options = options or {}
+
+ serialized = self.to_simple_html(data, options)
+ return render("api/base.html", {"data": serialized})
+
+ def to_simple_html(self, data, options):
+ """
+ """
+ from django.template.loader import render_to_string as render
+ #
+ if isinstance(data, (list, tuple)):
+ return render("api/listitem.html", {"data": [self.to_simple_html(item, options) for item in data]})
+ if isinstance(data, dict):
+ return render("api/dictitem.html", {"data": dict((key, self.to_simple_html(val, options)) for (key, val) in data.items())})
+ elif isinstance(data, Bundle):
+ return render("api/dictitem.html", {"data":dict((key, self.to_simple_html(val, options)) for (key, val) in data.data.items())})
+ elif hasattr(data, 'dehydrated_type'):
+ debug.show('data')
+ if getattr(data, 'dehydrated_type', None) == 'related' and data.is_m2m == False:
+ return render("api/relitem.html", {"fk": data.fk_resource, "val": self.to_simple_html(data.value, options)})
+ elif getattr(data, 'dehydrated_type', None) == 'related' and data.is_m2m == True:
+ render("api/listitem.html", {"data": [self.to_simple_html(bundle, options) for bundle in data.m2m_bundles]})
+ else:
+ return self.to_simple_html(data.value, options)
+ elif isinstance(data, datetime.datetime):
+ return self.format_datetime(data)
+ elif isinstance(data, datetime.date):
+ return self.format_date(data)
+ elif isinstance(data, datetime.time):
+ return self.format_time(data)
+ elif isinstance(data, bool):
+ return data
+ elif isinstance(data, (six.integer_types, float)):
+ return data
+ elif data is None:
+ return None
+ elif isinstance(data, basestring) and data.startswith("/api/v1/"): # XXX Will not work for Python 3
+ return render("api/relitem.html", {"fk": data, "val": data.split('/')[-2]})
+ else:
+ return force_text(data)
+
for _app in settings.INSTALLED_APPS:
_module_dict = globals()
if '.' in _app:
@@ -119,4 +173,4 @@ class TimedeltaField(ApiField):
return value
-
\ No newline at end of file
+
diff --git a/ietf/api/management/commands/makeresources.py b/ietf/api/management/commands/makeresources.py
index e3dacabec..9997a69ba 100644
--- a/ietf/api/management/commands/makeresources.py
+++ b/ietf/api/management/commands/makeresources.py
@@ -32,6 +32,7 @@ class {{model.name}}Resource(ModelResource):{% if model.foreign_keys %}{% for fk
{{fk.name|ljust:"16"}} = ToManyField({{fk.rmodel_name}}, '{{fk.name}}', null=True){% endfor %}{% endif %}
class Meta:
queryset = {{model.name}}.objects.all()
+ serializer = api.Serializer()
#resource_name = '{{model.resource_name}}'
filtering = { {% for name in model.plain_names %}
"{{ name }}": ALL,{%endfor%}{% for name in model.fk_names%}
diff --git a/ietf/api/templates/api/base.html b/ietf/api/templates/api/base.html
new file mode 100644
index 000000000..a08032084
--- /dev/null
+++ b/ietf/api/templates/api/base.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+ {% block content %}{{data}}{% endblock %}
+
+
+
+
diff --git a/ietf/api/templates/api/dictitem.html b/ietf/api/templates/api/dictitem.html
new file mode 100644
index 000000000..49b08ac2b
--- /dev/null
+++ b/ietf/api/templates/api/dictitem.html
@@ -0,0 +1,8 @@
+{
+
+
+{% for key, value in data.items %}
+"{{key}}": {{value}}{% if not forloop.last %},{% endif %}
+{% endfor %}
+
+}
diff --git a/ietf/api/templates/api/listitem.html b/ietf/api/templates/api/listitem.html
new file mode 100644
index 000000000..996513e9f
--- /dev/null
+++ b/ietf/api/templates/api/listitem.html
@@ -0,0 +1,8 @@
+[
+
+
+{% for item in data %}
+{{item}}{% if not forloop.last %},{% endif %}
+{% endfor %}
+
+]
diff --git a/ietf/api/templates/api/relitem.html b/ietf/api/templates/api/relitem.html
new file mode 100644
index 000000000..83a79d39b
--- /dev/null
+++ b/ietf/api/templates/api/relitem.html
@@ -0,0 +1,2 @@
+
+{{val}}
diff --git a/ietf/community/resources.py b/ietf/community/resources.py
index 1c86dc2b1..03a73d835 100644
--- a/ietf/community/resources.py
+++ b/ietf/community/resources.py
@@ -17,6 +17,7 @@ class CommunityListResource(ModelResource):
added_ids = ToManyField(DocumentResource, 'added_ids', null=True)
class Meta:
queryset = CommunityList.objects.all()
+ serializer = api.Serializer()
#resource_name = 'communitylist'
filtering = {
"id": ALL,
@@ -34,6 +35,7 @@ class ExpectedChangeResource(ModelResource):
document = ToOneField(DocumentResource, 'document')
class Meta:
queryset = ExpectedChange.objects.all()
+ serializer = api.Serializer()
#resource_name = 'expectedchange'
filtering = {
"id": ALL,
@@ -47,6 +49,7 @@ class DisplayConfigurationResource(ModelResource):
community_list = ToOneField(CommunityListResource, 'community_list')
class Meta:
queryset = DisplayConfiguration.objects.all()
+ serializer = api.Serializer()
#resource_name = 'displayconfiguration'
filtering = {
"id": ALL,
@@ -61,6 +64,7 @@ class ListNotificationResource(ModelResource):
event = ToOneField(DocEventResource, 'event')
class Meta:
queryset = ListNotification.objects.all()
+ serializer = api.Serializer()
#resource_name = 'listnotification'
filtering = {
"id": ALL,
@@ -75,6 +79,7 @@ class RuleResource(ModelResource):
cached_ids = ToManyField(DocumentResource, 'cached_ids', null=True)
class Meta:
queryset = Rule.objects.all()
+ serializer = api.Serializer()
#resource_name = 'rule'
filtering = {
"id": ALL,
@@ -90,6 +95,7 @@ class EmailSubscriptionResource(ModelResource):
community_list = ToOneField(CommunityListResource, 'community_list')
class Meta:
queryset = EmailSubscription.objects.all()
+ serializer = api.Serializer()
#resource_name = 'emailsubscription'
filtering = {
"id": ALL,
@@ -104,6 +110,7 @@ class DocumentChangeDatesResource(ModelResource):
document = ToOneField(DocumentResource, 'document')
class Meta:
queryset = DocumentChangeDates.objects.all()
+ serializer = api.Serializer()
#resource_name = 'documentchangedates'
filtering = {
"id": ALL,
diff --git a/ietf/dbtemplate/resources.py b/ietf/dbtemplate/resources.py
index e8bcc790e..1d03cc21f 100644
--- a/ietf/dbtemplate/resources.py
+++ b/ietf/dbtemplate/resources.py
@@ -15,6 +15,7 @@ class DBTemplateResource(ModelResource):
group = ToOneField(GroupResource, 'group', null=True)
class Meta:
queryset = DBTemplate.objects.all()
+ serializer = api.Serializer()
#resource_name = 'dbtemplate'
filtering = {
"id": ALL,
diff --git a/ietf/doc/resources.py b/ietf/doc/resources.py
index 35e837c15..96641e8b4 100644
--- a/ietf/doc/resources.py
+++ b/ietf/doc/resources.py
@@ -14,6 +14,7 @@ class BallotTypeResource(ModelResource):
positions = ToManyField(BallotPositionNameResource, 'positions', null=True)
class Meta:
queryset = BallotType.objects.all()
+ serializer = api.Serializer()
#resource_name = 'ballottype'
filtering = {
"id": ALL,
@@ -34,6 +35,7 @@ class DeletedEventResource(ModelResource):
by = ToOneField(PersonResource, 'by')
class Meta:
queryset = DeletedEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'deletedevent'
filtering = {
"id": ALL,
@@ -47,6 +49,7 @@ api.doc.register(DeletedEventResource())
class StateTypeResource(ModelResource):
class Meta:
queryset = StateType.objects.all()
+ serializer = api.Serializer()
#resource_name = 'statetype'
filtering = {
"slug": ALL,
@@ -59,6 +62,7 @@ class StateResource(ModelResource):
next_states = ToManyField('ietf.doc.resources.StateResource', 'next_states', null=True)
class Meta:
queryset = State.objects.all()
+ serializer = api.Serializer()
#resource_name = 'state'
filtering = {
"id": ALL,
@@ -89,6 +93,7 @@ class DocumentResource(ModelResource):
rfc = CharField(attribute='rfc_number', null=True)
class Meta:
queryset = Document.objects.all()
+ serializer = api.Serializer()
#resource_name = 'document'
filtering = {
"time": ALL,
@@ -122,6 +127,7 @@ class DocumentAuthorResource(ModelResource):
author = ToOneField(EmailResource, 'author')
class Meta:
queryset = DocumentAuthor.objects.all()
+ serializer = api.Serializer()
#resource_name = 'documentauthor'
filtering = {
"id": ALL,
@@ -137,6 +143,7 @@ class DocEventResource(ModelResource):
doc = ToOneField(DocumentResource, 'doc')
class Meta:
queryset = DocEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'docevent'
filtering = {
"id": ALL,
@@ -157,6 +164,7 @@ class StateDocEventResource(ModelResource):
state = ToOneField(StateResource, 'state', null=True)
class Meta:
queryset = StateDocEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'statedocevent'
filtering = {
"id": ALL,
@@ -178,6 +186,7 @@ class ConsensusDocEventResource(ModelResource):
docevent_ptr = ToOneField(DocEventResource, 'docevent_ptr')
class Meta:
queryset = ConsensusDocEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'consensusdocevent'
filtering = {
"id": ALL,
@@ -195,6 +204,7 @@ class DocAliasResource(ModelResource):
document = ToOneField(DocumentResource, 'document')
class Meta:
queryset = DocAlias.objects.all()
+ serializer = api.Serializer()
#resource_name = 'docalias'
filtering = {
"id": ALL,
@@ -210,6 +220,7 @@ class TelechatDocEventResource(ModelResource):
docevent_ptr = ToOneField(DocEventResource, 'docevent_ptr')
class Meta:
queryset = TelechatDocEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'telechatdocevent'
filtering = {
"id": ALL,
@@ -230,6 +241,7 @@ class DocReminderResource(ModelResource):
type = ToOneField(DocReminderTypeNameResource, 'type')
class Meta:
queryset = DocReminder.objects.all()
+ serializer = api.Serializer()
#resource_name = 'docreminder'
filtering = {
"id": ALL,
@@ -247,6 +259,7 @@ class LastCallDocEventResource(ModelResource):
docevent_ptr = ToOneField(DocEventResource, 'docevent_ptr')
class Meta:
queryset = LastCallDocEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'lastcalldocevent'
filtering = {
"id": ALL,
@@ -267,6 +280,7 @@ class NewRevisionDocEventResource(ModelResource):
docevent_ptr = ToOneField(DocEventResource, 'docevent_ptr')
class Meta:
queryset = NewRevisionDocEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'newrevisiondocevent'
filtering = {
"id": ALL,
@@ -287,6 +301,7 @@ class WriteupDocEventResource(ModelResource):
docevent_ptr = ToOneField(DocEventResource, 'docevent_ptr')
class Meta:
queryset = WriteupDocEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'writeupdocevent'
filtering = {
"id": ALL,
@@ -307,6 +322,7 @@ class InitialReviewDocEventResource(ModelResource):
docevent_ptr = ToOneField(DocEventResource, 'docevent_ptr')
class Meta:
queryset = InitialReviewDocEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'initialreviewdocevent'
filtering = {
"id": ALL,
@@ -328,6 +344,7 @@ class BallotDocEventResource(ModelResource):
ballot_type = ToOneField(BallotTypeResource, 'ballot_type')
class Meta:
queryset = BallotDocEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'ballotdocevent'
filtering = {
"id": ALL,
@@ -348,6 +365,7 @@ class RelatedDocumentResource(ModelResource):
relationship = ToOneField(DocRelationshipNameResource, 'relationship')
class Meta:
queryset = RelatedDocument.objects.all()
+ serializer = api.Serializer()
#resource_name = 'relateddocument'
filtering = {
"id": ALL,
@@ -375,6 +393,7 @@ class DocHistoryResource(ModelResource):
authors = ToManyField(EmailResource, 'authors', null=True)
class Meta:
queryset = DocHistory.objects.all()
+ serializer = api.Serializer()
#resource_name = 'dochistory'
filtering = {
"id": ALL,
@@ -416,6 +435,7 @@ class BallotPositionDocEventResource(ModelResource):
pos = ToOneField(BallotPositionNameResource, 'pos')
class Meta:
queryset = BallotPositionDocEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'ballotpositiondocevent'
filtering = {
"id": ALL,
@@ -441,6 +461,7 @@ class DocHistoryAuthorResource(ModelResource):
author = ToOneField(EmailResource, 'author')
class Meta:
queryset = DocHistoryAuthor.objects.all()
+ serializer = api.Serializer()
#resource_name = 'dochistoryauthor'
filtering = {
"id": ALL,
@@ -457,6 +478,7 @@ class RelatedDocHistoryResource(ModelResource):
relationship = ToOneField(DocRelationshipNameResource, 'relationship')
class Meta:
queryset = RelatedDocHistory.objects.all()
+ serializer = api.Serializer()
#resource_name = 'relateddochistory'
filtering = {
"id": ALL,
diff --git a/ietf/group/resources.py b/ietf/group/resources.py
index 93112c34d..04f8090c5 100644
--- a/ietf/group/resources.py
+++ b/ietf/group/resources.py
@@ -20,6 +20,7 @@ class GroupResource(ModelResource):
unused_tags = ToManyField(DocTagNameResource, 'unused_tags', null=True)
class Meta:
queryset = Group.objects.all()
+ serializer = api.Serializer()
#resource_name = 'group'
filtering = {
"id": ALL,
@@ -47,6 +48,7 @@ class GroupStateTransitionsResource(ModelResource):
next_states = ToManyField('ietf.doc.resources.StateResource', 'next_states', null=True)
class Meta:
queryset = GroupStateTransitions.objects.all()
+ serializer = api.Serializer()
#resource_name = 'groupstatetransitions'
filtering = {
"id": ALL,
@@ -63,6 +65,7 @@ class GroupMilestoneResource(ModelResource):
docs = ToManyField('ietf.doc.resources.DocumentResource', 'docs', null=True)
class Meta:
queryset = GroupMilestone.objects.all()
+ serializer = api.Serializer()
#resource_name = 'groupmilestone'
filtering = {
"id": ALL,
@@ -88,6 +91,7 @@ class GroupHistoryResource(ModelResource):
unused_tags = ToManyField(DocTagNameResource, 'unused_tags', null=True)
class Meta:
queryset = GroupHistory.objects.all()
+ serializer = api.Serializer()
#resource_name = 'grouphistory'
filtering = {
"id": ALL,
@@ -113,6 +117,7 @@ class GroupURLResource(ModelResource):
group = ToOneField(GroupResource, 'group')
class Meta:
queryset = GroupURL.objects.all()
+ serializer = api.Serializer()
#resource_name = 'groupurl'
filtering = {
"id": ALL,
@@ -131,6 +136,7 @@ class RoleResource(ModelResource):
email = ToOneField(EmailResource, 'email')
class Meta:
queryset = Role.objects.all()
+ serializer = api.Serializer()
#resource_name = 'role'
filtering = {
"id": ALL,
@@ -147,6 +153,7 @@ class GroupEventResource(ModelResource):
by = ToOneField(PersonResource, 'by')
class Meta:
queryset = GroupEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'groupevent'
filtering = {
"id": ALL,
@@ -167,6 +174,7 @@ class RoleHistoryResource(ModelResource):
email = ToOneField(EmailResource, 'email')
class Meta:
queryset = RoleHistory.objects.all()
+ serializer = api.Serializer()
#resource_name = 'rolehistory'
filtering = {
"id": ALL,
@@ -185,6 +193,7 @@ class GroupMilestoneHistoryResource(ModelResource):
docs = ToManyField('ietf.doc.resources.DocumentResource', 'docs', null=True)
class Meta:
queryset = GroupMilestoneHistory.objects.all()
+ serializer = api.Serializer()
#resource_name = 'groupmilestonehistory'
filtering = {
"id": ALL,
@@ -207,6 +216,7 @@ class MilestoneGroupEventResource(ModelResource):
milestone = ToOneField(GroupMilestoneResource, 'milestone')
class Meta:
queryset = MilestoneGroupEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'milestonegroupevent'
filtering = {
"id": ALL,
@@ -229,6 +239,7 @@ class ChangeStateGroupEventResource(ModelResource):
state = ToOneField(GroupStateNameResource, 'state')
class Meta:
queryset = ChangeStateGroupEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'changestategroupevent'
filtering = {
"id": ALL,
diff --git a/ietf/iesg/resources.py b/ietf/iesg/resources.py
index 1832f60fc..90e58ee09 100644
--- a/ietf/iesg/resources.py
+++ b/ietf/iesg/resources.py
@@ -10,6 +10,7 @@ from ietf.iesg.models import * # pyflakes:ignore
class TelechatDateResource(ModelResource):
class Meta:
queryset = TelechatDate.objects.all()
+ serializer = api.Serializer()
#resource_name = 'telechatdate'
filtering = {
"id": ALL,
@@ -20,6 +21,7 @@ api.iesg.register(TelechatDateResource())
class TelechatResource(ModelResource):
class Meta:
queryset = Telechat.objects.all()
+ serializer = api.Serializer()
#resource_name = 'telechat'
filtering = {
"telechat_id": ALL,
@@ -36,6 +38,7 @@ api.iesg.register(TelechatResource())
class TelechatAgendaItemResource(ModelResource):
class Meta:
queryset = TelechatAgendaItem.objects.all()
+ serializer = api.Serializer()
#resource_name = 'telechatagendaitem'
filtering = {
"id": ALL,
diff --git a/ietf/ipr/resources.py b/ietf/ipr/resources.py
index 17abbb196..02b88b124 100644
--- a/ietf/ipr/resources.py
+++ b/ietf/ipr/resources.py
@@ -18,6 +18,7 @@ class IprDisclosureBaseResource(ModelResource):
rel = ToManyField('ietf.ipr.resources.IprDisclosureBaseResource', 'rel', null=True)
class Meta:
queryset = IprDisclosureBase.objects.all()
+ serializer = api.Serializer()
#resource_name = 'iprdisclosurebase'
filtering = {
"id": ALL,
@@ -42,6 +43,7 @@ class IprDocRelResource(ModelResource):
document = ToOneField(DocAliasResource, 'document')
class Meta:
queryset = IprDocRel.objects.all()
+ serializer = api.Serializer()
#resource_name = 'iprdocrel'
filtering = {
"id": ALL,
@@ -64,6 +66,7 @@ class HolderIprDisclosureResource(ModelResource):
rel = ToManyField(IprDisclosureBaseResource, 'rel', null=True)
class Meta:
queryset = HolderIprDisclosure.objects.all()
+ serializer = api.Serializer()
#resource_name = 'holderiprdisclosure'
filtering = {
"id": ALL,
@@ -105,6 +108,7 @@ class ThirdPartyIprDisclosureResource(ModelResource):
rel = ToManyField(IprDisclosureBaseResource, 'rel', null=True)
class Meta:
queryset = ThirdPartyIprDisclosure.objects.all()
+ serializer = api.Serializer()
#resource_name = 'thirdpartyiprdisclosure'
filtering = {
"id": ALL,
@@ -136,6 +140,7 @@ class RelatedIprResource(ModelResource):
relationship = ToOneField(DocRelationshipNameResource, 'relationship')
class Meta:
queryset = RelatedIpr.objects.all()
+ serializer = api.Serializer()
#resource_name = 'relatedipr'
filtering = {
"id": ALL,
@@ -156,6 +161,7 @@ class NonDocSpecificIprDisclosureResource(ModelResource):
rel = ToManyField(IprDisclosureBaseResource, 'rel', null=True)
class Meta:
queryset = NonDocSpecificIprDisclosure.objects.all()
+ serializer = api.Serializer()
#resource_name = 'nondocspecificiprdisclosure'
filtering = {
"id": ALL,
@@ -192,6 +198,7 @@ class GenericIprDisclosureResource(ModelResource):
rel = ToManyField(IprDisclosureBaseResource, 'rel', null=True)
class Meta:
queryset = GenericIprDisclosure.objects.all()
+ serializer = api.Serializer()
#resource_name = 'genericiprdisclosure'
filtering = {
"id": ALL,
@@ -226,6 +233,7 @@ class IprEventResource(ModelResource):
in_reply_to = ToOneField(MessageResource, 'in_reply_to', null=True)
class Meta:
queryset = IprEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'iprevent'
filtering = {
"id": ALL,
@@ -252,6 +260,7 @@ class LegacyMigrationIprEventResource(ModelResource):
iprevent_ptr = ToOneField(IprEventResource, 'iprevent_ptr')
class Meta:
queryset = LegacyMigrationIprEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'legacymigrationiprevent'
filtering = {
"id": ALL,
diff --git a/ietf/liaisons/resources.py b/ietf/liaisons/resources.py
index 538851059..0911bf7fe 100644
--- a/ietf/liaisons/resources.py
+++ b/ietf/liaisons/resources.py
@@ -21,6 +21,7 @@ class LiaisonStatementResource(ModelResource):
attachments = ToManyField(DocumentResource, 'attachments', null=True)
class Meta:
queryset = LiaisonStatement.objects.all()
+ serializer = api.Serializer()
#resource_name = 'liaisonstatement'
filtering = {
"id": ALL,
diff --git a/ietf/meeting/resources.py b/ietf/meeting/resources.py
index cc6eb4e26..c81f55140 100644
--- a/ietf/meeting/resources.py
+++ b/ietf/meeting/resources.py
@@ -14,6 +14,7 @@ class MeetingResource(ModelResource):
agenda = ToOneField('ietf.meeting.resources.ScheduleResource', 'agenda', null=True)
class Meta:
queryset = Meeting.objects.all()
+ serializer = api.Serializer()
#resource_name = 'meeting'
filtering = {
"id": ALL,
@@ -42,6 +43,7 @@ class ResourceAssociationResource(ModelResource):
name = ToOneField(RoomResourceNameResource, 'name')
class Meta:
queryset = ResourceAssociation.objects.all()
+ serializer = api.Serializer()
resource_name = 'resourceassociation'
filtering = {
"id": ALL,
@@ -62,6 +64,7 @@ class ConstraintResource(ModelResource):
name = ToOneField(ConstraintNameResource, 'name')
class Meta:
queryset = Constraint.objects.all()
+ serializer = api.Serializer()
#resource_name = 'constraint'
filtering = {
"id": ALL,
@@ -81,6 +84,7 @@ class RoomResource(ModelResource):
session_types = ToManyField(TimeSlotTypeNameResource, 'session_types', null=True)
class Meta:
queryset = Room.objects.all()
+ serializer = api.Serializer()
#resource_name = 'room'
filtering = {
"id": ALL,
@@ -99,6 +103,7 @@ class ScheduleResource(ModelResource):
owner = ToOneField(PersonResource, 'owner')
class Meta:
queryset = Schedule.objects.all()
+ serializer = api.Serializer()
#resource_name = 'schedule'
filtering = {
"id": ALL,
@@ -126,6 +131,7 @@ class SessionResource(ModelResource):
requested_duration = api.TimedeltaField()
class Meta:
queryset = Session.objects.all()
+ serializer = api.Serializer()
#resource_name = 'session'
filtering = {
"id": ALL,
@@ -157,6 +163,7 @@ class TimeSlotResource(ModelResource):
duration = api.TimedeltaField()
class Meta:
queryset = TimeSlot.objects.all()
+ serializer = api.Serializer()
#resource_name = 'timeslot'
filtering = {
"id": ALL,
@@ -179,6 +186,7 @@ class ScheduledSessionResource(ModelResource):
extendedfrom = ToOneField('ietf.meeting.resources.ScheduledSessionResource', 'extendedfrom', null=True)
class Meta:
queryset = ScheduledSession.objects.all()
+ serializer = api.Serializer()
#resource_name = 'scheduledsession'
filtering = {
"id": ALL,
@@ -201,6 +209,7 @@ class SessionPresentationResource(ModelResource):
document = ToOneField(DocumentResource, 'document')
class Meta:
queryset = SessionPresentation.objects.all()
+ serializer = api.Serializer()
#resource_name = 'sessionpresentation'
filtering = {
"id": ALL,
diff --git a/ietf/message/resources.py b/ietf/message/resources.py
index 41033cebc..df506ecba 100644
--- a/ietf/message/resources.py
+++ b/ietf/message/resources.py
@@ -17,6 +17,7 @@ class MessageResource(ModelResource):
related_docs = ToManyField(DocumentResource, 'related_docs', null=True)
class Meta:
queryset = Message.objects.all()
+ serializer = api.Serializer()
#resource_name = 'message'
filtering = {
"id": ALL,
@@ -41,6 +42,7 @@ class SendQueueResource(ModelResource):
message = ToOneField(MessageResource, 'message')
class Meta:
queryset = SendQueue.objects.all()
+ serializer = api.Serializer()
#resource_name = 'sendqueue'
filtering = {
"id": ALL,
diff --git a/ietf/name/resources.py b/ietf/name/resources.py
index 3bb2c09d3..97adac067 100644
--- a/ietf/name/resources.py
+++ b/ietf/name/resources.py
@@ -11,6 +11,7 @@ from ietf.name.models import * # pyflakes:ignore
class TimeSlotTypeNameResource(ModelResource):
class Meta:
queryset = TimeSlotTypeName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'timeslottypename'
filtering = {
"slug": ALL,
@@ -24,6 +25,7 @@ api.name.register(TimeSlotTypeNameResource())
class GroupStateNameResource(ModelResource):
class Meta:
queryset = GroupStateName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'groupstatename'
filtering = {
"slug": ALL,
@@ -37,6 +39,7 @@ api.name.register(GroupStateNameResource())
class DocTagNameResource(ModelResource):
class Meta:
queryset = DocTagName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'doctagname'
filtering = {
"slug": ALL,
@@ -50,6 +53,7 @@ api.name.register(DocTagNameResource())
class IntendedStdLevelNameResource(ModelResource):
class Meta:
queryset = IntendedStdLevelName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'intendedstdlevelname'
filtering = {
"slug": ALL,
@@ -63,6 +67,7 @@ api.name.register(IntendedStdLevelNameResource())
class LiaisonStatementPurposeNameResource(ModelResource):
class Meta:
queryset = LiaisonStatementPurposeName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'liaisonstatementpurposename'
filtering = {
"slug": ALL,
@@ -77,6 +82,7 @@ class DraftSubmissionStateNameResource(ModelResource):
next_states = ToManyField('ietf.name.resources.DraftSubmissionStateNameResource', 'next_states', null=True)
class Meta:
queryset = DraftSubmissionStateName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'draftsubmissionstatename'
filtering = {
"slug": ALL,
@@ -91,6 +97,7 @@ api.name.register(DraftSubmissionStateNameResource())
class DocTypeNameResource(ModelResource):
class Meta:
queryset = DocTypeName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'doctypename'
filtering = {
"slug": ALL,
@@ -104,6 +111,7 @@ api.name.register(DocTypeNameResource())
class RoleNameResource(ModelResource):
class Meta:
queryset = RoleName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'rolename'
filtering = {
"slug": ALL,
@@ -117,6 +125,7 @@ api.name.register(RoleNameResource())
class StdLevelNameResource(ModelResource):
class Meta:
queryset = StdLevelName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'stdlevelname'
filtering = {
"slug": ALL,
@@ -130,6 +139,7 @@ api.name.register(StdLevelNameResource())
class GroupTypeNameResource(ModelResource):
class Meta:
queryset = GroupTypeName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'grouptypename'
filtering = {
"slug": ALL,
@@ -143,6 +153,7 @@ api.name.register(GroupTypeNameResource())
class GroupMilestoneStateNameResource(ModelResource):
class Meta:
queryset = GroupMilestoneStateName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'groupmilestonestatename'
filtering = {
"slug": ALL,
@@ -156,6 +167,7 @@ api.name.register(GroupMilestoneStateNameResource())
class SessionStatusNameResource(ModelResource):
class Meta:
queryset = SessionStatusName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'sessionstatusname'
filtering = {
"slug": ALL,
@@ -169,6 +181,7 @@ api.name.register(SessionStatusNameResource())
class DocReminderTypeNameResource(ModelResource):
class Meta:
queryset = DocReminderTypeName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'docremindertypename'
filtering = {
"slug": ALL,
@@ -182,6 +195,7 @@ api.name.register(DocReminderTypeNameResource())
class ConstraintNameResource(ModelResource):
class Meta:
queryset = ConstraintName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'constraintname'
filtering = {
"slug": ALL,
@@ -196,6 +210,7 @@ api.name.register(ConstraintNameResource())
class MeetingTypeNameResource(ModelResource):
class Meta:
queryset = MeetingTypeName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'meetingtypename'
filtering = {
"slug": ALL,
@@ -209,6 +224,7 @@ api.name.register(MeetingTypeNameResource())
class DocRelationshipNameResource(ModelResource):
class Meta:
queryset = DocRelationshipName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'docrelationshipname'
filtering = {
"slug": ALL,
@@ -223,6 +239,7 @@ api.name.register(DocRelationshipNameResource())
class RoomResourceNameResource(ModelResource):
class Meta:
queryset = RoomResourceName.objects.all()
+ serializer = api.Serializer()
resource_name = 'roomresourcename' # Needed because tastypie otherwise removes 'resource' from the name
filtering = {
"slug": ALL,
@@ -236,6 +253,7 @@ api.name.register(RoomResourceNameResource())
class FeedbackTypeNameResource(ModelResource):
class Meta:
queryset = FeedbackTypeName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'feedbacktypename'
filtering = {
"slug": ALL,
@@ -249,6 +267,7 @@ api.name.register(FeedbackTypeNameResource())
class StreamNameResource(ModelResource):
class Meta:
queryset = StreamName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'streamname'
filtering = {
"slug": ALL,
@@ -262,6 +281,7 @@ api.name.register(StreamNameResource())
class BallotPositionNameResource(ModelResource):
class Meta:
queryset = BallotPositionName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'ballotpositionname'
filtering = {
"slug": ALL,
@@ -276,6 +296,7 @@ api.name.register(BallotPositionNameResource())
class DBTemplateTypeNameResource(ModelResource):
class Meta:
queryset = DBTemplateTypeName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'dbtemplatetypename'
filtering = {
"slug": ALL,
@@ -289,6 +310,7 @@ api.name.register(DBTemplateTypeNameResource())
class NomineePositionStateNameResource(ModelResource):
class Meta:
queryset = NomineePositionStateName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'nomineepositionstatename'
filtering = {
"slug": ALL,
@@ -304,6 +326,7 @@ api.name.register(NomineePositionStateNameResource())
class IprDisclosureStateNameResource(ModelResource):
class Meta:
queryset = IprDisclosureStateName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'iprdisclosurestatename'
filtering = {
"slug": ALL,
@@ -317,6 +340,7 @@ api.name.register(IprDisclosureStateNameResource())
class IprEventTypeNameResource(ModelResource):
class Meta:
queryset = IprEventTypeName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'ipreventtypename'
filtering = {
"slug": ALL,
@@ -330,6 +354,7 @@ api.name.register(IprEventTypeNameResource())
class IprLicenseTypeNameResource(ModelResource):
class Meta:
queryset = IprLicenseTypeName.objects.all()
+ serializer = api.Serializer()
#resource_name = 'iprlicensetypename'
filtering = {
"slug": ALL,
diff --git a/ietf/nomcom/resources.py b/ietf/nomcom/resources.py
index bf3284f75..61d10a2f0 100644
--- a/ietf/nomcom/resources.py
+++ b/ietf/nomcom/resources.py
@@ -13,6 +13,7 @@ class NomComResource(ModelResource):
group = ToOneField(GroupResource, 'group')
class Meta:
queryset = NomCom.objects.all()
+ serializer = api.Serializer()
#resource_name = 'nomcom'
filtering = {
"id": ALL,
@@ -33,6 +34,7 @@ class PositionResource(ModelResource):
incumbent = ToOneField(EmailResource, 'incumbent', null=True)
class Meta:
queryset = Position.objects.all()
+ serializer = api.Serializer()
#resource_name = 'position'
filtering = {
"id": ALL,
@@ -54,6 +56,7 @@ class NomineeResource(ModelResource):
nominee_position = ToManyField(PositionResource, 'nominee_position', null=True)
class Meta:
queryset = Nominee.objects.all()
+ serializer = api.Serializer()
#resource_name = 'nominee'
filtering = {
"id": ALL,
@@ -68,6 +71,7 @@ class ReminderDatesResource(ModelResource):
nomcom = ToOneField(NomComResource, 'nomcom')
class Meta:
queryset = ReminderDates.objects.all()
+ serializer = api.Serializer()
#resource_name = 'reminderdates'
filtering = {
"id": ALL,
@@ -83,6 +87,7 @@ class NomineePositionResource(ModelResource):
state = ToOneField(NomineePositionStateNameResource, 'state')
class Meta:
queryset = NomineePosition.objects.all()
+ serializer = api.Serializer()
#resource_name = 'nomineeposition'
filtering = {
"id": ALL,
@@ -103,6 +108,7 @@ class FeedbackResource(ModelResource):
nominees = ToManyField(NomineeResource, 'nominees', null=True)
class Meta:
queryset = Feedback.objects.all()
+ serializer = api.Serializer()
#resource_name = 'feedback'
filtering = {
"id": ALL,
@@ -126,6 +132,7 @@ class NominationResource(ModelResource):
user = ToOneField(UserResource, 'user')
class Meta:
queryset = Nomination.objects.all()
+ serializer = api.Serializer()
#resource_name = 'nomination'
filtering = {
"id": ALL,
diff --git a/ietf/person/resources.py b/ietf/person/resources.py
index 7404791c7..1ee58d3f9 100644
--- a/ietf/person/resources.py
+++ b/ietf/person/resources.py
@@ -13,6 +13,7 @@ class PersonResource(ModelResource):
user = ToOneField(UserResource, 'user', null=True)
class Meta:
queryset = Person.objects.all()
+ serializer = api.Serializer()
#resource_name = 'person'
filtering = {
"id": ALL,
@@ -30,6 +31,7 @@ class EmailResource(ModelResource):
person = ToOneField(PersonResource, 'person', null=True)
class Meta:
queryset = Email.objects.all()
+ serializer = api.Serializer()
#resource_name = 'email'
filtering = {
"address": ALL,
@@ -43,6 +45,7 @@ class AliasResource(ModelResource):
person = ToOneField(PersonResource, 'person')
class Meta:
queryset = Alias.objects.all()
+ serializer = api.Serializer()
#resource_name = 'alias'
filtering = {
"id": ALL,
@@ -57,6 +60,7 @@ class PersonHistoryResource(ModelResource):
user = ToOneField(UserResource, 'user', null=True)
class Meta:
queryset = PersonHistory.objects.all()
+ serializer = api.Serializer()
#resource_name = 'personhistory'
filtering = {
"id": ALL,
diff --git a/ietf/redirects/resources.py b/ietf/redirects/resources.py
index eeb349aac..572b9a4cd 100644
--- a/ietf/redirects/resources.py
+++ b/ietf/redirects/resources.py
@@ -11,6 +11,7 @@ from ietf.redirects.models import * # pyflakes:ignore
class RedirectResource(ModelResource):
class Meta:
queryset = Redirect.objects.all()
+ serializer = api.Serializer()
#resource_name = 'redirect'
filtering = {
"id": ALL,
@@ -24,6 +25,7 @@ api.redirects.register(RedirectResource())
class SuffixResource(ModelResource):
class Meta:
queryset = Suffix.objects.all()
+ serializer = api.Serializer()
#resource_name = 'suffix'
filtering = {
"id": ALL,
@@ -37,6 +39,7 @@ class CommandResource(ModelResource):
suffix = ToOneField(SuffixResource, 'suffix', null=True)
class Meta:
queryset = Command.objects.all()
+ serializer = api.Serializer()
#resource_name = 'command'
filtering = {
"id": ALL,
diff --git a/ietf/submit/resources.py b/ietf/submit/resources.py
index 2bf06f306..788780388 100644
--- a/ietf/submit/resources.py
+++ b/ietf/submit/resources.py
@@ -13,6 +13,7 @@ class PreapprovalResource(ModelResource):
by = ToOneField(PersonResource, 'by')
class Meta:
queryset = Preapproval.objects.all()
+ serializer = api.Serializer()
#resource_name = 'preapproval'
filtering = {
"id": ALL,
@@ -29,6 +30,7 @@ class SubmissionResource(ModelResource):
group = ToOneField(GroupResource, 'group', null=True)
class Meta:
queryset = Submission.objects.all()
+ serializer = api.Serializer()
#resource_name = 'submission'
filtering = {
"id": ALL,
@@ -61,6 +63,7 @@ class SubmissionEventResource(ModelResource):
by = ToOneField(PersonResource, 'by', null=True)
class Meta:
queryset = SubmissionEvent.objects.all()
+ serializer = api.Serializer()
#resource_name = 'submissionevent'
filtering = {
"id": ALL,
diff --git a/ietf/utils/resources.py b/ietf/utils/resources.py
index d24ee109b..03886179c 100644
--- a/ietf/utils/resources.py
+++ b/ietf/utils/resources.py
@@ -5,14 +5,18 @@ from tastypie.fields import CharField
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
+from ietf import api
+
class UserResource(ModelResource):
username = CharField()
class Meta:
queryset = User.objects.all()
+ serializer = api.Serializer()
class ContentTypeResource(ModelResource):
username = CharField()
class Meta:
queryset = ContentType.objects.all()
+ serializer = api.Serializer()
-
\ No newline at end of file
+