[Tutor] working with time spans ?

Michele Alzetta michele.alzetta at aliceposta.it
Sat Jun 5 16:31:07 EDT 2004


[Tim, gives an interesting explanation of *]

Thanks Tim, I must say this escaped me in all my tutorial browsing !

Here is the latest product I came up with:

from datetime import datetime, date, timedelta

class TimeSpan(object):
    ''' I thought it might be useful to check if a timespan 
     is contained in another but also if a single moment
     is contained in another, so I added the isTimeSpan
     attribute and the exception '''
    def __init__(self, startimetuple, endtimetuple):
        self.starttime = datetime(*startimetuple)
        self.endtime = datetime(*endtimetuple)
	self.isTimeSpan = True
    def __contains__(self, timespan):
        try:
	    if timespan.isTimeSpan:
                return (self.starttime <= timespan.starttime) and \
                       (self.endtime >= timespan.endtime)
	except AttributeError:
            moment = datetime(*timespan)
	    return (self.starttime <= moment <= self.endtime)
    def length(self):
        return self.endtime - self.starttime


class Shift(TimeSpan):
    '''This derived class knows if the shift is a weekend or night
       shift, and won't accept shifts longer than 12 hours;
       doc, hol and label attributes will come in handy later on
       for the moment they're just here as placeholders'''
    def __init__(self, startimetuple, endtimetuple, doc = None, \
                 night = True, hol = False, weekend = False,   \
                 label = None):
        self.starttime = datetime(*startimetuple)
        self.endtime = datetime(*endtimetuple)
	self.isTimeSpan = True
        self.doc = doc
        self.night = night
        self.weekend = weekend
        self.hol = hol
        self.label = label
        if date.weekday(datetime.date(datetime(*startimetuple))) >= 5:
            self.weekend = True
        self.startday = self.starttime.day
        self.endday = self.endtime.day
        if self.startday == self.endday:
            self.night = False
        max = timedelta(hours = 12)
        assert self.length() <= max

Although not complete by any means, this actually seems to work, so I
was wandering if the end product of my program (not the pretty output, I
mean the 'content' i.e. the program's representation of a monthly shift
schedule) might not be a shelve list (containing an instance of my Shift
class for every single shift as elements) ... or maybe even a shelve
dictionary. 

However - wouldn't this be __very__ laborious in terms of memory and cpu
usage ?? Probably using a postgres database would be more efficient, but
I would like to keep things as independent from other programs as
possible (if it ever comes to the point where it passes from an
excercise in python learning to something actually useful, having to
bundle python + postgresql with the program would be a major nuisance).

-- 
Michele



More information about the Tutor mailing list