def get_issues(getter, project, milestone): milestones = get_milestones(getter, project) mid = milestones[milestone] url = "https://api.github.com/repos/{project}/issues?milestone={mid}&state=closed&sort=created&direction=asc" url = url.format(project=project, mid=mid) raw_datas = [] while True: raw_data, info = getter.get(url) raw_datas.append(raw_data) if 'link' not in info: break m = re.search('<(.*?)>; rel="next"', info['link']) if m: url = m.group(1) continue break issues = [] for raw_data in raw_datas: data = ioJSON.loads(raw_data) for issue_data in data: issues.append(Issue(issue_data[u'number'], issue_data[u'title'], issue_data[u'html_url'])) return issues
def get_milestones(getter, project): url = "https://api.github.com/repos/{project}/milestones".format(project=project) raw_data, info = getter.get(url) data = ioJSON.loads(raw_data) milestones = {} for ms in data: milestones[ms[u'title']] = ms[u'number'] return milestones
def test_simple(self): # load and inspect the simple example project projfile = os.path.join(self.path, 'simple_1.proj') project_from_archive(projfile, dest_dir=self.tdir) # LOAD PROJECT self.cserver.load_project(os.path.join(self.tdir, 'simple_1')) # CHECK FILES files = self.cserver.get_files() self.assertTrue('/paraboloid.py'.replace('/', os.sep) in files) self.assertTrue( '/optimization_constrained.py'.replace('/', os.sep) in files) self.assertTrue( '/optimization_unconstrained.py'.replace('/', os.sep) in files) self.assertTrue('/_project_state'.replace('/', os.sep) in files) time.sleep(3.0) types = self.cserver.get_types() self.assertTrue('Paraboloid' in types) type_info = types['Paraboloid'] self.assertEqual(type_info['modpath'], 'paraboloid.Paraboloid') components = ioJSON.loads(self.cserver.get_components()) # CREATE ASSEMBLY self.cserver.put_object('prob', 'openmdao.main.assembly.Assembly') oldnum = len(components) components = ioJSON.loads(self.cserver.get_components()) self.assertEqual(len(components) - oldnum, 1) for comp in components: if comp['pathname'] == 'prob': assembly = comp break else: self.fail("prob was not found in component list") self.assertEqual(assembly['pathname'], 'prob') self.assertEqual(assembly['type'], 'Assembly') self.assertEqual(assembly['interfaces'], ['IAssembly', 'IComponent', 'IContainer']) self.assertEqual(len(assembly['children']), 1) child = assembly['children'][0] self.assertEqual(child['pathname'], 'prob.driver') self.assertEqual(child['type'], 'Driver') self.assertEqual(child['interfaces'], ['IDriver', 'IHasEvents', 'IComponent', 'IContainer']) # ADD CONMIN DRIVER self.cserver.put_object( 'prob.driver', 'openmdao.lib.drivers.conmindriver.CONMINdriver') components = ioJSON.loads(self.cserver.get_components()) self.assertEqual(len(components) - oldnum, 1) for comp in components: if comp['pathname'] == 'prob': assembly = comp break else: self.fail("prob was not found in component list") self.assertEqual(assembly['pathname'], 'prob') self.assertEqual(len(assembly['children']), 1) child = assembly['children'][0] self.assertEqual(child['pathname'], 'prob.driver') self.assertEqual(child['type'], 'CONMINdriver') self.assertEqual(child['interfaces'], [ 'IHasParameters', 'IHasIneqConstraints', 'IHasObjective', 'IOptimizer', 'IDriver', 'IHasEvents', 'IComponent', 'IContainer' ]) # CHECK DRIVER ATTRIBUTES attributes = ioJSON.loads(self.cserver.get_attributes('prob.driver')) self.assertEqual(attributes['type'], 'CONMINdriver') self.assertTrue('Inputs' in attributes) self.assertTrue('Outputs' in attributes) self.assertTrue('Objectives' in attributes) self.assertTrue('Parameters' in attributes) self.assertTrue('Constraints' in attributes) self.assertTrue('Workflow' in attributes) self.assertEqual(attributes['Workflow']['pathname'], 'prob.driver') self.assertEqual(attributes['Workflow']['type'], 'openmdao.lib.drivers.conmindriver.CONMINdriver') self.assertEqual(len(attributes['Workflow']['workflow']), 0) self.assertEqual(self.cserver.file_forces_reload('/paraboloid.py'), False) # CREATE PARABOLOID self.cserver.put_object('prob.p', 'paraboloid.Paraboloid') self.assertEqual(self.cserver.file_forces_reload('/paraboloid.py'), True) attributes = ioJSON.loads(self.cserver.get_attributes('prob.p')) self.assertEqual(attributes['type'], 'Paraboloid') self.assertTrue('Inputs' in attributes) inputs = attributes['Inputs'] names = sorted([input['name'] for input in inputs]) self.assertEqual( names, ['directory', 'force_fd', 'missing_deriv_policy', 'x', 'y']) found_x = found_y = False for item in inputs: self.assertTrue('desc' in item) self.assertTrue('name' in item) self.assertTrue('type' in item) self.assertTrue('value' in item) if item['name'] == 'x': found_x = True self.assertEqual(item['type'], 'float') self.assertEqual(item['desc'], 'The variable x') if item['name'] == 'y': found_y = True self.assertEqual(item['type'], 'float') self.assertEqual(item['desc'], 'The variable y') self.assertTrue(found_x) self.assertTrue(found_y) self.assertTrue('Outputs' in attributes) outputs = attributes['Outputs'] self.assertEqual(len(outputs), 4) found_f_xy = False for output in outputs: self.assertTrue('desc' in output) self.assertTrue('name' in output) self.assertTrue('type' in output) self.assertTrue('value' in output) if output['name'] == 'f_xy': found_f_xy = True self.assertEqual(output['type'], 'float') self.assertEqual(output['desc'], 'F(x,y)') self.assertTrue(found_f_xy) # DATAFLOW dataflow = ioJSON.loads(self.cserver.get_dataflow('prob')) self.assertEqual(len(dataflow), 6) self.assertTrue('components' in dataflow) components = dataflow['components'] self.assertEqual(len(components), 2) found_p = found_driver = False for comp in components: self.assertTrue('pathname' in comp) self.assertTrue('type' in comp) self.assertTrue('name' in comp) if comp['name'] == 'p': found_p = True self.assertEqual(comp['pathname'], 'prob.p') self.assertEqual(comp['type'], 'Paraboloid') if comp['name'] == 'driver': found_driver = True self.assertEqual(comp['pathname'], 'prob.driver') self.assertEqual(comp['type'], 'CONMINdriver') self.assertTrue(found_p) self.assertTrue(found_driver) self.assertTrue('connections' in dataflow) connections = dataflow['connections'] self.assertEqual(len(connections), 0) self.assertTrue('parameters' in dataflow) parameters = dataflow['parameters'] self.assertEqual(len(parameters), 0) self.assertTrue('constraints' in dataflow) constraints = dataflow['constraints'] self.assertEqual(len(constraints), 0) self.assertTrue('objectives' in dataflow) objectives = dataflow['objectives'] self.assertEqual(len(objectives), 0) self.assertTrue('responses' in dataflow) responses = dataflow['responses'] self.assertEqual(len(responses), 0) # WORKFLOW self.cserver.onecmd('prob.driver.workflow.add("p")') driver_flow = ioJSON.loads(self.cserver.get_workflow('prob.driver'))[0] self.assertTrue('pathname' in driver_flow) self.assertTrue('type' in driver_flow) self.assertTrue('workflow' in driver_flow) workflow = driver_flow['workflow'] self.assertEqual(len(workflow), 1) self.assertEqual(workflow[0]['pathname'], 'prob.p') self.assertEqual(workflow[0]['type'], 'paraboloid.Paraboloid')
def _getJson(self, path): """Perform a GET request and decode the result as JSON.""" self._connection.request('GET', path) response = self._connection.getresponse() self.assertEqual(response.status, 200) return ioJSON.loads(response.read().decode('utf-8'))
def print_json(data): ''' Pretty print json data. ''' print ioJSON.dumps(ioJSON.loads(str(data)), indent=2)
def GetRouteAndSave(self, route, params=None): """GET given route and params. Serialize the result. Return as JSON.""" url = Url(route, params) return ioJSON.loads(self.GetAndSave(url))