示例#1
0
def insert_single_measurement():
    """
    Route for adding a single measurement, this endpoint could be used by external sensors, devices, etc. for adding
    to the database
    :return: JSON
    """
    REQUIRED_PARAMS = [
        'date_time', 'longitude', 'latitude', 'pollutant', 'pollution_value'
    ]

    body = request.json
    missing_param = Helpers.are_params_missing(
        body, REQUIRED_PARAMS)  # assume no param is missing

    if missing_param:
        return response_failure(Errors.MISSING_PARAM.value)

    is_successful, err = DatasetsApi.insert_single_measurement(body)

    # Assume instance has not been inserted
    response_msg = {'instance_inserted': err}

    if is_successful:
        response_msg = {'instance_inserted': True}
        return response_success(response_msg)

    return response_failure(response_msg)
示例#2
0
def get_model_types():
    """
    Route for getting all supported models' types, currently only CNN, FullGP, SparseGP
    :return: JSON
    """
    model_types = ModelApi.get_model_types()

    if not isinstance(model_types, list):
        return response_failure(Errors.NO_DATA.value)

    return response_success(model_types)
示例#3
0
def get_all_models():
    """
    Route for getting all models' names and types only from the DB
    :return: JSON
    """
    models = ModelApi.get_all_models()

    if models is None:
        return response_failure(models)

    return response_success(models)
示例#4
0
def get_models(model_type):
    """
    Route for getting models that are of given model type (CNN, GP, SparseGP up to date)
    :param model_type:
    :return: JSON
    """
    models, err = ModelApi.get_models_by_type(model_type)
    if models is not None:
        return response_success(models)

    return response_failure(err)
示例#5
0
def get_model_params(name):
    """
    Route for getting model parameters of a given model
    :param name: str - name of the model
    :return: JSON
    """
    model = ModelApi.get_model_params(name)
    if model is not None:
        return response_success(model)

    return response_failure(Errors.NO_SUCH_MODEL.value)
示例#6
0
def make_predictions():
    """
    Function for making predictions based on the datetime and locations given for a single pollutant, type of model
    is also required (CNN/FullGP/SparseGP)
    :return: JSON
    """
    REQUIRED_PARAMS = ['name', 'range', 'locations', 'pollutant']

    body = request.json
    missing_param = Helpers.are_params_missing(
        body, REQUIRED_PARAMS)  # assume no param is missing

    if missing_param:
        return response_failure(Errors.MISSING_PARAM.value)

    if not isinstance(body['range'], dict):
        return response_failure(Errors.WRONG_PARAM.value)

    result = ConcurrentTaskApi.concurrent_make_predictions.delay(body)

    return response_success(True)
示例#7
0
def get_pollution_levels():
    """
    Function for getting the pollution levels in a given time range for given locations
    This method is POST due to the high number of parameters included
    :return: JSON
    """
    REQUIRED_PARAMS = ['range', 'locations', 'pollutant']

    body = request.json
    missing_param = Helpers.are_params_missing(
        body, REQUIRED_PARAMS)  # assume no param is missing

    if missing_param:
        return response_failure(Errors.MISSING_PARAM.value)

    if not isinstance(body['range'], dict):
        return response_failure(Errors.WRONG_PARAM.value)

    dataset = DatasetsApi.get_dataset(body, use_dataframe=False)

    return response_success(dataset)
示例#8
0
def create_model(name):
    """
    Function to create a model from given type and train it on a dataset with given parameters
    :param name: unique name of the created model
    :return: JSON
    """

    REQUIRED_PARAMS = ['type', 'range', 'locations', 'pollutant']

    body = request.json
    missing_param = Helpers.are_params_missing(
        body, REQUIRED_PARAMS)  # assume no param is missing

    if missing_param:
        return response_failure(Errors.MISSING_PARAM.value)

    if not isinstance(body['range'], dict):
        return response_failure(Errors.WRONG_PARAM.value)

    result = ConcurrentTaskApi.concurrent_create_model.delay(name, body)

    return response_success(True)
示例#9
0
def predict_single_instance():
    """
    Route for creating a new arbitrary instance and making prediction on its
    :return: JSON
    """
    REQUIRED_PARAMS = [
        'name', 'date_time', 'longitude', 'latitude', 'pollutant'
    ]

    body = request.json
    missing_param = Helpers.are_params_missing(body, REQUIRED_PARAMS)

    if missing_param:
        return response_failure(Errors.MISSING_PARAM.value)

    is_successful, predictions = ModelApi.make_single_prediction(body)

    if not is_successful:
        # TODO update error message
        return response_failure('Something went wrong')

    return response_success(predictions)
示例#10
0
def insert_dataset():
    """
    Route for adding a whole dataset to the database, not preferable to use it with large datasets, dataset must be in
    CSV
    :return: JSON
    """
    pollutant = None
    weather = None
    dataset_metadata = None
    try:
        pollutant = request.files['pollutant']
        weather = request.files['weather']
        dataset_metadata = request.files['metadata']
    except:
        print('no such file')

    if pollutant is None:
        return response_failure({'file': 'pollutant'})

    if weather is None:
        return response_failure({'file': 'weather'})

    if dataset_metadata is None:
        return response_failure({'file': 'metadata'})

    files = {
        'pollutant': pollutant,
        'weather': weather,
        'metadata': dataset_metadata
    }

    result, err = DatasetsApi.insert_dataset(files)

    if err:
        return response_failure(err)

    return response_success('inserted')
示例#11
0
def train_model(model_name):
    """
    Route for training a model
    :param model_name: str - model's name
    :return: JSON
    """
    REQUIRED_PARAMS = ['range', 'locations', 'pollutant']

    body = request.json
    are_params_missing = Helpers.are_params_missing(body, REQUIRED_PARAMS)

    if are_params_missing:
        return response_failure(Errors.MISSING_PARAM.value)

    if not isinstance(body['range'], dict):
        return response_failure(Errors.WRONG_PARAM.value)

    if not (isinstance(body['locations'], dict)
            or isinstance(body['locations'], list)):
        return response_failure(Errors.WRONG_PARAM.value)

    ConcurrentTaskApi.concurrent_train_model.delay(model_name, body)

    return response_success(True)