title: Time slot availablity in python
body: <p>I am writing a slot booking algorithm for my application in python 
  like this </p>
  
  <pre><code>from datetime import datetime, timedelta
  
  appointments = [(datetime(2012, 5, 22, 10), datetime(2012, 5, 22, 10, 30)),
                  (datetime(2012, 5, 22, 12), datetime(2012, 5, 22, 13)),
                  (datetime(2012, 5, 22, 15, 30), datetime(2012, 5, 22, 17, 10))]
  
  hours = (datetime(2012, 5, 22, 9), datetime(2012, 5, 22, 18))
  
  def get_slots(hours, appointments, duration=timedelta(hours=1)):
      slots = sorted([(hours[0], hours[0])] + appointments + [(hours[1], hours[1])])
      for start, end in ((slots[i][1], slots[i+1][0]) for i in range(len(slots)-1)):
          assert start &lt;= end, "Cannot attend all appointments"
          while start + duration &lt;= end:
              print "{:%H:%M} - {:%H:%M}".format(start, start + duration)
              start += duration
  </code></pre>
  
  <p>This works fine for me if i am checking slot for a particular date within 9 hours to 18 hours 
  But it is not fulfilling my requirements for week or month availability .Because i want to check availability for week or month between 9 hour to 18 hour .</p>
  
  <p>Please help me to improve my code so that it could check the available slots between 9 hours to 18 hours for weeks and months also.</p>