-
Notifications
You must be signed in to change notification settings - Fork 49
/
views.py
78 lines (58 loc) · 2.33 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/env python
import os
import re
from django.conf import settings
from django.db.models import Count
from django.http import HttpResponse
from django.shortcuts import render_to_response
from livesettings import config_value
from tastypie.serializers import Serializer
from panda.api.category import CategoryResource
from panda.models import Category, Dataset
def index(request):
"""
Page shell for the client-side application.
Bootstraps read-once data onto the page.
"""
serializer = Serializer()
cr = CategoryResource()
categories = list(Category.objects.annotate(dataset_count=Count('datasets')))
bundles = [cr.build_bundle(obj=c) for c in categories]
categories_bootstrap = [cr.full_dehydrate(b) for b in bundles]
uncategorized = Category(
id=settings.PANDA_UNCATEGORIZED_ID,
slug=settings.PANDA_UNCATEGORIZED_SLUG,
name=settings.PANDA_UNCATEGORIZED_NAME)
uncategorized.__dict__['dataset_count'] = Dataset.objects.filter(categories=None).count()
uncategorized_bundle = cr.full_dehydrate(cr.build_bundle(obj=uncategorized))
categories_bootstrap.append(uncategorized_bundle)
return render_to_response('index.html', {
'settings': settings,
'max_upload_size': int(config_value('MISC', 'MAX_UPLOAD_SIZE')),
'demo_mode': int(config_value('MISC', 'DEMO_MODE')),
'bootstrap_data': serializer.to_json({
'categories': categories_bootstrap
})
})
def jst(request):
"""
Compile JST templates into a javascript module.
"""
templates_path = os.path.join(settings.SITE_ROOT, 'client/static/templates')
compiled = ''
for dirpath, dirnames, filenames in os.walk(templates_path):
for filename in filenames:
name, extension = os.path.splitext(filename)
if extension != '.jst':
continue
fullpath = os.path.join(dirpath, filename)
with open(fullpath, 'r') as f:
contents = f.read()
# Borrowed from django-pipeline
contents = re.sub(r"\r?\n", "", contents)
contents = re.sub(r"'", "\\'", contents)
compiled += "PANDA.templates['%s'] = _.template('%s');\n" % (
name,
contents
)
return HttpResponse(compiled, mimetype='text/javascript')