Remove lifetime.
This commit is contained in:
parent
e03b8635dd
commit
a3365f3901
|
@ -17,8 +17,6 @@ class PasteForm(ModelForm):
|
|||
"language",
|
||||
"title",
|
||||
"content",
|
||||
"lifetime",
|
||||
"lifecount",
|
||||
]
|
||||
|
||||
def save(self, commit=True):
|
||||
|
|
|
@ -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",
|
||||
),
|
||||
]
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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 %}
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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 %}
|
|
@ -6,5 +6,4 @@
|
|||
{% endblock %}
|
||||
{% block content %}
|
||||
{{ highlighted|safe }}
|
||||
{% include "paste/paste-meta.html" %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue