Implemented the Models and bluprint for POST 49/13749/6
authorsubhash kumar singh <subh.singh@samsung.com>
Wed, 13 Nov 2024 21:25:46 +0000 (21:25 +0000)
committersubhash kumar singh <subh.singh@samsung.com>
Wed, 20 Nov 2024 06:56:51 +0000 (06:56 +0000)
POST operaiton on training job implmented which will
populate the modelID automatically.

Change-Id: I68d565ec36d92698c9a97b5277e90a39f40002e9
Signed-off-by: subhash kumar singh <subh.singh@samsung.com>
trainingmgr/controller/trainingjob_controller.py
trainingmgr/db/trainingjob_db.py
trainingmgr/models/__init__.py
trainingmgr/models/trainingjob.py
trainingmgr/schemas/trainingjob_schema.py
trainingmgr/service/training_job_service.py

index db18111..1369d4f 100644 (file)
 #   limitations under the License.
 #
 # ==================================================================================
-from flask import Blueprint, jsonify
+from flask import Blueprint, jsonify, request
 from trainingmgr.common.trainingmgr_config import TrainingMgrConfig
-from trainingmgr.service.training_job_service import delete_training_job
+from trainingmgr.service.training_job_service import delete_training_job, create_training_job
 
 training_job_controller = Blueprint('training_job_controller', __name__)
 LOGGER = TrainingMgrConfig().logger
 
 @training_job_controller.route('/training-jobs/<int:training_job_id>', methods=['DELETE'])
 def delete_trainingjob(training_job_id):
-    TrainingMgrConfig.logger
     LOGGER.debug(f'delete training job : {training_job_id}')
     try:
         if delete_training_job(str(training_job_id)):
@@ -36,6 +35,18 @@ def delete_trainingjob(training_job_id):
                 'message': 'training job with given id is not found'
             }), 500 
          
+    except Exception as e:
+        return jsonify({
+            'message': str(e)
+        }), 500
+    
+@training_job_controller.route('/training-jobs', methods=['POST'])
+def create_trainingjob():
+    try:
+        data = request.get_json()
+        create_training_job(data)
+        LOGGER.debug(f'create training job Successfully: {data}')
+        return '', 200
     except Exception as e:
         return jsonify({
             'message': str(e)
index 94c8cd0..b57c652 100644 (file)
@@ -288,6 +288,12 @@ def delete_trainingjob_version(trainingjob_name, version):
         raise DBException(DB_QUERY_EXEC_ERROR + \
             "delete_trainingjob_version" + str(err))
 
+from trainingmgr.schemas import TrainingJobSchema
+def create_trainingjob(data):
+        tj = TrainingJobSchema().load(data)
+        db.session.add(tj)
+        db.session.commit()
+
 def delete_trainingjob_by_id(id: int):
     """
     This function delets the trainingjob using the id which is PK
index 984f025..fdb06a8 100644 (file)
@@ -23,4 +23,4 @@ from trainingmgr.models.trainingjob import TrainingJob
 from trainingmgr.models.featuregroup import FeatureGroup
 from trainingmgr.models.steps_state import TrainingJobStatus
 
-__all_ = ['TrainingJob', 'FeatureGroup', 'TrainingJobStatus']
\ No newline at end of file
+__all__ = ['TrainingJob', 'FeatureGroup', 'TrainingJobStatus', 'ModelID']
\ No newline at end of file
index 3452516..d12e6fe 100644 (file)
@@ -20,12 +20,14 @@ from datetime import datetime
 from sqlalchemy.sql import func
 from sqlalchemy import Integer, ForeignKey, String, DateTime, Column, Boolean
 from sqlalchemy.orm import relationship
-from sqlalchemy import PrimaryKeyConstraint, ForeignKeyConstraint, UniqueConstraint
-import json
+
+from . import db
+from sqlalchemy import ForeignKeyConstraint, UniqueConstraint
+
 
 class ModelID(db.Model):
     __tablename__ = 'model'
-    id = db.Column(db.Integer, primary_key=True)
+    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
     modelname = db.Column(db.String(128), nullable=False)
     modelversion = db.Column(db.String(128), nullable=False)
     artifactversion = db.Column(db.String(128), nullable=True)
@@ -34,12 +36,12 @@ class ModelID(db.Model):
         UniqueConstraint("modelname", "modelversion", name="unique model"),
     )
 
-    trainingJob = relationship("TrainingJob", back_populates='modelref')
+    trainingJob = relationship("TrainingJob", back_populates='modelId')
 
 
 class TrainingJob(db.Model):
     __tablename__ = "trainingjob_info_table"
-    id = Column(Integer, primary_key=True)
+    id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
     trainingjob_name= Column(String(128), nullable=False)
     run_id = Column(String(1000), nullable=True)
     steps_state_id = Column(Integer, ForeignKey('training_job_status_table.id'), nullable=True)
@@ -65,7 +67,7 @@ class TrainingJob(db.Model):
     )
     
 
-    modelref = relationship("ModelID", back_populates="trainingJob")
+    modelId = relationship("ModelID", back_populates="trainingJob")
 
     # # Serialize and Deserialize training_config to/from JSON
     # @property
@@ -75,5 +77,7 @@ class TrainingJob(db.Model):
     # @training_config_data.setter
     # def training_config_data(self, value):
     #     self.training_config = json.dumps(value)
+
     def __repr__(self):
-        return f'<Trainingjob {self.trainingjob_name}>'
\ No newline at end of file
+        return f'<Trainingjob {self.trainingjob_name}>'
+
index b93fd15..23d8a42 100644 (file)
 
 from trainingmgr.schemas import ma
 from trainingmgr.models import TrainingJob
+from trainingmgr.models.trainingjob import ModelID
 
+from marshmallow import pre_load
+
+class ModelSchema(ma.SQLAlchemyAutoSchema):
+    class Meta:
+        model = ModelID
+        load_instance = True
 class TrainingJobSchema(ma.SQLAlchemyAutoSchema):
     class Meta:
         model = TrainingJob
-        include_relationships = True
         load_instance = True
+    
+    modelId = ma.Nested(ModelSchema)
+    
+    @pre_load
+    def processModelId(self, data, **kwargs):
+        modelname = data['modelId']['modelname']
+        modelversion = data['modelId']['modelversion']
+
+        modeldict = dict(modelname=modelname, modelversion=modelversion)
+        data['modelId'] = modeldict
+        return data
          
         
\ No newline at end of file
index d03d9d0..183d5b3 100644 (file)
 #   limitations under the License.
 #
 # ==================================================================================
-from trainingmgr.db.trainingjob_db import delete_trainingjob_by_id
+from trainingmgr.db.trainingjob_db import delete_trainingjob_by_id, create_trainingjob
 from trainingmgr.common.exceptions_utls import DBException
+from trainingmgr.schemas import TrainingJobSchema
+
+def create_training_job(data):
+    create_trainingjob(data)
+    
 
 def delete_training_job(training_job_id : int):
     """