예제 #1
0
    def test_exportProposal(self):

        # add an author to test more code - make it the contact
        author = self.addAuthor(self.proposal)
        self.proposal.contact = author
        self.proposal.save()

        export   = DssExport()
        project  = export.exportProposal(self.proposal.pcode)

        self.assertEqual(self.proposal.pcode, project.pcode)
        a = project.allotments.all()[0]
        self.assertEqual(a.psc_time, self.session.allotment.allocated_time)

        self.assertTrue(project.investigator_set.filter(
              user__pst_id = self.proposal.pi.pst_person_id)[0].principal_investigator)
       
        # should be 2 investigators, and I'm not the principal
        self.assertEqual(2, len(project.investigator_set.all()))      
        for i in project.investigator_set.all():
            self.assertEqual(i.principal_investigator
                           , i.user.last_name != 'Marganian' 
                            )
            self.assertEqual(i.principal_contact
                           , i.user.last_name == 'Marganian' 
                            )
예제 #2
0
    def test_exportElectiveSession(self):
        self.genPeriods()
        ps = self.session.period_set.all().order_by('start')
        self.session.session_type = SessionType.objects.get(type = 'Elective')
        self.session.save()

        export   = DssExport()
        project  = export.exportProposal(self.proposal.pcode)
        dss_session = project.sesshun_set.all()[0]
        self.assertEqual(dss_session.session_type.type, 'elective')
        self.assertEqual(1, len(dss_session.elective_set.all()))
        self.assertEqual(len(ps), len(dss_session.elective_set.all()[0].periods.all()))
        self.assertEqual(len(ps), len(dss_session.period_set.all()))
예제 #3
0
    def test_exportWindowedSession(self):
        self.genPeriods()
        ps = self.session.period_set.all().order_by('start')
        self.session.session_type = SessionType.objects.get(type = 'Windowed')
        self.session.save()

        export   = DssExport()
        project  = export.exportProposal(self.proposal.pcode)
        dss_session = project.sesshun_set.all()[0]
        self.assertEqual(dss_session.session_type.type, 'windowed')
        self.assertEqual(0, len(dss_session.elective_set.all()))
        self.assertEqual(len(ps), len(dss_session.window_set.all()))
        self.assertEqual(len(ps), len(dss_session.period_set.all()))
        self.assertEqual(dss_session.window_set.all()[0].windowrange_set.all()[0].duration
                       , self.session.monitoring.window_size)
예제 #4
0
    def test_exportFixedSession(self):
        self.genPeriods()
        self.session.session_type = SessionType.objects.get(type = 'Fixed')
        self.session.save()
        ps = self.session.period_set.all().order_by('start')

        export   = DssExport()
        project  = export.exportProposal(self.proposal.pcode)
        dss_session = project.sesshun_set.all()[0]
        self.assertEqual(dss_session.session_type.type, 'fixed')
        self.assertEqual(len(ps), len(dss_session.period_set.all()))

        expected_starts = [p.start for p in ps]
        self.assertEqual(expected_starts
                       , [dp.start for dp in dss_session.period_set.all().order_by('start')])
예제 #5
0
    def test_exportFlags(self):

        export   = DssExport()

        s = self.proposal.session_set.all()[0]

        # set all the flags, and see how the transfer
        s.flags.thermal_night = True
        s.flags.optical_night = True
        s.flags.rfi_night = True
        s.flags.transit_flat = True
        s.flags.guaranteed = True
        s.flags.save()

        project  = export.exportProposal(self.proposal.pcode)

        s = project.sesshun_set.all()[0]

        self.assertTrue(s.guaranteed()) # TBF
        self.assertTrue(s.transit())
        # these two are mutually exclusive:
        self.assertEqual(False, s.RfiNight())
        self.assertTrue(s.PtcsNight())
        # Note: no 'optical night' in DSS

        # clean up and try it again
        s.delete()
        project.delete()

        # change the flags
        s = self.proposal.session_set.all()[0]
        s.flags.rfi_night = False
        s.flags.thermal_night = False
        s.flags.guaranteed = False
        s.flags.save()

        project  = export.exportProposal(self.proposal.pcode)

        s = project.sesshun_set.all()[0]

        self.assertEqual(False, s.guaranteed()) # TBF
        self.assertTrue(s.transit())
        # these two are mutually exclusive:
        self.assertEqual(False, s.RfiNight())
        self.assertTrue(s.PtcsNight())
예제 #6
0
    def test_withinProprietaryDate(self):

        s      = self.proposal.session_set.all()[0]
        src0   = self.proposal.source_set.all()[0]
        tpcode = self.proposal.pcode

        # Need a DSS Project for this
        export   = DssExport()
        project  = export.exportProposal(tpcode)
        proposal = Proposal.objects.get(pcode = tpcode)
        period   = dss.Period.objects.create(session = project.sesshun_set.all()[0]
                                           , start = datetime(2012, 6, 10)
                                           , duration = 8
                                           , state = dss.Period_State.objects.get(name = 'Scheduled')
                                           )

        # turn the crank
        sc = SourceConflicts()
        _, result = sc.withinProprietaryDate(proposal, now = datetime(2012, 6, 12))
        self.assertTrue(result)

        _, result = sc.withinProprietaryDate(proposal, now = datetime(2013, 6, 12))
        self.assertTrue(not result)
예제 #7
0
    def test_exportProposal2(self):


        # now make sure no allocated time keeps it from getting transferred
        s = self.proposal.session_set.all()[0]
        original_time =  s.allotment.allocated_time
        s.allotment.allocated_time = 0.0
        s.allotment.save()

        export   = DssExport()
        project  = export.exportProposal(self.proposal.pcode)

        # make sure it wasn't transferred
        self.assertEqual(self.proposal.pcode, project.pcode)
        self.assertEqual(len(self.proposal.session_set.all()) - 1
                       , len(project.sesshun_set.all()))

        # restore the allocated time, but make sure it has a failing grade
        s = self.proposal.session_set.all()[0]
        s.allotment.allocated_time = original_time 
        s.allotment.save()
        original_grade = s.grade
        s.grade = SessionGrade.objects.get(grade = 'N*')
        s.save()

        export   = DssExport()
        # we can't call exportProposal again, becasuse if the corresponding 
        # DSS Project exists already, it will go ahead and use it; and deleting
        # Projects is a pain in the ass.  Instead, just try to import the session.
        #project  = export.exportProposal(self.proposal.pcode)
        export.exportSession(s, project) 

        # make sure it still wasn't transferred - get them fresh from DB to be sure
        proposal = Proposal.objects.get(pcode = self.proposal.pcode)
        project = dss.Project.objects.get(pcode = project.pcode)
        self.assertEqual(len(proposal.session_set.all()) - 1
                       , len(project.sesshun_set.all()))

       
        # now restore the original grade, and we should see the session get exported
        s.grade = original_grade
        s.save()

        export.exportSession(s, project) 

        # make sure it WAS transferred - get them fresh from DB to be sure
        proposal = Proposal.objects.get(pcode = self.proposal.pcode)
        project = dss.Project.objects.get(pcode = project.pcode)
        self.assertEqual(len(proposal.session_set.all())
                       , len(project.sesshun_set.all()))
예제 #8
0
파일: fix12B.py 프로젝트: mmccarty/nell
from django.core.management import setup_environ
import settings
setup_environ(settings)

from scheduler import models as dss
from pht       import models as pht
from pht.tools.database import DssExport

export = DssExport()
for p in dss.Project.objects.filter(semester__semester = '12B').exclude(pcode__contains = 'TGBT'):
    print "Fixing", p.pcode
    for s in p.sesshun_set.all():
        pht_s = pht.Session.objects.get(name = s.name)
        pht_s.dss_session = s
        pht_s.save()
        for pr in s.period_set.all():
            pa = dss.Period_Accounting(scheduled = 0.0)
            pa.save()
            pr.accounting = pa
            pr.score = -1.0
            pr.save()
            export.addPeriodReceivers(pr, [r.abbreviation for r in pht_s.receivers.all()])
print "done."