Пример #1
0
class JudgeTest(TestCase):
    def setUp(self):
        self.contest = Contest()
        self.contest.name = 'Test Contest'
        self.contest.players_count = 1
        self.contest.save()

        self.judge = Judge()
        self.judge.path = 'some path'
        self.judge.was_default_judge = True
        self.judge.contest = self.contest
        self.judge.save()

        self.match = Match()
        self.match.judge = self.judge
        self.match.contest = self.contest
        self.match.save()

        self.user = GladosUser.objects.create_user("test_user")

        self.program = Program()
        self.program.user = self.user
        self.program.contest = self.contest
        self.program.name = 'test program'
        self.program.save()

        self.match_log = MatchLog()
        self.match_log.body = 'some random text'
        self.match_log.match = self.match
        self.match_log.save()
Пример #2
0
def create_programs(output=True):
    """Create programs and services from the DEFAULT_PROGRAMS dictionary, reflecting actual P-P organization"""
    for program, services in DEFAULT_PROGRAMS.items():
        p = Program()
        p.name = program

        if p.name in HAS_QUEUE:
            p.has_queue = True
        else:
            p.has_queue = False
        p.full_clean()
        p.save()

        if output:
            print("Created program {}".format(p.name))

        for service in services:
            s = Service()
            s.name = service
            s.slug = f"{p.name}-{s.name}"

            s.available = random_bool()
            s.program = p
            s.full_clean()
            s.save()

            if output:
                print("Created {}: '{}'".format(p.name, s.slug))

        """ Create forms for the program """
        for _ in range(DEFAULT_NUMBER_FORMS):
            create_form(p)
Пример #3
0
class ContestTest(TestCase):
    def setUp(self):
        self.contest = Contest()
        self.contest.name = 'Test Contest'
        self.contest.players_count = 1
        self.contest.save()

        self.judge = Judge()
        self.judge.path = 'some path'
        self.judge.was_default_judge = True
        self.judge.contest = self.contest
        self.judge.save()

        self.match = Match()
        self.match.judge = self.judge
        self.match.contest = self.contest
        self.match.save()

        self.user = GladosUser.objects.create_user("test_user")

        self.program = Program()
        self.program.user = self.user
        self.program.contest = self.contest
        self.program.name = 'test program'
        self.program.save()

        self.match_log = MatchLog()
        self.match_log.body = 'some random text'
        self.match_log.match = self.match
        self.match_log.save()

    def test_contest_clean_start_end_time_invalid(self):
        self.contest.end = timezone.now()
        self.contest.start = self.contest.end + timezone.timedelta(days=1)

        exception = None
        try:
            self.contest.save()
        except ValidationError as e:
            exception = e
        
        self.assertTrue(exception, "contest start can't occur after contest end")

    def test_contest_clean_start_end_time_correct(self):
        self.contest.end = timezone.now()
        self.contest.start = self.contest.end - timezone.timedelta(days=1)

        exception = None
        try:
            self.contest.save()
        except ValidationError as e:
            exception = e
        
        self.assertFalse(exception, "contest start can occur after contest end: {}".format(exception))
Пример #4
0
class ProgramMatchTest(TestCase):
    def setUp(self):
        self.contest = Contest()
        self.contest.name = 'Test Contest'
        self.contest.players_count = 1
        self.contest.save()

        self.judge = Judge()
        self.judge.path = 'some path'
        self.judge.was_default_judge = True
        self.judge.contest = self.contest
        self.judge.save()

        self.match = Match()
        self.match.judge = self.judge
        self.match.contest = self.contest
        self.match.save()

        self.user = GladosUser.objects.create_user("test_user")

        self.program = Program()
        self.program.user = self.user
        self.program.contest = self.contest
        self.program.name = 'test program'
        self.program.save()

        self.match_log = MatchLog()
        self.match_log.body = 'some random text'
        self.match_log.match = self.match
        self.match_log.save()

    def test_program_match_uniqueness(self):
        pm = ProgramMatch()
        pm.program = self.program
        pm.match = self.match
        pm.save()

        pm = ProgramMatch()
        pm.program = self.program
        pm.match = self.match

        exception = None
        try:
            pm.save()
        except IntegrityError as e:
            exception = e

        self.assertTrue(exception, "(program match) pair is not unique")
Пример #5
0
    def handle(self, *args, **kwargs):
        path = kwargs['path']

        df = pd.read_csv(path)
        upper_range = len(df)
        print("Wait Data is being Loaded")

        try:
            prog = [
                Program(
                    partner_id=(df['PARTNER CODE'][row]),
                    name=(df['PROGRAMME NAME'][row]),
                    code=df['Programme Code'][row],
                    total_budget=df['BUDGET (£)'][row],
                ) for row in range(0, upper_range)
            ]
            prog_data = Program.objects.bulk_create(prog)

            if prog_data:
                self.stdout.write('Successfully loaded Partner data ..')
            # for row in range(0, upper_range):
            #     print(df['Partner Name'][row])

        except Exception as e:
            print(e)
Пример #6
0
    def cmd_start(self, what):
        cmd = re.match('^\s*START\s*$', what, re.I)

        if cmd:
            if not self.user:
                return "LOGIN REQUIRED\n", self
            if not self.contest:
                return "JOIN REQUIRED\n", self

            if not self.program:
                self.program = Program()
                self.program.contest = self.contest
                self.program.user = self.user
                self.program.save()

            return "OK\n", MatchParser(*self.args, contest=self.contest, user=self.user, program=self.program, **self.kwargs)
Пример #7
0
def import_program_report_dump(sourcefile):
    with open(sourcefile) as f:
        reader = csv.DictReader(f)

        for row in reader:
            site = Location.get_by_code(row['Site ID'])

            if not site:
                print(row)
                continue

            reporter = Connection.objects.get(identity=row['Mobile']).contact.worker
            created = utc.localize(datetime.utcfromtimestamp(int(row['Timestamp'])))
            modified = created
            group = PatientGroup.get_by_code(row['Group'])
            program = Program.get_by_code(row['Program'])
            period_code = row['Period code']
            period_number = row['Period number']
            atot = int(row['Atot'])
            tin = int(row['Tin'])
            tout = int(row['Tout'])
            dead = int(row['Dead'])
            deft = int(row['DefT'])
            dcur = int(row['Dcur'])
            dmed = int(row['Dmed'])

            ProgramReport.objects.create(site=site,
                reporter=reporter,
                created=created,
                modified=modified,
                group=group,
                program=program,
                period_number=period_number,
                period_code=period_code,
                new_marasmic_patients=atot,
                patients_transferred_in=tin,
                patients_transferred_out=tout,
                patient_deaths=dead,
                unconfirmed_patient_defaults=deft,
                patients_cured=dcur,
                unresponsive_patients=dmed)

    print('Done')
Пример #8
0
def create_programs(output=True):
    '''Create programs and services from the DEFAULT_PROGRAMS dictionary, reflecting actual P-P organization'''
    for program, services in DEFAULT_PROGRAMS.items():
      p = Program()
      p.name = program
      p.full_clean()
      p.save()

      if output:
          print("Created program {}". format(p.name))

      for service in services:
          s = Service()
          s.name = service
          s.program = p
          s.available = random_bool()
          s.full_clean()
          s.save()

          if output:
              print("Created {}: '{}'". format(p.name, s.name))
Пример #9
0
def import_lipschits(year):
    #delete old
    Program.objects.filter(date = '%s-01-01' % year).delete()
    Section.objects.filter(program__date = '%s-01-01' % year).delete()

    xml = parse(settings.PROJECT_DIR("LipschitsBooksinXML") + '/VP_%s.party-topicnr-content.xml' % year)
    chapters = xml.getElementsByTagName("chapter")
    for chapter in chapters:        
        pm_id = chapter.getAttributeNode('party').value
        party, created = Party.objects.get_or_create(pm_id=pm_id, defaults={"full_name": pm_id, "name": pm_id})
        program = Program(party=party, name = "Programma %s" % year, date = ('%s-01-01' % year))
        print party, program
        type = SectionType.objects.get(name="tekst")
        program.save()
        s = Section.objects.create(name = "Programma %s" % year, type=type, order=1, program=program)
        program.section = s
        program.save()
        
        for p in chapter.getElementsByTagName("p"):
            text = " ".join(t.nodeValue for t in p.childNodes if t.nodeType == t.TEXT_NODE)
            text = process_text(text)

            section = Section.objects.create(name = text.split(' ')[0], type=type, order=1, program=program, parent=s)

            
            paragraph = section.paragraphs.create(text=text)
            
            for theme in p.getElementsByTagName('theme'):
                name = theme.getAttributeNode('id').value
                name = name.replace('_',' ')

                source, created = Source.objects.get_or_create(name = 'lipschits')

                t, created = Topic.objects.get_or_create(
                    name = name,
                    source = source)
            
                Selection.objects.create(
                    source = source,
                    paragraph = paragraph,
                    topic = t,)
Пример #10
0
class MatchLogTest(TestCase):
    def setUp(self):
        self.contest = Contest()
        self.contest.name = 'Test Contest'
        self.contest.players_count = 1
        self.contest.save()

        self.judge = Judge()
        self.judge.path = 'some path'
        self.judge.was_default_judge = True
        self.judge.contest = self.contest
        self.judge.save()

        self.match = Match()
        self.match.judge = self.judge
        self.match.contest = self.contest
        self.match.save()

        self.user = GladosUser.objects.create_user("test_user")

        self.program = Program()
        self.program.user = self.user
        self.program.contest = self.contest
        self.program.name = 'test program'
        self.program.save()

        self.match_log = MatchLog()
        self.match_log.body = 'some random text'
        self.match_log.match = self.match
        self.match_log.save()
    
    def test_no_logs_before_match_start_invalid(self):
        self.match.start = timezone.now()
        self.match.save()

        self.match_log.match = self.match
        self.match_log.time = self.match.start - timezone.timedelta(days=1)

        exception = None
        try:
            self.match_log.save()
        except ValidationError as e:
            exception = e
        
        self.assertTrue(exception, "log with earlier date than match start")
    
    def test_no_logs_before_match_start_correct(self):
        self.match.start = timezone.now()
        self.match.save()

        self.match_log.match = self.match
        self.match_log.time = self.match.start + timezone.timedelta(days=1)

        exception = None
        try:
            self.match_log.save()
        except ValidationError as e:
            print e
            exception = e
        
        self.assertFalse(exception, "log with earlier date than match start: {}".format(exception))
Пример #11
0
class InitParser(ParserBase):
    def __init__(self, *args, **kwargs):
        super(InitParser, self).__init__(*args, **kwargs)
        self.user = None
        self.contest = None
        self.program = None

    def cmd_help(self, what):
        cmd = re.match('^\s*help\s*$', what, re.I)
        if cmd:
            reply = 'OK\n'
            reply += '# LOGIN <urlencoded username> PASSWORD <urlencoded password>\n'
            reply += '# PROGRAM <urlencoded program name>\n'
            reply += '# JOIN <contest_id>\n'
            return reply, self

    def cmd_empty(self, what):
        cmd = re.match('^\s*$', what, re.I)
        if cmd:
            return "", self

    def cmd_program(self, what):
        cmd = re.match('^\s*PROGRAM\s+(?P<program>[^\s]+)\s*$',
            what, re.I)

        if cmd:
            program_name = cmd.group('program')

            if not self.user:
                return "LOGIN REQUIRED\n", self
            if not self.contest:
                return "JOIN REQUIRED\n", self

            program, created = Program.objects.get_or_create(contest=self.contest, user=self.user, name=program_name)

            self.program = program

            return "OK\n", self

    def cmd_start(self, what):
        cmd = re.match('^\s*START\s*$', what, re.I)

        if cmd:
            if not self.user:
                return "LOGIN REQUIRED\n", self
            if not self.contest:
                return "JOIN REQUIRED\n", self

            if not self.program:
                self.program = Program()
                self.program.contest = self.contest
                self.program.user = self.user
                self.program.save()

            return "OK\n", MatchParser(*self.args, contest=self.contest, user=self.user, program=self.program, **self.kwargs)

    def cmd_join(self, what):
        cmd = re.match('^\s*JOIN\s+(?P<contest>\d+)\s*$',
            what, re.I)

        if cmd:
            contest_id = cmd.group('contest')

            if not self.user:
                return "LOGIN REQUIRED\n", self

            try:
                self.contest = Contest.objects.get(pk=contest_id)
            except Contest.DoesNotExist:
                return "FAIL INVALID_CONTEST\n", self

            if self.contest.default_judge is None:
                return "FAIL INVALID_CONTEST\n", self

            return "OK\n", self

    def cmd_login(self, what):
        cmd = re.match('^\s*LOGIN\s+(?P<user>[^\s]*)\s+PASSWORD\s+(?P<password>[^\s]*)\s*$',
            what, re.I)

        if cmd:
            username = unquote(cmd.group('user'))
            password = unquote(cmd.group('password'))

            user = authenticate(username=username, password=password)

            if not user:
                return "FAIL INVALID_PASSWORD\n", self

            self.user = user

            return "OK\n", self
Пример #12
0
class MatchTest(TestCase):
    def setUp(self):
        self.contest = Contest()
        self.contest.name = 'Test Contest'
        self.contest.players_count = 1
        self.contest.save()

        self.judge = Judge()
        self.judge.path = 'some path'
        self.judge.was_default_judge = True
        self.judge.contest = self.contest
        self.judge.save()

        self.match = Match()
        self.match.judge = self.judge
        self.match.contest = self.contest
        self.match.save()

        self.user = GladosUser.objects.create_user("test_user")

        self.program = Program()
        self.program.user = self.user
        self.program.contest = self.contest
        self.program.name = 'test program'
        self.program.save()

        self.match_log = MatchLog()
        self.match_log.body = 'some random text'
        self.match_log.match = self.match
        self.match_log.save()

    def test_matches_judge_was_default_invalid(self):
        self.judge.was_default_judge = False

        self.match.judge = self.judge

        exception = None
        try:
            self.judge.save()
            self.match.save()
        except ValidationError as e:
            exception = e

        self.assertTrue(exception, "especially for Mr. Maciek")
    
    def test_matches_judge_was_default_correct(self):
        self.judge.was_default_judge = True

        self.match.judge = self.judge

        exception = None
        try:
            self.judge.save()
            self.match.save()
        except ValidationError as e:
            exception = e

        self.assertFalse(exception, "especially for Mr. Maciek: {}".format(exception))

    def test_match_starts_after_contest_invalid(self):
        self.contest.start = timezone.now()

        self.match.start = self.contest.start - timezone.timedelta(days=1)

        exception = None
        try:
            self.contest.save()
            self.match.save()
        except ValidationError as e:
            exception = e

        self.assertTrue(exception, "does not throw exception when match starts before the contest starts")

    def test_match_starts_after_contest_correct(self):
        self.contest.start = timezone.now()

        self.match.start = self.contest.start + timezone.timedelta(days=1)

        exception = None
        try:
            self.contest.save()
            self.match.save()
        except ValidationError as e:
            exception = e

        self.assertFalse(exception, "does throw exception even when match starts correctly after contest starts")