Merge from master
[osm/SO.git] / rwlaunchpad / plugins / rwpkgmgr / rift / tasklets / rwpkgmgr / subscriber / download_status.py
index 8fd041e..6bca858 100644 (file)
@@ -36,30 +36,31 @@ from gi.repository import (
 )
 
 class DownloadStatusSubscriber(mano_dts.AbstractOpdataSubscriber):
+    def __init__(self, log, dts, loop, project, callback):
+        super().__init__(log, dts, loop, project, callback)
+
+    def get_xpath(self):
+        return self._project.add_project(
+            "D,/rw-pkg-mgmt:download-jobs/rw-pkg-mgmt:job")
 
-    def __init__(self, log, dts, loop, callback):
-        super().__init__(log, dts, loop, callback)
-    
-    def get_xpath(self): 
-        return ("D,/rw-pkg-mgmt:download-jobs/rw-pkg-mgmt:job")
 
 class VnfdStatusSubscriber(DownloadStatusSubscriber): 
     DOWNLOAD_DIR = store.VnfdPackageFilesystemStore.DEFAULT_ROOT_DIR
     MODULE_DESC = 'vnfd rw-vnfd'.split()
     DESC_TYPE = 'vnfd'
     
-    def __init__(self, log, dts, loop):
-        super().__init__(log, dts, loop, self.on_change)
-        self.subscriber = mano_dts.VnfdCatalogSubscriber(log, dts, loop)
+    def __init__(self, log, dts, loop, project):
+        super().__init__(log, dts, loop, project, self.on_change)
+        self.subscriber = mano_dts.VnfdCatalogSubscriber(log, dts, loop, project)
 
     def on_change(self, msg, action): 
         log_msg = "1. Vnfd called w/ msg attributes: {} id {} name {} action: {}".format(repr(msg), msg.id, msg.name, repr(action))
         self.log.debug(log_msg)
         if action == RwDts.QueryAction.UPDATE:
             actionCreate(self, msg)
-
-        elif action == RwDts.QueryAction.DELETE:
-            actionDelete(self, msg)
+        else:
+            self.log.debug("VnfdStatusSubscriber: No action for {}".format(repr(action)))
+            pass
 
     def get_xpath(self): 
         return self.subscriber.get_xpath() 
@@ -70,18 +71,18 @@ class NsdStatusSubscriber(DownloadStatusSubscriber):
     MODULE_DESC = 'nsd rw-nsd'.split()
     DESC_TYPE = 'nsd'
     
-    def __init__(self, log, dts, loop):
-        super().__init__(log, dts, loop, self.on_change)
-        self.subscriber = mano_dts.NsdCatalogSubscriber(log, dts, loop)
+    def __init__(self, log, dts, loop, project):
+        super().__init__(log, dts, loop, project, self.on_change)
+        self.subscriber = mano_dts.NsdCatalogSubscriber(log, dts, loop, project)
 
     def on_change(self, msg, action): 
         log_msg = "1. Nsd called w/ msg attributes: {} id {} name {} action: {}".format(repr(msg), msg.id, msg.name, repr(action))
         self.log.debug(log_msg)
         if action == RwDts.QueryAction.UPDATE:
             actionCreate(self, msg)
-
-        elif action == RwDts.QueryAction.DELETE:
-            actionDelete(self, msg)
+        else:
+            self.log.debug("NsdStatusSubscriber: No action for {}".format(repr(action)))
+            pass
 
     def get_xpath(self): 
         return self.subscriber.get_xpath() 
@@ -92,25 +93,24 @@ def actionCreate(descriptor, msg):
     Serialize the Vnfd/Nsd object to yaml and store yaml file in the created folder.
     '''
 
-    download_dir = os.path.join(descriptor.DOWNLOAD_DIR, msg.id, msg.name)
-
-    if not os.path.exists(download_dir):
-        os.makedirs(download_dir)
-        descriptor.log.debug("Created directory {}".format(download_dir))
-
-        model = RwYang.Model.create_libncx()
-        for module in descriptor.MODULE_DESC: model.load_module(module)
-
-        yaml_path = "{base}/{name}_{type}.yaml".format(base=download_dir, name=msg.name, type=descriptor.DESC_TYPE) 
-        with open(yaml_path,"w") as fh:
-            fh.write(msg.to_yaml(model))
-
-def actionDelete(descriptor, msg): 
-    ''' Delete folder structure created above.
-    '''
-
+    desc_name = msg.name if msg.name else ""
     download_dir = os.path.join(descriptor.DOWNLOAD_DIR, msg.id)
-    if os.path.exists(download_dir):
-        descriptor.log.debug("Removing directory {}".format(download_dir))
-        shutil.rmtree(download_dir)
+
+    # If a download dir is present with contents, then we know it has been created in the 
+    # upload path. 
+    if os.path.exists(download_dir) and os.listdir(download_dir):
+        descriptor.log.debug("Skpping folder creation, {} already present".format(download_dir))
+        return
+    else: 
+        download_dir = os.path.join(download_dir, desc_name) 
+        if not os.path.exists(download_dir):
+            os.makedirs(download_dir)
+            descriptor.log.debug("Created directory {}".format(download_dir))
+
+            model = RwYang.Model.create_libncx()
+            for module in descriptor.MODULE_DESC: model.load_module(module)
+
+            yaml_path = "{base}/{name}_{type}.yaml".format(base=download_dir, name=msg.name, type=descriptor.DESC_TYPE) 
+            with open(yaml_path,"w") as fh:
+                fh.write(msg.to_yaml(model))