from django import forms, http, template from django.contrib.auth.decorators import login_required from django.shortcuts import get_object_or_404, render_to_response from django.http import HttpResponse, Http404, HttpResponseServerError import os, commands from models import * from settings import * from django.contrib.comments.models import Comment,FreeComment # Create your views here. def frontpage(request): t = fromslug('') t.update() #TODO: doesn't display free comments unless there's a comment lc = Comment.objects.filter(content_type__name="item").order_by('-submit_date')[:6] lfc = FreeComment.objects.filter(content_type__name="item").order_by('-submit_date')[:6] return render_to_response('git_wiki/frontpage.html', \ dict(shortlog=shortlog(), tree=t, latest_comments=lc, latest_freecomments=lfc, newitems=newest_items())) def tree(request, reqslug, tree=None): if not tree: t = fromslug(reqslug) if not t: raise Http404 if t.type == 'blob': return item(request, reqslug, blob=t) else: t = tree t.update() (heads,tags) = reposcan() return render_to_response('git_wiki/tree.html', dict(shortlog=shortlog(tree=t), tree=t, heads=heads,tags=tags)) def item(request, reqslug, blob=None): if not blob: i = fromslug(reqslug) if not i: raise Http404 if i.type == 'tree': return tree(request, reqslug) else: i = blob i.update() try: from docutils.core import publish_parts except ImportError: if settings.DEBUG: raise HttpResponseServerError(request) else: docutils_settings = getattr(settings, "GITWIKI_REST_SETTINGS", {}) parts = publish_parts(source=i.contents, writer_name="html4css1", settings_overrides=docutils_settings) return render_to_response('git_wiki/item.html', dict(item=i,doc=parts,user=request.user)) def latexitem(request, reqslug, blob=None): if not blob: i = fromslug(reqslug) if not i: raise Http404 if i.type == 'tree': return tree(request, reqslug) else: i = blob i.update() try: from docutils.core import publish_parts except ImportError: if settings.DEBUG: raise HttpResponseServerError(request) else: docutils_settings = getattr(settings, "GITWIKI_REST_SETTINGS", {}) parts = publish_parts(source=i.contents, writer_name="latex", settings_overrides=docutils_settings) hr = HttpResponse(mimetype="text/plain") hr['Content-Disposition'] = 'filename=%s.tex' % reqslug hr.write(parts['whole'].replace('{\$}','$')) #hr.write(parts['whole']) return hr def pdfitem(request, reqslug, blob=None): if not blob: i = fromslug(reqslug) if not i: raise Http404 if i.type == 'tree': return tree(request, reqslug) else: i = blob i.update() try: from docutils.core import publish_parts except ImportError: if settings.DEBUG: raise HttpResponseServerError(request) else: docutils_settings = getattr(settings, "GITWIKI_REST_SETTINGS", {}) parts = publish_parts(source=i.contents, writer_name="latex", settings_overrides=docutils_settings) hr = HttpResponse(mimetype="text/plain") hr['Content-Disposition'] = 'filename=%s.tex' % reqslug hr.write(parts['whole']) return hr def rawitem(request, reqslug, blob=None): if reqslug.endswith('/'): reqslug=reqslug[:-1] if not blob: i = fromslug(reqslug) if not i: raise Http404 if i.type == 'tree': return tree(request, reqslug) else: i = blob i.update() slug = i.slug() r = HttpResponse(mimetype="text/plain") r['Content-Disposition'] = 'filename=%s.txt' % reqslug r.write(i.contents) return r def figure(request, reqslug, blob=None, download=False): if reqslug.endswith('/'): reqslug=reqslug[:-1] if not blob: i = fromslug(reqslug) if not i: l = reqslug.split('/') if l[-2] == 'fig': l = l[:-3] + l[-2:] else: l = l[:-2] + l[-1:] i = fromslug('/'.join(l)) if not i: raise Http404 if i.type == 'tree': return tree(request, reqslug) else: i = blob mime = "image/image" slug = i.slug() i.update() if slug.endswith('.jpg') or slug.endswith('.jpeg'): mime = "image/jpeg" elif slug.endswith('.png'): mime = "image/jpeg" elif slug.endswith('.gif'): mime = "image/jpeg" elif slug.endswith('.svg'): mime = "image/svg+xml" r = HttpResponse(mimetype=mime) if download: r['Content-Disposition'] = 'attachment; filename=%s' % reqslug else: r['Content-Disposition'] = 'filename=%s' % reqslug f = i.getfile() t = f.readlines() r.write(i.contents) return r def olditem(request, hash): i = get_object_or_404(Item, id=hash) i.update() return render_to_response('git_browse/olditem.html', dict(item=i)) def view_commit(request, hash): (heads, tags) = reposcan() c = Commit(id=hash) c.update() return render_to_response('git_wiki/commit.html', dict(heads=heads, tags=tags, commit=c))