# See the License for the specific language governing permissions and
# limitations under the License.
+from lcm.pub.base import ApiModelBase
-class JobHistory(object):
+
+class JobHistory(ApiModelBase):
def __init__(self, status="", progress="", statusDescription="", errorCode="", responseId=""):
self.status = status
self.progress = progress
self.responseId = responseId
-class JobDescriptor(object):
- def __init__(self, status="", progress=0, statusDescription="", errorCode="", responseId="", responseHistoryList=None):
- self.status = status
- self.progress = progress
- self.statusDescription = statusDescription
- self.errorCode = errorCode
- self.responseId = responseId
- self.responseHistoryList = responseHistoryList
+class JobDescriptor(ApiModelBase):
+ def __init__(self, status="", progress=0, statusDescription="", errorCode="", responseId="", responseHistoryList=None, dict_str=None):
+ self.status = dict_str.get("status", "") if dict_str else status
+ self.progress = dict_str.get("progress", 0) if dict_str else progress
+ self.statusDescription = dict_str.get("statusDescription", "") if dict_str else statusDescription
+ self.errorCode = dict_str.get("errorCode", "") if dict_str else errorCode
+ self.responseId = dict_str.get("responseId", "") if dict_str else responseId
+ self.responseHistoryList = [JobHistory(job_history) for job_history in dict_str.get("responseHistoryList", None)] if dict_str else responseHistoryList
-class JobQueryResp(object):
- def __init__(self, jobId="", responseDescriptor=None):
- self.jobId = jobId
- self.responseDescriptor = responseDescriptor
+class JobQueryResp(ApiModelBase):
+ def __init__(self, jobId="", responseDescriptor=None, dict_str=None):
+ self.jobId = dict_str.get("jobId", "") if dict_str else jobId
+ self.responseDescriptor = JobDescriptor(dict_str=dict_str.get("responseDescriptor", None)) if dict_str else responseDescriptor
-class JobUpdReq(object):
+class JobUpdReq(ApiModelBase):
def __init__(self, progress="", desc="", errcode=""):
self.progress = progress
self.desc = desc
self.errcode = errcode
- def load(self, data):
- self.progress = data["progress"]
- self.desc = data["desc"]
- self.errcode = data["errcode"]
-
-class JobUpdResp(object):
+class JobUpdResp(ApiModelBase):
def __init__(self, result="", msg=""):
self.result = result
self.msg = msg
-
- def load(self, data):
- self.result = data["result"]
- self.msg = data["msg"]
from lcm.pub.utils.jobutil import JobUtil
from lcm.pub.utils.values import remove_none_key
from lcm.jobs.api_model import JobQueryResp, JobDescriptor, JobHistory
-from lcm.jobs.serializers import JobQueryRespSerializer
logger = logging.getLogger(__name__)
jobs = JobUtil.query_job_status(self.job_id, self.response_id)
if not jobs:
job_query_resp = JobQueryResp(self.job_id)
- job_query_resp_serializer = JobQueryRespSerializer(job_query_resp)
- return remove_none_key(job_query_resp_serializer.data)
+ return remove_none_key(job_query_resp.to_dict())
job_query_resp = JobQueryResp(
self.job_id,
JobDescriptor(
]
)
)
- job_query_resp_serializer = JobQueryRespSerializer(job_query_resp)
- return remove_none_key(job_query_resp_serializer.data)
+ return remove_none_key(job_query_resp.to_dict())
# 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.
+
+import os
+from lcm.pub.utils import fileutil
+
+cur_path = os.path.dirname(os.path.abspath(__file__))
+UPDATE_JOB_DICT = fileutil.read_json_file(cur_path + '/update_job.json')
from rest_framework import status
from lcm.pub.database.models import JobModel, JobStatusModel
+from lcm.jobs.tests import UPDATE_JOB_DICT
class JobsViewTest(TestCase):
self.assertIn('responseDescriptor', response.data)
self.assertEqual(100, response.data['responseDescriptor']['progress'])
self.assertEqual(1, len(response.data['responseDescriptor']['responseHistoryList']))
+
+ def test_up_job(self):
+ JobModel(jobid=self.job_id, jobtype='VNF', jobaction='INST', resid='1').save()
+ JobStatusModel(indexid=1, jobid=self.job_id, status='inst', progress=20, descp='inst', errcode="0").save()
+ response = self.client.post("/api/nslcm/v1/jobs/%s" % self.job_id, format='json', data=UPDATE_JOB_DICT)
+ self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code)
--- /dev/null
+{
+ "progress": "100",
+ "desc": "completed",
+ "errcode": "0"
+}
jobs = JobUtil.query_job_status(job_id)
if not jobs:
- raise NSLCMException("Job(%s) does not exist.")
+ raise NSLCMException("Job(%s) does not exist." % job_id)
if jobs[-1].errcode != JOB_ERROR_CODE.ERROR:
- job_up_req = JobUpdReq()
- job_up_req.load(request.data)
+ job_up_req = JobUpdReq(**request.data)
desc = job_up_req.desc
errcode = JOB_ERROR_CODE.NO_ERROR if job_up_req.errcode in ('true', 'active') else JOB_ERROR_CODE.ERROR
logger.debug("errcode=%s", errcode)
--- /dev/null
+# Copyright 2019 ZTE Corporation.
+#
+# 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.
+
+
+class ApiModelBase(object):
+ def to_dict(self):
+ r_dict = to_dict(self)
+ return r_dict
+
+
+def to_dict(instance, cls=ApiModelBase):
+ r_dict = {}
+ for k, v in instance.__dict__.iteritems():
+ if isinstance(v, cls):
+ r_dict[k] = to_dict(v)
+ elif isinstance(v, list):
+ r_dict[k] = [to_dict(v_instance) for v_instance in v]
+ else:
+ r_dict[k] = v
+ return r_dict