maposmatic/www/maposmatic/templatetags/extratags.py

128 wiersze
4.1 KiB
Python
Czysty Zwykły widok Historia

2009-08-31 17:36:21 +00:00
# coding: utf-8
# maposmatic, the web front-end of the MapOSMatic city map generation system
# Copyright (C) 2009 David Decotigny
# Copyright (C) 2009 Frédéric Lehobey
# Copyright (C) 2009 David Mentré
# Copyright (C) 2009 Maxime Petazzoni
# Copyright (C) 2009 Thomas Petazzoni
# Copyright (C) 2009 Gaël Utard
# Copyright (C) 2018 Hartmut Holzgraefe
2009-08-31 17:36:21 +00:00
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
Improve the file cleanup mechanism Previously, when the rendering directory was over the defined threshold, files where removed progressively, oldest first, to make up some space. No information was kept about jobs whose files were removed, making it harder to keep track of valid jobs with files available. This change introduces two new things: 1. a new job status, 3, for jobs processed but now without files, or "obsolete" jobs. 2. a new cleanup mechanism that considers jobs as the atomic unit of cleaning instead of files, as this would leave with jobs without all their renderings (which didn't make much sense). The cleanup function underwent the following modifications: * files are now sorted by content modification time and not last metadata change (a simple chmod could mess up the order); * thumbnails are excluded from the list of considered files for removal (this is still is discussion, but for now let's keep them); * when a file needs to be removed, all files from its parent job are removed and the job's status is set to 3 (see MapRenderingJob#remove_all_files). * if no parent job can be found, it's an orphaned file and can be safely removed. Files starting with a '.' are of course preserved; * some logging improvements during the cleanup phase. New 'job-done-obsolete' and 'job-error-obsolete' status icons are now available, and the status icon filename is now inferred with a custom template tag (this also led to some cleanup in extratags.py). The file size of the renderings is also displayed next to each format in the job information. Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
2010-01-13 13:46:40 +00:00
import datetime
import os
import re
Improve the file cleanup mechanism Previously, when the rendering directory was over the defined threshold, files where removed progressively, oldest first, to make up some space. No information was kept about jobs whose files were removed, making it harder to keep track of valid jobs with files available. This change introduces two new things: 1. a new job status, 3, for jobs processed but now without files, or "obsolete" jobs. 2. a new cleanup mechanism that considers jobs as the atomic unit of cleaning instead of files, as this would leave with jobs without all their renderings (which didn't make much sense). The cleanup function underwent the following modifications: * files are now sorted by content modification time and not last metadata change (a simple chmod could mess up the order); * thumbnails are excluded from the list of considered files for removal (this is still is discussion, but for now let's keep them); * when a file needs to be removed, all files from its parent job are removed and the job's status is set to 3 (see MapRenderingJob#remove_all_files). * if no parent job can be found, it's an orphaned file and can be safely removed. Files starting with a '.' are of course preserved; * some logging improvements during the cleanup phase. New 'job-done-obsolete' and 'job-error-obsolete' status icons are now available, and the status icon filename is now inferred with a custom template tag (this also led to some cleanup in extratags.py). The file size of the renderings is also displayed next to each format in the job information. Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
2010-01-13 13:46:40 +00:00
2009-08-29 09:06:30 +00:00
from django import template
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
2009-08-29 09:06:30 +00:00
2018-08-30 18:50:12 +00:00
import www.settings
import ocitysmap
2009-08-29 09:06:30 +00:00
register = template.Library()
def job_status_to_str(value, arg, autoescape=None):
if value == 0:
return _("Waiting for rendering to begin...")
2009-08-29 09:06:30 +00:00
elif value == 1:
return _("The rendering is in progress...")
2009-08-29 09:06:30 +00:00
elif value == 2:
Improve the file cleanup mechanism Previously, when the rendering directory was over the defined threshold, files where removed progressively, oldest first, to make up some space. No information was kept about jobs whose files were removed, making it harder to keep track of valid jobs with files available. This change introduces two new things: 1. a new job status, 3, for jobs processed but now without files, or "obsolete" jobs. 2. a new cleanup mechanism that considers jobs as the atomic unit of cleaning instead of files, as this would leave with jobs without all their renderings (which didn't make much sense). The cleanup function underwent the following modifications: * files are now sorted by content modification time and not last metadata change (a simple chmod could mess up the order); * thumbnails are excluded from the list of considered files for removal (this is still is discussion, but for now let's keep them); * when a file needs to be removed, all files from its parent job are removed and the job's status is set to 3 (see MapRenderingJob#remove_all_files). * if no parent job can be found, it's an orphaned file and can be safely removed. Files starting with a '.' are of course preserved; * some logging improvements during the cleanup phase. New 'job-done-obsolete' and 'job-error-obsolete' status icons are now available, and the status icon filename is now inferred with a custom template tag (this also led to some cleanup in extratags.py). The file size of the renderings is also displayed next to each format in the job information. Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
2010-01-13 13:46:40 +00:00
if arg == 'ok':
return _("Rendering was successful.")
Improve the file cleanup mechanism Previously, when the rendering directory was over the defined threshold, files where removed progressively, oldest first, to make up some space. No information was kept about jobs whose files were removed, making it harder to keep track of valid jobs with files available. This change introduces two new things: 1. a new job status, 3, for jobs processed but now without files, or "obsolete" jobs. 2. a new cleanup mechanism that considers jobs as the atomic unit of cleaning instead of files, as this would leave with jobs without all their renderings (which didn't make much sense). The cleanup function underwent the following modifications: * files are now sorted by content modification time and not last metadata change (a simple chmod could mess up the order); * thumbnails are excluded from the list of considered files for removal (this is still is discussion, but for now let's keep them); * when a file needs to be removed, all files from its parent job are removed and the job's status is set to 3 (see MapRenderingJob#remove_all_files). * if no parent job can be found, it's an orphaned file and can be safely removed. Files starting with a '.' are of course preserved; * some logging improvements during the cleanup phase. New 'job-done-obsolete' and 'job-error-obsolete' status icons are now available, and the status icon filename is now inferred with a custom template tag (this also led to some cleanup in extratags.py). The file size of the renderings is also displayed next to each format in the job information. Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
2010-01-13 13:46:40 +00:00
else:
2018-08-30 18:50:12 +00:00
if www.settings.CONTACT_EMAIL:
return _("Rendering failed! Please contact %(email)s for more information.") % {'email': www.settings.CONTACT_EMAIL}
else:
return _("Rendering failed!")
Improve the file cleanup mechanism Previously, when the rendering directory was over the defined threshold, files where removed progressively, oldest first, to make up some space. No information was kept about jobs whose files were removed, making it harder to keep track of valid jobs with files available. This change introduces two new things: 1. a new job status, 3, for jobs processed but now without files, or "obsolete" jobs. 2. a new cleanup mechanism that considers jobs as the atomic unit of cleaning instead of files, as this would leave with jobs without all their renderings (which didn't make much sense). The cleanup function underwent the following modifications: * files are now sorted by content modification time and not last metadata change (a simple chmod could mess up the order); * thumbnails are excluded from the list of considered files for removal (this is still is discussion, but for now let's keep them); * when a file needs to be removed, all files from its parent job are removed and the job's status is set to 3 (see MapRenderingJob#remove_all_files). * if no parent job can be found, it's an orphaned file and can be safely removed. Files starting with a '.' are of course preserved; * some logging improvements during the cleanup phase. New 'job-done-obsolete' and 'job-error-obsolete' status icons are now available, and the status icon filename is now inferred with a custom template tag (this also led to some cleanup in extratags.py). The file size of the renderings is also displayed next to each format in the job information. Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
2010-01-13 13:46:40 +00:00
elif value == 3:
if arg == 'ok':
return _("Rendering is obsolete: the rendering was successful, but the files are no longer available.")
2009-08-29 09:06:30 +00:00
else:
return _("Obsolete failed rendering: the rendering failed, and the incomplete files have been removed.")
elif value == 4:
return _("The rendering was cancelled by the user.")
Improve the file cleanup mechanism Previously, when the rendering directory was over the defined threshold, files where removed progressively, oldest first, to make up some space. No information was kept about jobs whose files were removed, making it harder to keep track of valid jobs with files available. This change introduces two new things: 1. a new job status, 3, for jobs processed but now without files, or "obsolete" jobs. 2. a new cleanup mechanism that considers jobs as the atomic unit of cleaning instead of files, as this would leave with jobs without all their renderings (which didn't make much sense). The cleanup function underwent the following modifications: * files are now sorted by content modification time and not last metadata change (a simple chmod could mess up the order); * thumbnails are excluded from the list of considered files for removal (this is still is discussion, but for now let's keep them); * when a file needs to be removed, all files from its parent job are removed and the job's status is set to 3 (see MapRenderingJob#remove_all_files). * if no parent job can be found, it's an orphaned file and can be safely removed. Files starting with a '.' are of course preserved; * some logging improvements during the cleanup phase. New 'job-done-obsolete' and 'job-error-obsolete' status icons are now available, and the status icon filename is now inferred with a custom template tag (this also led to some cleanup in extratags.py). The file size of the renderings is also displayed next to each format in the job information. Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
2010-01-13 13:46:40 +00:00
return ''
2009-08-29 09:06:30 +00:00
def feedparsed(value):
return datetime.datetime(*value[:6])
def file_basename(value):
try:
return os.path.basename(value.name)
except:
return ""
def add_blank_after_comma(value):
return value.replace(",",", ")
def _dd2dms(value):
abs_value = abs(value)
degrees = int(abs_value)
frac = abs_value - degrees
2018-10-14 09:32:56 +00:00
minutes = int(frac * 60)
seconds = (frac * 3600) % 60
return (degrees, minutes, seconds)
def latitude(value):
latitude = float(value)
(degrees, minutes, seconds) = _dd2dms(latitude)
hemisphere = 'N' if latitude >= 0 else 'S'
return "%d°%d'%d\"%s" % (degrees, minutes, seconds, hemisphere)
def longitude(value):
latitude = float(value)
(degrees, minutes, seconds) = _dd2dms(latitude)
hemisphere = 'E' if latitude >= 0 else 'W'
return "%d°%d'%d\"%s" % (degrees, minutes, seconds, hemisphere)
def bbox_km(value):
boundingbox = ocitysmap.coords.BoundingBox(
value.lat_upper_left,
value.lon_upper_left,
value.lat_bottom_right,
value.lon_bottom_right)
(height, width) = boundingbox.spheric_sizes()
return "ca. %d x %d km²" % (width/1000, height/1000)
def language_flag(value):
if value in www.settings.LANGUAGE_FLAGS:
if www.settings.LANGUAGE_FLAGS[value] != None:
return ("flag-icon flag-icon-%s" % www.settings.LANGUAGE_FLAGS[value])
return "fa fa-flag"
def locale_base(value):
return re.sub('\..*', '', value)
2009-08-29 09:06:30 +00:00
register.filter('job_status_to_str', job_status_to_str)
register.filter('feedparsed', feedparsed)
register.filter('abs', lambda x: abs(x))
register.filter('getitem', lambda d,i: d.get(i,''))
register.filter('file_basename', file_basename)
register.filter('add_blank_after_comma', add_blank_after_comma)
register.filter('latitude', latitude)
register.filter('longitude', longitude)
register.filter('bbox_km', bbox_km)
register.filter('language_flag', language_flag)
register.filter('locale_base', locale_base)