Mercurial > p > roundup > code
annotate roundup/date.py @ 1669:17ec0bd6ecc5 maint-0.5
*** empty log message ***
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Wed, 18 Jun 2003 23:52:54 +0000 |
| parents | df49c7d31073 |
| children |
| rev | line source |
|---|---|
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1 # |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 # This module is free software, and you may redistribute it and/or modify |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 # under the same terms as Python, so long as this copyright message and |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
5 # disclaimer are retained in their original form. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
6 # |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
10 # POSSIBILITY OF SUCH DAMAGE. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
11 # |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
17 # |
| 1601 | 18 # $Id: date.py,v 1.40.2.2 2003-04-23 11:48:51 richard Exp $ |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
19 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
20 __doc__ = """ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
21 Date, time and time interval handling. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
22 """ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
23 |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
24 import time, re, calendar, types |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
25 from i18n import _ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
26 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
27 class Date: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
28 ''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
29 As strings, date-and-time stamps are specified with the date in |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
30 international standard format (yyyy-mm-dd) joined to the time |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 (hh:mm:ss) by a period ("."). Dates in this form can be easily compared |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 and are fairly readable when printed. An example of a valid stamp is |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 "2000-06-24.13:03:59". We'll call this the "full date format". When |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 Timestamp objects are printed as strings, they appear in the full date |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 format with the time always given in GMT. The full date format is |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 always exactly 19 characters long. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 For user input, some partial forms are also permitted: the whole time |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 or just the seconds may be omitted; and the whole date may be omitted |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 or just the year may be omitted. If the time is given, the time is |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 interpreted in the user's local time zone. The Date constructor takes |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 care of these conversions. In the following examples, suppose that yyyy |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 is the current year, mm is the current month, and dd is the current day |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 of the month; and suppose that the user is on Eastern Standard Time. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 "2000-04-17" means <Date 2000-04-17.00:00:00> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 "01-25" means <Date yyyy-01-25.00:00:00> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 "2000-04-17.03:45" means <Date 2000-04-17.08:45:00> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 "08-13.22:13" means <Date yyyy-08-14.03:13:00> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 "11-07.09:32:43" means <Date yyyy-11-07.14:32:43> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 "14:25" means <Date yyyy-mm-dd.19:25:00> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 "8:47:11" means <Date yyyy-mm-dd.13:47:11> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 "." means "right now" |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 The Date class should understand simple date expressions of the form |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 stamp + interval and stamp - interval. When adding or subtracting |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 intervals involving months or years, the components are handled |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 separately. For example, when evaluating "2000-06-25 + 1m 10d", we |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 first add one month to get 2000-07-25, then add 10 days to get |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 2000-08-04 (rather than trying to decide whether 1m 10d means 38 or 40 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 or 41 days). |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 Example usage: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 >>> Date(".") |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 <Date 2000-06-26.00:34:02> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 >>> _.local(-5) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 "2000-06-25.19:34:02" |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 >>> Date(". + 2d") |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
69 <Date 2000-06-28.00:34:02> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 >>> Date("1997-04-17", -5) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 <Date 1997-04-17.00:00:00> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
72 >>> Date("01-25", -5) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 <Date 2000-01-25.00:00:00> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 >>> Date("08-13.22:13", -5) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 <Date 2000-08-14.03:13:00> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 >>> Date("14:25", -5) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 <Date 2000-06-25.19:25:00> |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 The date format 'yyyymmddHHMMSS' (year, month, day, hour, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 minute, second) is the serialisation format returned by the serialise() |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
81 method, and is accepted as an argument on instatiation. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 ''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 def __init__(self, spec='.', offset=0): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 """Construct a date given a specification and a time zone offset. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 'spec' is a full date or a partial form, with an optional |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 added or subtracted interval. Or a date 9-tuple. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 'offset' is the local time zone offset from GMT in hours. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 """ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 if type(spec) == type(''): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 self.set(spec, offset=offset) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 y,m,d,H,M,S,x,x,x = spec |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 ts = calendar.timegm((y,m,d,H+offset,M,S,0,0,0)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 self.year, self.month, self.day, self.hour, self.minute, \ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 self.second, x, x, x = time.gmtime(ts) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 def addInterval(self, interval): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
99 ''' Add the interval to this date, returning the date tuple |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
100 ''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
101 # do the basic calc |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
102 sign = interval.sign |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
103 year = self.year + sign * interval.year |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 month = self.month + sign * interval.month |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 day = self.day + sign * interval.day |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 hour = self.hour + sign * interval.hour |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
107 minute = self.minute + sign * interval.minute |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
108 second = self.second + sign * interval.second |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 # now cope with under- and over-flow |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
111 # first do the time |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 while (second < 0 or second > 59 or minute < 0 or minute > 59 or |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 hour < 0 or hour > 59): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 if second < 0: minute -= 1; second += 60 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 elif second > 59: minute += 1; second -= 60 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 if minute < 0: hour -= 1; minute += 60 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 elif minute > 59: hour += 1; minute -= 60 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 if hour < 0: day -= 1; hour += 24 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 elif hour > 59: day += 1; hour -= 24 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
121 # fix up the month so we're within range |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
122 while month < 1 or month > 12: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 if month < 1: year -= 1; month += 12 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
124 if month > 12: year += 1; month -= 12 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
125 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
126 # now do the days, now that we know what month we're in |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 mdays = calendar.mdays |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
128 if month == 2 and calendar.isleap(year): month_days = 29 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
129 else: month_days = mdays[month] |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
130 while month < 1 or month > 12 or day < 0 or day > month_days: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 # now to day under/over |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
132 if day < 0: month -= 1; day += month_days |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
133 elif day > month_days: month += 1; day -= month_days |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
134 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
135 # possibly fix up the month so we're within range |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
136 while month < 1 or month > 12: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
137 if month < 1: year -= 1; month += 12 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
138 if month > 12: year += 1; month -= 12 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
139 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
140 # re-figure the number of days for this month |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
141 if month == 2 and calendar.isleap(year): month_days = 29 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
142 else: month_days = mdays[month] |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
143 return (year, month, day, hour, minute, second, 0, 0, 0) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
144 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
145 def applyInterval(self, interval): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
146 ''' Apply the interval to this date |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
147 ''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
148 self.year, self.month, self.day, self.hour, self.minute, \ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
149 self.second, x, x, x = self.addInterval(interval) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
150 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
151 def __add__(self, interval): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
152 """Add an interval to this date to produce another date. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
153 """ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
154 return Date(self.addInterval(interval)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
155 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
156 # deviates from spec to allow subtraction of dates as well |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
157 def __sub__(self, other): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
158 """ Subtract: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
159 1. an interval from this date to produce another date. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
160 2. a date from this date to produce an interval. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
161 """ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
162 if isinstance(other, Interval): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
163 other = Interval(other.get_tuple()) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
164 other.sign *= -1 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
165 return self.__add__(other) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
166 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
167 assert isinstance(other, Date), 'May only subtract Dates or Intervals' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
168 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
169 # TODO this code will fall over laughing if the dates cross |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
170 # leap years, phases of the moon, .... |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
171 a = calendar.timegm((self.year, self.month, self.day, self.hour, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
172 self.minute, self.second, 0, 0, 0)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
173 b = calendar.timegm((other.year, other.month, other.day, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
174 other.hour, other.minute, other.second, 0, 0, 0)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
175 diff = a - b |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
176 if diff < 0: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
177 sign = 1 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
178 diff = -diff |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
179 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
180 sign = -1 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
181 S = diff%60 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
182 M = (diff/60)%60 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
183 H = (diff/(60*60))%60 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
184 if H>1: S = 0 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
185 d = (diff/(24*60*60))%30 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
186 if d>1: H = S = M = 0 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
187 m = (diff/(30*24*60*60))%12 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
188 if m>1: H = S = M = 0 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
189 y = (diff/(365*24*60*60)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
190 if y>1: d = H = S = M = 0 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
191 return Interval((y, m, d, H, M, S), sign=sign) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
192 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
193 def __cmp__(self, other): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
194 """Compare this date to another date.""" |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
195 if other is None: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
196 return 1 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
197 for attr in ('year', 'month', 'day', 'hour', 'minute', 'second'): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
198 if not hasattr(other, attr): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
199 return 1 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
200 r = cmp(getattr(self, attr), getattr(other, attr)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
201 if r: return r |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
202 return 0 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
203 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
204 def __str__(self): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
205 """Return this date as a string in the yyyy-mm-dd.hh:mm:ss format.""" |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
206 return '%4d-%02d-%02d.%02d:%02d:%02d'%(self.year, self.month, self.day, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
207 self.hour, self.minute, self.second) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
208 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
209 def pretty(self, format='%d %B %Y'): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
210 ''' print up the date date using a pretty format... |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
211 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
212 Note that if the day is zero, and the day appears first in the |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
213 format, then the day number will be removed from output. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
214 ''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
215 str = time.strftime(format, (self.year, self.month, self.day, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
216 self.hour, self.minute, self.second, 0, 0, 0)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
217 # handle zero day by removing it |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
218 if format.startswith('%d') and str[0] == '0': |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
219 return ' ' + str[1:] |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
220 return str |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
221 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
222 def set(self, spec, offset=0, date_re=re.compile(r''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
223 (((?P<y>\d\d\d\d)-)?((?P<m>\d\d?)-(?P<d>\d\d?))?)? # yyyy-mm-dd |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
224 (?P<n>\.)? # . |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
225 (((?P<H>\d?\d):(?P<M>\d\d))?(:(?P<S>\d\d))?)? # hh:mm:ss |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
226 (?P<o>.+)? # offset |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
227 ''', re.VERBOSE), serialised_re=re.compile(r''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
228 (\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
229 ''', re.VERBOSE)): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
230 ''' set the date to the value in spec |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
231 ''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
232 m = serialised_re.match(spec) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
233 if m is not None: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
234 # we're serialised - easy! |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
235 self.year, self.month, self.day, self.hour, self.minute, \ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
236 self.second = map(int, m.groups()[:6]) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
237 return |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
238 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
239 # not serialised data, try usual format |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
240 m = date_re.match(spec) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
241 if m is None: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
242 raise ValueError, _('Not a date spec: [[yyyy-]mm-dd].' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
243 '[[h]h:mm[:ss]][offset]') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
244 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
245 info = m.groupdict() |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
246 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
247 # get the current date as our default |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
248 y,m,d,H,M,S,x,x,x = time.gmtime(time.time()) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
249 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
250 # override year, month, day parts |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
251 if info['m'] is not None and info['d'] is not None: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
252 m = int(info['m']) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
253 d = int(info['d']) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
254 if info['y'] is not None: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
255 y = int(info['y']) |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
256 # time defaults to 00:00:00 GMT - offset (local midnight) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
257 H = -offset |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
258 M = S = 0 |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
259 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
260 # override hour, minute, second parts |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
261 if info['H'] is not None and info['M'] is not None: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
262 H = int(info['H']) - offset |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
263 M = int(info['M']) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
264 S = 0 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
265 if info['S'] is not None: S = int(info['S']) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
266 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
267 # now handle the adjustment of hour |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
268 ts = calendar.timegm((y,m,d,H,M,S,0,0,0)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
269 self.year, self.month, self.day, self.hour, self.minute, \ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
270 self.second, x, x, x = time.gmtime(ts) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
271 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
272 if info.get('o', None): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
273 self.applyInterval(Interval(info['o'])) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
274 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
275 def __repr__(self): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
276 return '<Date %s>'%self.__str__() |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
277 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
278 def local(self, offset): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
279 """ Return this date as yyyy-mm-dd.hh:mm:ss in a local time zone. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
280 """ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
281 return Date((self.year, self.month, self.day, self.hour + offset, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
282 self.minute, self.second, 0, 0, 0)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
283 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
284 def get_tuple(self): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
285 return (self.year, self.month, self.day, self.hour, self.minute, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
286 self.second, 0, 0, 0) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
287 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
288 def serialise(self): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
289 return '%4d%02d%02d%02d%02d%02d'%(self.year, self.month, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
290 self.day, self.hour, self.minute, self.second) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
291 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
292 class Interval: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
293 ''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
294 Date intervals are specified using the suffixes "y", "m", and "d". The |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
295 suffix "w" (for "week") means 7 days. Time intervals are specified in |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
296 hh:mm:ss format (the seconds may be omitted, but the hours and minutes |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
297 may not). |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
298 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
299 "3y" means three years |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
300 "2y 1m" means two years and one month |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
301 "1m 25d" means one month and 25 days |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
302 "2w 3d" means two weeks and three days |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
303 "1d 2:50" means one day, two hours, and 50 minutes |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
304 "14:00" means 14 hours |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
305 "0:04:33" means four minutes and 33 seconds |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
306 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
307 Example usage: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
308 >>> Interval(" 3w 1 d 2:00") |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
309 <Interval + 22d 2:00> |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
310 >>> Date(". + 2d") + Interval("- 3w") |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
311 <Date 2000-06-07.00:34:02> |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
312 >>> Interval('1:59:59') + Interval('00:00:01') |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
313 <Interval + 2:00> |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
314 >>> Interval('2:00') + Interval('- 00:00:01') |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
315 <Interval + 1:59:59> |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
316 >>> Interval('1y')/2 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
317 <Interval + 6m> |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
318 >>> Interval('1:00')/2 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
319 <Interval + 0:30> |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
320 |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
321 Interval arithmetic is handled in a couple of special ways, trying |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
322 to cater for the most common cases. Fundamentally, Intervals which |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
323 have both date and time parts will result in strange results in |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
324 arithmetic - because of the impossibility of handling day->month->year |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
325 over- and under-flows. Intervals may also be divided by some number. |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
326 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
327 Intervals are added to Dates in order of: |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
328 seconds, minutes, hours, years, months, days |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
329 |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
330 Calculations involving months (eg '+2m') have no effect on days - only |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
331 days (or over/underflow from hours/mins/secs) will do that, and |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
332 days-per-month and leap years are accounted for. Leap seconds are not. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
333 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
334 The interval format 'syyyymmddHHMMSS' (sign, year, month, day, hour, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
335 minute, second) is the serialisation format returned by the serialise() |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
336 method, and is accepted as an argument on instatiation. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
337 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
338 TODO: more examples, showing the order of addition operation |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
339 ''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
340 def __init__(self, spec, sign=1): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
341 """Construct an interval given a specification.""" |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
342 if type(spec) == type(''): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
343 self.set(spec) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
344 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
345 if len(spec) == 7: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
346 self.sign, self.year, self.month, self.day, self.hour, \ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
347 self.minute, self.second = spec |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
348 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
349 # old, buggy spec form |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
350 self.sign = sign |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
351 self.year, self.month, self.day, self.hour, self.minute, \ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
352 self.second = spec |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
353 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
354 def __cmp__(self, other): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
355 """Compare this interval to another interval.""" |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
356 if other is None: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
357 return 1 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
358 for attr in ('year', 'month', 'day', 'hour', 'minute', 'second'): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
359 if not hasattr(other, attr): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
360 return 1 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
361 r = cmp(getattr(self, attr), getattr(other, attr)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
362 if r: return r |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
363 return 0 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
364 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
365 def __str__(self): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
366 """Return this interval as a string.""" |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
367 l = [] |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
368 if self.year: l.append('%sy'%self.year) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
369 if self.month: l.append('%sm'%self.month) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
370 if self.day: l.append('%sd'%self.day) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
371 if self.second: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
372 l.append('%d:%02d:%02d'%(self.hour, self.minute, self.second)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
373 elif self.hour or self.minute: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
374 l.append('%d:%02d'%(self.hour, self.minute)) |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
375 if l: |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
376 l.insert(0, {1:'+', -1:'-'}[self.sign]) |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
377 return ' '.join(l) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
378 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
379 def __add__(self, other): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
380 if isinstance(other, Date): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
381 # the other is a Date - produce a Date |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
382 return Date(other.addInterval(self)) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
383 elif isinstance(other, Interval): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
384 # add the other Interval to this one |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
385 a = self.get_tuple() |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
386 as = a[0] |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
387 b = other.get_tuple() |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
388 bs = b[0] |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
389 i = [as*x + bs*y for x,y in zip(a[1:],b[1:])] |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
390 i.insert(0, 1) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
391 i = fixTimeOverflow(i) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
392 return Interval(i) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
393 # nope, no idea what to do with this other... |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
394 raise TypeError, "Can't add %r"%other |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
395 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
396 def __sub__(self, other): |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
397 if isinstance(other, Date): |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
398 # the other is a Date - produce a Date |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
399 interval = Interval(self.get_tuple()) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
400 interval.sign *= -1 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
401 return Date(other.addInterval(interval)) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
402 elif isinstance(other, Interval): |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
403 # add the other Interval to this one |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
404 a = self.get_tuple() |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
405 as = a[0] |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
406 b = other.get_tuple() |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
407 bs = b[0] |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
408 i = [as*x - bs*y for x,y in zip(a[1:],b[1:])] |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
409 i.insert(0, 1) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
410 i = fixTimeOverflow(i) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
411 return Interval(i) |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
412 # nope, no idea what to do with this other... |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
413 raise TypeError, "Can't add %r"%other |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
414 |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
415 def __div__(self, other): |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
416 ''' Divide this interval by an int value. |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
417 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
418 Can't divide years and months sensibly in the _same_ |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
419 calculation as days/time, so raise an error in that situation. |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
420 ''' |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
421 try: |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
422 other = float(other) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
423 except TypeError: |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
424 raise ValueError, "Can only divide Intervals by numbers" |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
425 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
426 y, m, d, H, M, S = (self.year, self.month, self.day, |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
427 self.hour, self.minute, self.second) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
428 if y or m: |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
429 if d or H or M or S: |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
430 raise ValueError, "Can't divide Interval with date and time" |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
431 months = self.year*12 + self.month |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
432 months *= self.sign |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
433 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
434 months = int(months/other) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
435 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
436 sign = months<0 and -1 or 1 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
437 m = months%12 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
438 y = months / 12 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
439 return Interval((sign, y, m, 0, 0, 0, 0)) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
440 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
441 else: |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
442 # handle a day/time division |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
443 seconds = S + M*60 + H*60*60 + d*60*60*24 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
444 seconds *= self.sign |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
445 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
446 seconds = int(seconds/other) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
447 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
448 sign = seconds<0 and -1 or 1 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
449 seconds *= sign |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
450 S = seconds%60 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
451 seconds /= 60 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
452 M = seconds%60 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
453 seconds /= 60 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
454 H = seconds%24 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
455 d = seconds / 24 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
456 return Interval((sign, 0, 0, d, H, M, S)) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
457 |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
458 def set(self, spec, interval_re=re.compile(''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
459 \s*(?P<s>[-+])? # + or - |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
460 \s*((?P<y>\d+\s*)y)? # year |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
461 \s*((?P<m>\d+\s*)m)? # month |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
462 \s*((?P<w>\d+\s*)w)? # week |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
463 \s*((?P<d>\d+\s*)d)? # day |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
464 \s*(((?P<H>\d+):(?P<M>\d+))?(:(?P<S>\d+))?)? # time |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
465 \s*''', re.VERBOSE), serialised_re=re.compile(''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
466 (?P<s>[+-])?1?(?P<y>([ ]{3}\d|\d{4}))(?P<m>\d{2})(?P<d>\d{2}) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
467 (?P<H>\d{2})(?P<M>\d{2})(?P<S>\d{2})''', re.VERBOSE)): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
468 ''' set the date to the value in spec |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
469 ''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
470 self.year = self.month = self.week = self.day = self.hour = \ |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
471 self.minute = self.second = 0 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
472 self.sign = 1 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
473 m = serialised_re.match(spec) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
474 if not m: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
475 m = interval_re.match(spec) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
476 if not m: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
477 raise ValueError, _('Not an interval spec: [+-] [#y] [#m] [#w] ' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
478 '[#d] [[[H]H:MM]:SS]') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
479 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
480 info = m.groupdict() |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
481 for group, attr in {'y':'year', 'm':'month', 'w':'week', 'd':'day', |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
482 'H':'hour', 'M':'minute', 'S':'second'}.items(): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
483 if info.get(group, None) is not None: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
484 setattr(self, attr, int(info[group])) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
485 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
486 if self.week: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
487 self.day = self.day + self.week*7 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
488 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
489 if info['s'] is not None: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
490 self.sign = {'+':1, '-':-1}[info['s']] |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
491 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
492 def __repr__(self): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
493 return '<Interval %s>'%self.__str__() |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
494 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
495 def pretty(self): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
496 ''' print up the date date using one of these nice formats.. |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
497 ''' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
498 if self.year: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
499 if self.year == 1: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
500 return _('1 year') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
501 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
502 return _('%(number)s years')%{'number': self.year} |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
503 elif self.month or self.day > 13: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
504 days = (self.month * 30) + self.day |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
505 if days > 28: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
506 if int(days/30) > 1: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
507 s = _('%(number)s months')%{'number': int(days/30)} |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
508 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
509 s = _('1 month') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
510 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
511 s = _('%(number)s weeks')%{'number': int(days/7)} |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
512 elif self.day > 7: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
513 s = _('1 week') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
514 elif self.day > 1: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
515 s = _('%(number)s days')%{'number': self.day} |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
516 elif self.day == 1 or self.hour > 12: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
517 if self.sign > 0: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
518 return _('tomorrow') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
519 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
520 return _('yesterday') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
521 elif self.hour > 1: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
522 s = _('%(number)s hours')%{'number': self.hour} |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
523 elif self.hour == 1: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
524 if self.minute < 15: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
525 s = _('an hour') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
526 elif self.minute/15 == 2: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
527 s = _('1 1/2 hours') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
528 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
529 s = _('1 %(number)s/4 hours')%{'number': self.minute/15} |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
530 elif self.minute < 1: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
531 if self.sign > 0: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
532 return _('in a moment') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
533 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
534 return _('just now') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
535 elif self.minute == 1: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
536 s = _('1 minute') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
537 elif self.minute < 15: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
538 s = _('%(number)s minutes')%{'number': self.minute} |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
539 elif int(self.minute/15) == 2: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
540 s = _('1/2 an hour') |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
541 else: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
542 s = _('%(number)s/4 hour')%{'number': int(self.minute/15)} |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
543 if self.sign < 0: |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
544 s = s + _(' ago') |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
545 else: |
| 1601 | 546 s = _('in ') + s |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
547 return s |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
548 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
549 def get_tuple(self): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
550 return (self.sign, self.year, self.month, self.day, self.hour, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
551 self.minute, self.second) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
552 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
553 def serialise(self): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
554 sign = self.sign > 0 and '+' or '-' |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
555 return '%s%04d%02d%02d%02d%02d%02d'%(sign, self.year, self.month, |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
556 self.day, self.hour, self.minute, self.second) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
557 |
|
1489
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
558 def fixTimeOverflow(time): |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
559 ''' Handle the overflow in the time portion (H, M, S) of "time": |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
560 (sign, y,m,d,H,M,S) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
561 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
562 Overflow and underflow will at most affect the _days_ portion of |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
563 the date. We do not overflow days to months as we don't know _how_ |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
564 to, generally. |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
565 ''' |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
566 # XXX we could conceivably use this function for handling regular dates |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
567 # XXX too - we just need to interrogate the month/year for the day |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
568 # XXX overflow... |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
569 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
570 sign, y, m, d, H, M, S = time |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
571 seconds = sign * (S + M*60 + H*60*60 + d*60*60*24) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
572 if seconds: |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
573 sign = seconds<0 and -1 or 1 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
574 seconds *= sign |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
575 S = seconds%60 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
576 seconds /= 60 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
577 M = seconds%60 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
578 seconds /= 60 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
579 H = seconds%24 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
580 d = seconds / 24 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
581 else: |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
582 months = y*12 + m |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
583 sign = months<0 and -1 or 1 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
584 months *= sign |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
585 m = months%12 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
586 y = months/12 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
587 |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
588 return (sign, y, m, d, H, M, S) |
|
f0da50a17e3c
backport Interval fix from HEAD
Richard Jones <richard@users.sourceforge.net>
parents:
1356
diff
changeset
|
589 |
|
1356
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
590 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
591 def test(): |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
592 intervals = (" 3w 1 d 2:00", " + 2d", "3w") |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
593 for interval in intervals: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
594 print '>>> Interval("%s")'%interval |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
595 print `Interval(interval)` |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
596 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
597 dates = (".", "2000-06-25.19:34:02", ". + 2d", "1997-04-17", "01-25", |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
598 "08-13.22:13", "14:25") |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
599 for date in dates: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
600 print '>>> Date("%s")'%date |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
601 print `Date(date)` |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
602 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
603 sums = ((". + 2d", "3w"), (".", " 3w 1 d 2:00")) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
604 for date, interval in sums: |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
605 print '>>> Date("%s") + Interval("%s")'%(date, interval) |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
606 print `Date(date) + Interval(interval)` |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
607 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
608 if __name__ == '__main__': |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
609 test() |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
610 |
|
83f33642d220
[[Metadata associated with this commit was garbled during conversion from CVS
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
611 # vim: set filetype=python ts=4 sw=4 et si |
