|
1 import sys |
|
2 import django.forms as forms |
|
3 from django.db import connection |
|
4 from django.http import HttpResponse |
|
5 from hgbook.comments.models import Comment, Element |
|
6 from django.shortcuts import get_object_or_404, render_to_response |
|
7 from django.template import Context ,RequestContext |
|
8 from django.template.loader import get_template |
|
9 from django.utils.simplejson import dumps |
|
10 from p_list import * |
|
11 from BeautifulSoup import BeautifulSoup |
|
12 import glob |
|
13 html_folder='/home/amit/hgbook-alqua/web/html/' |
|
14 |
|
15 def sort_dict(dict): |
|
16 new_dict = {} |
|
17 sorted_keys = dict.keys() |
|
18 sorted_keys.sort() |
|
19 print >> sys.stderr , sorted_keys |
|
20 for key in sorted_keys: |
|
21 new_dict[key] = dict[key] |
|
22 |
|
23 return new_dict |
|
24 |
|
25 def dump_queries(): |
|
26 # requires settings.DEBUG to be set to True in order to work |
|
27 if len(connection.queries) == 1: |
|
28 print connection.queries |
|
29 else: |
|
30 qs = {} |
|
31 for q in connection.queries: |
|
32 qs[q['sql']] = qs.setdefault(q['sql'], 0) + 1 |
|
33 for q in sorted(qs.items(), key=lambda x: x[1], reverse=True): |
|
34 print q |
|
35 print len(connection.queries) |
|
36 |
|
37 class CommentForm(forms.Form): |
|
38 id = forms.CharField(widget=forms.HiddenInput) |
|
39 name = forms.CharField(max_length=64) |
|
40 url = forms.URLField(max_length=128, required=False) |
|
41 comment = forms.CharField(widget=forms.Textarea(attrs={ |
|
42 'rows': 8, 'cols': 60 |
|
43 })) |
|
44 remember = forms.BooleanField(initial=True, required=False) |
|
45 |
|
46 def search(request): |
|
47 print request |
|
48 |
|
49 |
|
50 def index(request): |
|
51 html_files = glob.glob(html_folder+'ch*.html') |
|
52 # print >> sys.stderr , html_files |
|
53 html_files.sort() |
|
54 link_list=['/review/html/'+a.split('/')[-1] for a in html_file] |
|
55 # print >> sys.stderr , html_files |
|
56 title_list=[] |
|
57 for html_file in html_files: |
|
58 file_str=open(html_file,'r').read() |
|
59 soup_obj=BeautifulSoup(''.join(file_str)) |
|
60 title_str=soup_obj.html.head.title.string |
|
61 title_str=unicode(title_str) |
|
62 title_str.encode('ascii','ignore') |
|
63 title_list.append(title_str) |
|
64 |
|
65 resp_dict=zip(link_list,title_list) |
|
66 |
|
67 return render_to_response('index.html', {'resp_dict': resp_dict }) |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 def comments_by_chapter(id): |
|
76 objs = {} |
|
77 for c in Comment.objects.filter(element=id, hidden=False).order_by('date'): |
|
78 objs.setdefault(c.element_id, []).append(c) |
|
79 return objs |
|
80 |
|
81 def chapter(request, id): |
|
82 template = get_template('comment.html') |
|
83 resp = {} |
|
84 for elt, comments in comments_by_chapter(id).iteritems(): |
|
85 |
|
86 form = CommentForm(initial={ |
|
87 'id': elt, |
|
88 'name': request.session.get('name', ''), |
|
89 }) |
|
90 |
|
91 |
|
92 |
|
93 resp[elt] = template.render(RequestContext({ |
|
94 'id': elt, |
|
95 'form': form, |
|
96 'length': len(comments), |
|
97 'query': comments, |
|
98 })) |
|
99 return HttpResponse(dumps(resp), mimetype='application/json') |
|
100 |
|
101 # queryset = Comment.objects.filter(element=id, hidden=False).order_by('date') |
|
102 # if form is None: |
|
103 # form = CommentForm(initial={ |
|
104 # 'id': id, |
|
105 # 'name': request.session.get('name', ''), |
|
106 # }) |
|
107 # try: |
|
108 # error = form.errors[0] |
|
109 # except: |
|
110 # error = '' |
|
111 # return render_to_response('comment.html', { |
|
112 # 'id': id, |
|
113 # 'form': form, |
|
114 # 'length': len(queryset), |
|
115 # 'query': queryset, |
|
116 # 'newid': newid or True, |
|
117 # 'error': error, |
|
118 # }) |
|
119 |
|
120 |
|
121 |
|
122 |
|
123 |
|
124 def single_com(request,id): |
|
125 |
|
126 # template = get_template('comment.html') |
|
127 resp = {} |
|
128 print >> sys.stderr ,id |
|
129 for i in p_list[id]: |
|
130 # form=None |
|
131 queryset = Comment.objects.filter(element=i, hidden=False).order_by('date') |
|
132 |
|
133 # if form is None: |
|
134 # form = CommentForm(initial={ |
|
135 # 'id': id, |
|
136 # 'name': request.session.get('name', ''), |
|
137 # }) |
|
138 if len(queryset)==0: |
|
139 resp[i] = "No" |
|
140 elif len(queryset)==1: |
|
141 resp[i]="One" |
|
142 else: |
|
143 resp[i] = len(queryset) |
|
144 # 'id': i, |
|
145 # 'form': form, |
|
146 # 'length': len(queryset), |
|
147 # 'query': queryset, |
|
148 |
|
149 return HttpResponse(dumps(resp), mimetype='application/json') |
|
150 # template = get_template('comment.html') |
|
151 # for i in p_list[id]: |
|
152 # form=None |
|
153 # queryset = Comment.objects.filter(element=i, hidden=False).order_by('date') |
|
154 # print queryset |
|
155 # if form is None: |
|
156 # form = CommentForm(initial={ |
|
157 # 'id': id, |
|
158 # 'name': request.session.get('name', ''), |
|
159 # }) |
|
160 # try: |
|
161 # error = form.errors[0] |
|
162 # except: |
|
163 # error = '' |
|
164 |
|
165 # return HttpResponse(response_list) |
|
166 |
|
167 |
|
168 |
|
169 |
|
170 |
|
171 |
|
172 def chapter_count(request, id): |
|
173 |
|
174 resp = comments_by_chapter(id) |
|
175 |
|
176 for elt, comments in resp.iteritems(): |
|
177 |
|
178 resp[elt] = len(comments) |
|
179 |
|
180 return HttpResponse(dumps(resp), mimetype='application/json') |
|
181 |
|
182 def single(request, id, form=None, newid=None ): |
|
183 queryset = Comment.objects.filter(element=id, hidden=False).order_by('date') |
|
184 if form is None: |
|
185 form = CommentForm(initial={ |
|
186 'id': id, |
|
187 'name': request.session.get('name', ''), |
|
188 }) |
|
189 try: |
|
190 error = form.errors[0] |
|
191 except: |
|
192 error = '' |
|
193 return render_to_response('comment.html', { |
|
194 'id': id, |
|
195 'form': form, |
|
196 'length': len(queryset), |
|
197 'query': queryset, |
|
198 'newid': newid or True, |
|
199 'error': error, |
|
200 }) |
|
201 |
|
202 def submit(request, id): |
|
203 # print request |
|
204 # print id |
|
205 try : |
|
206 element=Element.objects.get(id=id,chapter='chap_intro') |
|
207 except Element.DoesNotExist: |
|
208 element=Element(id=id) |
|
209 element.save() |
|
210 |
|
211 |
|
212 if request.method == 'POST': |
|
213 |
|
214 form = CommentForm(request.POST) |
|
215 |
|
216 if form.is_valid(): |
|
217 data = form.cleaned_data |
|
218 |
|
219 if data.get('remember'): |
|
220 |
|
221 request.session['name'] = data['name'] |
|
222 request.session['url'] = data['url'] |
|
223 else: |
|
224 request.session.pop('name', None) |
|
225 request.session.pop('url', None) |
|
226 c = Comment(element=element, |
|
227 comment=data['comment'], |
|
228 submitter_name=data['name'], |
|
229 submitter_url=data['url'], |
|
230 ip=request.META.get('REMOTE_ADDR')) |
|
231 |
|
232 |
|
233 c.save() |
|
234 newid=c.id |
|
235 form = None |
|
236 return single(request, id, form, newid) |
|
237 |