import os, sys, datetime
iso8601_egg = "%s/iso8601-0.1.4-py2.4.egg" % os.path.dirname(sys.argv[0])
sys.path.append(os.path.abspath(iso8601_egg))
import iso8601
fee_table = ((30, 0, 0, 3),
( 0, 1, 0, 6),
(30, 1, 0, 9),
( 0, 2, 0, 12),
( 0, 3, 0, 15),
( 0, 4, 0, 18),
( 0, 7, 0, 22),
( 0, 0, 1, 24),
( 0, 6, 1, 36),
( 0, 0, 2, 48))
fees = [(datetime.timedelta(minutes=e[0],hours=e[1],days=e[2]), e[3])
for e in fee_table]
def calc_fee(enter, leave):
"""Calculate the fee for staying between enter and leave (both
must be iso8601 objects)"""
time = leave - enter
for limit, fee in fees:
if time <= limit:
return fee
fee = 24 * time.days
if (time - datetime.timedelta(time.days)).seconds / 3600 <= 6:
fee += 12
else:
fee += 24
return fee
def now_in_iso8601():
"Get now as an iso8601 object"
now = datetime.datetime.now()
return datetime.datetime(now.year, now.month, now.day,
now.hour, now.minute, now.second,
tzinfo=iso8601.iso8601.Utc())
def s_to_iso8601(s):
"Convert string s in 'almost iso8601' format to an iso8601 object"
return iso8601.parse_date(s.replace(' ', 'T') + ':00')