Example #1
0
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
Example #2
0
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)
Example #4
0
 def get(self, feature_set_id):
     return FeatureSet.get(feature_set_id), 200