def update(model_id, name=None, desc=None, condition_refcode=None, condition_name=None, feature_set_id=None, raise_abort=True): m = get(model_id, raise_abort=raise_abort) User.check_request_for_logged_in_user(m.creator_id) if name: m.name = name if desc: m.description = desc if condition_refcode: m.condition_refcode = condition_refcode if condition_name: m.condition_name = condition_name if feature_set_id: fs = FeatureSet.get(feature_set_id, raise_abort=raise_abort) m.feature_set_id = fs.id if feature_set_id == 0: m.feature_set_id = None db.session.commit() return m, 200
def create(name, desc, env_id, feature_set_id, condition_refcode=None, condition_name=None, create_example_model=False, raise_abort=True): e = Environment.get(env_id, raise_abort=raise_abort) m = MLModel() if feature_set_id: fs = FeatureSet.get(feature_set_id, raise_abort=raise_abort) m.feature_set_id = fs.id m.environment_id = e.id m.name = name m.description = desc m.creator_id = g.user.id if condition_refcode: m.condition_refcode = condition_refcode if condition_name: m.condition_name = condition_name params = None if create_example_model: params = {'createExampleModel': create_example_model} resp = requests.post('http://' + e.container_name + ':5000/models', params=params).json() m.ml_model_name = str(resp['modelName']) db.session.add(m) db.session.commit() return m
def load_model(file, environment_id=None, feature_set_id=None, raise_abort=True): # generate temporary path to save file to tmp_uuid = str(uuid.uuid4().hex) tmp_path = '/tmp/' + tmp_uuid # create temporary directory os.makedirs(tmp_path, mode=0o777) # save zip-file to temporary directory and unzip it file.save(tmp_path + '/' + file.filename) unpack_archive(tmp_path + '/' + file.filename, tmp_path, 'zip') os.remove(tmp_path + '/' + file.filename) # load metadata metadata = None with open(tmp_path + METADATA_DIR + '/metadata.json', 'r') as infile: metadata = json.load(infile) # first of all: get the image of the environment to create i = metadata[0] create_image = Image.get_by_name(image_name=i['name']) # create and start the new environment env_created = None e = metadata[1] if not environment_id or environment_id <= 0: env_created = Environment.create(name=e['name'], desc=e['description'], image_id=create_image.id) else: env_created = Environment.get(environment_id, raise_abort=raise_abort) # create the model which is to be loaded m = metadata[2] model_created = MLModel.create(name=m['name'], desc=m['description'], env_id=env_created.id, create_example_model=False, feature_set_id=None) if len(metadata) > 3: # create the features features_created = list() features = metadata[3] for f in features: # do not create duplicate features feature = Feature.get_by_res_par_val(resource=f['resource'], parameter_name=f['parameter_name'], value=f['value']) if not feature: feature = Feature.create(resource=f['resource'], parameter_name=f['parameter_name'], value=f['value'], name=f['name'], desc=f['description']) features_created.append(feature) # create the feature set with the features and model assigned feature_set_created = None fs = metadata[4] if not feature_set_id or feature_set_id <= 0: feature_set_created = FeatureSet.create(name=fs['name'], desc=fs['description']) else: feature_set_created = FeatureSet.get(feature_set_id, raise_abort=raise_abort) feature_set_created.features = features_created feature_set_created.ml_models.append(model_created) db.session.commit() # remove temporarily created directory and files if os.path.isdir(env_created.get_data_directory() + '/' + model_created.ml_model_name): rmtree(env_created.get_data_directory() + '/' + model_created.ml_model_name) os.makedirs(env_created.get_data_directory() + '/' + model_created.ml_model_name, mode=0o777) for filename in os.listdir(tmp_path): move(tmp_path + '/' + filename, env_created.get_data_directory() + '/' + model_created.ml_model_name) rmtree(env_created.get_data_directory() + '/' + model_created.ml_model_name + METADATA_DIR)
def get(self, feature_set_id): return FeatureSet.get(feature_set_id), 200