~ausip/scibrowser/scibrowser-0.2

« back to all changes in this revision

Viewing changes to scibrowser/web/graph/views.py

  • Committer: mike
  • Date: 2010-07-15 02:00:41 UTC
  • Revision ID: mike-20100715020041-3gkaiinc6z8whr9e
added time series support to the graph generation system

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
import json
 
10
import datetime
 
11
 
8
12
 
9
13
class Handler(object):
10
14
    """
14
18
    def __init__(self, template=None):
15
19
        self.template = loader.get_template(template)
16
20
    
17
 
    def __call__(self, request, **kwargs):
 
21
    def __call__(self, request,*args, **kwargs):
18
22
        """
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}
23
27
        """
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))))
26
30
 
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)
31
35
        
32
 
    def event_get(self, request):
 
36
    def event_get(self, request,*args, **kwargs):
33
37
        return {'form': self.form}
34
38
    
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()
41
43
            
42
44
            try:
43
 
                c = models.Community.objects.get(name=self.community)
 
45
                c = models.Community.objects.get(name=request.FILES['file'].name)
44
46
            except:
45
 
                c = models.Community(name=self.community)
 
47
                c = models.Community(name=request.FILES['file'].name)
46
48
                c.save()
47
49
            
48
50
            try:
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)
50
52
            except:
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)
52
54
                f.save()
53
 
        GDF().insert(self.file, self.community)
 
55
        GDF().insert(self.file, request.FILES['file'].name)
54
56
        return self.event_get(request)
55
57
 
56
58
class GraphHandler(Handler):
61
63
    def __init__(self, template=None):
62
64
        self.file = gdf
63
65
        self.files = list(models.File.objects.all())
 
66
 
64
67
        super(GraphHandler, self).__init__(template)
65
68
    
66
 
    def event_get(self, request):
 
69
    def __call__(self, request,*args, **kwargs):
 
70
        """
 
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}
 
75
        """
 
76
        handler = getattr(self, "event_%s" %request.method.lower(), None)
 
77
        return handler(request,*args, **kwargs)
 
78
    
 
79
    def event_get(self, request,*args, **kwargs):
67
80
        """
68
81
            Handler for get requests.
69
82
            @param request
70
83
        """
71
 
        return {'javascript': GDF().json(self.file), 'files': self.files}
72
 
    
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)
 
90
            
 
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']})))
 
92
    
 
93
    def _inc_date(self, date):
 
94
        year = date.year
 
95
        month = date.month
 
96
        if month==12:
 
97
            month=1
 
98
            year += 1
 
99
        else:
 
100
            month += 1
 
101
        return datetime.date(year, month, 1)
 
102
    
 
103
    def _dec_date(self, date):
 
104
        year = date.year
 
105
        month = date.month
 
106
        if month == 1:
 
107
            month = 12
 
108
            year -= 1
 
109
        else:
 
110
            month -= 1
 
111
        return datetime.date(year, month, 1)
 
112
             
 
113
    def event_post(self, request,*args, **kwargs):
74
114
        """
75
115
            Handler for post requests.
76
116
            @param request
77
117
        """
78
 
 
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} 
82
123
 
83
124
 
84
125