From 11f82fae11d6bb7a62aabfa334f5d55d80535dd7 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Mon, 14 Oct 2013 17:02:21 +0200 Subject: [PATCH] Added command for expiring old pastes Added public field --- past3d/settings.py | 2 +- pastebin/forms.py | 2 +- pastebin/management/__init__.py | 0 pastebin/management/commands/__init__.py | 0 pastebin/management/commands/expire.py | 22 +++++++++++++ pastebin/models.py | 32 ++++++++++++++++++- pastebin/templates/pastebin/geometry.html | 10 ++++++ .../templates/pastebin/geometry_create.html | 1 - 8 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 pastebin/management/__init__.py create mode 100644 pastebin/management/commands/__init__.py create mode 100644 pastebin/management/commands/expire.py diff --git a/past3d/settings.py b/past3d/settings.py index 958b420..4d36cf0 100644 --- a/past3d/settings.py +++ b/past3d/settings.py @@ -32,7 +32,7 @@ ALLOWED_HOSTS = [] # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # although not all choices may be available on all operating systems. # In a Windows environment this must be set to your system time zone. -TIME_ZONE = 'America/Chicago' +TIME_ZONE = 'Europe/Berlin' # Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html diff --git a/pastebin/forms.py b/pastebin/forms.py index da9ce60..ab5a48b 100644 --- a/pastebin/forms.py +++ b/pastebin/forms.py @@ -6,4 +6,4 @@ from models import Geometry class GeometryForm(ModelForm): class Meta: model = Geometry - fields = ['name', 'description', 'file', 'sourcefile'] \ No newline at end of file + fields = ['name', 'description', 'public', 'expiration', 'file', 'sourcefile'] \ No newline at end of file diff --git a/pastebin/management/__init__.py b/pastebin/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pastebin/management/commands/__init__.py b/pastebin/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pastebin/management/commands/expire.py b/pastebin/management/commands/expire.py new file mode 100644 index 0000000..5b53804 --- /dev/null +++ b/pastebin/management/commands/expire.py @@ -0,0 +1,22 @@ +from datetime import datetime + +from django.core.management.base import BaseCommand, CommandError +from django.utils.timezone import utc + +from pastebin.models import Geometry + + +class Command(BaseCommand): + args = '' + help = 'Remove expired pastes and their files.' + + def handle(self, *args, **options): + for expiration in [Geometry.HOUR, Geometry.DAY, Geometry.WEEK, Geometry.MONTH]: + expiration_time = datetime.utcnow().replace(tzinfo=utc) - Geometry.DELTAS[expiration] + for geometry in Geometry.objects.all().filter(expiration = expiration, date__lte = expiration_time): + self.stdout.write("Expiring geometry: %s" % geometry.name) + geometry.file.delete() + if geometry.sourcefile : + geometry.sourcefile.delete() + geometry.delete() + self.stdout.write("done") \ No newline at end of file diff --git a/pastebin/models.py b/pastebin/models.py index 793ce07..93d0ba8 100644 --- a/pastebin/models.py +++ b/pastebin/models.py @@ -3,7 +3,7 @@ import struct import re from hashlib import md5 -from datetime import datetime +from datetime import datetime, timedelta from django.contrib.auth.models import User from django.db import models @@ -29,10 +29,30 @@ def safe_upload_path(base_dir): class Geometry(models.Model): + + HOUR = 0 + DAY = 1 + WEEK = 2 + MONTH = 3 + FORERVER = 4 + + EXPIRATION_CHOICES = ((HOUR, 'one hour'), + (DAY, 'one day'), + (WEEK, 'one week'), + (MONTH, 'one month'), + (FORERVER, 'forever')) + + DELTAS = { HOUR : timedelta(hours = 1), + DAY : timedelta(days = 1), + WEEK : timedelta(weeks = 1), + MONTH : timedelta(weeks = 4)} + name = models.CharField(max_length = 128) description = models.TextField(blank=True) user = models.ForeignKey(User, blank=True, null=True) date = models.DateTimeField(auto_now_add=True) + expiration = models.IntegerField(default = 0, choices = EXPIRATION_CHOICES) + public = models.BooleanField(default=True) polycount = models.IntegerField(blank=True, default=0) width = models.FloatField(blank=True, default=0) depth = models.FloatField(blank=True, default=0) @@ -40,6 +60,14 @@ class Geometry(models.Model): file = models.FileField(upload_to=safe_upload_path('models')) sourcefile = models.FileField(upload_to=safe_upload_path('sources'), blank=True) + def get_expiration_date(self): + for expiration in [self.HOUR, self.DAY, self.WEEK, self.MONTH]: + if self.expiration == expiration: + return self.date + self.DELTAS[expiration] + + return None + + def _generate_meta_infos(self): print "Generating metainfos %s" % self.name @@ -109,6 +137,8 @@ class Geometry(models.Model): self.height = max_coord[2] - min_coord[2] self.polycount = count + self.save() + def get_polycount(self): if self.polycount == 0: self._generate_meta_infos() diff --git a/pastebin/templates/pastebin/geometry.html b/pastebin/templates/pastebin/geometry.html index 36d91c4..53cb40c 100644 --- a/pastebin/templates/pastebin/geometry.html +++ b/pastebin/templates/pastebin/geometry.html @@ -105,6 +105,16 @@ {{ geometry.date}}
+ {% if geometry.get_expiration_date %} +
+
+ expires: +
+
+ {{ geometry.get_expiration_date|timeuntil}}
+
+
+ {% endif %}
by: diff --git a/pastebin/templates/pastebin/geometry_create.html b/pastebin/templates/pastebin/geometry_create.html index 427402c..9c296fa 100644 --- a/pastebin/templates/pastebin/geometry_create.html +++ b/pastebin/templates/pastebin/geometry_create.html @@ -19,7 +19,6 @@ $(document).ready(function() { }); $(".browsebutton").click(function() { - console.log("foo"); $(this).prev().prev().click(); }); });