예제 #1
0
 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)
예제 #2
0
 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
예제 #3
0
 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
예제 #4
0
    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 {}
예제 #5
0
    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))
예제 #6
0
    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
예제 #7
0
 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()