blob: 960dcc6e9d62d7f2399bae286a59ad514530195e [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
"""
ML registry
Registry object that will keep information about available algorithms and corresponding endpoints.
"""
from ml.classifiers import Classifier
from typing import Dict
from api.models import Algorithm, Dataset
def has_empty_values(data: dict):
for key, value in data.items():
if value == None:
raise ValueError(f'{key} cannot be null')
return False
class MLRegistry:
def __init__(self):
self.classifiers: Dict[int, Classifier] = {}
def add_algorithms(self,
attrs=[{
"classifier": None,
"description": None,
"status": None,
"version": None,
"dataset": None,
"region": None,
"created_by": None
}]):
for attr in attrs:
if not has_empty_values(attr):
#get dataset
dataset, _ = Dataset.objects.get_or_create(
name=attr['dataset'], region=attr['region'])
# get algorithm
algorithm, _ = Algorithm.objects.get_or_create(
classifier=attr['classifier'].__class__.__name__,
description=attr['description'],
version=attr['version'],
status=attr['status'],
dataset=dataset,
created_by=attr['created_by'])
self.classifiers[algorithm.id] = attr['classifier']
return self.classifiers