[Zodb-checkins] CVS: StandaloneZConfig/ZConfig - datatypes.py:1.28
Barry Warsaw
barry at zope.com
Mon Apr 19 09:47:58 EDT 2004
Update of /cvs-repository/StandaloneZConfig/ZConfig
In directory cvs.zope.org:/tmp/cvs-serv7727/ZConfig
Modified Files:
datatypes.py
Log Message:
Added the timedelta standard datatype, which is similar to time-interval, but
returns a datetime.timedelta instead of a float.
Added test case and documentation.
=== StandaloneZConfig/ZConfig/datatypes.py 1.27 => 1.28 ===
--- StandaloneZConfig/ZConfig/datatypes.py:1.27 Mon Apr 12 11:27:00 2004
+++ StandaloneZConfig/ZConfig/datatypes.py Mon Apr 19 09:47:10 2004
@@ -16,6 +16,7 @@
import os
import re
import sys
+import datetime
# types.StringTypes was added in Python 2.2; basestring in 2.3
try:
@@ -277,6 +278,44 @@
return int(v[:-self._keysz]) * m
return int(v) * self._default
+
+def timedelta(s):
+ # Unlike the standard time-interval data type, which returns a float
+ # number of seconds, this datatype takes a wider range of syntax and
+ # returns a datetime.timedelta
+ #
+ # Accepts suffixes:
+ # w - weeks
+ # d - days
+ # h - hours
+ # m - minutes
+ # s - seconds
+ #
+ # and all arguments may be integers or floats, positive or negative.
+ # More than one time interval suffix value may appear on the line, but
+ # they should all be separated by spaces, e.g.:
+ #
+ # sleep_time 4w 2d 7h 12m 0.00001s
+ weeks = days = hours = minutes = seconds = 0
+ for part in s.split():
+ val = float(part[:-1])
+ suffix = part[-1]
+ if suffix == 'w':
+ weeks = val
+ elif suffix == 'd':
+ days = val
+ elif suffix == 'h':
+ hours = val
+ elif suffix == 'm':
+ minutes = val
+ elif suffix == 's':
+ seconds = val
+ else:
+ raise TypeError('bad part %s in %s' % (part, s))
+ return datetime.timedelta(weeks=weeks, days=days, hours=hours,
+ minutes=minutes, seconds=seconds)
+
+
stock_datatypes = {
"boolean": asBoolean,
"dotted-name": DottedNameConversion(),
@@ -306,10 +345,11 @@
'h': 60*60,
'd': 60*60*24,
}),
+ "timedelta": timedelta,
}
-class Registry:
+class Registry:
def __init__(self, stock=None):
if stock is None:
stock = stock_datatypes.copy()
More information about the Zodb-checkins
mailing list