示例#1
0
 def fetch_programs(site, client, page_size=None):
     next_page = 1
     while next_page:
         programs = client.programs.get(exclude_utm=1, page=next_page, page_size=page_size)
         for program in programs['results']:
             logger.info('Copying program "{}"'.format(program['title']))
             parse_program(site, program)
         next_page = next_page + 1 if programs['next'] else None
示例#2
0
 def fetch_programs(site, client, page_size=None):
     next_page = 1
     while next_page:
         programs = client.programs.get(exclude_utm=1,
                                        page=next_page,
                                        page_size=page_size)
         for program in programs["results"]:
             logger.info(f'Copying program "{program["title"]}"')
             parse_program(site, program)
         next_page = next_page + 1 if programs["next"] else None
示例#3
0
    def test_parse_pathway(self):
        # We assume that programs are parsed separately from pathway data.
        parse_program(self.site, self.PROGRAM1_DATA)

        pathway = parse_pathway(self.site, self.PATHWAY1_DATA)
        assert pathway.uuid == self.PATHWAY1_DATA['uuid']
        assert pathway.name == self.PATHWAY1_DATA['name']
        assert pathway.email == self.PATHWAY1_DATA['email']
        assert pathway.org_name == self.PATHWAY1_DATA['org_name']
        assert str(pathway.programs.all()[0].uuid) == self.PROGRAM1_DATA['uuid']
示例#4
0
    def test_parse_program_atomic(self):
        """ Test that parsing a program is atomic. """

        data = dict(self.PROGRAM1_DATA)
        data.update(courses=[{}])

        with self.assertRaises(KeyError):
            parse_program(self.site, data)

        self.assertEqual(Program.objects.all().count(), 0)
        self.assertEqual(Course.objects.all().count(), 0)
        self.assertEqual(CourseRun.objects.all().count(), 0)
        self.assertEqual(Organization.objects.all().count(), 0)
示例#5
0
 def fetch_programs(site, site_config, page_size=None):
     api_client = site_config.api_client
     programs_url = urljoin(site_config.catalog_api_url, "programs/")
     next_page = 1
     while next_page:
         response = api_client.get(programs_url,
                                   params={
                                       "exclude_utm": 1,
                                       "page": next_page,
                                       "page_size": page_size
                                   })
         response.raise_for_status()
         programs = response.json()
         for program in programs["results"]:
             logger.info(f'Copying program "{program["title"]}"')
             parse_program(site, program)
         next_page = next_page + 1 if programs["next"] else None
示例#6
0
    def test_parse_program(self, data, vals, org_keys_expected, run_keys_expected, err):
        """ Test parsing a single program with one course/run. """
        if err:
            with self.assertRaises(err):
                parse_course(self.site, data)
        else:
            program = parse_program(self.site, data)

            self.assertEqual(Program.objects.all().count(), 1)
            self.assertEqual(program, Program.objects.get(site=self.site, **vals))

            # Check runs
            run_keys = [c.key for c in program.course_runs.all()]
            self.assertListEqual(run_keys, run_keys_expected)
            self.assertEqual(CourseRun.objects.all().count(), len(run_keys))

            # Check orgs
            org_keys = [o.key for o in program.authoring_organizations.all()]
            self.assertListEqual(org_keys, org_keys_expected)
            self.assertEqual(Organization.objects.all().count(), len(org_keys))