misc: use django implementation of safe strftime (#19845)

This commit is contained in:
Frédéric Péters 2017-11-01 20:45:37 +01:00
parent eee2b42761
commit f3bd582542
11 changed files with 25 additions and 83 deletions

View File

@ -1,6 +1,6 @@
import datetime
from wcs.qommon.strftime import strftime
from wcs.qommon.misc import strftime
def test():
# Make sure that the day names are in order

View File

@ -84,13 +84,13 @@ def get_formdata_dict(formdata, user, consider_status_visibility=True):
d = {'title': title,
'name': formdata.formdef.name,
'url': formdata.get_url(),
'datetime': misc.strftime.strftime('%Y-%m-%d %H:%M:%S', formdata.receipt_time),
'datetime': misc.strftime('%Y-%m-%d %H:%M:%S', formdata.receipt_time),
'status': status.name,
'status_css_class': status.extra_css_class,
'keywords': formdata.formdef.keywords_list,
}
if formdata.last_update_time:
d['last_update_time'] = misc.strftime.strftime('%Y-%m-%d %H:%M:%S', formdata.last_update_time)
d['last_update_time'] = misc.strftime('%Y-%m-%d %H:%M:%S', formdata.last_update_time)
d.update(formdata.get_substitution_variables(minimal=True))
if get_request().form.get('full') == 'on':
d.update(formdata.get_json_export_dict(include_files=False))
@ -540,7 +540,7 @@ class ApiUserDirectory(Directory):
d = {'title': title,
'name': form.formdef.name,
'url': url,
'datetime': misc.strftime.strftime('%Y-%m-%d %H:%M:%S', form.receipt_time),
'datetime': misc.strftime('%Y-%m-%d %H:%M:%S', form.receipt_time),
'keywords': form.formdef.keywords_list,
}
if get_request().form.get('full') == 'on':

View File

@ -275,7 +275,7 @@ class UserViewDirectory(Directory):
r += htmltext('<ul class="biglist c-360-user-view">')
for formdata in cat_formdatas:
status_label = formdata.get_status_label()
submit_date = misc.strftime.strftime(
submit_date = misc.strftime(
misc.date_format(), formdata.receipt_time)
formdata_key_id = (formdata.formdef.id, formdata.id)
if formdata_key_id in viewable_formdatas_ids:
@ -2095,7 +2095,7 @@ class FormBackOfficeStatusPage(FormStatusPage):
status_label = status.name
else:
status_label = _('Unknown')
submit_date = misc.strftime.strftime(
submit_date = misc.strftime(
misc.date_format(), formdata.receipt_time)
if str(formdata.formdef_id) == str(self.formdef.id) and (
str(formdata.id) == str(self.filled.id)):

View File

@ -29,11 +29,9 @@ from quixote.html import htmltext, TemplateIO
from qommon import _
from qommon import evalutils
from qommon.form import *
from qommon.misc import localstrftime, date_format, ellipsize
from qommon.misc import localstrftime, strftime, date_format, ellipsize
from qommon import get_cfg, get_logger
from qommon.strftime import strftime
import data_sources
import portfolio

View File

@ -611,8 +611,8 @@ class FormData(StorableObject):
if self.id:
d.update({
'form_receipt_date': qommon.strftime.strftime(qommon.misc.date_format(), self.receipt_time),
'form_receipt_time': qommon.strftime.strftime('%H:%M', self.receipt_time),
'form_receipt_date': qommon.misc.strftime(qommon.misc.date_format(), self.receipt_time),
'form_receipt_time': qommon.misc.strftime('%H:%M', self.receipt_time),
'form_number': str(self.get_display_id()),
'form_number_raw': '%s' % self.id,
'form_url': self.get_url(),

View File

@ -31,7 +31,6 @@ from qommon import _
from qommon import template
from qommon import get_logger
from qommon.form import *
from qommon.strftime import strftime
from qommon.admin.texts import TextsDirectory

View File

@ -70,7 +70,7 @@ from wcs.portfolio import has_portfolio
from qommon import _, ngettext
import misc
from strftime import strftime
from .misc import strftime
from publisher import get_cfg
from . import ezt

View File

@ -31,6 +31,8 @@ import tempfile
import unicodedata
import hashlib
from django.utils import datetime_safe
from quixote import get_publisher, get_response, get_request
from quixote.html import htmltext
@ -38,8 +40,6 @@ from qommon import _
from qommon import get_cfg, get_logger, ezt
from qommon.errors import ConnectionError
import strftime
from urllib import urlencode, quote
from urllib2 import urlparse
from cStringIO import StringIO
@ -156,10 +156,20 @@ def get_datetime_language():
lang = os.environ.get('LC_ALL')[:2]
return lang
def strftime(fmt, dt):
if not dt:
return ''
if isinstance(dt, datetime.date):
dt = datetime.datetime(dt.year, dt.month, dt.day)
if not isinstance(dt, datetime.datetime):
# consider it a 9 elements tuple
dt = datetime.datetime(*dt[:6])
return datetime_safe.strftime(dt, fmt)
def localstrftime(t):
if not t:
return ''
return strftime.strftime(datetime_format(), t)
return strftime(datetime_format(), t)
DATE_FORMATS = {
'C': ['%Y-%m-%d'],

View File

@ -20,9 +20,8 @@ import re
import xml.etree.ElementTree as ET
import zipfile
from .misc import date_format, datetime_format
from .misc import date_format, datetime_format, strftime
from .evalutils import make_date, make_datetime
from .strftime import strftime
NS = {
'fo': 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0',

View File

@ -58,7 +58,6 @@ import logging
import logging.handlers
import logger
import storage
import strftime
import urllib
class ImmediateRedirectException(Exception):
@ -988,7 +987,7 @@ class QommonPublisher(Publisher, object):
'site_url': self.get_frontoffice_url(),
'site_url_backoffice': self.get_backoffice_url(),
'site_lang': (get_request() and hasattr(get_request(), 'language') and get_request().language) or 'en',
'today': strftime.strftime(misc.date_format(), time.localtime()),
'today': misc.strftime(misc.date_format(), time.localtime()),
'now': misc.localstrftime(time.localtime()),
'is_in_backoffice': (self.get_request() and self.get_request().is_in_backoffice()),
}

View File

@ -1,63 +0,0 @@
# Format a datetime.date using the proleptic Gregorian calendar
## http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-09/5281.html
## edited to support 9-value tuple as entry
import datetime
import time
def _findall(text, substr):
# Also finds overlaps
sites = []
i = 0
while 1:
j = text.find(substr, i)
if j == -1:
break
sites.append(j)
i=j+1
return sites
# I hope I did this math right. Every 28 years the
# calendar repeats, except through century leap years
# excepting the 400 year leap years. But only if
# you're using the Gregorian calendar.
def strftime(fmt, dt):
if not dt:
return ''
if not isinstance(dt, datetime.datetime) and not isinstance(dt, datetime.date):
# consider it a 9 elements tuple
dt = datetime.datetime(*dt[:6])
# WARNING: known bug with "%s", which is the number
# of seconds since the epoch. This is too harsh
# of a check. It should allow "%%s".
fmt = fmt.replace("%s", "s")
if dt.year > 1900:
return time.strftime(fmt, dt.timetuple())
year = dt.year
# For every non-leap year century, advance by
# 6 years to get into the 28-year repeat cycle
delta = 2000 - year
off = 6*(delta // 100 + delta // 400)
year = year + off
# Move to around the year 2000
year = year + ((2000 - year)//28)*28
timetuple = dt.timetuple()
s1 = time.strftime(fmt, (year,) + timetuple[1:])
sites1 = _findall(s1, str(year))
s2 = time.strftime(fmt, (year+28,) + timetuple[1:])
sites2 = _findall(s2, str(year+28))
sites = []
for site in sites1:
if site in sites2:
sites.append(site)
s = s1
syear = "%4d" % (dt.year,)
for site in sites:
s = s[:site] + syear + s[site+4:]
return s