api first version V00.08
authorcavaliet
Mon, 09 Sep 2013 12:40:47 +0200
changeset 247 3c72a1b19462
parent 246 2bcb2a23fcc2
child 248 8021273c6965
api first version
src/egonomy/api/__init__.py
src/egonomy/api/resources/__init__.py
src/egonomy/api/resources/fragment.py
src/egonomy/api/resources/image.py
src/egonomy/api/urls.py
src/egonomy/settings.py
src/egonomy/urls.py
virtualenv/res/lib/lib_create_env.py
virtualenv/res/src/django-tastypie-0.10.0.tar.gz
virtualenv/res/src/django-tastypie-0.9.12.tar.gz
--- /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 @@
+
--- /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"]
--- /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<resource_name>%s)/recommended/$" % self._meta.resource_name, self.wrap_view('get_recommended'), name="api_contents_recommended"),
+#            url(r"^(?P<resource_name>%s)/(?P<iri_id>[\w\d_.-]+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),            
+#        ]
+        
+            
\ No newline at end of file
--- /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<resource_name>%s)/(?P<pk>\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
--- /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)),
+)
--- 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
 
--- 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()
--- 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}},
Binary file virtualenv/res/src/django-tastypie-0.10.0.tar.gz has changed
Binary file virtualenv/res/src/django-tastypie-0.9.12.tar.gz has changed