def delete_experimentgroup_in_clients(self, experimentgroup_id): """ delete experiment group in every client """ experimentgroup = ExperimentGroup.get(experimentgroup_id) if experimentgroup is None: return False for client in experimentgroup.clients: client.experimentgroups.remove(experimentgroup)
def get_dataitems_for_experimentgroup(self, id): """ get dataitems list from a specific experiment group """ expgroup = ExperimentGroup.get(id) experiment = expgroup.experiment dataitems = [] for client in expgroup.clients: dataitems.extend(self.get_dataitems_for_client_in_experiment(client.id, experiment.id)) return dataitems
def get_total_dataitems_for_expgroup(self, experimentgroup_id): """ get total dataitems from the specific experiment group """ count = 0 expgroup = ExperimentGroup.get(experimentgroup_id) for client in expgroup.clients: count += self.get_total_dataitems_for_client_in_experiment(client.id, expgroup.experiment_id) return count
def experimentgroup_DELETE(self): """ Delete one experimentgroup """ app_id = self.request.swagger_data['appid'] exp_id = self.request.swagger_data['expid'] expgroupid = self.request.swagger_data['expgroupid'] experimentgroup = ExperimentGroup.get(expgroupid) experimentgroup = ExperimentGroup.query().join(Experiment, Application)\ .filter(ExperimentGroup.id == expgroupid, Experiment.id == exp_id,\ Application.id == app_id)\ .one_or_none() log_address = '/applications/%s/experiments/%s/experimentgroups/%s'\ % (app_id, exp_id, expgroupid) if not experimentgroup or experimentgroup.experiment.id != exp_id: print_log(datetime.datetime.now(), 'DELETE', log_address, 'Delete experimentgroup', 'Failed') return self.createResponse(None, 400) ExperimentGroup.destroy(experimentgroup) print_log(datetime.datetime.now(), 'DELETE', log_address, 'Delete experimentgroup', 'Succeeded') return {}
def experimentgroup_GET(self): app_id = self.request.swagger_data['appid'] exp_id = self.request.swagger_data['expid'] experiment = Experiment.query().join(Application)\ .filter(Application.id == app_id, Experiment.id == exp_id)\ .one_or_none() if experiment == None: print_log(datetime.datetime.now(), 'GET', \ '/applications/%s/experiments/%s/experimentgroups' % ((app_id, exp_id)), 'List all ExperimentGroups for specific experiment', 'Failed') return self.createResponse(None, 400) experimentgroups = ExperimentGroup.query().filter( ExperimentGroup.experiment_id == experiment.id) return list(map(lambda _: _.as_dict(), experimentgroups))
def experimentgroup_GET_one(self): """ Show specific experiment group metadata Metadata includes ExperimentGroup's configurations, Clients and DataItems """ app_id = self.request.swagger_data['appid'] expid = self.request.swagger_data['expid'] expgroupid = self.request.swagger_data['expgroupid'] #expgroup = ExperimentGroup.get(expgroupid) expgroup = ExperimentGroup.query().join(Experiment, Application)\ .filter(ExperimentGroup.id == expgroupid, Experiment.id == expid,\ Application.id == app_id)\ .one_or_none() if expgroup is None or expgroup.experiment.id != expid: print_log( datetime.datetime.now(), 'GET', '/experiments/' + str(expid) + '/experimentgroups/' + str(expgroupid), 'Show specific experimentgroup metadata', None) return self.createResponse(None, 400) configurations = list( map(lambda _: _.as_dict(), expgroup.configurations)) clients = list(map(lambda _: _.as_dict(), expgroup.clients)) dataitems = list(map(lambda _: _.dataitems, expgroup.clients)) dataitems_concat = list(concat(dataitems)) dataitems_with_client = [] for ditem in dataitems_concat: dataitem = ditem.as_dict() di_and_client = assoc(dataitem, 'client', ditem.client.as_dict()) dataitems_with_client.append(di_and_client) experimentgroup = expgroup.as_dict() resultwithconf = assoc(experimentgroup, 'configurations', configurations) resultwithclient = assoc(resultwithconf, 'clients', clients) result = assoc(resultwithclient, 'dataitems', dataitems_with_client) return result
def create_experimentgroup(self, data): """ create experiment group """ name = data['name'] experimentgroup = ExperimentGroup(name=name) self.dbsession.add(experimentgroup) return self.dbsession.query(ExperimentGroup).order_by(ExperimentGroup.id.desc()).first()