# HG changeset patch # User cavaliet # Date 1378723247 -7200 # Node ID 3c72a1b194624816509dd21272d8fa8510b0e8bf # Parent 2bcb2a23fcc205d2c1935e90fdff2500dc69e1c2 api first version diff -r 2bcb2a23fcc2 -r 3c72a1b19462 src/egonomy/api/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/api/__init__.py Mon Sep 09 12:40:47 2013 +0200 @@ -0,0 +1,1 @@ + diff -r 2bcb2a23fcc2 -r 3c72a1b19462 src/egonomy/api/resources/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/api/resources/__init__.py Mon Sep 09 12:40:47 2013 +0200 @@ -0,0 +1,4 @@ +from image import ImageResource +from fragment import FragmentResource + +__all__ = ["ImageResource", "FragmentResource"] diff -r 2bcb2a23fcc2 -r 3c72a1b19462 src/egonomy/api/resources/fragment.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/api/resources/fragment.py Mon Sep 09 12:40:47 2013 +0200 @@ -0,0 +1,27 @@ +from egonomy.models import Fragment +from tastypie import fields +from tastypie.resources import ModelResource + + + +class FragmentResource(ModelResource): + image = fields.ForeignKey("egonomy.api.resources.image.ImageResource", 'image') + class Meta: + allowed_methods = ['get'] + resource_name = 'fragments' + queryset = Fragment.objects.all() +# filtering = { +# 'tags' : ALL_WITH_RELATIONS, +# 'title' : ALL, +# } + +# def get_object_list(self, request): +# return Image.objects.select_related('info', 'metadata').all() + +# def prepend_urls(self): +# return [ +# url(r"^(?P%s)/recommended/$" % self._meta.resource_name, self.wrap_view('get_recommended'), name="api_contents_recommended"), +# url(r"^(?P%s)/(?P[\w\d_.-]+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"), +# ] + + \ No newline at end of file diff -r 2bcb2a23fcc2 -r 3c72a1b19462 src/egonomy/api/resources/image.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/api/resources/image.py Mon Sep 09 12:40:47 2013 +0200 @@ -0,0 +1,61 @@ +from django.conf.urls import url +from egonomy.models import Image, ImageMetadata, ImageInfo, Fragment +from tastypie import fields +from tastypie.constants import ALL, ALL_WITH_RELATIONS +from tastypie.resources import ModelResource +import logging +from egonomy.api.resources.fragment import FragmentResource + +logger = logging.getLogger(__name__) + + +class ImageMetadataResource(ModelResource): + class Meta: + allowed_methods = ['get'] + resource_name = 'metadata' + queryset = ImageMetadata.objects.all() + filtering = { + 'titre' : ALL, + } + + +class ImageInfoResource(ModelResource): + class Meta: + allowed_methods = ['get'] + resource_name = 'info' + queryset = ImageInfo.objects.all() + + +class ImageResource(ModelResource): + + metadata = fields.ForeignKey(ImageMetadataResource, 'metadata', full=True) + info = fields.ForeignKey(ImageInfoResource, 'info', full=True) + + class Meta: + allowed_methods = ['get'] + resource_name = 'images' + queryset = Image.objects.select_related('info', 'metadata').all() + filtering = { + 'metadata' : ALL_WITH_RELATIONS, + } + ordering = ['id'] + + def prepend_urls(self): + return [ + url(r"^(?P%s)/(?P\w[\w/-]*)/fragments/$" % self._meta.resource_name, self.wrap_view('get_image_framents'), name="api_get_image_framents"), + ] + + def get_image_framents(self, request, **kwargs): + self.method_check(request, allowed=['get']) + + frag_res = FragmentResource() + fragments = [frag_res.full_dehydrate(frag_res.build_bundle(obj=f, request=request)) for f in Fragment.objects.filter(image=Image.objects.get(id=kwargs["pk"]))] + object_list = { + 'fragments': fragments, + } + + self.log_throttled_access(request) + + return self.create_response(request, object_list) + + \ No newline at end of file diff -r 2bcb2a23fcc2 -r 3c72a1b19462 src/egonomy/api/urls.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/api/urls.py Mon Sep 09 12:40:47 2013 +0200 @@ -0,0 +1,12 @@ +from django.conf.urls import patterns, include +from egonomy.api.resources import ImageResource, FragmentResource +from tastypie.api import Api + +v1_api = Api(api_name='1.0') +v1_api.register(ImageResource()) +v1_api.register(FragmentResource()) + + +urlpatterns = patterns('', + (r'', include(v1_api.urls)), +) diff -r 2bcb2a23fcc2 -r 3c72a1b19462 src/egonomy/settings.py --- a/src/egonomy/settings.py Mon Sep 02 14:41:44 2013 +0200 +++ b/src/egonomy/settings.py Mon Sep 09 12:40:47 2013 +0200 @@ -143,6 +143,7 @@ 'registration', 'sorl.thumbnail', 'haystack', + 'tastypie', ) ugettext = lambda s: s @@ -183,6 +184,7 @@ HAYSTACK_SIGNAL_PROCESSOR = 'egonomy.search_indexes.EgonomySignalProcessor' ACCOUNT_ACTIVATION_DAYS = 7 +TASTYPIE_DEFAULT_FORMATS = ['json'] from .config import * #@UnusedWildImport diff -r 2bcb2a23fcc2 -r 3c72a1b19462 src/egonomy/urls.py --- a/src/egonomy/urls.py Mon Sep 02 14:41:44 2013 +0200 +++ b/src/egonomy/urls.py Mon Sep 09 12:40:47 2013 +0200 @@ -38,6 +38,7 @@ # login logout view url(r'^login/', 'django.contrib.auth.views.login', name='login'), url(r'^logout/', 'django.contrib.auth.views.logout', name='logout'), + (r'^api/', include('egonomy.api.urls')), (r'^accounts/', include('registration.backends.default.urls')), ) urlpatterns += staticfiles_urlpatterns() diff -r 2bcb2a23fcc2 -r 3c72a1b19462 virtualenv/res/lib/lib_create_env.py --- a/virtualenv/res/lib/lib_create_env.py Mon Sep 02 14:41:44 2013 +0200 +++ b/virtualenv/res/lib/lib_create_env.py Mon Sep 09 12:40:47 2013 +0200 @@ -42,7 +42,7 @@ 'PYTHON-DATEUTIL' : {'setup':'python-dateutil', 'url':'http://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.1.tar.gz', 'local': 'python-dateutil-2.1.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}}, 'PYYAML' : {'setup':'pyyaml', 'url':'http://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.10.tar.gz', 'local': 'PyYAML-3.10.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}}, 'PYTHON-DIGEST' : {'setup':'python-digest', 'url':'http://pypi.python.org/packages/source/p/python-digest/python-digest-1.7.tar.gz', 'local': 'python-digest-1.7.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}}, - 'DJANGO-TASTYPIE' : {'setup':'django-tastypie', 'url':'https://github.com/toastdriven/django-tastypie/archive/v0.9.12.tar.gz', 'local': 'django-tastypie-0.9.12.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}}, + 'DJANGO-TASTYPIE' : {'setup':'django-tastypie', 'url':'https://github.com/toastdriven/django-tastypie/archive/v0.10.0.tar.gz', 'local': 'django-tastypie-0.10.0.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}}, 'ISODATE' : {'setup': 'isodate', 'url': 'https://github.com/gweis/isodate/archive/0.4.9.tar.gz', 'local': 'isodate-0.4.9.tar.gz', 'install': {'method':'pip', 'option_str': None, 'dict_extra_env': None}}, 'HTML5LIB' : {'setup': 'html5lib', 'url': 'https://html5lib.googlecode.com/files/html5lib-0.95.tar.gz', 'local': 'html5lib-0.95.tar.gz', 'install': {'method':'pip', 'option_str': None, 'dict_extra_env': None}}, 'RDFLIB' : {'setup': 'rdflib', 'url': 'https://nodeload.github.com/RDFLib/rdflib/tar.gz/master', 'local': 'rdflib-2.4.0.tar.gz', 'install': {'method':'pip', 'option_str': None, 'dict_extra_env': None}}, diff -r 2bcb2a23fcc2 -r 3c72a1b19462 virtualenv/res/src/django-tastypie-0.10.0.tar.gz Binary file virtualenv/res/src/django-tastypie-0.10.0.tar.gz has changed diff -r 2bcb2a23fcc2 -r 3c72a1b19462 virtualenv/res/src/django-tastypie-0.9.12.tar.gz Binary file virtualenv/res/src/django-tastypie-0.9.12.tar.gz has changed