1
1
# Create your views here.
2
from django.http import HttpResponse
2
from django.http import HttpResponse, HttpResponseRedirect
3
3
from django.template import Context, loader
4
4
from scibrowser.web.widgets import form
5
5
from scibrowser.resources.fixtures import gdf
6
6
from scibrowser.lib.parsing.gdf import GDF
7
7
from scibrowser.web.graph import models
8
from django.db.models import Max
9
13
class Handler(object):
14
18
def __init__(self, template=None):
15
19
self.template = loader.get_template(template)
17
def __call__(self, request, **kwargs):
21
def __call__(self, request,*args, **kwargs):
19
23
This method should be inherited by a concrete handler
20
24
@param request Information passed from the url dispatcher. It is used
22
26
@return L{HttpResponse}
24
28
handler = getattr(self, "event_%s" %request.method.lower(), None)
25
return HttpResponse(self.template.render(Context(handler(request))))
29
return HttpResponse(self.template.render(Context(handler(request,*args, **kwargs))))
27
31
class GraphUpload(Handler):
28
32
def __init__(self, template=None):
29
33
self.form = form.FileLoader()
30
34
super(GraphUpload, self).__init__(template)
32
def event_get(self, request):
36
def event_get(self, request,*args, **kwargs):
33
37
return {'form': self.form}
35
def event_post(self, request):
39
def event_post(self, request,*args, **kwargs):
36
40
self.form = form.FileLoader(request.POST, request.FILES)
37
41
if self.form.is_valid():
38
42
self.file = request.FILES['file'].read()
39
self.community = request.POST['community'].lower()
40
self.title = request.POST['title'].lower()
43
c = models.Community.objects.get(name=self.community)
45
c = models.Community.objects.get(name=request.FILES['file'].name)
45
c = models.Community(name=self.community)
47
c = models.Community(name=request.FILES['file'].name)
49
f = models.File.objects.get(title=self.title, community = c, data=self.file)
51
f = models.File.objects.get(title=request.FILES['file'].name, community = c, data=self.file)
51
f = models.File(title=self.title, community=c, data=self.file)
53
f = models.File(title=request.FILES['file'], community=c, data=self.file)
53
GDF().insert(self.file, self.community)
55
GDF().insert(self.file, request.FILES['file'].name)
54
56
return self.event_get(request)
56
58
class GraphHandler(Handler):
61
63
def __init__(self, template=None):
63
65
self.files = list(models.File.objects.all())
64
67
super(GraphHandler, self).__init__(template)
66
def event_get(self, request):
69
def __call__(self, request,*args, **kwargs):
71
This method should be inherited by a concrete handler
72
@param request Information passed from the url dispatcher. It is used
73
to determine which handler to use.
74
@return L{HttpResponse}
76
handler = getattr(self, "event_%s" %request.method.lower(), None)
77
return handler(request,*args, **kwargs)
79
def event_get(self, request,*args, **kwargs):
68
81
Handler for get requests.
71
return {'javascript': GDF().json(self.file), 'files': self.files}
73
def event_post(self, request):
84
year, month = int(kwargs['year']), int(kwargs['month'])
85
self.files = list(models.File.objects.all())
86
file = models.File.objects.get(id=int(int(kwargs['gid'])))
87
date = datetime.date(year, month, 1)
88
next_date = self._inc_date(date)
89
prev_date = self._dec_date(date)
91
return HttpResponse(self.template.render(Context({'javascript': json.dumps(file.get_nodes(date)), 'files': list(models.File.objects.all()), "next_date": next_date, "prev_date": prev_date, "id": kwargs['gid']})))
93
def _inc_date(self, date):
101
return datetime.date(year, month, 1)
103
def _dec_date(self, date):
111
return datetime.date(year, month, 1)
113
def event_post(self, request,*args, **kwargs):
75
115
Handler for post requests.
79
118
fileid = request.POST['dropdown']
80
119
file = models.File.objects.get(id=int(fileid))
81
return {'javascript': GDF().json(file.data), 'files': self.files}
120
self.files = list(models.File.objects.all())
121
return HttpResponseRedirect('/graph/fd/%s/%s/%s' %(fileid, 2010, 03))
122
#return {'javascript': json.dumps(file.get_nodes(), indent=4), 'files': list(models.File.objects.all()), 'next_date': date}