Project

General

Profile

« Previous | Next » 

Revision 786

xml_func.py: _date func: Fixed bug where setting defaults of a date part and removing zeros needed to happen after elements were converted to int. Refactored to use conv_items().

View differences:

lib/xml_func.py
38 38
    return str(sum_/count)
39 39

  
40 40
def date(items):
41
    items = dict(items)
42
    if 'date' in items:
43
        str_ = items['date']
41
    items = list(items) # Get all items *once* from iter
42
    try: str_ = dict(items)['date']
43
    except KeyError:
44
        items = dict(filter(lambda (k, v): v != 0, conv_items(int, items)))
45
        items.setdefault('year', 1900)
46
        items.setdefault('month', 1)
47
        items.setdefault('day', 1)
48
        try: date = datetime.date(**items)
49
        except ValueError, e: raise SyntaxException(e)
50
    else:
44 51
        try: year = float(str_)
45 52
        except ValueError:
46 53
            try: import dateutil.parser
......
49 56
            except ValueError, e: raise SyntaxException(e)
50 57
        else: date = (datetime.date(int(year), 1, 1) +
51 58
            datetime.timedelta(round((year % 1.)*365)))
52
    else:
53
        def get_part(part, default=1):
54
            val = items.get(part, default)
55
            if val == 0: val = default
56
            return val
57
        year = get_part('year', 1900)
58
        month = get_part('month')
59
        day = get_part('day')
60
        try:
61
            year = int(year)
62
            month = int(month)
63
            day = int(day)
64
            date = datetime.date(year, month, day)
65
        except ValueError, e: raise SyntaxException(e)
66 59
    try: return date.strftime('%Y-%m-%d')
67 60
    except ValueError, e: raise SyntaxException(e)
68 61

  

Also available in: Unified diff