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
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
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']
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)
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
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))