Example #1
0
    def testFindAlertLevels(self):

        wa = WindowAlerts.WindowAlerts()
        now = datetime(2009, 1, 1)
 
        # we 37/144 = 25% of scheduble time blacked out
        # so we should raise a level 1 alert
        ns = wa.findAlertLevels(now)
        
        self.assertEquals(1, len(ns))             
        self.assertEquals(self.window, ns[0][0])
        self.assertEquals(1, ns[0][2])

        # if we introduce more blacked out time, we should
        # see this elevate to a level 2 alert
        blackout = create_blackout(project = self.project,
                                   start   = datetime(2009, 4, 8),
                                   end     = datetime(2009, 4, 11),
                                   repeat  = 'Once')

        ns = wa.findAlertLevels(now)

        self.assertEquals(1, len(ns))             
        self.assertEquals(self.window, ns[0][0])
        self.assertEquals(2, ns[0][2]) # level two!
Example #2
0
 def create_blackout(self):
     b = create_blackout(user = self.u,
                         start = datetime(2009, 1, 1),
                         end = datetime(2009, 12, 31),
                         repeat = 'Once',
                         description = "This is a test blackout.")
     return b
Example #3
0
 def create_blackout_for_project(self):
     b = create_blackout(project = self.p,
                         start = datetime(2009, 1, 1),
                         end = datetime(2009, 12, 31),
                         repeat = 'Once',
                         description = "This is a test blackout for a project.")
     return b
Example #4
0
    def testGetWindowTimes(self):

        # test
        wa = WindowAlerts.WindowAlerts()
        now = datetime(2009, 1, 1)
        times = wa.getWindowTimes(now)

        # expected result
        sch = [(datetime(2009, 4, 6), self.window.end_datetime()) ]
        bss = [(datetime(2009, 4, 6), datetime(2009, 4, 7, 13, 0))]
        schHrs = TimeAgent.timedelta2minutes(sch[0][1] - sch[0][0])/60.0
        bssHrs = TimeAgent.timedelta2minutes(bss[0][1] - bss[0][0])/60.0
        exp = [(self.window
              , (schHrs
               , bssHrs
               , sch
               , [bss]))]

        self.assertEquals(exp[0][0], times[0][0])
        self.assertEquals(exp[0][1], times[0][1])

        # add some blacked out time - 3 days
        bsStart = datetime(2009, 4, 8)
        bsEnd   = datetime(2009, 4, 11)
        blackout = create_blackout(project = self.project,
                                   start   = bsStart,
                                   end     = bsEnd,
                                   repeat  = 'Once')
        bss.insert(0, (bsStart, bsEnd))
        bssHrs += 3*24

        times = wa.getWindowTimes(now)

        exp = [(self.window
              , (schHrs
               , bssHrs
               , sch
               , [bss]))]

        self.assertEquals(exp[0][0], times[0][0])
        self.assertEquals(exp[0][1], times[0][1])

        # move the current time forward
        now = datetime(2009, 4, 9, 12, 15, 0)
        times = wa.getWindowTimes(now)

        sch = [(now, self.window.end_datetime()) ]
        bss = [(now, bsEnd)]
        schHrs = TimeAgent.timedelta2minutes(sch[0][1] - sch[0][0])/60.0
        bssHrs = TimeAgent.timedelta2minutes(bss[0][1] - bss[0][0])/60.0
        exp = [(self.window
              , (schHrs
               , bssHrs
               , sch
               , [bss]))]

        self.assertEquals(exp[0][0], times[0][0])
        self.assertEquals(exp[0][1], times[0][1])
Example #5
0
    def setUp(self):
        super(TestWindowAlerts, self).setUp()

        # setup a project with:
        #   * a user with blackouts
        #   * a windowed session
        #   * a number of windows

        # make the calendar look like this:
        # windows:
        # 4/5 - 4/12         5/5 - 5/12
        # default periods:
        #     4/10

        # user 1 blackouts:
        # 4/1 - 4/3
        # 4/1 - 4/7
        # 4/2 - 4/4

        # user 1 blackouts:
        # 4/1 - 4/3
        # 4/1 - 4/7

        # blacked out time:
        # 4/1 - 4/7

        self.project = Project()
        self.project_adapter = ProjectHttpAdapter(self.project)
        pdata = {"semester"   : "09A"
               , "type"       : "science"
               , "total_time" : "10.0"
               , "PSC_time"   : "10.0"
               , "sem_time"   : "10.0"
               , "grade"      : "4.0"
               , "notes"      : "notes"
               , "schd_notes" : "scheduler's notes"
        }
        self.project_adapter.update_from_post(pdata)

        # Create the first user (on project) 
        self.user1 = User(sanctioned = True)
        self.user1.save()
        self.user1.addRole("Observer")

        self.investigator1 =  Investigator(project  = self.project
                                         , user     = self.user1
                                         , observer = True)
        self.investigator1.save()
         
        # Create the second user (on project)
        self.user2 = User(sanctioned = True)
        self.user2.save()
        self.user2.addRole("Observer")

        self.investigator2 =  Investigator(project  = self.project
                                         , user     = self.user2
                                         , observer = True)
        self.investigator2.save()

        # Create Investigator1's 3 blackouts.
        blackout11 = create_blackout(user   = self.user1,
                                     repeat = 'Once',
                                     start  = datetime(2009, 4, 1, 11),
                                     end    = datetime(2009, 4, 3, 11))

        blackout12 = create_blackout(user   = self.user1,
                                     repeat = 'Once',
                                     start  = datetime(2009, 4, 1, 18),
                                     end    = datetime(2009, 4, 7, 18))

        blackout13 = create_blackout(user   = self.user1,
                                     repeat = 'Once',
                                     start  = datetime(2009, 4, 2, 12),
                                     end    = datetime(2009, 4, 7, 20))

        # Create Investigator2's 2 blackouts.
        blackout21 = create_blackout(user   = self.user2,
                                     repeat = 'Once',
                                     start  = datetime(2009, 4, 1, 11),
                                     end    = datetime(2009, 4, 3, 11))

        blackout22 = create_blackout(user   = self.user2,
                                     repeat = 'Once',
                                     start  = datetime(2009, 4, 1, 18),
                                     end    = datetime(2009, 4, 7, 13))

        # make a session
        self.sesshun = create_sesshun()
        self.sesshun.session_type = \
            Session_Type.objects.get(type = "windowed")
        self.sesshun.project = self.project
        # '1070' available 4/6 - 4/16
        SessionHttpAdapter(self.sesshun).save_receivers('1070')        
        self.sesshun.save()

        # make the first window
        self.window = Window(session = self.sesshun
                 #, start_date   = date(2009, 4, 5)
                 #, duration    = 7
                 , total_time = 4.0
                 , complete = False)
        self.window.save()
        wr = WindowRange(window = self.window
                       , start_date = date(2009, 4, 5)
                       , duration = 7)
        wr.save()               

        # make a period for it
        fdata = {'session'  : self.sesshun.id
               , 'date'     : '2009-04-10'
               , 'time'     : '10:00'
               , 'duration' : 4.0
               , 'backup'   : False}
        self.period = Period()
        self.period_adapter = PeriodHttpAdapter(self.period)
        self.period_adapter.init_from_post(fdata, 'UTC')

        # link the period and window
        self.period.window = self.window
        self.period.save()
        self.window.default_period = self.period
        self.window.save()

        # setup a receiver schedule
        # Schedule = 4/01/2009:   450,   600,  800
        #            4/06/2009:   600,   800, 1070
        #            4/11/2009:   800,  1070,  1_2
        #            4/16/2009:  1070,   1_2,  2_3
        #            4/21/2009:   1_2,   2_3,  4_6
        #            4/26/2009:   2_3,   4_6, 8_10
        #            5/01/2009:   4_6,  8_10, 12_18
        #            5/06/2009:  8_10, 12_18, 18_26
        #            5/11/2009: 12_18, 18_26, 26_40
        start   = datetime(2009, 4, 1, 0)
        end     = datetime(2009, 6, 1, 0)
        rcvr_id = 3
        for i in range(9):
            start_date = start + timedelta(5*i)
            for j in range(1, 4):
                rcvr_id = rcvr_id + 1
                rs = Receiver_Schedule()
                rs.start_date = start_date
                rs.receiver = Receiver.objects.get(id = rcvr_id)
                rs.save()
            rcvr_id = rcvr_id - 2
Example #6
0
    def setUp(self):
        super(TestElectiveAlerts, self).setUp()

        # setup a project with:
        #   * two users with blackouts
        #   * two elective sessions
        #   * limited receiver availability

        # make the calendar look like this:
        # electives:
        #   1: 4/2,4/3,4/7,4/9  &   2: 4/8,4/14,4/20

        # user 1 blackouts:
        # 4/1 - 4/3
        # 4/5 - 4/7

        # user 2 blackouts:
        # 4/1 - 4/4
        # 4/3 - 4/8

        self.project = Project()
        self.project_adapter = ProjectHttpAdapter(self.project)
        pdata = {
            "semester": "09A",
            "type": "science",
            "total_time": "10.0",
            "PSC_time": "10.0",
            "sem_time": "10.0",
            "grade": "4.0",
            "notes": "notes",
            "schd_notes": "scheduler's notes",
        }
        self.project_adapter.update_from_post(pdata)

        # Create the first user (on project)
        self.user1 = User(sanctioned=True)
        self.user1.save()

        self.investigator1 = Investigator(project=self.project, user=self.user1, observer=True)
        self.investigator1.save()

        # Create the second user (on project)
        self.user2 = User(sanctioned=True)
        self.user2.save()

        self.investigator2 = Investigator(project=self.project, user=self.user2, observer=True)
        self.investigator2.save()

        # Create Investigator1's blackouts.
        blackout11 = create_blackout(
            user=self.user1, repeat="Once", start=datetime(2009, 4, 1, 11), end=datetime(2009, 4, 4, 20)
        )

        blackout12 = create_blackout(
            user=self.user1, repeat="Once", start=datetime(2009, 4, 5, 18), end=datetime(2009, 4, 8, 9)
        )

        blackout13 = create_blackout(
            user=self.user1, repeat="Once", start=datetime(2009, 4, 9, 2), end=datetime(2009, 4, 17, 9)
        )

        # Create Investigator2's blackouts.
        blackout21 = create_blackout(
            user=self.user2, repeat="Once", start=datetime(2009, 4, 1, 11), end=datetime(2009, 4, 5, 11)
        )

        blackout22 = create_blackout(
            user=self.user2, repeat="Once", start=datetime(2009, 4, 6, 18), end=datetime(2009, 4, 8, 10)
        )

        blackout23 = create_blackout(
            user=self.user2, repeat="Once", start=datetime(2009, 4, 13, 18), end=datetime(2009, 4, 25, 13)
        )

        # make a session
        self.sesshun = create_sesshun()
        self.sesshun.session_type = Session_Type.objects.get(type="elective")
        self.sesshun.project = self.project
        # '1070' available 4/6 - 4/16
        SessionHttpAdapter(self.sesshun).save_receivers("1070")
        self.sesshun.save()

        # make the first elective
        self.elective1 = Elective(session=self.sesshun, complete=False)
        self.elective1.save()

        # make periods for it (10:15-14:15)
        dates = ["2009-04-02", "2009-04-03", "2009-04-07", "2009-04-09"]
        for date in dates:
            fdata = {"session": self.sesshun.id, "date": date, "time": "10:00", "duration": 4.0, "backup": False}
            period = Period()
            period_adapter = PeriodHttpAdapter(period)
            period_adapter.init_from_post(fdata, "UTC")

            # link the period and elective
            period.elective = self.elective1
            period.save()

        # make the second elective
        self.elective2 = Elective(session=self.sesshun, complete=False)
        self.elective2.save()

        # make periods for it (09:30-13:30)
        dates = ["2009-04-08", "2009-04-14", "2009-04-20"]
        for date in dates:
            fdata = {"session": self.sesshun.id, "date": date, "time": "09:30", "duration": 4.5, "backup": False}
            period = Period()
            period_adapter = PeriodHttpAdapter(period)
            period_adapter.init_from_post(fdata, "UTC")

            # link the period and elective
            period.elective = self.elective2
            period.save()

        # setup a receiver schedule
        # Schedule = 4/01/2009:   450,   600,  800
        #            4/06/2009:   600,   800, 1070
        #            4/11/2009:   800,  1070,  1_2
        #            4/16/2009:  1070,   1_2,  2_3
        #            4/21/2009:   1_2,   2_3,  4_6
        #            4/26/2009:   2_3,   4_6, 8_10
        #            5/01/2009:   4_6,  8_10, 12_18
        #            5/06/2009:  8_10, 12_18, 18_26
        #            5/11/2009: 12_18, 18_26, 26_40
        start = datetime(2009, 4, 1, 0)
        end = datetime(2009, 6, 1, 0)
        rcvr_id = 3
        for i in range(9):
            start_date = start + timedelta(5 * i)
            for j in range(1, 4):
                rcvr_id = rcvr_id + 1
                rs = Receiver_Schedule()
                rs.start_date = start_date
                rs.receiver = Receiver.objects.get(id=rcvr_id)
                rs.save()
            rcvr_id = rcvr_id - 2
Example #7
0
    def test_event(self):

        start = datetime(2011, 8, 1)
        end   = datetime(2011, 9, 1)

        # what a pain in the ass: need to convert times to floats
        fmt = "%Y-%m-%d %H-%M-%S"
        startStr = start.strftime(fmt)
        endStr = end.strftime(fmt)
        data = { 'start' : time.mktime(time.strptime(startStr, fmt))
               , 'end'   : time.mktime(time.strptime(endStr,   fmt))
               }
        response = self.get('/project/%s/events' % self.p.pcode, data)
        self.failUnlessEqual(response.status_code, 200)
        exp = [{"className": "semester", "start": "2012-02-01T00:00:00", "id": 1, "title": "Start of 12A"}
             , {"className": "semester", "start": "2012-08-01T00:00:00", "id": 2, "title": "Start of 12B"}]
        result = eval(response.content)
        self.assertEquals(result, exp)     

        # now add a user w/ reservations and blackouts
        # (oops, it only grabs UPCOMING reservations, so we
        # can't test the reservations!!!)
        dana = User(first_name = "Dana"
                          , last_name = "Balser"
                          , pst_id = 18
                           )
        dana.save()
        i =  Investigator(project = self.p
                        , user    = dana 
                         )
        i.save()
        b = create_blackout(user   = dana,
                            start  = start + timedelta(days = 2),
                            end    = start + timedelta(days = 7),
                            repeat = 'Once')
        # then a period
        pa = Period_Accounting(scheduled = 3.0)
        pa.save()
        p = Period(session = self.s
                 , start = start + timedelta(days = 3)
                 , duration = 3.0
                 , state = Period_State.get_state('S')
                 , accounting = pa
                  )
        p.save()

        # now see what we get
        response = self.get('/project/%s/events' % self.p.pcode, data)
        self.failUnlessEqual(response.status_code, 200)
        exp = [{"className": "blackout",
                "start": "2011-08-03T00:00:00+00:00",
                "end": "2011-08-07T23:45:00+00:00",
                "title": "Dana Balser: blackout"}
             , {"className": "period",
                "start": "2011-08-04T00:00:00+00:00",
                "end": "2011-08-04T03:00:00",
                "title": "Observing Low Frequency With No RFI"}
             , {"className": "semester",
                "start": "2012-02-01T00:00:00",
                "title": "Start of 12A"}
             , {"className": "semester",
                "start": "2012-08-01T00:00:00",
                "title": "Start of 12B"}
             ]

        result = eval(response.content)
        # now, since we don't have control of reservations, if there is a reservation, remove it
        filteredResult = [r for r in result if not r.has_key('className') or r['className'] != 'reservation']
        # we have to remove the id as well, since there's no guarantee what this will be
        for r in filteredResult:
            r.pop('id')
        self.assertEquals(len(filteredResult), len(exp))
        for r in filteredResult:
            self.assertTrue(r in exp)