summaryrefslogtreecommitdiff
path: root/coip/apps/opensocial
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2011-11-08 19:30:42 +0100
committerLeif Johansson <leifj@sunet.se>2011-11-08 19:30:42 +0100
commitef6e10597f602eb875b658fc74fc85db48359587 (patch)
tree762033b81958de1ccd4dee56c7e023edde01020f /coip/apps/opensocial
parent4935e3d7dbc0d6eaf6a87a5bb62cdf00cf221bce (diff)
removed tastypie
Diffstat (limited to 'coip/apps/opensocial')
-rw-r--r--coip/apps/opensocial/__init__.py7
-rw-r--r--coip/apps/opensocial/common.py53
-rw-r--r--coip/apps/opensocial/people.py134
-rw-r--r--coip/apps/opensocial/serializer.py104
4 files changed, 0 insertions, 298 deletions
diff --git a/coip/apps/opensocial/__init__.py b/coip/apps/opensocial/__init__.py
index adf3408..e69de29 100644
--- a/coip/apps/opensocial/__init__.py
+++ b/coip/apps/opensocial/__init__.py
@@ -1,7 +0,0 @@
-from tastypie.api import Api
-from coip.apps.opensocial.people import PersonResource, MembershipResource, GroupResource
-
-opensocial_v1 = Api(api_name = "1.0")
-opensocial_v1.register(PersonResource())
-opensocial_v1.register(MembershipResource())
-opensocial_v1.register(GroupResource())
diff --git a/coip/apps/opensocial/common.py b/coip/apps/opensocial/common.py
deleted file mode 100644
index 131cfeb..0000000
--- a/coip/apps/opensocial/common.py
+++ /dev/null
@@ -1,53 +0,0 @@
-'''
-Created on Sep 21, 2011
-
-@author: leifj
-'''
-from tastypie.resources import ModelResource
-from tastypie.bundle import Bundle
-from coip.multiresponse import json_response
-from django.core.serializers import json
-from django.http import HttpResponseBadRequest
-
-_rekey = {
- 'objects': 'entry'
-}
-
-def system(request):
- if request.method == 'POST' and request.META['CONTENT_TYPE'] == 'application/json':
- rpc_request = json.simplejson.load(request)
- if rpc_request['method'] == 'system.listMethods':
- return json_response(['people.get','groups.get','system.listMethods'])
- else:
- return HttpResponseBadRequest()
-
-class OpenSocialResource(ModelResource):
-
- def _restructure(self,request,data,depth):
- if isinstance(data, (list,tuple)):
- for v in data:
- self._restructure(request,v,depth+1)
- elif isinstance(data,dict):
- for (key,value) in data.iteritems():
- nkey = key
- if _rekey.has_key(key):
- nkey = _rekey[key]
-
- data[nkey] = self._restructure(request,data.pop(key),depth+1)
-
- if data.has_key('meta') and depth == 1:
- meta = data.pop('meta')
- if request.GET.has_key('count'):
- data['totalResults'] = meta['total_count']
- data['itemsPerPage'] = meta['limit']
- data['startIndex'] = meta['offset']
- elif isinstance(data,Bundle):
- pass
-
- return data
-
- def alter_list_data_to_serialize(self,request,data):
- return self._restructure(request,{'response':data},0)
-
- def alter_detail_data_to_serialize(self,request,data):
- return self._restructure(request,{'response': data},0) \ No newline at end of file
diff --git a/coip/apps/opensocial/people.py b/coip/apps/opensocial/people.py
deleted file mode 100644
index a52fb9d..0000000
--- a/coip/apps/opensocial/people.py
+++ /dev/null
@@ -1,134 +0,0 @@
-'''
-Created on Jun 19, 2011
-
-@author: leifj
-'''
-from django.contrib.auth.models import User
-from coip.apps.opensocial.serializer import OpenSocialSerializer
-from django.conf.urls.defaults import url
-from coip.apps.membership.models import Membership
-from tastypie.fields import ToOneField
-from tastypie.utils.urls import trailing_slash
-from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
-from tastypie.http import HttpGone, HttpMultipleChoices
-from coip.apps.name.models import Name
-from tastypie.constants import ALL_WITH_RELATIONS
-from django.shortcuts import get_object_or_404
-import logging
-from pprint import pformat
-from coip.apps.opensocial.common import OpenSocialResource
-from tastypie.authorization import DjangoAuthorization
-
-class GroupResource(OpenSocialResource):
-
- class Meta:
- queryset = Name.objects.all()
- serializer = OpenSocialSerializer()
- resource_name = 'groups'
- fields = ['short','description','id']
- #authentication = OAuthAuthentication()
- #authorization = DjangoAuthorization()
-
- def override_urls(self):
- return [
- url(r"^(?P<resource_name>%s)/(?P<username>[\@\w\d_.-:]+)/(?P<name_id>[\d]+)%s?" % (self._meta.resource_name,trailing_slash()),
- self.wrap_view('list_memberships'), name="api_list_memberships"),
- url(r"^(?P<resource_name>%s)/(?P<username>[\@\w\d_.-:]+)%s" % (self._meta.resource_name,trailing_slash()),
- self.wrap_view('list_memberships'), name="api_list_memberships"),
- url(r"^(?P<resource_name>%s)%s" % (self._meta.resource_name,trailing_slash()),
- self.wrap_view('list_memberships'), name="api_list_memberships"),
- ]
-
- def list_memberships(self, request, **kwargs):
- logging.debug(pformat(kwargs))
- try:
- user = self.cached_obj_get(request=request, username=kwargs['username'])
- logging.debug(pformat(user))
- except ObjectDoesNotExist:
- return HttpGone()
- except MultipleObjectsReturned:
- return HttpMultipleChoices("More than one resource is found at this URI.")
-
- group_resource = GroupResource()
- if kwargs.has_key('name_id'):
- name_id = kwargs.pop('name_id')
- return group_resource.get_list(request=request, pk=name_id)
- else:
-
- return
-
-
- def dispatch(self, request_type, request, **kwargs):
- if kwargs.has_key('username') and kwargs['username'] == '@me':
- kwargs['username'] = request.user.username
- return super(GroupResource, self).dispatch(request_type, request, **kwargs)
-
-class MembershipResource(OpenSocialResource):
-
- user = ToOneField("coip.apps.opensocial.people.PersonResource",'user',full=True)
- name = ToOneField("coip.apps.opensocial.people.GroupResource",'name',full=False)
-
- class Meta:
- queryset = Membership.objects.all()
- serializer = OpenSocialSerializer()
- #authentication = OAuthAuthentication()
- #authorization = DjangoAuthorization()
- resource_name = 'membership'
- fields = ['user','name']
- filtering = {
- 'name': ALL_WITH_RELATIONS
- }
-
- def dehydrate(self,bundle):
- bundle = super(MembershipResource,self).dehydrate(bundle)
- del bundle.data['resource_uri']
- logging.debug(pformat(bundle))
- return bundle
-
-class PersonResource(OpenSocialResource):
-
- #memberships = ToManyField(MembershipResource,'memberships',full=True)
-
- class Meta:
- queryset = User.objects.all()
- #authentication = OAuthAuthentication()
- #authorization = DjangoAuthorization()
- fields = ['username']
- resource_name = 'people'
- serializer = OpenSocialSerializer()
-
- def override_urls(self):
- return [
- url(r"^(?P<resource_name>%s)/(?P<username>[\@\w\d_.-:]+)/(?P<name_id>[\d]+)%s?" % (self._meta.resource_name,trailing_slash()),
- self.wrap_view('list_memberships'), name="api_list_memberships"),
- url(r"^(?P<resource_name>%s)/(?P<username>[\@\w\d_.-:]+)(?:/\@self)?%s" % (self._meta.resource_name,trailing_slash()),
- self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),
- ]
-
- def list_memberships(self, request, **kwargs):
- logging.debug(pformat(kwargs))
- try:
- user = self.cached_obj_get(request=request, username=kwargs['username'])
- logging.debug(pformat(user))
- except ObjectDoesNotExist:
- return HttpGone()
- except MultipleObjectsReturned:
- return HttpMultipleChoices("More than one resource is found at this URI.")
-
- people_resource = PersonResource()
- name_id = kwargs.pop('name_id')
- name = get_object_or_404(Name,id=name_id)
- return people_resource.get_list(request=request, memberships__name=name)
-
- def dispatch(self, request_type, request, **kwargs):
- if kwargs.has_key('username') and kwargs['username'] == '@me':
- kwargs['username'] = request.user.username
- return super(PersonResource, self).dispatch(request_type, request, **kwargs)
-
- def dehydrate(self,bundle):
- bundle = super(PersonResource,self).dehydrate(bundle)
- bundle.data['id'] = bundle.data['username']
- bundle.data['displayName'] = bundle.obj.get_profile().display_name
- del bundle.data['resource_uri']
- del bundle.data['username']
- return bundle \ No newline at end of file
diff --git a/coip/apps/opensocial/serializer.py b/coip/apps/opensocial/serializer.py
deleted file mode 100644
index df0dcc3..0000000
--- a/coip/apps/opensocial/serializer.py
+++ /dev/null
@@ -1,104 +0,0 @@
-'''
-Created on Jun 19, 2011
-
-@author: leifj
-'''
-from tastypie.serializers import Serializer, get_type_string
-from tastypie.bundle import Bundle
-from django.utils import simplejson
-from django.utils.encoding import force_unicode
-import string
-import logging
-from pprint import pformat
-from django.core.exceptions import ImproperlyConfigured
-from django.core.serializers import json
-
-try:
- import lxml
- from lxml.etree import parse as parse_xml
- from lxml.etree import Element, tostring
-except ImportError:
- lxml = None
-
-class OpenSocialSerializer(Serializer):
-
- def __init__(self, formats=None, content_types=None, datetime_formatting=None):
- super(OpenSocialSerializer,self).__init__(formats,content_types,datetime_formatting)
-
- def name_data(self,data):
- name = 'unknown'
-
- if hasattr(data,"resource_name"):
- name = data.resource_name()
-
- if isinstance(data,Bundle):
- name = self.name_data(data.obj)
- elif hasattr(data,"__class__"):
- name = string.lower(data.__class__.__name__)
-
- return name
-
- def to_json(self, data, options=None):
- """
- Given some Python data, produces JSON output.
- """
- options = options or {}
- data = self.to_simple(data, options)
- return simplejson.dumps(data['response'], cls=json.DjangoJSONEncoder, sort_keys=True)
-
- def to_xml(self, data, options=None):
- """
- Given some Python data, produces XML output.
- """
- options = options or {}
-
- if lxml is None:
- raise ImproperlyConfigured("Usage of the XML aspects requires lxml.")
-
- etree = self.to_etree(data, options)
- etree.set("xmlns","http://ns.opensocial.org/2008/opensocial")
-
- return tostring(etree, xml_declaration=True, encoding='utf-8')
-
- def to_etree(self, data, options=None, name=None, depth=0, parent=None):
- """
- Given some data, converts that data to an ``etree.Element`` suitable
- for use in the XML output.
- """
-
- if parent is not None:
- logging.debug("+++++++++++ %d %s %s" % (depth,name,tostring(parent)))
- else:
- logging.debug("+++++++++++ %d %s <no parent>" % (depth,name))
- logging.debug(pformat(data))
-
- if parent is None:
- parent = Element(name or self.name_data(data))
-
- if isinstance(data, (list, tuple)):
- for item in data:
- element = Element(name or 'item')
- self.to_etree(item, options, depth=depth+1,parent=element)
- parent.append(element)
- elif isinstance(data, dict):
- if len(data) == 1 and depth == 0:
- for (key,value) in data.iteritems():
- parent = self.to_etree(value, options, name=key, depth=depth+1,parent=None)
- else:
- for (key,value) in data.iteritems():
- parent.append(self.to_etree(value, options, name=key, depth=depth+1,parent=parent))
- elif isinstance(data, Bundle):
- element = Element(self.name_data(data))
- for field_name, field_object in data.data.items():
- self.to_etree(field_object, options, name=field_name, depth=depth+1, parent=element)
- parent.append(element)
- else:
- element = Element(name or 'value')
- simple_data = self.to_simple(data, options)
- data_type = get_type_string(simple_data)
- #if data_type != 'string':
- # element.set('type', get_type_string(simple_data))
- if data_type != 'null':
- element.text = force_unicode(simple_data)
- parent.append(element)
- return parent \ No newline at end of file