Allow some features to be disabled.

This commit is contained in:
Julien Palard 2018-05-07 22:52:15 +02:00
parent c40425c6e3
commit 5e9b1aa020
7 changed files with 54 additions and 25 deletions

View File

@ -5,4 +5,6 @@ def app_details(request):
"""Passes settings details to the templates."""
return {'APP_NAME': settings.APP_NAME,
'APP_VERSION': settings.APP_VERSION,
'DISPLAY_NAME': settings.DISPLAY_NAME}
'DISPLAY_NAME': settings.DISPLAY_NAME,
'PASTE': settings.PASTE,
}

View File

@ -36,13 +36,14 @@ class Paste(models.Model):
language = models.ForeignKey(Language, default=14, on_delete=models.SET_NULL, null=True)
slug = models.SlugField(unique=True, editable=False)
title = models.CharField(max_length=200, blank=True)
content = models.TextField(validators=[MaxLengthValidator(settings.MAX_CHARACTERS)])
content = models.TextField(validators=[MaxLengthValidator(
settings.PASTE['max_characters'])])
size = models.IntegerField(default=0, editable=False)
paste_time = models.DateTimeField(default=datetime.now, editable=False)
paste_ip = models.GenericIPAddressField(editable=False)
paste_agent = models.CharField(max_length=200, editable=False)
lifetime = models.IntegerField(default=0, choices=EXPIRE_CHOICES)
lifecount = models.IntegerField(default=0)
lifecount = models.IntegerField(default=0, blank=True)
viewcount = models.IntegerField(default=0, editable=False)
expired = models.BooleanField(default=False, editable=False)
private = models.BooleanField(default=False)

View File

@ -7,6 +7,7 @@
<form method="post" action="{% url 'index' %}">
{{ form.non_field_errors }}
<div class="row">
{% if PASTE.has_title %}
<div class="span6">
<label for="id_title">{% trans 'Title' %}</label>
<div class="input-prepend">
@ -15,6 +16,7 @@
</div>
{{ form.title.errors }}
</div>
{% endif %}
<div class="span3">
<label for="id_language">{% trans 'Language' %}</label>
<div class="input-prepend">
@ -31,7 +33,9 @@
</div>
<div class="row">
<div class="span12">
{% if PASTE.show_char_left %}
<span id="charsleft"><b id="charsleft_counter">...</b>&nbsp;{% trans 'characters left' %}</span>
{% endif %}
<label for="id_content">{% trans 'Content' %}</label>
{{ form.content }}
{{ form.content.errors }}
@ -46,6 +50,7 @@
</div>
{{ form.lifetime.errors }}
</div>
{% if PASTE.has_expire_by_views %}
<div class="span3">
<label for="id_lifecount">{% trans 'Expire allowed views' %}</label>
<div class="input-prepend">
@ -54,6 +59,7 @@
</div>
{{ form.lifecount.errors }}
</div>
{% endif %}
<div class="span6">
<label for="id_password">{% trans 'Password protected' %}</label>
<div class="input-prepend">
@ -69,5 +75,7 @@
</form>
{% endblock %}
{% block javascript %}
{% if PASTE.show_char_left %}
<script type="text/javascript" src="/static/js/paste.js"></script>
{% endif %}
{% endblock %}

View File

@ -1,6 +1,7 @@
{% load i18n %}
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<!--<table class="table table-striped table-bordered">
{% if PASTE.has_meta_table %}
<table class="table table-striped table-bordered">
<tr>
<th>#</th>
<th>{% trans 'Language' %}</th>
@ -24,13 +25,20 @@
<td>{% if paste.expiration_time %}{{ paste.expiration_time }}{% else %}{% trans 'None' %}{% endif %}</td>
</tr>
</table>
-->
<ul class="nav nav-pills pull-right">
{% for renderer in renderers %}
<li class="{% if renderer == current_renderer %}active{% endif %}">
<a href="{% url 'paste' slug=slug renderer=renderer %}">{{ renderer|capfirst }}</a>
</li>
{% endfor %}
</ul>
<h1>{{ paste.title|truncatechars:50 }}</h1>
{% endif %}
<div class="row">
<div class="span9">
{% if PASTE.has_title %}
<h1>{{ paste.title|truncatechars:50 }}</h1>
{% endif %}
</div>
<div class="span3">
<ul class="nav nav-pills pull-right">
{% for renderer in renderers %}
<li class="{% if renderer == current_renderer %}active{% endif %}">
<a href="{% url 'paste' slug=slug renderer=renderer %}">{{ renderer|capfirst }}</a>
</li>
{% endfor %}
</ul>
</div>
</div>

View File

@ -1,7 +1,7 @@
{% extends "base.html" %}
{% block title %}{{ title }}{% endblock %}
{% block title %} {{ title }}{% endblock %}
{% block content %}
{% include "paste/paste-meta.html" %}
{{ highlighted|safe }}
{% endblock %}
{% endblock %}

View File

@ -11,7 +11,7 @@ from webtools import settings
def index(request):
"""Displays form."""
data = {'menu': 'index',
'max_characters': settings.MAX_CHARACTERS}
'max_characters': settings.PASTE['max_characters']}
if request.method == 'POST':
paste = Paste(slug=random_id(Paste),
paste_ip=request.META['REMOTE_ADDR'],
@ -22,7 +22,8 @@ def index(request):
return render(request, 'paste/index.html', data)
form.save() # Some logic added to overrided method, see forms.py
return redirect(reverse('paste', kwargs={'slug': paste.slug}))
data['form'] = PasteForm()
data['form'] = PasteForm(initial={
'private': settings.PASTE['private_by_default']})
return render(request, 'paste/index.html', data)
@ -47,10 +48,10 @@ def show(request, slug, renderer='pygments'):
# Before rendering actions
paste.incr_viewcount()
# Handling rendering modes
if not renderer or renderer not in settings.ENABLED_RENDERERS:
renderer = settings.DEFAULT_RENDERER
if not renderer or renderer not in settings.PASTE['enabled_renderers']:
renderer = settings.PASTE['default_renderer']
data['current_renderer'] = renderer
data['renderers'] = settings.ENABLED_RENDERERS
data['renderers'] = settings.PASTE['enabled_renderers']
render_method = getattr(renderers, 'render_%s' % renderer)
rendered_template = render_method(request, paste, data)
@ -64,5 +65,5 @@ def show(request, slug, renderer='pygments'):
def history(request):
"""Display last 25 public non-expired pastes."""
pastes = Paste.objects.filter(private=False, expired=False).order_by('-pk')[:25]
data = {'pastes': pastes, 'menu': 'history', 'default_renderer': settings.DEFAULT_RENDERER}
data = {'pastes': pastes, 'menu': 'history', 'default_renderer': settings.PASTE['default_renderer']}
return render(request, 'paste/history.html', data)

View File

@ -9,9 +9,6 @@ SITE_ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
### Customize/configure Pasteque
DISPLAY_NAME = 'Pasteque'
ENABLED_RENDERERS = ('pygments', 'form', 'raw') # Ensure show-***.html exists
DEFAULT_RENDERER = 'pygments'
MAX_CHARACTERS = 100000
COMPRESS_ENABLED = False
SECRET_KEY = 'change_me'
ALLOWED_HOSTS = ['localhost','127.0.0.1']
@ -89,6 +86,18 @@ INSTALLED_APPS = (
'compressor',
'paste',
)
PASTE = {
'has_title': False,
'has_expire_by_views': False,
'has_meta_table': False,
'show_char_left': False,
'private_by_default': True,
'enabled_renderers': ['pygments', 'raw'],
'default_renderer': 'pygments',
'max_characters': 100000,
}
LOGGING = {
'version': 1,
'disable_existing_loggers': False,