1 # Create your views here. |
|
2 from django.http import HttpResponse |
|
3 from django.utils.simplejson import dumps |
|
4 from django.contrib.csrf.middleware import csrf_exempt |
|
5 import django.forms as forms |
|
6 from django.db import connection |
|
7 from django.http import HttpResponse,Http404 |
|
8 from sphinxcomment.models import Comment, Element |
|
9 from django.shortcuts import get_object_or_404, render_to_response |
|
10 from django.template import Context |
|
11 from django.template.loader import get_template |
|
12 from django.utils.simplejson import dumps |
|
13 from django.conf import settings |
|
14 from os.path import join, splitext |
|
15 from BeautifulSoup import BeautifulSoup as bss, Tag |
|
16 |
|
17 #placeholder_string = open('paragraph_id.py').read() |
|
18 #exec placeholder_string |
|
19 |
|
20 def dump_queries(): |
|
21 # requires settings.DEBUG to be set to True in order to work |
|
22 if len(connection.queries) == 1: |
|
23 print connection.queries |
|
24 else: |
|
25 qs = {} |
|
26 for q in connection.queries: |
|
27 qs[q['sql']] = qs.setdefault(q['sql'], 0) + 1 |
|
28 for q in sorted(qs.items(), key=lambda x: x[1], reverse=True): |
|
29 print q |
|
30 print len(connection.queries) |
|
31 |
|
32 class CommentForm(forms.Form): |
|
33 name = forms.CharField(max_length=64) |
|
34 url = forms.URLField(max_length=128, required=False) |
|
35 comment = forms.CharField(widget=forms.Textarea(attrs={ |
|
36 'rows': 8, 'cols': 60 |
|
37 })) |
|
38 remember = forms.BooleanField(initial=True, required=False) |
|
39 |
|
40 def comments_by_chapter(chapter): |
|
41 objs = {} |
|
42 |
|
43 for c in Comment.objects.filter(element__chapter_name=chapter).order_by('date'): |
|
44 objs.setdefault(c.element.paragraph_id, []).append(c) |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 return objs |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 # def chapter(request): |
|
58 # template = get_template('comment.html') |
|
59 # resp = {} |
|
60 # for elt, comments in comments_by_chapter(chapter).iteritems(): |
|
61 # print elt ,comments |
|
62 # form = CommentForm(initial={ |
|
63 # 'paragraph_id': elt, |
|
64 # 'name': name |
|
65 # }) |
|
66 # resp[elt] = template.render(Context({ |
|
67 # 'paragraph_id': elt, |
|
68 # 'form': form, |
|
69 # 'length': len(comments), |
|
70 # 'query': comments, |
|
71 # })) |
|
72 # return HttpResponse(dumps(resp), mimetype='application/json') |
|
73 |
|
74 def chapter_count(request,chapter_name): |
|
75 print chapter_name |
|
76 chapter_name=chapter_name.split('.')[0] |
|
77 comment_objs = comments_by_chapter(chapter_name) |
|
78 resp={} |
|
79 temp_dict={} |
|
80 for elt, comments in comment_objs.iteritems(): |
|
81 temp_dict[elt]=len(comments) |
|
82 |
|
83 resp['count']=temp_dict |
|
84 |
|
85 |
|
86 print resp |
|
87 return HttpResponse(dumps(resp), mimetype='application/json') |
|
88 |
|
89 def single(request,paragraph_id, form=None, newid=None): |
|
90 if paragraph_id[-1]=='/': |
|
91 paragraph_id=paragraph_id[:-1] |
|
92 queryset = Comment.objects.filter(element=paragraph_id) |
|
93 print len(queryset) |
|
94 if form is None: |
|
95 form = CommentForm(initial={ |
|
96 'paragraph_id': paragraph_id, |
|
97 'name': request.session.get('name', ''), |
|
98 }) |
|
99 try: |
|
100 error = form.errors[0] |
|
101 except: |
|
102 error = '' |
|
103 print form.errors |
|
104 return render_to_response('comment.html', { |
|
105 'paragraph_id': paragraph_id, |
|
106 'form': form, |
|
107 'length': len(queryset), |
|
108 'query': queryset, |
|
109 'newid': newid or True, |
|
110 'error': error, |
|
111 }) |
|
112 |
|
113 |
|
114 |
|
115 |
|
116 def submit(request, paragraph_id): |
|
117 |
|
118 try: |
|
119 element = get_object_or_404(Element, paragraph_id=paragraph_id) |
|
120 except Http404: |
|
121 #creating chapter name from paragraph_id surely there is a better way using the context but i do not know as yet |
|
122 chapter_id='_'.join(paragraph_id.split('_')[0:-1]) |
|
123 chapter_name=chapter_id[-1::-1].replace('_','/',1)[-1::-1] |
|
124 element=Element(chapter_name=chapter_name,paragraph_id=paragraph_id) |
|
125 element.save() |
|
126 print element.chapter_name |
|
127 form = None |
|
128 newid = None |
|
129 |
|
130 if request.method == 'POST': |
|
131 form = CommentForm(request.POST) |
|
132 print form.errors |
|
133 if form.is_valid(): |
|
134 print form.cleaned_data |
|
135 data = form.cleaned_data |
|
136 if data.get('remember'): |
|
137 request.session['name'] = data['name'] |
|
138 request.session['url'] = data['url'] |
|
139 else: |
|
140 request.session.pop('name', None) |
|
141 request.session.pop('url', None) |
|
142 c = Comment(element=element, |
|
143 comment=data['comment'], |
|
144 submitter_name=data['name'], |
|
145 submitter_url=data['url'], |
|
146 ip=request.META.get('REMOTE_ADDR')) |
|
147 print c |
|
148 c.save() |
|
149 |
|
150 form = None |
|
151 return single(request, paragraph_id, form,) |
|
152 |
|
153 def test(request): |
|
154 print request |
|
155 string="<p>test comment</p>" |
|
156 return HttpResponse(string,mimetype="text/plain") |
|
157 |
|
158 def page(req, path): |
|
159 if splitext(path)[1] == '.html': |
|
160 soup = bss(open(join(settings.SPHINX_PROJECT, path)).read()) |
|
161 head = soup.find('head') |
|
162 first_script = Tag(soup, 'script') |
|
163 first_script['src'] = "_static/simplecomment.js" |
|
164 first_script['type'] = "text/javascript" |
|
165 second_script = Tag(soup, 'script') |
|
166 second_script['src'] = "_static/jquery.form.js" |
|
167 second_script['type'] = "text/javascript" |
|
168 head.insert(-1, first_script) |
|
169 head.insert(-1, second_script) |
|
170 counter = 0 |
|
171 page_identity = path.split('.')[0].replace('/', '_') |
|
172 for p in soup.findAll('p'): |
|
173 p['id'] = '%s_%s' %(page_identity, counter) |
|
174 counter += 1 |
|
175 return HttpResponse(str(soup)) |
|
176 else: |
|
177 return HttpResponse(open(join(settings.SPHINX_PROJECT, path)).read()) |
|
178 |
|
179 #return HttpResponse(dumps(string),mimetype="text/plain") |
|
180 #test= csrf_exempt(test) |
|
181 |
|