First version of api generator
authorSapan Bhatia <gwsapan@gmail.com>
Mon, 13 Jan 2014 18:29:12 +0000 (13:29 -0500)
committerSapan Bhatia <gwsapan@gmail.com>
Mon, 13 Jan 2014 18:29:12 +0000 (13:29 -0500)
planetstack/apigen/api.template.py [new file with mode: 0644]
planetstack/dmdot

diff --git a/planetstack/apigen/api.template.py b/planetstack/apigen/api.template.py
new file mode 100644 (file)
index 0000000..15995af
--- /dev/null
@@ -0,0 +1,63 @@
+from rest_framework.decorators import api_view
+from rest_framework.response import Response
+from rest_framework.reverse import reverse
+from rest_framework import serializers
+from core.models import *
+from django.forms import widgets
+
+"""
+       Schema of the generator object:
+               all: Set of all Model objects
+               all_if(regex): Set of Model objects that match regex
+       
+       Model object:
+               plural: English plural of object name
+               camel: CamelCase version of object name
+               refs: list of references to other Model objects
+
+       TODO: Deal with subnets
+"""
+
+# Based on api_root.py
+
+@api_view(['GET'])
+def api_root(request, format=None):
+    return Response({
+               {% for object in generator.all %} 
+        '{{ object.plural }}': reverse('{{ object }}-list', request=request, format=format),
+               {% endfor %}
+    })
+
+# Based on serializers.py
+
+{% for object in generator.all %}
+
+class {{ object.camel }}Serializer(serializers.HyperlinkedModelSerializer):
+       id = serializers.Field()
+       {% for ref in object.refs %}
+       sites = serializers.HyperlinkedRelatedField(view_name='{{ ref }}-detail')
+       {% endfor %}
+       class Meta:
+               model = {{ object }}
+               fields = ('id',{% for ref in object.refs %}'{{ ref }}',{% endfor %})
+{% endfor %}
+
+serializerLookUp = { 
+{% for object in generator.all %}
+                 {{ object.camel }}: {{ object.camel }}Serializer,
+{% endfor %}
+                 None: None,
+                }
+
+# Based on core/views/*.py
+{% for object in generator.all %}
+
+class {{ object.camel }}List(generics.ListCreateAPIView):
+    queryset = {{ object.camel }}.objects.all()
+    serializer_class = {{ object.camel }}Serializer
+
+class {{ object.camel }}Detail(generics.RetrieveUpdateDestroyAPIView):
+    queryset = {{ object.camel }}.objects.all()
+    serializer_class = {{ object.camel }}Serializer
+
+{% endfor %}
index 2d95e9d..b40d1af 100755 (executable)
@@ -20,6 +20,7 @@ except:
 g = globals()
 model_classes = []
 class_names = []
+
 for c in g.values():
        if type(c)==type(PlCoreBase):
                model_classes.append(c)