from trainingmgr.db.featuregroup_db import add_featuregroup, delete_feature_group_by_name
from trainingmgr.common.trainingmgr_config import TrainingMgrConfig
from trainingmgr.schemas import FeatureGroupSchema
+from trainingmgr.service.featuregroup_service import get_all_featuregroups
TRAININGMGR_CONFIG_OBJ = TrainingMgrConfig()
LOGGER = TRAININGMGR_CONFIG_OBJ.logger
MIMETYPE_JSON = "application/json"
+featuregroups_schema = FeatureGroupSchema(many=True)
@featuregroup_controller.route('/featureGroup', methods=['POST'])
def create_feature_group():
return {"Exception": str(err)}, 400
except DBException as err:
LOGGER.error(f"Failed to create the feature Group {str(err)}")
+ if "already exist" in str(err):
+ return {"Exception": str(err)}, 409
return {"Exception": str(err)}, 400
except Exception as e:
api_response = {"Exception":str(e)}
LOGGER.error(f"Failed to create the feature Group {str(err)}")
jsonify(json.dumps(api_response)), 500
- return jsonify(api_response), 201
\ No newline at end of file
+ return jsonify(api_response), 201
+
+@featuregroup_controller.route('/featureGroup', methods=['GET'])
+def get_feature_group():
+ """
+ Rest endpoint to fetch all the feature groups
+
+ Args in function: none
+ Required Args in json:
+ no json required
+
+ Returns:
+ json:
+ FeatureGroups: list
+ list of dictionaries.
+ dictionaries contains:
+ featuregroup_name: str
+ name of feature group
+ features: str
+ name of features
+ datalake: str
+ datalake
+ dme: boolean
+ whether to enable dme
+
+ """
+ LOGGER.debug("Request for getting all feature groups")
+ api_response={}
+ response_code=status.HTTP_500_INTERNAL_SERVER_ERROR
+ try:
+ api_response=featuregroups_schema.dump(get_all_featuregroups())
+ response_code=status.HTTP_200_OK
+ except Exception as err:
+ api_response = {"Exception": "Failed to get featuregroups"}
+ LOGGER.error(str(err))
+ return jsonify({"FeatureGroups":api_response}), response_code
\ No newline at end of file
# ==================================================================================
from trainingmgr.common.exceptions_utls import DBException
-from psycopg2.errorcodes import UNIQUE_VIOLATION
+from sqlalchemy.exc import IntegrityError
+from psycopg2.errors import UniqueViolation
from psycopg2 import errors
from trainingmgr.models import db, FeatureGroup
+from trainingmgr.common.trainingmgr_config import TrainingMgrConfig
+
+LOGGER = TrainingMgrConfig().logger
DB_QUERY_EXEC_ERROR = "Failed to execute query in "
try:
db.session.add(featuregroup)
db.session.commit()
- except errors.lookup(UNIQUE_VIOLATION) as e:
- raise DBException(DB_QUERY_EXEC_ERROR + " "+ str(e))
+ except IntegrityError as e:
+ if isinstance(e.orig, UniqueViolation):
+ LOGGER.error(f"failed to add featuregroup due to: {str(e)}")
+ raise DBException(f"Featuregroup with featuregroup_name {featuregroup.featuregroup_name} already exist")
except Exception as err:
+ LOGGER.error(f"failed to add featuregroup due to: {str(err)}")
db.session.rollback()
raise DBException(DB_QUERY_EXEC_ERROR + " failed to add feature group")
This function returns the model information for given modelName and ModelVersion from MME
"""
try:
- url = f'http://{self.mme_ip}:{self.mme_port}/models/?model-name={modelName}&model-version={int(modelVersion)}'
+ url = f'http://{self.mme_ip}:{self.mme_port}/ai-ml-model-discovery/v1/models/?model-name={modelName}&model-version={int(modelVersion)}'
LOGGER.debug(f"Requesting modelInfo from: {url}")
response = requests.get(url)
if response.status_code == 200:
#
# ==================================================================================
-from trainingmgr.db.featuregroup_db import get_feature_group_by_name_db, get_feature_groups_from_inputDataType_db
+from trainingmgr.db.featuregroup_db import get_feature_group_by_name_db, get_feature_groups_db, get_feature_groups_from_inputDataType_db
from trainingmgr.common.exceptions_utls import TMException, DBException
from trainingmgr.common.trainingmgr_config import TrainingMgrConfig
raise TMException(f"get get_featuregroup_from_inputDataType service failed with exception : {str(err)}")
except Exception as err:
raise err
+
+def get_all_featuregroups():
+ LOGGER.debug(f'service for get all featuregroups')
+ try:
+ featuregroups = get_feature_groups_db()
+ return featuregroups
+ except Exception as err:
+ LOGGER.error("Error occured during fetching all featuregroups from db")
+ raise TMException(f"get all featuregroups service failed with exception : {str(err)}")
\ No newline at end of file
TRAININGMGR_CONFIG_OBJ = TrainingMgrConfig()
from middleware.loggingMiddleware import LoggingMiddleware
APP.wsgi_app = LoggingMiddleware(APP.wsgi_app)
-APP.register_blueprint(featuregroup_controller)
-APP.register_blueprint(training_job_controller)
+APP.register_blueprint(featuregroup_controller, url_prefix='/ai-ml-model-training/v1')
+APP.register_blueprint(training_job_controller, url_prefix='/ai-ml-model-training/v1')
APP.register_blueprint(pipeline_controller)
PS_DB_OBJ = None
mimetype=MIMETYPE_JSON)
-@APP.route('/featureGroup', methods=['GET'])
-def get_feature_group():
- """
- Rest endpoint to fetch all the feature groups
-
- Args in function: none
- Required Args in json:
- no json required
-
- Returns:
- json:
- FeatureGroups: list
- list of dictionaries.
- dictionaries contains:
- featuregroup_name: str
- name of feature group
- features: str
- name of features
- datalake: str
- datalake
- dme: boolean
- whether to enable dme
-
- """
- LOGGER.debug("Request for getting all feature groups")
- api_response={}
- response_code=status.HTTP_500_INTERNAL_SERVER_ERROR
- try:
- api_response={"featuregroups": featuregroups_schema.dump(get_feature_groups_db())}
- response_code=status.HTTP_200_OK
- except Exception as err:
- api_response = {"Exception": str(err)}
- LOGGER.error(str(err))
- return APP.response_class(response=json.dumps(api_response),
- status=response_code,
- mimetype=MIMETYPE_JSON)
@APP.route('/featureGroup', methods=['DELETE'])
def delete_list_of_feature_group():