Skip to content

Instantly share code, notes, and snippets.

@haoch
Created November 1, 2012 11:14
Show Gist options
  • Save haoch/3993085 to your computer and use it in GitHub Desktop.
Save haoch/3993085 to your computer and use it in GitHub Desktop.
django tastypie : model field resource for django tastypie
#!/usr/bin/env python
# −*− coding: UTF−8 −*−
from tastypie.resources import ModelResource,Resource
from tastypie.constants import ALL, ALL_WITH_RELATIONS
from tastypie import fields
from model.db.gv.models import Jobhist,Ucjobs,Jobsnapsht,FailureInfo
from webservice.rest.resource.constant import ALL_FILTERS
from webservice.rest.common.ModelFieldResource import ModelFieldResource
class UCjobsResource(ModelResource):
""" Manage UCJob information including:
jobname --
sa_folder, --
primary_sae, --
secondary_sae, --
primary_ntlog, --
secondary_ntlog -- """
class Meta:
queryset = Ucjobs.objects.all()
resource_name = 'uc4.jobinfo'
serializer = Serializer(formats=['json', 'xml', 'jsonp'])
excludes = [] # fields not shown
fields = [] #fields to show
allowed_methods = ['get']
list_allowed_methods = ['get']
filtering = {
}
class SeondaryNtlogResource(ModelFieldResource):
class Meta:
field_name = 'secondary_ntlog'
resource_name='uc4.jobinfo.secondary_ntlog'
resource = UCjobsResource()
#!/usr/bin/env python
# −*− coding: UTF−8 −*−
""" ModelField resources
Author : Hao Chen (hchen9@ebay.com) """
from tastypie.resources import Resource
from tastypie.constants import ALL, ALL_WITH_RELATIONS
from tastypie import fields
from tastypie.serializers import Serializer
import logging
logger = logging.getLogger(__name__)
class FieldObject(object):
""" Field Object
* value -- Field value
* field -- Field field """
def __init__(self,initial=None):
self.value = initial.get('value',None)
self.field = initial.get('field',None)
def __getattr__(self,name):
return self.__dict__[name]
def __setattr__(self,name,value):
self.__dict__[name] = value
def to_dict(self):
return self.__dict__
class ModelFieldResource(Resource):
""" Field resource for ModelResource
"""
value = fields.CharField(
attribute = 'value',
help_text = 'Field value'
)
field = fields.CharField(
attribute = 'field',
help_text = 'Field name'
)
class Meta:
field_name = None
resource = None # resource object ,!!! required !!!
resource_name = None # resource_name ,!!! required !!!
object_class = FieldObject
serializer = Serializer(formats=['json','xml','jsonp'])
list_allowed_methods = ['get']
detail_allowed_methods = ['get'],
def detail_uri_kwargs(self,bundle_or_obj):
kwargs = {}
if isinstance(bundle_or_obj,Bundle):
kwargs['field'] = bundle_or_obj.obj.attribute
kwargs['value'] = bundle_or_obj.obj.value
else:
kwargs['field'] = bundle_or_obj.attribute
kwargs['value'] = bundle_or_obj.value
return kwargs
def get_object_list(self,request):
results = list()
values = self.Meta.resource.Meta.queryset.values(self.Meta.field_name).distinct()
for v in values:
results.append(FieldObject({'field':self.Meta.field_name,'value':v[self.Meta.field_name]}))
return results
def obj_get_list(self,request=None, **kwargs):
return self.get_object_list(request)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment