Created
November 1, 2012 11:14
-
-
Save haoch/3993085 to your computer and use it in GitHub Desktop.
django tastypie : model field resource for django tastypie
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# −*− coding: UTF−8 −*− | |
""" ModelField resources | |
Author : Hao Chen ([email protected]) """ | |
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