import json
import requests
from unittest import mock
-from mock import patch
+from mock import patch, MagicMock
import pytest
import flask
from requests.models import Response
}
}
-
+ mock_steps_state = MagicMock()
+ mock_steps_state.states = {"step1":"completed"}
+
return TrainingJob(
trainingjob_name="test_job",
training_config = json.dumps(training_config),
creation_time=creation_time,
run_id="test_run_id",
- steps_state=json.dumps({"step1": "completed"}),
+ steps_state=mock_steps_state,
updation_time=updation_time,
version=1,
model_url="http://test.model.url",
from trainingmgr.models.trainingjob import TrainingJob
from trainingmgr.models.featuregroup import FeatureGroup
+from trainingmgr.models.steps_state import TrainingJobStatus
-__all_ = ['TrainingJob', 'FeatureGroup']
\ No newline at end of file
+__all_ = ['TrainingJob', 'FeatureGroup', 'TrainingJobStatus']
\ No newline at end of file
--- /dev/null
+# ==================================================================================
+#
+# Copyright (c) 2024 Samsung Electronics Co., Ltd. All Rights Reserved.
+#
+# Licensed 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.
+#
+# ==================================================================================
+
+from sqlalchemy import Integer, String, Column, DateTime
+from sqlalchemy.sql import func
+from sqlalchemy.orm import relationship
+from . import db
+
+class TrainingJobStatus(db.Model):
+ __tablename__ = 'training_job_status_table'
+
+ id = Column(Integer, primary_key=True)
+ states = Column(String, nullable=False)
+ creation_time = Column(DateTime(timezone=False), server_default=func.now(),nullable=False)
+ updation_time = Column(DateTime(timezone=False),onupdate=func.now() ,nullable=True)
+
+ # Establish a relationship to TrainingJob
+ trainingjobs = relationship("TrainingJob", back_populates="steps_state")
\ No newline at end of file
from . import db
from datetime import datetime
from sqlalchemy.sql import func
+from sqlalchemy import Integer, ForeignKey, String, DateTime, Column, Boolean
+from sqlalchemy.orm import relationship
class TrainingJob(db.Model):
__tablename__ = "trainingjob_info_table"
- id = db.Column(db.Integer, primary_key=True)
- trainingjob_name= db.Column(db.String(128), nullable=False)
- run_id = db.Column(db.String(1000), nullable=True)
- steps_state = db.Column(db.String(1000), nullable=True)
- creation_time = db.Column(db.DateTime(timezone=False), server_default=func.now(),nullable=False)
- updation_time = db.Column(db.DateTime(timezone=False),onupdate=func.now() ,nullable=True)
- version = db.Column(db.Integer, nullable=True)
- deletion_in_progress = db.Column(db.Boolean, nullable=True)
- training_config = db.Column(db.String(5000), nullable=False)
- model_url = db.Column(db.String(1000), nullable=True)
- notification_url = db.Column(db.String(1000), nullable=True)
- model_name = db.Column(db.String(128), nullable=True)
- model_info = db.Column(db.String(1000), nullable=True)
+ id = Column(Integer, primary_key=True)
+ 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)
+ creation_time = Column(DateTime(timezone=False), server_default=func.now(),nullable=False)
+ updation_time = Column(DateTime(timezone=False),onupdate=func.now() ,nullable=True)
+ version = Column(Integer, nullable=True)
+ deletion_in_progress = Column(Boolean, nullable=True)
+ training_config = Column(String(5000), nullable=False)
+ model_url = Column(String(1000), nullable=True)
+ notification_url = Column(String(1000), nullable=True)
+ model_name = Column(String(128), nullable=True)
+ model_info = Column(String(1000), nullable=True)
+
+ #defineing relationships
+ steps_state = relationship("TrainingJobStatus", back_populates="trainingjobs")
def __repr__(self):
return f'<Trainingjob {self.trainingjob_name}>'
\ No newline at end of file
# "query_filter": trainingjob.query_filter,
"creation_time": str(trainingjob.creation_time),
"run_id": trainingjob.run_id,
- "steps_state": json.loads(trainingjob.steps_state),
+ "steps_state": trainingjob.steps_state.states ,
"updation_time": str(trainingjob.updation_time),
"version": trainingjob.version,
# "enable_versioning": trainingjob.enable_versioning,