diff --git a/modules/miscutil/lib/dateutils.py b/modules/miscutil/lib/dateutils.py
index f1eca9aa0..0c5d41ab5 100644
--- a/modules/miscutil/lib/dateutils.py
+++ b/modules/miscutil/lib/dateutils.py
@@ -1,215 +1,267 @@
# -*- coding: utf-8 -*-
## $Id$
##
## Some functions about dates
##
## This file is part of the CERN Document Server Software (CDSware).
## Copyright (C) 2002, 2003, 2004, 2005 CERN.
##
## The CDSware is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License as
## published by the Free Software Foundation; either version 2 of the
## License, or (at your option) any later version.
##
## The CDSware 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
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with CDSware; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+"""
+API for date conversion and date related GUI creation.
+Lexicon
+ datetext:
+ textual format => 'YEAR-MONTH-DAY HOUR:MINUTE:SECOND'
+ e.g. '2005-11-16 15:11:44'
+ default value: '0000-00-00 00:00:00'
+
+ datestruct:
+ tuple format => see http://docs.python.org/lib/module-time.html
+ (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, WEEKDAY, YEARDAY, DAYLIGHT)
+ e.g. (2005, 11, 16, 15, 11, 44, 2, 320, 0)
+ default value: (0, 0, 0, 0, 0, 0, 0, 0, 0)
+
+ dategui:
+ textual format for output => 'DAY MONTH YEAR, HOUR:MINUTE'
+ e.g. '16 nov 2005, 15:11'
+ default value: _("N/A")
+"""
+
# External imports
from time import strptime, strftime, localtime
# CDS imports
from cdsware.config import cdslang
from cdsware.messages import gettext_set_language
-def get_i18n_dbdatetext(db_date, ln=cdslang):
+datetext_default = '0000-00-00 00:00:00'
+datestruct_default = (0, 0, 0, 0, 0, 0, 0, 0, 0)
+datetext_format = "%Y-%m-%d %H:%M:%S"
+
+
+
+def convert_datetext_to_dategui(datetext, ln=cdslang):
"""
- Convert a date from mySQL to the appropriate format.
- e.g.: "2004-02-28 14:53:02" => "28 feb 2004, 14:53"
+ Convert:
+ '2005-11-16 15:11:57' => '16 nov 2005, 15:11'
Month is internationalized
- @param db_date: date from mySQL
- @return a formatted string
- """
- _ = gettext_set_language(ln)
- input_format = "%Y-%m-%d %H:%M:%S"
+ """
try:
- pythonic_date = strptime(db_date, input_format)
- month = get_i18n_month_name(pythonic_date[1], ln=ln)
+ datestruct = convert_datetext_to_datestruct(datetext)
+ month = get_i18n_month_name(datestruct[1], ln=ln)
output_format = "%02d " + month + " %04Y, %02H:%02M"
- return strftime(output_format, pythonic_date)
+ return strftime(output_format, datestruct)
except ValueError:
+ _ = gettext_set_language(ln)
return _("N/A")
+
+def convert_datetext_to_datestruct(datetext):
+ """
+ Convert:
+ '2005-11-16 15:11:57' => (2005, 11, 16, 15, 11, 44, 2, 320, 0)
+ """
+ try:
+ return strptime(datetext, datetext_format)
+ except ValueError:
+ return datestruct_default
-def get_i18n_pythondatetext(pythonic_date, ln=cdslang):
+def convert_datestruct_to_dategui(datestruct, ln=cdslang):
"""
- Convert a given date (formatted in python's time struct) to a textual representation
+ Convert:
+ (2005, 11, 16, 15, 11, 44, 2, 320, 0) => '16 nov 2005, 15:11'
+ Month is internationalized
"""
- _ = gettext_set_language(ln)
try:
- month = get_i18n_month_name(pythonic_date[1], ln=ln)
+ month = get_i18n_month_name(datestruct[1], ln=ln)
output_format = "%02d " + month + " %04Y, %02H:%02M"
- return strftime(output_format, pythonic_date)
+ return strftime(output_format, datestruct)
except ValueError:
+ _ = gettext_set_language(ln)
return _("N/A")
+def convert_datestruct_to_datetext(datestruct):
+ """
+ Convert:
+ (2005, 11, 16, 15, 11, 44, 2, 320, 0) => '2005-11-16 15:11:57'
+ """
+ try:
+ return strftime(datetext_format, datestruct)
+ except ValueError:
+ return datetext_default
+
+
+def get_datetext(year, month, day):
+ """
+ year=2005, month=11, day=16 => '2005-11-16 00:00:00'
+ """
+ input_format = "%Y-%m-%d"
+ try:
+ datestruct = strptime("%i-%i-%i"% (year, month, day), input_format)
+ return strftime(datetext_format, datestruct)
+ except ValueError:
+ return datetext_default
+
+def get_datestruct(year, month, day):
+ """
+ year=2005, month=11, day=16 => (2005, 11, 16, 0, 0, 0, 2, 320, -1)
+ """
+ input_format = "%Y-%m-%d"
+ try:
+ return strptime("%i-%i-%i"% (year, month, day), input_format)
+ except ValueError:
+ return datestruct_default
def get_i18n_day_name(day_nb, display='short', ln=cdslang):
"""
get the string representation of a weekday, internationalized
@param day_nb: number of weekday UNIX like.
- =>0=Sunday
+ => 0=Sunday
@param ln: language for output
@return the string representation of the day
"""
_ = gettext_set_language(ln)
if display == 'short':
days = {0: _("Sun"),
1: _("Mon"),
2: _("Tue"),
3: _("Wed"),
4: _("Thu"),
5: _("Fri"),
6: _("Sat")}
else:
days = {0: _("Sunday"),
1: _("Monday"),
2: _("Tuesday"),
3: _("Wednesday"),
4: _("Thursday"),
5: _("Friday"),
6: _("Saturday")}
return days[day_nb]
def get_i18n_month_name(month_nb, display='short', ln=cdslang):
"""
get a non-numeric representation of a month, internationalized.
@param month_nb: number of month, (1 based!)
=>1=jan,..,12=dec
@param ln: language for output
@return the string representation of month
"""
_ = gettext_set_language(ln)
if display == 'short':
monthes = {0: _("Month"),
1: _("Jan"),
2: _("Feb"),
3: _("Mar"),
4: _("Apr"),
5: _("May"),
6: _("Jun"),
7: _("Jul"),
8: _("Aug"),
9: _("Sep"),
10: _("Oct"),
11: _("Nov"),
12: _("Dec")}
else:
monthes = {0: _("Month"),
- 1: _("january"),
- 2: _("february"),
- 3: _("march"),
- 4: _("april"),
- 5: _("may"),
- 6: _("june"),
- 7: _("july"),
- 8: _("august"),
- 9: _("september"),
- 10: _("october"),
- 11: _("november"),
- 12: _("december")}
+ 1: _("January"),
+ 2: _("February"),
+ 3: _("March"),
+ 4: _("April"),
+ 5: _("May"),
+ 6: _("June"),
+ 7: _("July"),
+ 8: _("August"),
+ 9: _("September"),
+ 10: _("October"),
+ 11: _("November"),
+ 12: _("December")}
return monthes[month_nb]
-def get_db_date(year, month, day):
- """
- convert a given date to mySQL notation
- @param year: year as an int
- @param month: month as an int
- @param day: day as an int
- @return string representation of date or throws ValueError exception
- """
- input_format = "%Y-%m-%d"
- pythonic_date = strptime("%i-%i-%i"% (year, month, day), input_format)
- output_format = "%Y-%m-%d %H:%M:%S"
- return strftime(output_format, pythonic_date)
-
def create_day_selectbox(name, selected_day=0, ln=cdslang):
"""
Creates an HTML menu for day selection. (0..31 values).
@param name: name of the control (i.e. name of the var you'll get)
@param selected_day: preselect a day. Use 0 for the label 'Day'
@param ln: language of the menu
@return html a string
"""
_ = gettext_set_language(ln)
out = "\n"
return out
def create_month_selectbox(name, selected_month=0, ln=cdslang):
"""
Creates an HTML menu for month selection. Value of selected field is numeric
@param name: name of the control (your form will be sent with name=value...)
@param selected_month: preselect a month. use 0 for the Label 'Month'
@param ln: language of the menu
@return html as string
"""
out = "\n"
return out
-
def create_year_inputbox(name, value=0):
"""
Creates an HTML field (simple input) for year selection.
@param name: name of the control (i.e. name of the variable you'll get)
@param value: prefilled value (int)
@return html as string
"""
out = "\n"% (name, value)
return out
def create_year_selectbox(name, from_year=-1, length=10, selected_year=0, ln=cdslang):
"""
Creates an HTML menu (dropdownbox) for year selection.
@param name: name of control( i.e. name of the variable you'll get)
@param from_year: year on which to begin. if <0 assume it is current year
@param length: number of items in menu
@param selected_year: initial selected year (if in range), else: label is selected
@param ln: language
@return html as string
"""
_ = gettext_set_language(ln)
if from_year < 0:
from_year = localtime()[0]
out = "\n"
return out