mirror of
https://github.com/postgres/pgweb.git
synced 2025-08-10 00:42:06 +00:00

This will allow us to increase the cache times in the browser for our CSS, which almost never changes. Enables a new value to be used in templates, {{gitrev}}, which can be used to bust pretty much any URL. We could do this for all the images in the templates as well, but since most of them almost never change, we'll just enable it manually for each individual image as it becomes necessray - or just use a ?1, ?2 etc for those. Enabled by default for CSS and JavaScript links, since those are much more likely to be changed without having the URL changed. Cache times aren't increased yet - we'll do that later one we're sure that all existing caches are expired first.
134 lines
4.5 KiB
Python
134 lines
4.5 KiB
Python
from django.shortcuts import render_to_response, get_object_or_404
|
|
from django.http import HttpResponse, Http404, HttpResponseRedirect
|
|
from django.template import TemplateDoesNotExist, loader, Context
|
|
from django.template.context import RequestContext
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.db.models import Q
|
|
from django.conf import settings
|
|
|
|
from decimal import Decimal
|
|
import os
|
|
|
|
from pgweb.util.decorators import ssl_required
|
|
from pgweb.util.contexts import NavContext
|
|
from pgweb.util.helpers import simple_form
|
|
|
|
from pgweb.core.models import Version
|
|
|
|
from models import DocPage, DocComment
|
|
from forms import DocCommentForm
|
|
|
|
def docpage(request, version, typ, filename):
|
|
loaddate = None
|
|
# Get the current version both to map the /current/ url, and to later
|
|
# determine if we allow comments on this page.
|
|
currver = Version.objects.filter(current=True)[0].tree
|
|
if version == 'current':
|
|
ver = currver
|
|
elif version == 'devel':
|
|
if not typ == 'static':
|
|
return HttpResponseRedirect("/docs/devel/static/%s.html" % filename)
|
|
ver = Decimal(0)
|
|
loaddate = Version.objects.get(tree=Decimal(0)).docsloaded
|
|
else:
|
|
ver = Decimal(version)
|
|
|
|
if ver < Decimal("7.1") and ver > Decimal(0):
|
|
extension = "htm"
|
|
else:
|
|
extension = "html"
|
|
|
|
if ver < Decimal("7.1") and ver > Decimal(0):
|
|
indexname = "postgres.htm"
|
|
elif ver == Decimal("7.1"):
|
|
indexname = "postgres.html"
|
|
else:
|
|
indexname = "index.html"
|
|
|
|
fullname = "%s.%s" % (filename, extension)
|
|
page = get_object_or_404(DocPage, version=ver, file=fullname)
|
|
versions = DocPage.objects.filter(file=fullname).extra(select={
|
|
'supported':"COALESCE((SELECT supported FROM core_version v WHERE v.tree=version), 'f')",
|
|
'testing':"COALESCE((SELECT testing FROM core_version v WHERE v.tree=version),0)",
|
|
}).order_by('-supported', '-version').only('version', 'file')
|
|
|
|
if typ=="interactive":
|
|
comments = DocComment.objects.filter(version=ver, file=fullname, approved=True).order_by('posted_at')
|
|
else:
|
|
comments = None
|
|
|
|
return render_to_response('docs/docspage.html', {
|
|
'page': page,
|
|
'supported_versions': [v for v in versions if v.supported],
|
|
'devel_versions': [v for v in versions if not v.supported and v.testing],
|
|
'unsupported_versions': [v for v in versions if not v.supported and not v.testing],
|
|
'title': page.title,
|
|
'doc_type': typ,
|
|
'comments': comments,
|
|
'can_comment': (typ=="interactive" and ver==currver),
|
|
'doc_index_filename': indexname,
|
|
'loaddate': loaddate,
|
|
}, RequestContext(request))
|
|
|
|
def docsrootpage(request, version, typ):
|
|
return docpage(request, version, typ, 'index')
|
|
|
|
def redirect_root(request, version):
|
|
return HttpResponseRedirect("/docs/%s/static/" % version)
|
|
|
|
def root(request):
|
|
versions = Version.objects.filter(Q(supported=True) | Q(testing__gt=0,tree__gt=0)).order_by('-tree')
|
|
return render_to_response('docs/index.html', {
|
|
'versions': versions,
|
|
}, NavContext(request, 'docs'))
|
|
|
|
class _VersionPdfWrapper(Version):
|
|
"""
|
|
A wrapper around a version that knows to look for PDF files, and
|
|
return their sizes.
|
|
"""
|
|
def __init__(self, version):
|
|
self.__version = version
|
|
self.a4pdf = self._find_pdf('A4')
|
|
self.uspdf = self._find_pdf('US')
|
|
# Some versions have, ahem, strange index filenames
|
|
if self.__version.tree < Decimal('6.4'):
|
|
self.indexname = 'book01.htm'
|
|
elif self.__version.tree < Decimal('7.0'):
|
|
self.indexname = 'postgres.htm'
|
|
elif self.__version.tree < Decimal('7.2'):
|
|
self.indexname = 'postgres.html'
|
|
else:
|
|
self.indexname = 'index.html'
|
|
def __getattr__(self, name):
|
|
return getattr(self.__version, name)
|
|
def _find_pdf(self, pagetype):
|
|
try:
|
|
return os.stat('%s/documentation/pdf/%s/postgresql-%s-%s.pdf' % (settings.STATIC_CHECKOUT, self.__version.tree, self.__version.tree, pagetype)).st_size
|
|
except:
|
|
return 0
|
|
|
|
def manuals(request):
|
|
# We don't include beta/rc's here. Why?
|
|
versions = Version.objects.filter(supported=True).order_by('-tree')
|
|
return render_to_response('docs/manuals.html', {
|
|
'versions': [_VersionPdfWrapper(v) for v in versions],
|
|
}, NavContext(request, 'docs'))
|
|
|
|
def manualarchive(request):
|
|
versions = Version.objects.filter(testing=0,supported=False,tree__gt=0).order_by('-tree')
|
|
return render_to_response('docs/archive.html', {
|
|
'versions': [_VersionPdfWrapper(v) for v in versions],
|
|
}, NavContext(request, 'docs'))
|
|
|
|
@ssl_required
|
|
@login_required
|
|
def commentform(request, itemid, version, filename):
|
|
return simple_form(DocComment, itemid, request, DocCommentForm,
|
|
fixedfields={
|
|
'version': version,
|
|
'file': filename,
|
|
},
|
|
redirect='/docs/comment_submitted/'
|
|
)
|