Remove lifetime.

This commit is contained in:
Julien Palard 2023-04-21 09:44:18 +02:00
parent e03b8635dd
commit a3365f3901
Signed by: mdk
GPG Key ID: 0EFC1AC1006886F8
11 changed files with 24 additions and 135 deletions

View File

@ -17,8 +17,6 @@ class PasteForm(ModelForm):
"language",
"title",
"content",
"lifetime",
"lifecount",
]
def save(self, commit=True):

View File

@ -0,0 +1,24 @@
# Generated by Django 4.2 on 2023-04-21 07:44
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("paste", "0004_remove_paste_password_remove_paste_salt_and_more"),
]
operations = [
migrations.RemoveField(
model_name="paste",
name="expired",
),
migrations.RemoveField(
model_name="paste",
name="lifecount",
),
migrations.RemoveField(
model_name="paste",
name="lifetime",
),
]

View File

@ -52,65 +52,22 @@ class Paste(models.Model):
)
size = models.IntegerField(default=0, editable=False)
paste_time = models.DateTimeField(default=datetime.now, editable=False)
lifetime = models.IntegerField(
default=settings.PASTE["default_lifetime"], choices=EXPIRE_CHOICES
)
lifecount = models.IntegerField(default=0, blank=True)
viewcount = models.IntegerField(default=0, editable=False)
expired = models.BooleanField(default=False, editable=False)
def compute_size(self):
"""Computes size."""
self.size = len(self.content)
def is_expired(self):
"""Return expiration status."""
if self.expired or self.time_expired() or self.view_expired():
return True
return False
def time_expired(self):
"""Check if paste lifetime is over."""
if not self.lifetime or self.lifetime - self.get_age() > 0:
return False
self.mark_expired()
return True
def get_age(self):
"""Return age in minutes"""
delta = timezone.now() - self.paste_time
return divmod(delta.days * 86400 + delta.seconds, 60)[0]
def expiration_time(self):
"""Return expiration time"""
if not self.lifetime:
return None
delta = timedelta(minutes=self.lifetime)
return self.paste_time + delta
def mark_expired(self):
"""Mark paste expired."""
self.expired = True
self.save()
def incr_viewcount(self):
"""Increment view counter."""
self.viewcount = self.viewcount + 1
self.save()
def view_expired(self):
"""Check if paste view count is over."""
if not self.lifecount:
return False
if self.lifecount <= self.viewcount:
self.mark_expired()
return True
return False
def __unicode__(self):
"""String representation."""
return self.slug
def __str__(self):
excerpt = repr(self.content[:100]) + ("..." if len(self.content) > 100 else "")
return "{} - {} - {}".format(self.slug, self.title, excerpt)

View File

@ -17,13 +17,6 @@ def render_pygments(request, paste, data):
return HttpResponse(rendered)
def render_form(request, paste, data):
"""Renders Form template."""
data["paste"] = paste
rendered = loader.render_to_string("paste/show-form.html", data, request)
return HttpResponse(rendered)
def render_raw(request, paste, data):
"""Renders RAW content."""
return HttpResponse(paste.content, content_type="text/plain")

View File

@ -1,10 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% block title %}{{ title }}{% endblock %}
{% block content %}
<h1>{{ title }}</h1>
<div id="expired">
<p><b>{% blocktrans %}This paste has expired{% endblocktrans %}</b>.</p>
<p>{% blocktrans %}Sorry but the paste you try to access has expired{% endblocktrans %}.</p>
</div>
{% endblock %}

View File

@ -32,30 +32,6 @@
{{ form.language.errors }}
</div>
<div class="col-auto">
<label class="sr-only" for="id_lifetime">{% trans 'Expire time' %}</label>
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text"><span class="add-on"><i class="icon-time"></i></span></div>
</div>
{{ form.lifetime|add_class:"form-control" }}
</div>
{{ form.lifetime.errors }}
</div>
{% if PASTE.has_expire_by_views %}
<div class="col-auto">
<label class="sr-only" for="id_lifecount">{% trans 'Expire allowed views' %}</label>
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text"><span class="add-on"><i class="icon-refresh"></i></span></div>
</div>
{{ form.lifecount|add_class:"form-control" }}
</div>
{{ form.lifecount.errors }}
</div>
{% endif %}
<div class="col-auto">
<button class="btn btn-primary btn-lg" type="submit">{% trans 'Paste' %}</button>
</div>

View File

@ -1,31 +0,0 @@
{% load i18n %}
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
{% if PASTE.has_meta_table %}
<table class="table table-striped table-bordered">
<tr>
<th>#</th>
<th>{% trans 'Language' %}</th>
<th>{% trans 'Size' %}</th>
<th>{% trans 'Paste time' %}</th>
<th>{% trans 'Visibility' %}</th>
<th>{% trans 'Protection' %}</th>
<th>{% trans 'Views' %}</th>
<th>{% trans 'Expire time' %}</th>
</tr>
<tr>
<td>{{ paste.id }}</td>
<td>{% trans paste.language.name %}</td>
<td>{{ paste.size }}</td>
<td>{{ paste.paste_time }}</td>
<td>{{ paste.viewcount }}{% if paste.lifecount > 0 %}/{{ paste.lifecount }}{% endif %}</td>
<td>{% if paste.expiration_time %}{{ paste.expiration_time }}{% else %}{% trans 'None' %}{% endif %}</td>
</tr>
</table>
{% endif %}
<div class="row">
<div class="span9">
{% if PASTE.has_title %}
<h1>{{ paste.title|truncatechars:50 }}</h1>
{% endif %}
</div>
</div>

View File

@ -1,14 +0,0 @@
{% extends "base.html" %}
{% block title %}{{ title }}{% endblock %}
{% block content %}
{% include "paste/paste-meta.html" %}
<form><textarea id="id_content">{{ paste.content }}</textarea></form>
{% endblock %}
{% block javascript %}
<script>
$(document).ready(function() {
$("#id_content").autoGrow();
});
</script>
{% endblock %}

View File

@ -6,5 +6,4 @@
{% endblock %}
{% block content %}
{{ highlighted|safe }}
{% include "paste/paste-meta.html" %}
{% endblock %}

View File

@ -56,8 +56,6 @@ def show(request, slug, renderer="pygments"):
paste = get_object_or_404(Paste, slug=slug)
data = {"title": paste.title, "slug": slug}
# Handling expiration
if paste.is_expired():
return render(request, "paste/expired.html")
# Before rendering actions
paste.incr_viewcount()
# Handling rendering modes

View File

@ -92,7 +92,6 @@ INSTALLED_APPS = (
PASTE = {
"has_title": False,
"has_expire_by_views": False,
"has_meta_table": False,
"enabled_renderers": ["pygments", "raw"],
"default_renderer": "pygments",