vfclcm upgrade from python2 to python3 31/90631/11
authorhongyuzhao <zhao.hongyu@zte.com.cn>
Fri, 28 Jun 2019 01:51:33 +0000 (09:51 +0800)
committerhongyuzhao <zhao.hongyu@zte.com.cn>
Wed, 3 Jul 2019 03:19:09 +0000 (11:19 +0800)
Change-Id: Ia55ae38ec64fc3d821d1e7e1c0cbe48b572a0dd4
Issue-ID: VFC-1429
Signed-off-by: hongyuzhao <zhao.hongyu@zte.com.cn>
90 files changed:
lcm/docker/Dockerfile
lcm/docker/docker-env-conf.sh
lcm/lcm/jobs/tests.py
lcm/lcm/jobs/views.py
lcm/lcm/middleware.py
lcm/lcm/nf/biz/change_ext_conn.py
lcm/lcm/nf/biz/change_vnf_flavour.py
lcm/lcm/nf/biz/create_subscription.py
lcm/lcm/nf/biz/grant_vnf.py
lcm/lcm/nf/biz/heal_vnf.py
lcm/lcm/nf/biz/instantiate_vnf.py
lcm/lcm/nf/biz/operate_vnf.py
lcm/lcm/nf/biz/query_subscription.py
lcm/lcm/nf/biz/query_vnf_lcm_op_occ.py
lcm/lcm/nf/biz/scale_vnf.py
lcm/lcm/nf/biz/scale_vnf_to_level.py
lcm/lcm/nf/biz/terminate_vnf.py
lcm/lcm/nf/biz/update_vnf.py
lcm/lcm/nf/serializers/_links.py
lcm/lcm/nf/serializers/affected_storages.py
lcm/lcm/nf/serializers/affected_vls.py
lcm/lcm/nf/serializers/affected_vnfcs.py
lcm/lcm/nf/serializers/cp_protocol_data.py
lcm/lcm/nf/serializers/ext_cp_info.py
lcm/lcm/nf/serializers/ext_link_port_data.py
lcm/lcm/nf/serializers/ext_link_port_info.py
lcm/lcm/nf/serializers/ext_managed_virtual_link_info.py
lcm/lcm/nf/serializers/ext_virtual_link_data.py
lcm/lcm/nf/serializers/ext_virtual_link_info.py
lcm/lcm/nf/serializers/instantiate_vnf_request.py
lcm/lcm/nf/serializers/instantiated_vnf_info.py
lcm/lcm/nf/serializers/ip_addresse.py
lcm/lcm/nf/serializers/ip_over_ethernet_address_data.py
lcm/lcm/nf/serializers/lccn_filter_data.py
lcm/lcm/nf/serializers/lccn_subscription.py
lcm/lcm/nf/serializers/lccn_subscription_request.py
lcm/lcm/nf/serializers/lccn_subscriptions.py
lcm/lcm/nf/serializers/notification_types.py
lcm/lcm/nf/serializers/virtual_storage_resource_info.py
lcm/lcm/nf/serializers/vnf_ext_cp_config.py
lcm/lcm/nf/serializers/vnf_ext_cp_data.py
lcm/lcm/nf/serializers/vnf_info_modifications.py
lcm/lcm/nf/serializers/vnf_instance.py
lcm/lcm/nf/serializers/vnf_instances.py
lcm/lcm/nf/serializers/vnf_lcm_op_occ.py
lcm/lcm/nf/serializers/vnf_lcm_op_occs.py
lcm/lcm/nf/serializers/vnf_link_port_info.py
lcm/lcm/nf/serializers/vnf_virtual_link_resource_info.py
lcm/lcm/nf/serializers/vnfc_cp_info.py
lcm/lcm/nf/serializers/vnfc_resource_info.py
lcm/lcm/nf/tests/const.py
lcm/lcm/nf/tests/test_change_ext_conn.py
lcm/lcm/nf/tests/test_change_flavour.py
lcm/lcm/nf/tests/test_create_vnf.py
lcm/lcm/nf/tests/test_delete_vnf.py
lcm/lcm/nf/tests/test_heal_vnf.py
lcm/lcm/nf/tests/test_instantiate_vnf.py
lcm/lcm/nf/tests/test_operate_vnf.py
lcm/lcm/nf/tests/test_query_vnf.py
lcm/lcm/nf/tests/test_query_vnf_lcm_op.py
lcm/lcm/nf/tests/test_scale_vnf.py
lcm/lcm/nf/tests/test_scale_vnf_to_level.py
lcm/lcm/nf/tests/test_subscribe_notification.py
lcm/lcm/nf/tests/test_terminate_vnf.py
lcm/lcm/nf/tests/test_update_vnf.py
lcm/lcm/nf/views/common.py
lcm/lcm/nf/views/curd_vnf_views.py
lcm/lcm/nf/views/lcm_op_occs_view.py
lcm/lcm/nf/views/subscriptions_view.py
lcm/lcm/pub/database/migrations/0001_initial.py [deleted file]
lcm/lcm/pub/database/migrations/0002_vnflcmopoccmodel_sub_operation.py [deleted file]
lcm/lcm/pub/database/migrations/__init__.py [deleted file]
lcm/lcm/pub/msapi/gvnfmdriver.py
lcm/lcm/pub/redisco/__init__.py [new file with mode: 0644]
lcm/lcm/pub/redisco/containers.py [new file with mode: 0644]
lcm/lcm/pub/utils/fileutil.py
lcm/lcm/pub/utils/idutil.py
lcm/lcm/pub/utils/jobutil.py
lcm/lcm/pub/utils/notificationsutil.py
lcm/lcm/pub/utils/restcall.py
lcm/lcm/pub/utils/tests.py
lcm/lcm/pub/utils/toscautil.py
lcm/lcm/pub/utils/toscautil_new.py
lcm/lcm/pub/vimapi/adaptor.py
lcm/lcm/pub/vimapi/api.py
lcm/lcm/samples/tests.py
lcm/lcm/settings.py
lcm/lcm/swagger/management/commands/export_swagger.py
lcm/requirements.txt
lcm/tox.ini

index 1507070..34a7880 100755 (executable)
@@ -1,4 +1,4 @@
-FROM python:2-alpine
+FROM python:3.6-alpine
 
 ARG HTTP_PROXY=${HTTP_PROXY}
 ARG HTTPS_PROXY=${HTTPS_PROXY}
index b938942..44119a6 100755 (executable)
@@ -4,14 +4,14 @@ install_sf(){
 
     apk --no-cache update
     apk --no-cache add bash curl gcc wget mysql-client openssl-dev
-    apk --no-cache add python-dev libffi-dev musl-dev py2-virtualenv
+    apk --no-cache add python36-dev libffi-dev musl-dev py3-virtualenv
 
     # get binary zip from nexus - vfc-nfvo-catalog
     wget -q -O vfc-gvnfm-vnflcm-lcm.zip "https://nexus.onap.org/service/local/artifact/maven/redirect?r=snapshots&g=org.onap.vfc.gvnfm.vnflcm.lcm&a=vfc-gvnfm-vnflcm-lcm&v=${pkg_version}-SNAPSHOT&e=zip" && \
     unzip vfc-gvnfm-vnflcm-lcm.zip && \
     rm -rf vfc-gvnfm-vnflcm-lcm.zip
     wait
-    pip install --upgrade setuptools pip 
+    pip install --upgrade setuptools pip
     pip install --no-cache-dir --pre -r  /service/vfc/gvnfm/vnflcm/lcm/requirements.txt
 }
 
@@ -44,9 +44,13 @@ clean_sf_cache(){
     rm -rf /tmp/*
 }
 
+patch_redisco_2py3(){
+    sed -i 's/raise KeyError, value/raise KeyError(value)/g' /usr/local/lib/python3.6/site-packages/redisco/containers.py
+}
 install_sf
 wait
 add_user
 config_logdir
+patch_redisco_2py3
 clean_sf_cache
 
index 3eb60ab..ca151eb 100644 (file)
@@ -30,4 +30,4 @@ class JobsViewTest(TestCase):
         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').save()
         response = self.client.get("/api/vnflcm/v1/vnf_lc_ops/%s?responseId=123456jhj" % self.job_id)
-        self.failUnlessEqual(status.HTTP_200_OK, response.status_code)
+        self.assertEqual(status.HTTP_200_OK, response.status_code)
index cdd7ba4..7221bf5 100644 (file)
@@ -53,4 +53,4 @@ class JobView(APIView):
             return Response(data=resp_serializer.data, status=status.HTTP_200_OK)
         except Exception as e:
             logger.error(traceback.format_exc())
-            return Response(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+            return Response(data={'error': e.args[0]}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
index f10a8d7..5866deb 100644 (file)
@@ -19,6 +19,9 @@ from lcm.pub.config.config import FORWARDED_FOR_FIELDS, SERVICE_NAME
 class LogContextMiddleware(object):
     #  the last IP behind multiple proxies,  if no exist proxies
     #  get local host ip.
+    def __init__(self, get_response):
+        self.get_response = get_response
+
     def _getLastIp(self, request):
 
         ip = ""
@@ -58,3 +61,9 @@ class LogContextMiddleware(object):
     def process_response(self, request, response):
         MDC.clear()
         return response
+
+    def __call__(self, request):
+        self.process_request(request)
+        response = self.get_response(request)
+        self.process_response(request, response)
+        return response
index 1b3f947..b423a2e 100644 (file)
@@ -87,12 +87,12 @@ class ChangeExtConn(Thread):
                 operation_state=OPERATION_STATE_TYPE.COMPLETED
             )
         except NFLCMException as e:
-            logger.error(e.message)
-            self.change_ext_conn_failed_handle(e.message)
+            logger.error(e.args[0])
+            self.change_ext_conn_failed_handle(e.args[0])
         except Exception as e:
-            logger.error(e.message)
+            logger.error(e.args[0])
             logger.error(traceback.format_exc())
-            self.change_ext_conn_failed_handle(e.message)
+            self.change_ext_conn_failed_handle(e.args[0])
 
     def pre_deal(self):
         logger.debug("Start pre deal for VNF change_ext_conn task")
@@ -232,7 +232,7 @@ class ChangeExtConn(Thread):
 
     def query_inst_resource(self, inst_resource):
         logger.debug('Query resource begin')
-        for resource_type in RESOURCE_MAP.keys():
+        for resource_type in list(RESOURCE_MAP.keys()):
             resource_table = globals().get(resource_type + 'InstModel')
             resource_insts = resource_table.objects.filter(
                 instid=self.nf_inst_id
index 69cdf83..4563e30 100644 (file)
@@ -84,12 +84,12 @@ class ChangeVnfFlavour(Thread):
                 operation_state=OPERATION_STATE_TYPE.COMPLETED
             )
         except NFLCMException as e:
-            logger.error(e.message)
-            self.change_vnf_flavour_failed_handle(e.message)
+            logger.error(e.args[0])
+            self.change_vnf_flavour_failed_handle(e.args[0])
         except Exception as e:
-            logger.error(e.message)
+            logger.error(e.args[0])
             logger.error(traceback.format_exc())
-            self.change_vnf_flavour_failed_handle(e.message)
+            self.change_vnf_flavour_failed_handle(e.args[0])
 
     def pre_deal(self):
         logger.debug("Start pre deal for VNF change_vnf_flavour task")
index 164bf6c..fe06272 100644 (file)
@@ -40,6 +40,8 @@ class CreateSubscription:
     def __init__(self, data):
         self.data = data
         self.filter = ignore_case_get(self.data, "filter", {})
+        logger.debug("self.data:%s" % self.data)
+        logger.debug("self.filter:%s" % self.filter)
         self.callback_uri = ignore_case_get(self.data, "callbackUri")
         self.authentication = ignore_case_get(self.data, "authentication", {})
         self.notification_types = ignore_case_get(self.filter, "notificationTypes", [])
index 83d94e5..80ff035 100644 (file)
@@ -108,7 +108,7 @@ def grant_resource(data, nf_inst_id, job_id, grant_type, vdus):
         if vnf.vimInfo and 'vimid' not in addition_paras:
             vim_info = json.loads(vnf.vimInfo)
             vimid = ""
-            for key in vim_info.iterkeys():
+            for key in list(vim_info.keys()):
                 vimid = key
             addition_paras['vimid'] = vimid
     logger.info('Grant request data=%s' % content_args)
index c768f6b..c338fe6 100644 (file)
@@ -100,12 +100,12 @@ class HealVnf(Thread):
                 operation_state=OPERATION_STATE_TYPE.COMPLETED
             )
         except NFLCMException as e:
-            logger.error(e.message)
-            self.vnf_heal_failed_handle(e.message)
+            logger.error(e.args[0])
+            self.vnf_heal_failed_handle(e.args[0])
         except Exception as e:
-            logger.error(e.message)
+            logger.error(e.args[0])
             logger.error(traceback.format_exc())
-            self.vnf_heal_failed_handle(e.message)
+            self.vnf_heal_failed_handle(e.args[0])
 
     def pre_deal(self):
         logger.debug("Start pre deal for VNF heal_vnf task")
index 0ecd95e..57711f7 100644 (file)
@@ -83,9 +83,9 @@ class InstantiateVnf(Thread):
                 operation_state=OPERATION_STATE_TYPE.COMPLETED
             )
         except NFLCMException as e:
-            self.vnf_inst_failed_handle(e.message)
+            self.vnf_inst_failed_handle(e.args[0])
         except Exception as e:
-            logger.error(e.message)
+            logger.error(str(e))
             logger.error(traceback.format_exc())
             self.vnf_inst_failed_handle('unexpected exception')
 
@@ -113,9 +113,9 @@ class InstantiateVnf(Thread):
         input_parameters = []
         inputs = ignore_case_get(self.data, "additionalParams")
         if inputs:
-            if isinstance(inputs, (str, unicode)):
+            if isinstance(inputs, str):
                 inputs = json.loads(inputs)
-            for key, val in inputs.items():
+            for key, val in list(inputs.items()):
                 input_parameters.append({"key": key, "value": val})
         vnf_package = query_vnfpackage_by_id(self.vnfd_id)
         pkg_info = ignore_case_get(vnf_package, "packageInfo")
@@ -198,7 +198,7 @@ class InstantiateVnf(Thread):
             resp = notify_lcm_to_nfvo(json.dumps(notification_content))
             logger.info('Lcm notify end, response %s' % resp)
         except Exception as e:
-            logger.error("Lcm instantiate notify failed: %s", e.message)
+            logger.error("Lcm instantiate notify failed: %s", e.args[0])
         NotificationsUtil().send_notification(notification_content)
 
     def vnf_inst_failed_handle(self, error_msg):
index c0c8540..1722792 100644 (file)
@@ -75,11 +75,11 @@ class OperateVnf(Thread):
                 OPERATION_STATE_TYPE.COMPLETED
             )
         except NFLCMException as e:
-            self.vnf_operate_failed_handle(e.message)
+            self.vnf_operate_failed_handle(e.args[0])
         except Exception as e:
-            logger.error(e.message)
+            logger.error(e.args[0])
             logger.error(traceback.format_exc())
-            self.vnf_operate_failed_handle(e.message)
+            self.vnf_operate_failed_handle(e.args[0])
 
     def apply_grant(self):
         vdus = VmInstModel.objects.filter(instid=self.nf_inst_id)
index aedb467..f2270d0 100644 (file)
@@ -38,10 +38,10 @@ class QuerySubscription:
     def query_multi_subscriptions(self):
         query_data = {}
         logger.debug("QueryMultiSubscriptions--get--biz::> Check for filters in query params" % self.params)
-        for query, value in self.params.iteritems():
+        for query, value in list(self.params.items()):
             if query in ROOT_FILTERS:
                 query_data[ROOT_FILTERS[query] + '__icontains'] = value
-        for query, value in self.params.iteritems():
+        for query, value in list(self.params.items()):
             if query in VNF_INSTANCE_FILTERS:
                 query_data[VNF_INSTANCE_FILTERS[query] + '__icontains'] = value
         # Query the database with filters if the request has fields in request params, else fetch all records
index 01d8b8d..b352f5c 100644 (file)
@@ -38,7 +38,7 @@ class QueryVnfLcmOpOcc:
     def query_multi_vnf_lcm_op_occ(self):
         query_data = {}
         logger.debug("QueryMultiVnfLcmOpOccs--get--biz::> Check for filters in query params" % self.params)
-        for query, value in self.params.iteritems():
+        for query, value in list(self.params.items()):
             if query in FILTERS:
                 query_data[FILTERS[query]] = value
         # Query the database with filters if the request has fields in request params, else fetch all records
@@ -59,9 +59,9 @@ class QueryVnfLcmOpOcc:
             'vnfInstanceId': lcm_op.vnf_instance_id,
             'grantId': None,
             'operation': lcm_op.operation,
-            'isAutomaticInvocation': lcm_op.is_automatic_invocation,
+            'isAutomaticInvocation': False if lcm_op.is_automatic_invocation == 'False' else True,
             'operationParams': json.loads(lcm_op.operation_params),
-            'isCancelPending': lcm_op.is_cancel_pending,
+            'isCancelPending': False if lcm_op.is_cancel_pending == 'False' else True,
             'cancelMode': lcm_op.cancel_mode,
             'error': None if not lcm_op.error else json.loads(lcm_op.error),
             'resourceChanges': None if not lcm_op.resource_changes else json.loads(lcm_op.resource_changes),
index ad828dd..2f5b31e 100644 (file)
@@ -75,12 +75,12 @@ class ScaleVnf(Thread):
             self.vnf_insts.update(status=INSTANTIATION_STATE.INSTANTIATED,
                                   lastuptime=now_time())
         except NFLCMException as e:
-            logger.error(e.message)
-            self.vnf_scale_failed_handle(e.message)
+            logger.error(e.args[0])
+            self.vnf_scale_failed_handle(e.args[0])
         except Exception as e:
-            logger.error(e.message)
+            logger.error(e.args[0])
             logger.error(traceback.format_exc())
-            self.vnf_scale_failed_handle(e.message)
+            self.vnf_scale_failed_handle(e.args[0])
 
     def scale_pre(self):
         self.scale_type = self.data.get("type")
@@ -196,7 +196,7 @@ class ScaleVnf(Thread):
 
     def do_notify_del_vim_res(self, res_type, res_id):
         logger.debug('Scaling in [%s] resource, resourceid [%s]', res_type, res_id)
-        resource_type = RESOURCE_MAP.keys()[RESOURCE_MAP.values().index(res_type)]
+        resource_type = list(RESOURCE_MAP.keys())[list(RESOURCE_MAP.values()).index(res_type)]
         resource_table = globals().get(resource_type + 'InstModel')
         resource_table.objects.filter(instid=self.nf_inst_id, resourceid=res_id).delete()
         if res_type == "vm":
index 0e856ec..eff83b4 100644 (file)
@@ -86,7 +86,7 @@ class ScaleVnfToLevel(ScaleVnf):
             if policy.get("type") != "tosca.policies.nfv.InstantiationLevels":
                 continue
             levels = policy["properties"]["levels"]
-            for level_id, level_info in levels.items():
+            for level_id, level_info in list(levels.items()):
                 scale_aspect = level_info["scale_info"].get(self.aspect_id)
                 scale_level_in_vnfd = scale_aspect["scale_level"]
                 if scale_level_in_request == scale_level_in_vnfd:
@@ -99,5 +99,5 @@ class ScaleVnfToLevel(ScaleVnf):
                 continue
             levels = policy["properties"]["levels"]
             level_info = levels.get(self.instantiation_level_id)
-            return level_info.get("scale_info").keys()[0]
+            return list(level_info.get("scale_info").keys())[0]
         raise NFLCMException("Failed to get aspect_id in vnfd")
index d9faac6..2b04dc9 100644 (file)
@@ -102,11 +102,11 @@ class TerminateVnf(Thread):
                 "Terminate Vnf success."
             )
         except NFLCMException as e:
-            self.vnf_term_failed_handle(e.message)
+            self.vnf_term_failed_handle(e.args[0])
         except Exception as e:
-            logger.error(e.message)
+            logger.error(e.args[0])
             logger.error(traceback.format_exc())
-            self.vnf_term_failed_handle(e.message)
+            self.vnf_term_failed_handle(e.args[0])
 
     def term_pre(self):
         vnf_insts = NfInstModel.objects.filter(nfinstid=self.nf_inst_id)
@@ -123,7 +123,7 @@ class TerminateVnf(Thread):
 
     def query_inst_resource(self):
         logger.info('Query resource begin')
-        for resource_type in RESOURCE_MAP.keys():
+        for resource_type in list(RESOURCE_MAP.keys()):
             resource_table = globals().get(resource_type + 'InstModel')
             resource_insts = resource_table.objects.filter(instid=self.nf_inst_id)
             for resource_inst in resource_insts:
@@ -164,7 +164,7 @@ class TerminateVnf(Thread):
 
     def do_notify_delete(self, res_type, res_id):
         logger.debug('Deleting [%s] resource, resourceid [%s]' % (res_type, res_id))
-        resource_type = RESOURCE_MAP.keys()[RESOURCE_MAP.values().index(res_type)]
+        resource_type = list(RESOURCE_MAP.keys())[list(RESOURCE_MAP.values()).index(res_type)]
         resource_table = globals().get(resource_type + 'InstModel')
         resource_table.objects.filter(instid=self.nf_inst_id, resourceid=res_id).delete()
 
@@ -179,7 +179,7 @@ class TerminateVnf(Thread):
             logger.info('Lcm notify end, response: %s' % resp)
             NotificationsUtil().send_notification(self.notify_data)
         except Exception as e:
-            logger.error("Lcm terminate notify failed: %s", e.message)
+            logger.error("Lcm terminate notify failed: %s", e.args[0])
 
     def vnf_term_failed_handle(self, error_msg):
         logger.error('VNF termination failed, detail message: %s' % error_msg)
index 9ae7d66..0dfaa75 100644 (file)
@@ -69,14 +69,14 @@ class UpdateVnf(Thread):
 
             JobUtil.add_job_status(self.job_id, 100, "Update VNF success.")
         except NFLCMException as e:
-            logger.error(e.message)
-            self.lcm_op_occ.notify_lcm(OPERATION_STATE_TYPE.FAILED, e.message)
-            JobUtil.add_job_status(self.job_id, 255, e.message)
+            logger.error(e.args[0])
+            self.lcm_op_occ.notify_lcm(OPERATION_STATE_TYPE.FAILED, e.args[0])
+            JobUtil.add_job_status(self.job_id, 255, e.args[0])
         except Exception as e:
-            logger.error(e.message)
+            logger.error(e.args[0])
             logger.error(traceback.format_exc())
-            self.lcm_op_occ.notify_lcm(OPERATION_STATE_TYPE.FAILED, e.message)
-            JobUtil.add_job_status(self.job_id, 255, e.message)
+            self.lcm_op_occ.notify_lcm(OPERATION_STATE_TYPE.FAILED, e.args[0])
+            JobUtil.add_job_status(self.job_id, 255, e.args[0])
 
     def send_notification(self):
         notify_data = prepare_notification(nfinstid=self.nf_inst_id,
index 71828b0..ba7b776 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from link import linkSerializer
+from .link import linkSerializer
 
 
 class _LinksSerializer(serializers.Serializer):
index 1c01fef..a33a05a 100644 (file)
@@ -15,7 +15,7 @@
 
 from rest_framework import serializers
 
-from resource_handle import ResourceHandleSerializer
+from .resource_handle import ResourceHandleSerializer
 from lcm.nf.const import CHANGE_TYPE
 
 CHANGE_TYPES = [
index 0b47b27..7803219 100644 (file)
@@ -15,7 +15,7 @@
 
 from rest_framework import serializers
 
-from resource_handle import ResourceHandleSerializer
+from .resource_handle import ResourceHandleSerializer
 from lcm.nf.const import CHANGE_TYPE
 
 CHANGE_TYPES = [
index 10d9347..0e06755 100644 (file)
@@ -15,7 +15,7 @@
 
 from rest_framework import serializers
 
-from resource_handle import ResourceHandleSerializer
+from .resource_handle import ResourceHandleSerializer
 from lcm.nf.const import CHANGE_TYPE
 
 CHANGE_TYPES = [
index 495e35f..1fcfb52 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from ip_over_ethernet_address_data import IpOverEthernetAddressDataSerializer
+from .ip_over_ethernet_address_data import IpOverEthernetAddressDataSerializer
 
 
 class CpProtocolDataSerializer(serializers.Serializer):
index 0d427f8..52f513e 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from cp_protocol_info import CpProtocolInfoSerializer
+from .cp_protocol_info import CpProtocolInfoSerializer
 
 
 class ExtCpInfoSerializer(serializers.Serializer):
index c6dafdd..02d0bbc 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from resource_handle import ResourceHandleSerializer
+from .resource_handle import ResourceHandleSerializer
 
 
 class ExtLinkPortDataSerializer(serializers.Serializer):
index e8821c5..35fd368 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from resource_handle import ResourceHandleSerializer
+from .resource_handle import ResourceHandleSerializer
 
 
 class ExtlinkPortInfoSerializer(serializers.Serializer):
index ae0107f..b6fe9cf 100644 (file)
@@ -14,8 +14,8 @@
 
 from rest_framework import serializers
 
-from resource_handle import ResourceHandleSerializer
-from vnf_link_port_info import VnfLinkPortInfoSerializer
+from .resource_handle import ResourceHandleSerializer
+from .vnf_link_port_info import VnfLinkPortInfoSerializer
 
 
 class ExtManagedVirtualLinkInfoSerializer(serializers.Serializer):
index 612e00c..62beee6 100644 (file)
@@ -14,8 +14,8 @@
 
 from rest_framework import serializers
 
-from vnf_ext_cp_data import VnfExtCpDataSerializer
-from ext_link_port_data import ExtLinkPortDataSerializer
+from .vnf_ext_cp_data import VnfExtCpDataSerializer
+from .ext_link_port_data import ExtLinkPortDataSerializer
 
 
 class ExtVirtualLinkDataSerizlizer(serializers.Serializer):
index 90cc7c7..3a8bbcf 100644 (file)
@@ -14,8 +14,8 @@
 
 from rest_framework import serializers
 
-from resource_handle import ResourceHandleSerializer
-from ext_link_port_info import ExtlinkPortInfoSerializer
+from .resource_handle import ResourceHandleSerializer
+from .ext_link_port_info import ExtlinkPortInfoSerializer
 
 
 class ExtVirtualLinkInfoSerializer(serializers.Serializer):
index 9290d84..72376c4 100644 (file)
@@ -14,9 +14,9 @@
 
 from rest_framework import serializers
 
-from ext_virtual_link_data import ExtVirtualLinkDataSerizlizer
-from ext_managed_virtual_link_data import ExtManagedVirtualLinkDataSerizlizer
-from vim_connection_info import VimConnectionInfoSerializer
+from .ext_virtual_link_data import ExtVirtualLinkDataSerizlizer
+from .ext_managed_virtual_link_data import ExtManagedVirtualLinkDataSerizlizer
+from .vim_connection_info import VimConnectionInfoSerializer
 
 
 class InstantiateVnfRequestSerializer(serializers.Serializer):
index cd6c93e..86af905 100644 (file)
 
 from rest_framework import serializers
 
-from scale_info import ScaleInfoSerializer
-from ext_cp_info import ExtCpInfoSerializer
-from ext_virtual_link_info import ExtVirtualLinkInfoSerializer
-from ext_managed_virtual_link_info import ExtManagedVirtualLinkInfoSerializer
-from vnfc_resource_info import VnfcResourceInfoSerializer
-from vnf_virtual_link_resource_info import VnfVirtualLinkResourceInfoSerializer
-from virtual_storage_resource_info import VirtualStorageResourceInfoSerializer
+from .scale_info import ScaleInfoSerializer
+from .ext_cp_info import ExtCpInfoSerializer
+from .ext_virtual_link_info import ExtVirtualLinkInfoSerializer
+from .ext_managed_virtual_link_info import ExtManagedVirtualLinkInfoSerializer
+from .vnfc_resource_info import VnfcResourceInfoSerializer
+from .vnf_virtual_link_resource_info import VnfVirtualLinkResourceInfoSerializer
+from .virtual_storage_resource_info import VirtualStorageResourceInfoSerializer
 
 
 class InstantiatedVnfInfoSerializer(serializers.Serializer):
index f273c42..f266a45 100644 (file)
@@ -10,7 +10,7 @@
 # limitations under the License.
 
 from rest_framework import serializers
-from address_range import AddressRangeSerializer
+from .address_range import AddressRangeSerializer
 
 
 class IpAddresseSerializer(serializers.Serializer):
index 562d5fb..826082d 100644 (file)
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 from rest_framework import serializers
-from ip_addresse import IpAddresseSerializer
+from .ip_addresse import IpAddresseSerializer
 
 
 class IpOverEthernetAddressDataSerializer(serializers.Serializer):
index b016a4f..30e0d9a 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from vnf_instance_subscription_filter import VnfInstanceSubscriptionFilter
+from .vnf_instance_subscription_filter import VnfInstanceSubscriptionFilter
 from lcm.nf.const import NOTIFICATION_TYPES, LCM_OPERATION_TYPES, LCM_OPERATION_STATE_TYPES
 
 
index e29c6d1..a92d039 100644 (file)
@@ -14,8 +14,8 @@
 
 from rest_framework import serializers
 
-from link import linkSerializer
-from lccn_filter_data import LifeCycleChangeNotificationsFilter
+from .link import linkSerializer
+from .lccn_filter_data import LifeCycleChangeNotificationsFilter
 
 
 class LinkSerializer(serializers.Serializer):
index 445845a..d8b1495 100644 (file)
@@ -14,8 +14,8 @@
 
 from rest_framework import serializers
 
-from lccn_filter_data import LifeCycleChangeNotificationsFilter
-from subscription_auth_data import SubscriptionAuthenticationSerializer
+from .lccn_filter_data import LifeCycleChangeNotificationsFilter
+from .subscription_auth_data import SubscriptionAuthenticationSerializer
 
 
 class LccnSubscriptionRequestSerializer(serializers.Serializer):
index c4f70f6..5161a4f 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from lccn_subscription import LccnSubscriptionSerializer
+from .lccn_subscription import LccnSubscriptionSerializer
 
 
 class LccnSubscriptionsSerializer(serializers.ListSerializer):
index d675588..c87b76d 100644 (file)
 
 from rest_framework import serializers
 
-from affected_vnfcs import AffectedVnfcsSerializer
-from affected_vls import AffectedVLsSerializer
-from affected_storages import AffectedStoragesSerializer
+from .affected_vnfcs import AffectedVnfcsSerializer
+from .affected_vls import AffectedVLsSerializer
+from .affected_storages import AffectedStoragesSerializer
 from lcm.nf.const import LCM_OPERATION_TYPES, LCM_OPERATION_STATE_TYPES
-from link import linkSerializer
-from response import ProblemDetailsSerializer
-from ext_virtual_link_info import ExtVirtualLinkInfoSerializer
-from vnf_info_modifications import VnfInfoModificationsSerializer
+from .link import linkSerializer
+from .response import ProblemDetailsSerializer
+from .ext_virtual_link_info import ExtVirtualLinkInfoSerializer
+from .vnf_info_modifications import VnfInfoModificationsSerializer
 
 
 class LccnLinksSerializer(serializers.Serializer):
index 8ec23a3..5f5de12 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from resource_handle import ResourceHandleSerializer
+from .resource_handle import ResourceHandleSerializer
 
 
 class VirtualStorageResourceInfoSerializer(serializers.Serializer):
index b9fedf0..73336ea 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from cp_protocol_data import CpProtocolDataSerializer
+from .cp_protocol_data import CpProtocolDataSerializer
 
 
 class VnfExtCpConfigSerializer(serializers.Serializer):
index 987569c..9e6be88 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from vnf_ext_cp_config import VnfExtCpConfigSerializer
+from .vnf_ext_cp_config import VnfExtCpConfigSerializer
 
 
 class VnfExtCpDataSerializer(serializers.Serializer):
index 8098a6c..8d82635 100644 (file)
@@ -15,7 +15,7 @@
 
 from rest_framework import serializers
 
-from vim_connection_info import VimConnectionInfoSerializer
+from .vim_connection_info import VimConnectionInfoSerializer
 
 
 class VnfInfoModificationsSerializer(serializers.Serializer):
index 2521e8e..020ddf7 100644 (file)
@@ -15,9 +15,9 @@
 
 from rest_framework import serializers
 
-from vim_connection_info import VimConnectionInfoSerializer
-from instantiated_vnf_info import InstantiatedVnfInfoSerializer
-from _links import _LinksSerializer
+from .vim_connection_info import VimConnectionInfoSerializer
+from .instantiated_vnf_info import InstantiatedVnfInfoSerializer
+from ._links import _LinksSerializer
 
 
 class VnfInstanceSerializer(serializers.Serializer):
index f313290..d9530fe 100644 (file)
@@ -10,7 +10,7 @@
 # limitations under the License.
 
 from rest_framework import serializers
-from vnf_instance import VnfInstanceSerializer
+from .vnf_instance import VnfInstanceSerializer
 
 
 class VnfInstancesSerializer(serializers.ListSerializer):
index 267f5f8..45e2f51 100644 (file)
 
 from rest_framework import serializers
 
-from affected_vnfcs import AffectedVnfcsSerializer
-from affected_vls import AffectedVLsSerializer
-from affected_storages import AffectedStoragesSerializer
-from link import linkSerializer
-from response import ProblemDetailsSerializer
-from ext_virtual_link_info import ExtVirtualLinkInfoSerializer
-from vnf_info_modifications import VnfInfoModificationsSerializer
+from .affected_vnfcs import AffectedVnfcsSerializer
+from .affected_vls import AffectedVLsSerializer
+from .affected_storages import AffectedStoragesSerializer
+from .link import linkSerializer
+from .response import ProblemDetailsSerializer
+from .ext_virtual_link_info import ExtVirtualLinkInfoSerializer
+from .vnf_info_modifications import VnfInfoModificationsSerializer
 
 
 LCM_OPERATION_TYPES = [
index 6cb7090..1baa097 100644 (file)
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 from rest_framework import serializers
-from vnf_lcm_op_occ import VNFLCMOpOccSerializer
+from .vnf_lcm_op_occ import VNFLCMOpOccSerializer
 
 
 class VNFLCMOpOccsSerializer(serializers.ListSerializer):
index 06201ae..331175b 100644 (file)
@@ -14,7 +14,7 @@
 
 from rest_framework import serializers
 
-from resource_handle import ResourceHandleSerializer
+from .resource_handle import ResourceHandleSerializer
 
 
 class VnfLinkPortInfoSerializer(serializers.Serializer):
index e5c9d4c..c5e3675 100644 (file)
@@ -13,8 +13,8 @@
 # limitations under the License.
 
 from rest_framework import serializers
-from resource_handle import ResourceHandleSerializer
-from vnf_link_port_info import VnfLinkPortInfoSerializer
+from .resource_handle import ResourceHandleSerializer
+from .vnf_link_port_info import VnfLinkPortInfoSerializer
 
 
 class VnfVirtualLinkResourceInfoSerializer(serializers.Serializer):
index 693aba1..5e8e9f5 100644 (file)
@@ -1,7 +1,7 @@
 
 from rest_framework import serializers
 
-from cp_protocol_info import CpProtocolInfoSerializer
+from .cp_protocol_info import CpProtocolInfoSerializer
 
 
 class VnfcCpInfoSerializer(serializers.Serializer):
index 3ad0c6f..4a8e493 100644 (file)
@@ -14,8 +14,8 @@
 
 from rest_framework import serializers
 
-from resource_handle import ResourceHandleSerializer
-from vnfc_cp_info import VnfcCpInfoSerializer
+from .resource_handle import ResourceHandleSerializer
+from .vnfc_cp_info import VnfcCpInfoSerializer
 
 
 class VnfcResourceInfoSerializer(serializers.Serializer):
index 46b608b..7debe6b 100644 (file)
@@ -125,17 +125,17 @@ inst_req_data = {
 
 vnfd_model_dict = {
     'metadata': {
-        'vendor': u'zte',
+        'vendor': 'zte',
         'is_shared': False,
         'description': '',
-        'domain_type': u'CN',
-        'version': u'v4.14.10',
+        'domain_type': 'CN',
+        'version': 'v4.14.10',
         'vmnumber_overquota_alarm': False,
         'cross_dc': False,
-        'vnf_type': u'SSS',
-        'vnfd_version': u'V00000001',
-        'id': u'sss-vnf-template',
-        'name': u'sss-vnf-template'
+        'vnf_type': 'SSS',
+        'vnfd_version': 'V00000001',
+        'id': 'sss-vnf-template',
+        'name': 'sss-vnf-template'
     },
     'vdus': [
         {
@@ -182,7 +182,7 @@ vnfd_model_dict = {
                 "inner_hugepage_size": "2048",
                 "action": "add"
             },
-            "image_file": u'sss',
+            "image_file": 'sss',
             "local_storages": [
                 "local_storage_id1",
                 "local_storage_id2"
@@ -304,7 +304,7 @@ vnfd_model_dict = {
             'targets': {
 
             },
-            'policy_id': u'policy_scale_sss-vnf-template',
+            'policy_id': 'policy_scale_sss-vnf-template',
             'properties': {
                 'policy_file': '*-vnfd.zip/*-vnf-policy.xml'
             },
@@ -315,28 +315,28 @@ vnfd_model_dict = {
         {
             'description': '',
             'properties': {
-                'name': u'opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
+                'name': 'opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
                 'checksum': '',
-                'disk_format': u'VMDK',
-                'file_url': u'./zte-cn-sss-main-image/OMM/opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
+                'disk_format': 'VMDK',
+                'file_url': './zte-cn-sss-main-image/OMM/opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
                 'container_type': 'vm',
                 'version': '',
                 'hypervisor_type': 'kvm'
             },
-            'image_file_id': u'opencos_sss_omm_img_release_20150723-1-disk1'
+            'image_file_id': 'opencos_sss_omm_img_release_20150723-1-disk1'
         },
         {
             'description': '',
             'properties': {
-                'name': u'sss.vmdk',
+                'name': 'sss.vmdk',
                 'checksum': '',
-                'disk_format': u'VMDK',
-                'file_url': u'./zte-cn-sss-main-image/NE/sss.vmdk',
+                'disk_format': 'VMDK',
+                'file_url': './zte-cn-sss-main-image/NE/sss.vmdk',
                 'container_type': 'vm',
                 'version': '',
                 'hypervisor_type': 'kvm'
             },
-            'image_file_id': u'sss'
+            'image_file_id': 'sss'
         }
     ],
     'vls': [
@@ -567,7 +567,7 @@ c8_data_list_image = {
             "status": "active",
             "id": "5e2757c1-f846-4727-915c-9a872553ed75",
             "size": 862016,
-            "name": u'sss.vmdk'
+            "name": 'sss.vmdk'
         }
     ]
 }
index 7efb416..2fafc24 100644 (file)
@@ -90,21 +90,21 @@ class TestChangeExtConn(TestCase):
         response = self.client.post(url,
                                     data=self.req_data,
                                     format='json')
-        self.failUnlessEqual(status.HTTP_404_NOT_FOUND, response.status_code)
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)
 
     def test_change_ext_conn_conflict(self):
         url = "/api/vnflcm/v1/vnf_instances/12345/change_ext_conn"
         response = self.client.post(url,
                                     data=self.req_data,
                                     format='json')
-        self.failUnlessEqual(status.HTTP_409_CONFLICT, response.status_code)
+        self.assertEqual(status.HTTP_409_CONFLICT, response.status_code)
 
     def test_change_ext_conn_badreq(self):
         url = "/api/vnflcm/v1/vnf_instances/123/change_ext_conn"
         response = self.client.post(url,
                                     data={},
                                     format='json')
-        self.failUnlessEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
+        self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
 
     @mock.patch.object(JobUtil, 'create_job')
     def test_change_ext_conn_inner_error(self, mock_run):
index 15b53f0..442fd8d 100644 (file)
@@ -54,18 +54,18 @@ class TestFlavour(TestCase):
         response = self.client.post(url,
                                     data=self.req_data,
                                     format='json')
-        self.failUnlessEqual(status.HTTP_404_NOT_FOUND, response.status_code)
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)
 
     def test_change_flavour_conflict(self):
         url = "/api/vnflcm/v1/vnf_instances/12345/change_flavour"
         response = self.client.post(url,
                                     data=self.req_data,
                                     format='json')
-        self.failUnlessEqual(status.HTTP_409_CONFLICT, response.status_code)
+        self.assertEqual(status.HTTP_409_CONFLICT, response.status_code)
 
     def test_change_flavour_badreq(self):
         url = "/api/vnflcm/v1/vnf_instances/345/change_flavour"
         response = self.client.post(url,
                                     data={},
                                     format='json')
-        self.failUnlessEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
+        self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
index 7765534..39640b5 100644 (file)
@@ -71,7 +71,7 @@ class TestNFInstantiate(TestCase):
             data=data,
             format='json'
         )
-        self.failUnlessEqual(
+        self.assertEqual(
             status.HTTP_500_INTERNAL_SERVER_ERROR,
             response.status_code
         )
@@ -108,4 +108,5 @@ class TestNFInstantiate(TestCase):
             "vnfPkgId": "111",
             "instantiationState": "NOT_INSTANTIATED"
         }
+        self.assertEqual(status.HTTP_201_CREATED, response.status_code)
         self.assertEqual(expect_data, response.data)
index 4253ed1..61d173e 100644 (file)
@@ -127,9 +127,9 @@ class TestNFTerminate(TestCase):
             create_time=now_time()
         )
         response = self.client.delete("/api/vnflcm/v1/vnf_instances/1111")
-        self.failUnlessEqual(status.HTTP_204_NO_CONTENT, response.status_code)
+        self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code)
         self.assertEqual(None, response.data)
 
     def test_delete_vnf_identifier_when_vnf_not_exist(self):
         response = self.client.delete("/api/vnflcm/v1/vnf_instances/1111")
-        self.failUnlessEqual(status.HTTP_204_NO_CONTENT, response.status_code)
+        self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code)
index d5c70da..1bdcd9f 100644 (file)
@@ -52,7 +52,7 @@ class TestNFInstantiate(TestCase):
     def test_heal_vnf_not_found(self):\r
         req_data = {}\r
         response = self.client.post("/api/vnflcm/v1/vnf_instances/12/heal", data=req_data, format='json')\r
-        self.failUnlessEqual(status.HTTP_404_NOT_FOUND, response.status_code)\r
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)\r
 \r
     def test_heal_vnf_conflict(self):\r
         req_data = {}\r
@@ -61,7 +61,7 @@ class TestNFInstantiate(TestCase):
             nf_name='VNF1',\r
             status='NOT_INSTANTIATED').save()\r
         response = self.client.post("/api/vnflcm/v1/vnf_instances/1267/heal", data=req_data, format='json')\r
-        self.failUnlessEqual(status.HTTP_409_CONFLICT, response.status_code)\r
+        self.assertEqual(status.HTTP_409_CONFLICT, response.status_code)\r
         NfInstModel.objects.filter(nfinstid='1267').delete()\r
 \r
     def test_heal_vnf_badreq(self):\r
@@ -80,7 +80,7 @@ class TestNFInstantiate(TestCase):
                                     data={"additionalParams": "1"},\r
                                     format='json')\r
         NfInstModel.objects.filter(nfinstid='345').delete()\r
-        self.failUnlessEqual(status.HTTP_400_BAD_REQUEST, response.status_code)\r
+        self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)\r
 \r
     @mock.patch.object(HealVnf, 'run')\r
     def test_heal_vnf_success(self, mock_run):\r
@@ -97,7 +97,7 @@ class TestNFInstantiate(TestCase):
                     status='INSTANTIATED').save()\r
         response = self.client.post("/api/vnflcm/v1/vnf_instances/12/heal", data=req_data, format='json')\r
         mock_run.re.return_value = None\r
-        self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code)\r
+        self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code)\r
         NfInstModel(nfinstid='12').delete()\r
 \r
     @mock.patch.object(restcall, 'call_req')\r
index c624e05..16351f9 100644 (file)
@@ -76,7 +76,7 @@ class TestNFInstantiate(TestCase):
             data=inst_req_data,\r
             format='json'\r
         )\r
-        self.failUnlessEqual(\r
+        self.assertEqual(\r
             status.HTTP_202_ACCEPTED,\r
             response.status_code\r
         )\r
@@ -89,7 +89,7 @@ class TestNFInstantiate(TestCase):
             data=inst_req_data,\r
             format='json'\r
         )\r
-        self.failUnlessEqual(\r
+        self.assertEqual(\r
             status.HTTP_404_NOT_FOUND,\r
             response.status_code,\r
             response.content\r
@@ -108,7 +108,7 @@ class TestNFInstantiate(TestCase):
             data=inst_req_data,\r
             format='json'\r
         )\r
-        self.failUnlessEqual(\r
+        self.assertEqual(\r
             status.HTTP_409_CONFLICT,\r
             response.status_code,\r
             response.content\r
index cffcf37..17408c2 100644 (file)
@@ -55,7 +55,7 @@ class TestNFOperate(TestCase):
             data=req_data,\r
             format='json'\r
         )\r
-        self.failUnlessEqual(status.HTTP_404_NOT_FOUND, response.status_code)\r
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)\r
 \r
     def test_operate_vnf_conflict(self):\r
         req_data = {\r
@@ -71,7 +71,7 @@ class TestNFOperate(TestCase):
             data=req_data,\r
             format='json'\r
         )\r
-        self.failUnlessEqual(status.HTTP_409_CONFLICT, response.status_code)\r
+        self.assertEqual(status.HTTP_409_CONFLICT, response.status_code)\r
         NfInstModel(\r
             nfinstid='12',\r
             nf_name='VNF1',\r
@@ -98,7 +98,7 @@ class TestNFOperate(TestCase):
             format='json'\r
         )\r
         NfInstModel.objects.filter(nfinstid='345').delete()\r
-        self.failUnlessEqual(\r
+        self.assertEqual(\r
             status.HTTP_400_BAD_REQUEST,\r
             response.status_code\r
         )\r
@@ -119,7 +119,7 @@ class TestNFOperate(TestCase):
             format='json'\r
         )\r
         mock_run.re.return_value = None\r
-        self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code)\r
+        self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code)\r
         NfInstModel(\r
             nfinstid='12',\r
             nf_name='VNF1',\r
index e041216..5d133de 100644 (file)
@@ -228,7 +228,7 @@ class ResourceTest(TestCase):
                              insttype=1,
                              instid='%s' % i).save()
         response = self.client.get("/api/vnflcm/v1/vnf_instances", format='json')
-        self.failUnlessEqual(status.HTTP_200_OK, response.status_code)
+        self.assertEqual(status.HTTP_200_OK, response.status_code)
         self.assertEqual(self.test_data_multi_vnf, response.data)
 
     def test_get_vnfs_not_exist(self):
index 1711ddc..c69859a 100644 (file)
@@ -33,6 +33,7 @@ class TestVNFLcmOpOccs(TestCase):
         self.test_vnflcmop_with_exclude_default = vnflcmop_with_exclude_default
         self.test_multiple_vnf_lcm_op = copy.copy(multiple_vnf_lcm_op)
         self.test_multiple_vnf_lcm_op.append(self.test_single_vnf_lcm_op)
+        self.maxdiff = None
 
     def tearDown(self):
         pass
@@ -69,6 +70,7 @@ class TestVNFLcmOpOccs(TestCase):
             response.status_code,
             status.HTTP_200_OK
         )
+        self.maxDiff = None
         self.assertEqual(
             [self.test_single_vnf_lcm_op],
             response.data
@@ -147,9 +149,9 @@ class TestVNFLcmOpOccs(TestCase):
             response.status_code,
             status.HTTP_200_OK
         )
+        self.maxDiff = None
         self.assertEqual(
             self.test_multiple_vnf_lcm_op,
-            response.data,
             response.data
         )
 
@@ -211,6 +213,7 @@ class TestVNFLcmOpOccs(TestCase):
             response.status_code,
             status.HTTP_200_OK
         )
+        self.maxDiff = None
         self.assertEqual(
             self.test_vnflcmop_with_exclude_default,
             response.data
@@ -248,6 +251,7 @@ class TestVNFLcmOpOccs(TestCase):
             response.status_code,
             status.HTTP_200_OK
         )
+        self.maxDiff = None
         self.assertEqual(
             self.test_single_vnf_lcm_op,
             response.data
index a43c475..bb470fa 100644 (file)
@@ -44,14 +44,14 @@ class TestNfScale(TestCase):
         response = self.client.post(url,
                                     data=self.req_data,
                                     format='json')
-        self.failUnlessEqual(status.HTTP_404_NOT_FOUND, response.status_code)
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)
 
     def test_scale_vnf_conflict(self):
         url = "/api/vnflcm/v1/vnf_instances/12345/scale"
         response = self.client.post(url,
                                     data=self.req_data,
                                     format='json')
-        self.failUnlessEqual(status.HTTP_409_CONFLICT, response.status_code)
+        self.assertEqual(status.HTTP_409_CONFLICT, response.status_code)
 
     def test_scale_vnf_badreq(self):
         NfInstModel(nfinstid='678',
@@ -69,4 +69,4 @@ class TestNfScale(TestCase):
                                     data={},
                                     format='json')
         NfInstModel.objects.filter(nfinstid='678').delete()
-        self.failUnlessEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
+        self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
index 7c7b98d..0c06694 100644 (file)
@@ -44,14 +44,14 @@ class TestNfScaleToLevel(TestCase):
         response = self.client.post(url,
                                     data=self.req_data,
                                     format='json')
-        self.failUnlessEqual(status.HTTP_404_NOT_FOUND, response.status_code)
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)
 
     def test_scale_vnf_conflict(self):
         url = "/api/vnflcm/v1/vnf_instances/98765/scale_to_level"
         response = self.client.post(url,
                                     data=self.req_data,
                                     format='json')
-        self.failUnlessEqual(status.HTTP_409_CONFLICT, response.status_code)
+        self.assertEqual(status.HTTP_409_CONFLICT, response.status_code)
 
     def test_scale_to_level_badreq(self):
         NfInstModel(nfinstid='678',
@@ -69,4 +69,4 @@ class TestNfScaleToLevel(TestCase):
                                     data={},
                                     format='json')
         NfInstModel.objects.filter(nfinstid='678').delete()
-        self.failUnlessEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
+        self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
index 70a309b..237ef2d 100644 (file)
@@ -106,6 +106,13 @@ class TestSubscription(TestCase):
     def test_invalid_notification_type(self, mock_requests):
         dummy_subscription = {
             "callbackUri": "http://aurl.com",
+            "authentication": {
+                "authType": ["BASIC"],
+                "paramsBasic": {
+                    "username": "username",
+                    "password": "password"
+                }
+            },
             "filter": {
                 "notificationTypes": ["VnfIdentifierDeletionNotification"],
                 "operationTypes": [
index 4b235c1..79acbc7 100644 (file)
@@ -137,7 +137,7 @@ class TestNFTerminate(TestCase):
             data=req_data,\r
             format='json'\r
         )\r
-        self.failUnlessEqual(\r
+        self.assertEqual(\r
             status.HTTP_202_ACCEPTED,\r
             response.status_code,\r
             response.content\r
@@ -155,7 +155,7 @@ class TestNFTerminate(TestCase):
             data=req_data,\r
             format='json'\r
         )\r
-        self.failUnlessEqual(\r
+        self.assertEqual(\r
             status.HTTP_404_NOT_FOUND,\r
             response.status_code,\r
             response.content\r
@@ -185,7 +185,7 @@ class TestNFTerminate(TestCase):
             data=req_data,\r
             format='json'\r
         )\r
-        self.failUnlessEqual(\r
+        self.assertEqual(\r
             status.HTTP_409_CONFLICT,\r
             response.status_code,\r
             response.content\r
index 3c12260..91f451b 100644 (file)
@@ -40,7 +40,7 @@ class TestNFUpdate(TestCase):
         response = self.client.patch("/api/vnflcm/v1/vnf_instances/1111",
                                      data=self.upd_data,
                                      format='json')
-        self.failUnlessEqual(status.HTTP_404_NOT_FOUND, response.status_code)
+        self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code)
 
     def test_update_vnf_etag_not_match(self):
         instanceid = "19"
@@ -62,7 +62,7 @@ class TestNFUpdate(TestCase):
                                      "If-Match": "test_etag"
                                  })
         NfInstModel.objects.filter(nfinstid=instanceid).delete()
-        self.failUnlessEqual(status.HTTP_412_PRECONDITION_FAILED, response.status_code)
+        self.assertEqual(status.HTTP_412_PRECONDITION_FAILED, response.status_code)
 
     @mock.patch.object(UpdateVnf, 'run')
     def test_update_vnf_etag_match(self, mock_run):
@@ -87,7 +87,7 @@ class TestNFUpdate(TestCase):
                                      "If-Match": etag
                                  })
         NfInstModel.objects.filter(nfinstid=instanceid).delete()
-        self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code)
+        self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code)
 
     @mock.patch.object(restcall, 'call_req')
     def test_update_vnf_success(self, mock_call_req):
@@ -107,4 +107,4 @@ class TestNFUpdate(TestCase):
         UpdateVnf(self.upd_data, instanceid, job_id).run()
         name = NfInstModel.objects.filter(nfinstid=instanceid).get().nf_name
         NfInstModel.objects.filter(nfinstid=instanceid).delete()
-        self.failUnlessEqual("vnf new name", name)
+        self.assertEqual("vnf new name", name)
index e24a8bc..6bab28f 100644 (file)
@@ -51,43 +51,43 @@ def view_safe_call_with_log(logger):
             try:
                 return func(*args, **kwargs)
             except NFLCMExceptionSeeOther as e:
-                logger.error(e.message)
+                logger.error(e.args[0])
                 resp = Response(status=status.HTTP_303_SEE_OTHER)
-                resp["Location"] = e.message
+                resp["Location"] = e.args[0]
                 # resp["Location"] = "subscriptions/%s" % e.id
                 return resp
             except NFLCMExceptionNotFound as e:
-                logger.error(e.message)
+                logger.error(e.args[0])
                 return make_error_resp(
-                    detail=e.message,
+                    detail=e.args[0],
                     status=status.HTTP_404_NOT_FOUND
                 )
             except NFLCMExceptionBadRequest as e:
-                logger.error(e.message)
+                logger.error(e.args[0])
                 return make_error_resp(
-                    detail=e.message,
+                    detail=e.args[0],
                     status=status.HTTP_400_BAD_REQUEST
                 )
             except NFLCMExceptionConflict as e:
-                logger.error(e.message)
+                logger.error(e.args[0])
                 return make_error_resp(
-                    detail=e.message,
+                    detail=e.args[0],
                     status=status.HTTP_409_CONFLICT
                 )
             except NFLCMExceptionPreconditionFailed as e:
-                logger.error(e.message)
+                logger.error(e.args[0])
                 return make_error_resp(
-                    detail=e.message,
+                    detail=e.args[0],
                     status=status.HTTP_412_PRECONDITION_FAILED
                 )
             except NFLCMException as e:
-                logger.error(e.message)
+                logger.error(e.args[0])
                 return make_error_resp(
-                    detail=e.message,
+                    detail=e.args[0],
                     status=status.HTTP_500_INTERNAL_SERVER_ERROR
                 )
             except Exception as e:
-                logger.error(e.message)
+                logger.error(e.args[0])
                 logger.error(traceback.format_exc())
                 return make_error_resp(
                     detail='Unexpected exception',
@@ -143,7 +143,7 @@ def deal_indivdual_query(res_serializer, query_fun, *args):
     if not resp_serializer.is_valid():
         raise NFLCMException(resp_serializer.errors)
 
-    resp = Response(data=resp_serializer.data, status=status.HTTP_200_OK)
+    resp = Response(data=res, status=status.HTTP_200_OK)
     if res_serializer == VnfInstanceSerializer:
         CACHE_ETAG = "%s" % uuid.uuid1()
         logger.debug("set CACHE_ETAG = %s", CACHE_ETAG)
index 29ca82b..e8c19d6 100644 (file)
@@ -54,7 +54,7 @@ class CreateVnfAndQueryVnfs(APIView):
         if not vnf_instances_serializer.is_valid():
             raise NFLCMException(vnf_instances_serializer.errors)
 
-        return Response(data=vnf_instances_serializer.data, status=status.HTTP_200_OK)
+        return Response(data=resp_data, status=status.HTTP_200_OK)
 
     @swagger_auto_schema(
         request_body=CreateVnfReqSerializer(),
@@ -71,15 +71,16 @@ class CreateVnfAndQueryVnfs(APIView):
             raise NFLCMException(req_serializer.errors)
 
         nf_inst = CreateVnf(request.data).do_biz()
-        create_vnf_resp_serializer = VnfInstanceSerializer(
-            data={"id": nf_inst.nfinstid,
-                  "vnfProvider": nf_inst.vendor,
-                  "vnfdVersion": nf_inst.version,
-                  "vnfPkgId": nf_inst.package_id,
-                  "instantiationState": nf_inst.status})
+        rsp_data = {"id": nf_inst.nfinstid,
+                    "vnfProvider": nf_inst.vendor,
+                    "vnfdVersion": nf_inst.version,
+                    "vnfPkgId": nf_inst.package_id,
+                    "instantiationState": nf_inst.status}
+        create_vnf_resp_serializer = VnfInstanceSerializer(data=rsp_data)
         if not create_vnf_resp_serializer.is_valid():
             raise NFLCMException(create_vnf_resp_serializer.errors)
-        return Response(data=create_vnf_resp_serializer.data, status=status.HTTP_201_CREATED)
+
+        return Response(data=rsp_data, status=status.HTTP_201_CREATED)
 
 
 class DeleteVnfAndQueryVnf(APIView):
index 5235ee0..ecb9b17 100644 (file)
@@ -67,11 +67,11 @@ class QueryMultiVnfLcmOpOccs(APIView):
         logger.debug("QueryMultiVnfLcmOpOccs--get::> Remove default fields if exclude_default" +
                      " is specified")
         # TODO(bharath): Add support for "fields", "exclude_fields" in query parameters
-        if 'exclude_default' in request.query_params.keys():
+        if 'exclude_default' in list(request.query_params.keys()):
             for field in EXCLUDE_DEFAULT:
-                for lcm_op in vnf_lcm_op_occs_serializer.data:
+                for lcm_op in resp_data:
                     del lcm_op[field]
-        return Response(data=vnf_lcm_op_occs_serializer.data, status=status.HTTP_200_OK)
+        return Response(data=resp_data, status=status.HTTP_200_OK)
 
 
 class QuerySingleVnfLcmOpOcc(APIView):
index c549627..95b3772 100644 (file)
@@ -62,7 +62,7 @@ class SubscriptionsView(APIView):
         if not lccn_subscription_request_serializer.is_valid():\r
             raise NFLCMExceptionBadRequest(lccn_subscription_request_serializer.errors)\r
         subscription = CreateSubscription(\r
-            lccn_subscription_request_serializer.data).do_biz()\r
+            request.data).do_biz()\r
         lccn_notifications_filter = {\r
             "notificationTypes": ast.literal_eval(subscription.notification_types),\r
             "operationTypes": ast.literal_eval(subscription.operation_types),\r
@@ -78,7 +78,7 @@ class SubscriptionsView(APIView):
         sub_resp_serializer = LccnSubscriptionSerializer(data=subscription_data)\r
         if not sub_resp_serializer.is_valid():\r
             raise NFLCMException(sub_resp_serializer.errors)\r
-        return Response(data=sub_resp_serializer.data, status=status.HTTP_201_CREATED)\r
+        return Response(data=subscription_data, status=status.HTTP_201_CREATED)\r
 \r
     @swagger_auto_schema(\r
         responses={\r
diff --git a/lcm/lcm/pub/database/migrations/0001_initial.py b/lcm/lcm/pub/database/migrations/0001_initial.py
deleted file mode 100644 (file)
index 159c12d..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-# 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.
-# Generated by Django 1.11.9 on 2019-04-16 02:51
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    initial = True
-
-    dependencies = [
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='CPInstModel',
-            fields=[
-                ('cpinstanceid', models.CharField(db_column=b'CPINSTANCEID', max_length=255, primary_key=True, serialize=False)),
-                ('cpdid', models.CharField(db_column=b'CPDID', max_length=255)),
-                ('cpinstancename', models.CharField(db_column=b'CPINSTANCENAME', max_length=255)),
-                ('vlinstanceid', models.CharField(db_column=b'VLINSTANCEID', max_length=255)),
-                ('ownertype', models.IntegerField(db_column=b'OWNERTYPE')),
-                ('ownerid', models.CharField(db_column=b'OWNERID', max_length=255)),
-                ('relatedtype', models.IntegerField(db_column=b'RELATEDTYPE')),
-                ('relatedvl', models.CharField(blank=True, db_column=b'RELATEDVL', max_length=255, null=True)),
-                ('relatedcp', models.CharField(blank=True, db_column=b'RELATEDCP', max_length=255, null=True)),
-                ('relatedport', models.CharField(blank=True, db_column=b'RELATEDPORT', max_length=255, null=True)),
-            ],
-            options={
-                'db_table': 'CPINST',
-            },
-        ),
-        migrations.CreateModel(
-            name='FlavourInstModel',
-            fields=[
-                ('flavourid', models.CharField(db_column=b'FLAVOURID', max_length=255, primary_key=True, serialize=False)),
-                ('vimid', models.CharField(db_column=b'VIMID', max_length=255)),
-                ('resourceid', models.CharField(db_column=b'RESOURCEID', max_length=255)),
-                ('name', models.CharField(db_column=b'NAME', max_length=255)),
-                ('tenant', models.CharField(db_column=b'TENANT', max_length=255, null=True)),
-                ('vcpu', models.IntegerField(db_column=b'VCPU', null=True)),
-                ('memory', models.IntegerField(db_column=b'MEMORY', null=True)),
-                ('disk', models.IntegerField(db_column=b'DISK', null=True)),
-                ('ephemeral', models.IntegerField(db_column=b'EPHEMERAL', null=True)),
-                ('swap', models.IntegerField(db_column=b'SWAP', null=True)),
-                ('isPublic', models.IntegerField(db_column=b'ISPUBLIC', null=True)),
-                ('extraspecs', models.TextField(db_column=b'EXTRASPECS', max_length=4096)),
-                ('instid', models.CharField(db_column=b'INSTID', max_length=255)),
-                ('create_time', models.CharField(blank=True, db_column=b'CREATETIME', max_length=200, null=True)),
-                ('is_predefined', models.IntegerField(db_column=b'ISPREDEFINED', default=0, null=True)),
-            ],
-            options={
-                'db_table': 'FLAVOURINST',
-            },
-        ),
-        migrations.CreateModel(
-            name='JobModel',
-            fields=[
-                ('jobid', models.CharField(db_column=b'JOBID', max_length=255, primary_key=True, serialize=False)),
-                ('jobtype', models.CharField(db_column=b'JOBTYPE', max_length=255)),
-                ('jobaction', models.CharField(db_column=b'JOBACTION', max_length=255)),
-                ('resid', models.CharField(db_column=b'RESID', max_length=255)),
-                ('status', models.IntegerField(blank=True, db_column=b'STATUS', null=True)),
-                ('starttime', models.CharField(blank=True, db_column=b'STARTTIME', max_length=255, null=True)),
-                ('endtime', models.CharField(blank=True, db_column=b'ENDTIME', max_length=255, null=True)),
-                ('progress', models.IntegerField(blank=True, db_column=b'PROGRESS', null=True)),
-                ('user', models.CharField(blank=True, db_column=b'USER', max_length=255, null=True)),
-                ('parentjobid', models.CharField(blank=True, db_column=b'PARENTJOBID', max_length=255, null=True)),
-                ('resname', models.CharField(blank=True, db_column=b'RESNAME', max_length=255, null=True)),
-            ],
-            options={
-                'db_table': 'JOB',
-            },
-        ),
-        migrations.CreateModel(
-            name='JobStatusModel',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('indexid', models.IntegerField(db_column=b'INDEXID')),
-                ('jobid', models.CharField(db_column=b'JOBID', max_length=255)),
-                ('status', models.CharField(db_column=b'STATUS', max_length=255)),
-                ('progress', models.IntegerField(blank=True, db_column=b'PROGRESS', null=True)),
-                ('descp', models.TextField(db_column=b'DESCP', max_length=1024)),
-                ('errcode', models.CharField(blank=True, db_column=b'ERRCODE', max_length=255, null=True)),
-                ('addtime', models.CharField(blank=True, db_column=b'ADDTIME', max_length=255, null=True)),
-            ],
-            options={
-                'db_table': 'JOB_STATUS',
-            },
-        ),
-        migrations.CreateModel(
-            name='NetworkInstModel',
-            fields=[
-                ('networkid', models.CharField(db_column=b'NETWORKID', max_length=255, primary_key=True, serialize=False)),
-                ('vimid', models.CharField(db_column=b'VIMID', max_length=255)),
-                ('resourceid', models.CharField(db_column=b'RESOURCEID', max_length=255)),
-                ('insttype', models.IntegerField(db_column=b'INSTTYPE')),
-                ('instid', models.CharField(db_column=b'INSTID', max_length=255)),
-                ('name', models.CharField(db_column=b'NAME', max_length=255)),
-                ('tenant', models.CharField(db_column=b'TENANT', max_length=255, null=True)),
-                ('is_predefined', models.IntegerField(db_column=b'ISPREDEFINED', default=0, null=True)),
-                ('desc', models.CharField(db_column=b'DESC', max_length=255, null=True)),
-                ('vendor', models.CharField(db_column=b'VENDOR', max_length=255, null=True)),
-                ('bandwidth', models.IntegerField(db_column=b'BANDWIDTH', null=True)),
-                ('mtu', models.IntegerField(db_column=b'MTU', null=True)),
-                ('network_type', models.CharField(db_column=b'NETWORKTYPE', max_length=255, null=True)),
-                ('segmentid', models.CharField(db_column=b'SEGMENTID', max_length=255, null=True)),
-                ('networkqos', models.CharField(db_column=b'NETWORKQOS', max_length=255, null=True)),
-                ('create_time', models.CharField(blank=True, db_column=b'CREATETIME', max_length=200, null=True)),
-                ('physicalNetwork', models.CharField(db_column=b'PHYNETWORK', max_length=255, null=True)),
-                ('is_shared', models.IntegerField(db_column=b'ISSHARED', default=0, null=True)),
-                ('vlantrans', models.IntegerField(db_column=b'VLANTRANS', null=True)),
-                ('routerExternal', models.IntegerField(db_column=b'ROUTEREXTERNAL', default=0, null=True)),
-                ('nodeId', models.CharField(db_column=b'NODEID', max_length=255, null=True)),
-            ],
-            options={
-                'db_table': 'NETWORKINST',
-            },
-        ),
-        migrations.CreateModel(
-            name='NfInstModel',
-            fields=[
-                ('nfinstid', models.CharField(db_column=b'NFINSTID', max_length=200, primary_key=True, serialize=False)),
-                ('nf_name', models.CharField(blank=True, db_column=b'NFNAME', max_length=100, null=True)),
-                ('vnfminstid', models.CharField(db_column=b'VNFMINSTID', max_length=255)),
-                ('package_id', models.CharField(blank=True, db_column=b'PACKAGEID', max_length=200, null=True)),
-                ('status', models.CharField(blank=True, db_column=b'STATUS', max_length=20, null=True)),
-                ('flavour_id', models.CharField(blank=True, db_column=b'FLAVOURID', max_length=200, null=True)),
-                ('location', models.CharField(blank=True, db_column=b'LOCATION', max_length=200, null=True)),
-                ('version', models.CharField(db_column=b'VERSION', max_length=255, null=True)),
-                ('vendor', models.CharField(blank=True, db_column=b'VENDOR', max_length=255, null=True)),
-                ('netype', models.CharField(db_column=b'NETYPE', max_length=255, null=True)),
-                ('vnfd_model', models.TextField(blank=True, db_column=b'VNFDMODEL', max_length=20000, null=True)),
-                ('input_params', models.TextField(blank=True, db_column=b'INPUTPARAMS', max_length=2000, null=True)),
-                ('create_time', models.CharField(blank=True, db_column=b'CREATETIME', max_length=200, null=True)),
-                ('lastuptime', models.CharField(blank=True, db_column=b'LASTUPTIME', max_length=200, null=True)),
-                ('nf_desc', models.CharField(blank=True, db_column=b'VNFINSTANCEDESC', max_length=200, null=True)),
-                ('vnfdid', models.CharField(blank=True, db_column=b'VNFDID', max_length=200, null=True)),
-                ('vnfSoftwareVersion', models.CharField(blank=True, db_column=b'VNFSOFTWAREVER', max_length=200, null=True)),
-                ('vnfConfigurableProperties', models.TextField(blank=True, db_column=b'VNFCONFIGURABLEPROPERTIES', max_length=20000, null=True)),
-                ('localizationLanguage', models.CharField(db_column=b'LOCALIZATIONLANGUAGE', max_length=255, null=True)),
-                ('operationState', models.CharField(db_column=b'OPERATIONSTATE', max_length=255, null=True)),
-                ('resInfo', models.TextField(blank=True, db_column=b'RESINFO', max_length=20000, null=True)),
-                ('vimInfo', models.TextField(blank=True, db_column=b'VIMINFO', max_length=20000, null=True)),
-            ],
-            options={
-                'db_table': 'NFINST',
-            },
-        ),
-        migrations.CreateModel(
-            name='NfvoRegInfoModel',
-            fields=[
-                ('nfvoid', models.CharField(db_column=b'NFVOID', max_length=255, primary_key=True, serialize=False)),
-                ('vnfminstid', models.CharField(db_column=b'VNFMINSTID', max_length=255)),
-                ('apiurl', models.CharField(db_column=b'URL', max_length=255)),
-                ('nfvouser', models.CharField(db_column=b'USERNAME', max_length=255, null=True)),
-                ('nfvopassword', models.CharField(db_column=b'PASSWD', max_length=255, null=True)),
-                ('authtype', models.IntegerField(db_column=b'AUTHTYPE', default=2)),
-                ('clientcert', models.CharField(db_column=b'CLIENTCERT', max_length=255, null=True)),
-                ('servercert', models.CharField(db_column=b'SERVERCERT', max_length=255, null=True)),
-                ('regtime', models.CharField(db_column=b'REGTIME', max_length=255)),
-            ],
-            options={
-                'db_table': 'NFVOREGINFO',
-            },
-        ),
-        migrations.CreateModel(
-            name='PortInstModel',
-            fields=[
-                ('portid', models.CharField(db_column=b'PORTID', max_length=255, primary_key=True, serialize=False)),
-                ('networkid', models.CharField(db_column=b'NETWORKID', max_length=255)),
-                ('subnetworkid', models.CharField(db_column=b'SUBNETWORKID', max_length=255, null=True)),
-                ('vimid', models.CharField(db_column=b'VIMID', max_length=255)),
-                ('resourceid', models.CharField(db_column=b'RESOURCEID', max_length=255)),
-                ('name', models.CharField(db_column=b'NAME', max_length=255, null=True)),
-                ('insttype', models.IntegerField(db_column=b'INSTTYPE')),
-                ('instid', models.CharField(db_column=b'INSTID', max_length=255)),
-                ('cpinstanceid', models.CharField(db_column=b'CPINSTANCEID', max_length=255, null=True)),
-                ('bandwidth', models.CharField(db_column=b'BANDWIDTH', max_length=255, null=True)),
-                ('operationalstate', models.CharField(db_column=b'OPERATIONALSTATE', max_length=255, null=True)),
-                ('ipaddress', models.CharField(db_column=b'IPADDRESS', max_length=255)),
-                ('macaddress', models.CharField(db_column=b'MACADDRESS', max_length=255)),
-                ('nicorder', models.CharField(db_column=b'NICORDER', max_length=255)),
-                ('floatipaddress', models.CharField(db_column=b'FLOATIPADDRESS', max_length=255, null=True)),
-                ('serviceipaddress', models.CharField(db_column=b'SERVICEIPADDRESS', max_length=255, null=True)),
-                ('typevirtualnic', models.CharField(db_column=b'TYPEVIRTUALNIC', max_length=255, null=True)),
-                ('sfcencapsulation', models.CharField(db_column=b'SFCENCAPSULATION', max_length=255, null=True)),
-                ('direction', models.CharField(db_column=b'DIRECTION', max_length=255, null=True)),
-                ('tenant', models.CharField(db_column=b'TENANT', max_length=255, null=True)),
-                ('interfacename', models.CharField(blank=True, db_column=b'INTERFACENAME', max_length=255, null=True)),
-                ('vmid', models.CharField(blank=True, db_column=b'VMID', max_length=255, null=True)),
-                ('create_time', models.CharField(blank=True, db_column=b'CREATETIME', max_length=200, null=True)),
-                ('securityGroups', models.CharField(db_column=b'SECURITYGROUPS', max_length=255)),
-                ('is_predefined', models.IntegerField(db_column=b'ISPREDEFINED', default=0, null=True)),
-                ('nodeId', models.CharField(db_column=b'NODEID', max_length=255, null=True)),
-            ],
-            options={
-                'db_table': 'PORTINST',
-            },
-        ),
-        migrations.CreateModel(
-            name='StorageInstModel',
-            fields=[
-                ('storageid', models.CharField(db_column=b'STORAGEID', max_length=255, primary_key=True, serialize=False)),
-                ('vimid', models.CharField(db_column=b'VIMID', max_length=255)),
-                ('resourceid', models.CharField(db_column=b'RESOURCEID', max_length=255)),
-                ('insttype', models.IntegerField(db_column=b'INSTTYPE')),
-                ('instid', models.CharField(db_column=b'INSTID', max_length=255)),
-                ('name', models.CharField(db_column=b'NAME', max_length=255, null=True)),
-                ('storagetype', models.CharField(db_column=b'STORAGETYPE', max_length=255)),
-                ('size', models.CharField(db_column=b'SIZE', max_length=255)),
-                ('tenant', models.CharField(db_column=b'TENANT', max_length=50, null=True)),
-                ('is_predefined', models.IntegerField(db_column=b'ISPREDEFINED', default=0, null=True)),
-                ('create_time', models.CharField(blank=True, db_column=b'CREATETIME', max_length=200, null=True)),
-                ('nodeId', models.CharField(db_column=b'NODEID', max_length=255, null=True)),
-            ],
-            options={
-                'db_table': 'STORAGEINST',
-            },
-        ),
-        migrations.CreateModel(
-            name='SubNetworkInstModel',
-            fields=[
-                ('subnetworkid', models.CharField(db_column=b'SUBNETWORKID', max_length=255, primary_key=True, serialize=False)),
-                ('vimid', models.CharField(db_column=b'VIMID', max_length=255)),
-                ('resourceid', models.CharField(db_column=b'RESOURCEID', max_length=255)),
-                ('networkid', models.CharField(db_column=b'NETWORKID', max_length=255)),
-                ('insttype', models.IntegerField(db_column=b'INSTTYPE')),
-                ('instid', models.CharField(db_column=b'INSTID', max_length=255)),
-                ('name', models.CharField(db_column=b'NAME', max_length=255)),
-                ('ipversion', models.IntegerField(db_column=b'IPVERSION', null=True)),
-                ('gatewayip', models.CharField(db_column=b'GATEWAYIP', max_length=255, null=True)),
-                ('isdhcpenabled', models.IntegerField(db_column=b'ISDHCPENABLED', null=True)),
-                ('cidr', models.CharField(db_column=b'CIDR', max_length=255)),
-                ('vdsname', models.CharField(db_column=b'VDSNAME', max_length=255, null=True)),
-                ('operationalstate', models.CharField(db_column=b'OPERATIONALSTATE', max_length=255, null=True)),
-                ('tenant', models.CharField(db_column=b'TENANT', max_length=255, null=True)),
-                ('is_predefined', models.IntegerField(db_column=b'ISPREDEFINED', default=0, null=True)),
-                ('create_time', models.CharField(blank=True, db_column=b'CREATETIME', max_length=200, null=True)),
-                ('dnsNameservers', models.TextField(db_column=b'DNSNAMESERVERS', max_length=1024)),
-                ('hostRoutes', models.TextField(db_column=b'HOSTROUTES', max_length=1024)),
-                ('allocationPools', models.TextField(db_column=b'ALLOCATIONPOOLS', max_length=1024)),
-            ],
-            options={
-                'db_table': 'SUBNETWORKINST',
-            },
-        ),
-        migrations.CreateModel(
-            name='SubscriptionModel',
-            fields=[
-                ('subscription_id', models.CharField(db_column=b'SUBSCRIPTIONID', max_length=255, primary_key=True, serialize=False)),
-                ('callback_uri', models.CharField(db_column=b'CALLBACKURI', max_length=255)),
-                ('auth_info', models.TextField(blank=True, db_column=b'AUTHINFO', max_length=20000, null=True)),
-                ('notification_types', models.TextField(db_column=b'NOTIFICATIONTYPES', null=True)),
-                ('operation_types', models.TextField(db_column=b'OPERATIONTYPES', null=True)),
-                ('operation_states', models.TextField(db_column=b'OPERATIONSTATES', null=True)),
-                ('vnf_instance_filter', models.TextField(db_column=b'VNFINSTANCEFILTER', null=True)),
-                ('links', models.TextField(db_column=b'LINKS', max_length=20000)),
-            ],
-            options={
-                'db_table': 'SUBSCRIPTION',
-            },
-        ),
-        migrations.CreateModel(
-            name='VLInstModel',
-            fields=[
-                ('vlinstanceid', models.CharField(db_column=b'VLINSTANCEID', max_length=255, primary_key=True, serialize=False)),
-                ('vldid', models.CharField(db_column=b'VLDID', max_length=255)),
-                ('vlinstancename', models.CharField(blank=True, db_column=b'VLINSTANCENAME', max_length=255, null=True)),
-                ('ownertype', models.IntegerField(db_column=b'OWNERTYPE')),
-                ('ownerid', models.CharField(db_column=b'OWNERID', max_length=255)),
-                ('relatednetworkid', models.CharField(blank=True, db_column=b'RELATEDNETWORKID', max_length=255, null=True)),
-                ('relatedsubnetworkid', models.CharField(blank=True, db_column=b'RELATEDSUBNETWORKID', max_length=255, null=True)),
-                ('vltype', models.IntegerField(db_column=b'VLTYPE', default=0)),
-                ('vimid', models.CharField(db_column=b'VIMID', max_length=255)),
-                ('tenant', models.CharField(db_column=b'TENANT', max_length=50)),
-            ],
-            options={
-                'db_table': 'VLINST',
-            },
-        ),
-        migrations.CreateModel(
-            name='VmInstModel',
-            fields=[
-                ('vmid', models.CharField(db_column=b'VMID', max_length=255, primary_key=True, serialize=False)),
-                ('vimid', models.CharField(db_column=b'VIMID', max_length=255)),
-                ('tenant', models.CharField(db_column=b'TENANT', max_length=255, null=True)),
-                ('resourceid', models.CharField(db_column=b'RESOURCEID', max_length=255)),
-                ('vmname', models.CharField(db_column=b'VMNAME', max_length=255)),
-                ('nic_array', models.CharField(db_column=b'NICARRAY', max_length=255)),
-                ('metadata', models.CharField(db_column=b'METADATA', max_length=255)),
-                ('volume_array', models.CharField(db_column=b'VOLUMEARRAY', max_length=255)),
-                ('server_group', models.CharField(db_column=b'SERVERGROUP', max_length=255)),
-                ('availability_zone', models.CharField(db_column=b'AVAILABILITYZONE', max_length=255)),
-                ('flavor_id', models.CharField(db_column=b'FLAVORID', max_length=255)),
-                ('security_groups', models.CharField(db_column=b'SECURITYGROUPS', max_length=255)),
-                ('operationalstate', models.CharField(db_column=b'OPERATIONALSTATE', max_length=255, null=True)),
-                ('insttype', models.IntegerField(db_column=b'INSTTYPE')),
-                ('is_predefined', models.IntegerField(db_column=b'ISPREDEFINED', default=0, null=True)),
-                ('create_time', models.CharField(blank=True, db_column=b'CREATETIME', max_length=200, null=True)),
-                ('instid', models.CharField(db_column=b'INSTID', max_length=255)),
-                ('nodeId', models.CharField(db_column=b'NODEID', max_length=255, null=True)),
-            ],
-            options={
-                'db_table': 'VMINST',
-            },
-        ),
-        migrations.CreateModel(
-            name='VNFCInstModel',
-            fields=[
-                ('vnfcinstanceid', models.CharField(db_column=b'VNFCINSTANCEID', max_length=255, primary_key=True, serialize=False)),
-                ('vduid', models.CharField(db_column=b'VDUID', max_length=255)),
-                ('vdutype', models.CharField(db_column=b'VDUTYPE', max_length=255)),
-                ('instid', models.CharField(db_column=b'NFINSTID', max_length=255)),
-                ('vmid', models.CharField(db_column=b'VMID', max_length=255)),
-                ('is_predefined', models.IntegerField(db_column=b'ISPREDEFINED', default=0, null=True)),
-            ],
-            options={
-                'db_table': 'VNFCINST',
-            },
-        ),
-        migrations.CreateModel(
-            name='VNFLcmOpOccModel',
-            fields=[
-                ('id', models.CharField(db_column=b'ID', max_length=255, primary_key=True, serialize=False)),
-                ('operation_state', models.CharField(db_column=b'OPERATIONSTATE', max_length=30)),
-                ('state_entered_time', models.CharField(db_column=b'STATEENTEREDTIME', max_length=30)),
-                ('start_time', models.CharField(db_column=b'STARTTIME', max_length=30)),
-                ('vnf_instance_id', models.CharField(db_column=b'VNFINSTANCEID', max_length=255)),
-                ('grant_id', models.CharField(db_column=b'GRANTID', max_length=255, null=True)),
-                ('operation', models.CharField(db_column=b'OPERATION', max_length=30)),
-                ('is_automatic_invocation', models.CharField(db_column=b'ISAUTOMATICINVOCATION', max_length=5)),
-                ('operation_params', models.TextField(db_column=b'OPERATIONPARAMS')),
-                ('is_cancel_pending', models.CharField(db_column=b'ISCANCELPENDING', max_length=5)),
-                ('cancel_mode', models.TextField(db_column=b'CANCELMODE', null=True)),
-                ('error', models.TextField(db_column=b'ERROR', null=True)),
-                ('resource_changes', models.TextField(db_column=b'RESOURCECHANGES', null=True)),
-                ('changed_info', models.TextField(db_column=b'CHANGEDINFO', null=True)),
-                ('changed_ext_connectivity', models.TextField(db_column=b'CHANGEDEXTCONNECTIVITY', null=True)),
-                ('links', models.TextField(db_column=b'LINKS')),
-            ],
-            options={
-                'db_table': 'VNFLCMOPOCCS',
-            },
-        ),
-    ]
diff --git a/lcm/lcm/pub/database/migrations/0002_vnflcmopoccmodel_sub_operation.py b/lcm/lcm/pub/database/migrations/0002_vnflcmopoccmodel_sub_operation.py
deleted file mode 100644 (file)
index d0be41c..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# 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.
-# Generated by Django 1.11.9 on 2019-04-28 07:45
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('database', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='vnflcmopoccmodel',
-            name='sub_operation',
-            field=models.CharField(db_column=b'SUBOPERATION', max_length=30, null=True),
-        ),
-    ]
diff --git a/lcm/lcm/pub/database/migrations/__init__.py b/lcm/lcm/pub/database/migrations/__init__.py
deleted file mode 100644 (file)
index 0c847b7..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# 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.
index 91b4a36..850736c 100644 (file)
@@ -103,7 +103,7 @@ def prepare_notification_data(nfinstid, jobid, changetype, operation):
             },
             'cpInstanceId': port.portid  # TODO: port.cpinstanceid is not initiated when create port resource.
         })
-    for network_id, ext_link_ports in ext_connectivity_map.items():
+    for network_id, ext_link_ports in list(ext_connectivity_map.items()):
         networks = NetworkInstModel.objects.filter(networkid=network_id)
         net_name = networks[0].name if networks else network_id
         network_resource = {
diff --git a/lcm/lcm/pub/redisco/__init__.py b/lcm/lcm/pub/redisco/__init__.py
new file mode 100644 (file)
index 0000000..7d59d8d
--- /dev/null
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+
+import redis
+
+
+class Client(object):
+    def __init__(self, **kwargs):
+        self.connection_settings = kwargs or {'host': 'localhost', 'port': 6379, 'db': 0}
+
+    def redis(self):
+        return redis.Redis(**self.connection_settings)
+
+    def update(self, d):
+        self.connection_settings.update(d)
+
+
+def connection_setup(**kwargs):
+    global connection, client
+    if client:
+        client.update(kwargs)
+    else:
+        client = Client(**kwargs)
+    connection = client.redis()
+
+
+def get_client():
+    global connection
+    return connection
+
+
+client = Client()
+connection = client.redis()
+
+__all__ = ['connection_setup', 'get_client']
diff --git a/lcm/lcm/pub/redisco/containers.py b/lcm/lcm/pub/redisco/containers.py
new file mode 100644 (file)
index 0000000..0c194c7
--- /dev/null
@@ -0,0 +1,91 @@
+"""
+This module contains the container classes to create objects
+that persist directly in a Redis server.
+"""
+
+import collections
+from functools import partial
+
+
+class Container(object):
+    """Create a container object saved in Redis.
+
+    Arguments:
+        key -- the Redis key this container is stored at
+        db  -- the Redis client object. Default: None
+
+    When ``db`` is not set, the gets the default connection from
+    ``redisco.connection`` module.
+    """
+
+    def __init__(self, key, db=None, pipeline=None):
+        self._db = db
+        self.key = key
+        self.pipeline = pipeline
+
+    def clear(self):
+        """Remove container from Redis database."""
+        del self.db[self.key]
+
+    def __getattribute__(self, att):
+        if att in object.__getattribute__(self, 'DELEGATEABLE_METHODS'):
+            return partial(getattr(object.__getattribute__(self, 'db'), att), self.key)
+        else:
+            return object.__getattribute__(self, att)
+
+    @property
+    def db(self):
+        if self.pipeline:
+            return self.pipeline
+        if self._db:
+            return self._db
+        if hasattr(self, 'db_cache') and self.db_cache:
+            return self.db_cache
+        else:
+            from redisco import connection
+            self.db_cache = connection
+            return self.db_cache
+
+    DELEGATEABLE_METHODS = ()
+
+
+class Hash(Container, collections.MutableMapping):
+
+    def __getitem__(self, att):
+        return self.hget(att)
+
+    def __setitem__(self, att, val):
+        self.hset(att, val)
+
+    def __delitem__(self, att):
+        self.hdel(att)
+
+    def __len__(self):
+        return self.hlen()
+
+    def __iter__(self):
+        return self.hgetall().__iter__()
+
+    def __contains__(self, att):
+        return self.hexists(att)
+
+    def __repr__(self):
+        return "<%s '%s' %s>" % (self.__class__.__name__, self.key, self.hgetall())
+
+    def keys(self):
+        return self.hkeys()
+
+    def values(self):
+        return self.hvals()
+
+    def _get_dict(self):
+        return self.hgetall()
+
+    def _set_dict(self, new_dict):
+        self.clear()
+        self.update(new_dict)
+
+    dict = property(_get_dict, _set_dict)
+
+    DELEGATEABLE_METHODS = ('hlen', 'hset', 'hdel', 'hkeys', 'hgetall', 'hvals',
+                            'hget', 'hexists', 'hincrby', 'hmget', 'hmset')
index e99b9d4..9a9ea5d 100644 (file)
@@ -16,14 +16,15 @@ import os
 import shutil
 import logging
 import traceback
-import urllib2
+import urllib.request
+
 
 logger = logging.getLogger(__name__)
 
 
 def make_dirs(path):
     if not os.path.exists(path):
-        os.makedirs(path, 0777)
+        os.makedirs(path, 777)
 
 
 def delete_dirs(path):
@@ -32,7 +33,7 @@ def delete_dirs(path):
             shutil.rmtree(path)
     except Exception as e:
         logger.error(traceback.format_exc())
-        logger.error("Failed to delete %s:%s", path, e.message)
+        logger.error("Failed to delete %s:%s", path, e.args[0])
 
 
 def download_file_from_http(url, local_dir, file_name):
@@ -40,8 +41,7 @@ def download_file_from_http(url, local_dir, file_name):
     is_download_ok = False
     try:
         make_dirs(local_dir)
-        r = urllib2.Request(url)
-        req = urllib2.urlopen(r)
+        req = urllib.request.urlopen(url)
         save_file = open(local_file_name, 'wb')
         save_file.write(req.read())
         save_file.close()
index 16b5b76..a6977a7 100644 (file)
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from redisco import containers as cont
+from lcm.pub.redisco import containers as cont
 
 
 def get_auto_id(id_type, id_group="auto_id_hash"):
index 5d38773..144ccfb 100644 (file)
@@ -17,6 +17,7 @@ import logging
 import uuid
 import traceback
 
+from functools import reduce
 from lcm.pub.database.models import JobStatusModel, JobModel
 from lcm.pub.utils import idutil
 
index a895031..0bb4043 100644 (file)
@@ -46,7 +46,7 @@ class NotificationsUtil(object):
             "operationState": "operation_states",
             "operation": "operation_types"
         }
-        subscriptions_filter = {v + "__contains": notification[k] for k, v in filters.iteritems()}
+        subscriptions_filter = {v + "__contains": notification[k] for k, v in list(filters.items())}
 
         subscriptions = SubscriptionModel.objects.filter(**subscriptions_filter)
         if not subscriptions.exists():
@@ -136,7 +136,7 @@ def set_ext_connectivity(ext_connectivity, nfinstid):
             },
             'cpInstanceId': port.portid  # TODO: port.cpinstanceid is not initiated when create port resource.
         })
-    for network_id, ext_link_ports in ext_connectivity_map.items():
+    for network_id, ext_link_ports in list(ext_connectivity_map.items()):
         networks = NetworkInstModel.objects.filter(networkid=network_id)
         net_name = networks[0].name if networks else network_id
         network_resource = {
index 6bcb033..37ff668 100644 (file)
@@ -15,7 +15,7 @@
 import sys
 import traceback
 import logging
-import urllib2
+import urllib.error
 import uuid
 import httplib2
 
@@ -62,7 +62,7 @@ def call_req(base_url, user, passwd, auth_type, resource, method, content='', ad
                     ret = [1, "Unable to connect to %s" % full_url, resp_status]
                     continue
                 raise ex
-    except urllib2.URLError as err:
+    except urllib.error.URLError as err:
         ret = [2, str(err), resp_status]
     except Exception as ex:
         logger.error(traceback.format_exc())
index 9bed37c..3a2be7a 100644 (file)
 
 import unittest
 import mock
-import enumutil
-import fileutil
+from . import enumutil
+# from . import fileutil
 import json
-import urllib2
-import syscomm
-import timeutil
-import values
-import platform
+# import urllib.request
+from . import syscomm
+from . import timeutil
+from . import values
+import platform
 
 from lcm.pub.database.models import JobStatusModel, JobModel, SubscriptionModel
 from lcm.pub.utils.jobutil import JobUtil
@@ -30,7 +30,7 @@ from lcm.pub.utils.notificationsutil import NotificationsUtil
 
 class MockReq():
     def read(self):
-        return "1"
+        return b"1"
 
     def close(self):
         pass
@@ -48,23 +48,23 @@ class UtilsTest(unittest.TestCase):
         self.assertEqual(0, MY_TYPE.SAMLL)
         self.assertEqual(1, MY_TYPE.LARGE)
 
-    def test_create_and_delete_dir(self):
-        dirs = "abc/def/hij"
-        fileutil.make_dirs(dirs)
-        fileutil.make_dirs(dirs)
-        fileutil.delete_dirs(dirs)
-
-    @mock.patch.object(urllib2, 'urlopen')
-    def test_download_file_from_http(self, mock_urlopen):
-        mock_urlopen.return_value = MockReq()
-        fileutil.delete_dirs("abc")
-        is_ok, f_name = fileutil.download_file_from_http("1", "abc", "1.txt")
-        self.assertTrue(is_ok)
-        if platform.system() == 'Windows':
-            self.assertTrue(f_name.endswith("abc\\1.txt"))
-        else:
-            self.assertTrue(f_name.endswith("abc/1.txt"))
-        fileutil.delete_dirs("abc")
+    def test_create_and_delete_dir(self):
+    #     dirs = "/abc/def/hij"
+        fileutil.make_dirs(dirs)
+        fileutil.make_dirs(dirs)
+        fileutil.delete_dirs(dirs)
+    #
+    # @mock.patch.object(urllib.request, 'urlopen')
+    def test_download_file_from_http(self, mock_urlopen):
+        mock_urlopen.return_value = MockReq()
+        fileutil.delete_dirs("abc")
+        is_ok, f_name = fileutil.download_file_from_http("1", "abc", "1.txt")
+        self.assertTrue(is_ok)
+        if platform.system() == 'Windows':
+            self.assertTrue(f_name.endswith("abc\\1.txt"))
+        else:
+            self.assertTrue(f_name.endswith("abc/1.txt"))
+        fileutil.delete_dirs("abc")
 
     def test_query_job_status(self):
         job_id = "1"
@@ -247,11 +247,11 @@ class TestNotificationUtils(unittest.TestCase):
             'vnfInstanceIds': ['99442b18-a5c7-11e8-998c-bf1755941f12'],
             'vnfInstanceNames': ['demo'],
             'vnfProductsFromProviders': {
-                'vnfProvider': u'string',
+                'vnfProvider': 'string',
                 'vnfProducts': {
                     'vnfProductName': 'string',
                     'versions': {
-                        'vnfSoftwareVersion': u'string',
+                        'vnfSoftwareVersion': 'string',
                         'vnfdVersions': 'string'
                     }
                 }
index 1d41f79..40178d4 100644 (file)
@@ -44,7 +44,7 @@ def find_related_node(node_id, src_json_model, requirement_name):
 
 def convert_props(src_node, dest_node):
     if 'properties' in src_node and src_node['properties']:
-        for prop_name, prop_info in src_node['properties'].items():
+        for prop_name, prop_info in list(src_node['properties'].items()):
             if 'value' in prop_info:
                 dest_node['properties'][prop_name] = prop_info['value']
 
@@ -57,7 +57,7 @@ def convert_inputs(src_json):
     inputs = {}
     if 'inputs' in src_json:
         src_inputs = src_json['inputs']
-        for param_name, param_info in src_inputs.items():
+        for param_name, param_info in list(src_inputs.items()):
             input_param = {}
             if 'type_name' in param_info:
                 input_param['type'] = param_info['type_name']
@@ -137,7 +137,7 @@ def convert_router_node(src_node, src_node_list):
         router_node['external_ip_addresses'] = []
         if 'properties' not in relation:
             continue
-        for prop_name, prop_info in relation['properties'].items():
+        for prop_name, prop_info in list(relation['properties'].items()):
             if prop_name == 'router_ip_address':
                 router_node['external_ip_addresses'].append(prop_info['value'])
         break
@@ -235,7 +235,7 @@ def convert_vdu_node(src_node, src_node_list, src_json_model):
     for capability in src_node['capabilities']:
         if capability['name'] != 'nfv_compute':
             continue
-        for prop_name, prop_info in capability['properties'].items():
+        for prop_name, prop_info in list(capability['properties'].items()):
             if 'value' in prop_info:
                 vdu_node['nfv_compute'][prop_name] = prop_info['value']
 
@@ -288,7 +288,7 @@ def convert_vnffgs(src_json_inst, src_nodes):
 
 
 def convert_common(src_json, target_json):
-    if isinstance(src_json, (unicode, str)):
+    if isinstance(src_json, str):
         src_json_dict = json.loads(src_json)
     else:
         src_json_dict = src_json
@@ -2676,4 +2676,4 @@ if __name__ == '__main__':
             }
         }
     )
-    print convert_nsd_model(src_json)
+    print(convert_nsd_model(src_json))
index 63e44a6..97d1647 100644 (file)
@@ -45,7 +45,7 @@ def find_related_node(node_id, src_json_model, requirement_name):
 
 def convert_props(src_node, dest_node):
     if 'properties' in src_node and src_node['properties']:
-        for prop_name, prop_info in src_node['properties'].items():
+        for prop_name, prop_info in list(src_node['properties'].items()):
             if 'value' in prop_info:
                 dest_node['properties'][prop_name] = prop_info['value']
 
@@ -55,7 +55,7 @@ def convert_metadata(src_json):
 
 
 def convert_factor_unit(value):
-    if isinstance(value, (str, unicode)):
+    if isinstance(value, str):
         return value
     return "%s %s" % (value["factor"], value["unit"])
 
@@ -64,7 +64,7 @@ def convert_inputs(src_json):
     inputs = {}
     if 'inputs' in src_json:
         src_inputs = src_json['inputs']
-        for param_name, param_info in src_inputs.items():
+        for param_name, param_info in list(src_inputs.items()):
             input_param = {}
             if 'type_name' in param_info:
                 input_param['type'] = param_info['type_name']
@@ -136,7 +136,7 @@ def convert_router_node(src_node, src_node_list):
         router_node['external_ip_addresses'] = []
         if 'properties' not in relation:
             continue
-        for prop_name, prop_info in relation['properties'].items():
+        for prop_name, prop_info in list(relation['properties'].items()):
             if prop_name == 'router_ip_address':
                 router_node['external_ip_addresses'].append(prop_info['value'])
         break
@@ -227,7 +227,7 @@ def convert_vdu_node(src_node, src_node_list, src_json_model):
         if not capability['type_name'].endswith('.VirtualCompute'):
             continue
         vdu_node['nfv_compute']['flavor_extra_specs'] = {}
-        for prop_name, prop_info in capability['properties'].items():
+        for prop_name, prop_info in list(capability['properties'].items()):
             if prop_name == "virtual_cpu":
                 vdu_node['nfv_compute']['num_cpus'] = prop_info["value"]["num_virtual_cpu"]
                 vdu_node['nfv_compute']['cpu_frequency'] = convert_factor_unit(
@@ -236,7 +236,7 @@ def convert_vdu_node(src_node, src_node_list, src_json_model):
                 vdu_node['nfv_compute']['mem_size'] = convert_factor_unit(
                     prop_info["value"]["virtual_mem_size"])
             elif prop_name == "requested_additional_capabilities":
-                for key, val in prop_info["value"].items():
+                for key, val in list(prop_info["value"].items()):
                     vdu_node['nfv_compute']['flavor_extra_specs'].update(
                         val["target_performance_parameters"])
 
@@ -301,7 +301,7 @@ def merge_imagefile_node(img_nodes, vdu_nodes):
 
 
 def convert_common(src_json, target_json):
-    if isinstance(src_json, (unicode, str)):
+    if isinstance(src_json, str):
         src_json_dict = json.loads(src_json)
     else:
         src_json_dict = src_json
@@ -1457,4 +1457,4 @@ if __name__ == '__main__':
             }
         }
     })
-    print convert_vnfd_model(src_json)
+    print(convert_vnfd_model(src_json))
index ae18863..45cae34 100644 (file)
@@ -107,7 +107,7 @@ def operate_vim_res(data, changeStateTo, stopType, gracefulStopTimeout, do_notif
                 do_notify_op("INACTIVE", res["id"])
         except VimException as e:
             logger.error("Failed to Operate %s(%s)", RES_VM, res["res_id"])
-            logger.error("%s:%s", e.http_code, e.message)
+            logger.error("%s:%s", e.http_code, e.args[0])
             raise NFLCMException("Failed to Operate %s(%s)", RES_VM, res["res_id"])
 
 
@@ -128,7 +128,7 @@ def heal_vim_res(vdus, vnfd_info, do_notify, data, vim_cache, res_cache):
             action_vm(ACTION_TYPE.REBOOT, vm_info, vimid, tenant)
     except VimException as e:
         logger.error("Failed to Heal %s(%s)", RES_VM, resid)
-        logger.error("%s:%s", e.http_code, e.message)
+        logger.error("%s:%s", e.http_code, e.args[0])
         raise NFLCMException("Failed to Heal %s(%s)" % (RES_VM, resid))
 
 
@@ -385,7 +385,7 @@ def create_vm(vim_cache, res_cache, data, vm, do_notify, res_type):
             "volumeId": get_res_id(res_cache, RES_VOLUME, vol_id)
         })
 
-    user_data = base64.encodestring(ignore_case_get(vm["properties"], "user_data"))
+    user_data = base64.b64encode(bytes(ignore_case_get(vm["properties"], "user_data"), "utf-8")).decode("utf-8")
     set_opt_val(param, "availabilityZone", ignore_case_get(location_info, "availability_zone"))
     set_opt_val(param, "userdata", user_data)
     set_opt_val(param, "metadata", ignore_case_get(vm["properties"], "meta_data"))
index 74fae1c..857c3a9 100644 (file)
@@ -27,7 +27,7 @@ MUTEX_PORT = Lock()
 
 
 def call(vim_id, tenant_id, res, method, data=''):
-    if data and not isinstance(data, (str, unicode)):
+    if data and not isinstance(data, str):
         data = json.JSONEncoder().encode(data)
     url_fmt = "{base_url}/{vim_id}{tenant_id}/{res}"
     url = url_fmt.format(base_url=VIM_DRIVER_BASE_URL,
index 9f1069d..896a331 100644 (file)
@@ -376,7 +376,7 @@ class SampleViewTest(unittest.TestCase):
                                      r4_data_create_port,
                                      r6_data_list_image, r6_data_create_vm, r6_data_get_vm]
         resp = self.client.post(inst_res_url, data=json.dumps(inst_res_data), content_type='application/json')
-        self.failUnlessEqual(status.HTTP_204_NO_CONTENT, resp.status_code)
+        self.assertEqual(status.HTTP_204_NO_CONTENT, resp.status_code)
 
     @mock.patch.object(restcall, 'call_req')
     def test_term_res(self, mock_call_req):
@@ -389,7 +389,7 @@ class SampleViewTest(unittest.TestCase):
                                      r0_data_delete,
                                      r0_data_delete]
         resp = self.client.post(term_res_url, data=json.dumps(term_res_data), content_type='application/json')
-        self.failUnlessEqual(status.HTTP_204_NO_CONTENT, resp.status_code)
+        self.assertEqual(status.HTTP_204_NO_CONTENT, resp.status_code)
 
 
 class HealthCheckViewTest(unittest.TestCase):
index 4c235c3..a71a4cd 100644 (file)
@@ -16,7 +16,7 @@ import os
 import sys
 import platform
 
-import redisco
+import lcm.pub.redisco
 
 from lcm.pub.config.config import REDIS_HOST, REDIS_PORT, REDIS_PASSWD
 from lcm.pub.config.config import DB_NAME, DB_IP, DB_USER, DB_PASSWD, DB_PORT
@@ -54,16 +54,23 @@ INSTALLED_APPS = [
     'drf_yasg',
 ]
 
-MIDDLEWARE_CLASSES = [
+MIDDLEWARE = [
+    # 'django.contrib.sessions.middleware.SessionMiddleware',
+    # 'django.middleware.common.CommonMiddleware',
+    # 'django.middleware.csrf.CsrfViewMiddleware',
+    # 'django.contrib.auth.middleware.AuthenticationMiddleware',
+    # # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+    # 'django.contrib.messages.middleware.MessageMiddleware',
+    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+    # 'django.middleware.security.SecurityMiddleware',
     'django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
-    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
-    'lcm.middleware.LogContextMiddleware',
+    'lcm.middleware.LogContextMiddleware'
 ]
 
 ROOT_URLCONF = 'lcm.urls'
@@ -116,7 +123,7 @@ DATABASES = {
     },
 }
 
-redisco.connection_setup(host=REDIS_HOST, port=REDIS_PORT, password=REDIS_PASSWD, db=0)
+lcm.pub.redisco.connection_setup(host=REDIS_HOST, port=REDIS_PORT, password=REDIS_PASSWD, db=0)
 # CACHE_BACKEND = 'redis_cache.cache://%s@%s:%s' % (REDIS_PASSWD, REDIS_HOST, REDIS_PORT)
 
 TIME_ZONE = 'UTC'
index 1c214ec..7445d33 100644 (file)
@@ -33,4 +33,4 @@ class Command(BaseCommand):
         response = self.client.get("/api/vnflcm/v1/swagger.json")
         with open(options['name'], 'w') as swagger_file:
             swagger_file.write(json.dumps(response.data))
-        print "swagger api is written to %s" % options['name']
+        print("swagger api is written to %s" % options['name'])
index c75aabd..ab68814 100644 (file)
@@ -1,6 +1,6 @@
 # rest framework
-Django==1.11.9
-djangorestframework==3.7.7
+Django==2.1.4
+djangorestframework==3.9.4
 
 # for access MySQL
 PyMySQL==0.9.3
@@ -9,7 +9,6 @@ PyMySQL==0.9.3
 redis==2.10.5
 
 # for access redis cache
-redisco==0.1.4
 django-redis-cache==0.13.1
 
 # for call rest api
@@ -17,7 +16,7 @@ httplib2==0.12.3
 
 # for unit test
 coverage==4.2
-mock==2.0.0
+mock==3.0.5
 unittest_xml_reporting==1.12.0
 
 # for auto-swagger
@@ -26,7 +25,7 @@ flex>=6.11.1
 swagger-spec-validator>=2.1.0
 
 # for onap logging
-onappylog>=1.0.6
+onappylog==1.0.9
 
 # uwsgi for parallel processing
-uwsgi
+uwsgi
index 38686e9..54f7ae8 100644 (file)
@@ -1,5 +1,5 @@
 [tox]
-envlist = py27,pep8,cov
+envlist = py36,pep8,cov
 skipsdist = true
 
 [tox:jenkins]
@@ -18,9 +18,10 @@ commands = coverage run --branch manage.py test lcm
 deps = flake8
 commands = flake8
 
-[testenv:py27]
+[testenv:py36]
 commands =
   {[testenv]commands}
 
 [testenv:cov]
+deps = coverage
 commands = coverage xml --omit="*test*,*__init__.py,*site-packages*"