sphinx_django/sphinxcomment/views.py~
changeset 4 e6e33366df0f
parent 3 de4a2ed2f34b
child 5 c263a26867d4
equal deleted inserted replaced
3:de4a2ed2f34b 4:e6e33366df0f
     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