from catalog.pub.utils.values import ignore_case_get
 from catalog.pub.database.models import NSPackageModel, VnfPackageModel
 from catalog.pub.exceptions import CatalogException
+from catalog.pub.utils import toscaparser
 
 logger = logging.getLogger(__name__)
 
             local_file.write(data)
 
 
+def process(nsd_info_id, local_file_name):
+    nsd_json = toscaparser.parse_nsd(local_file_name)
+    nsd = json.JSONDecoder().decode(nsd_json)
+
+    nsd_id = nsd["metadata"]["id"]
+    if nsd_id and NSPackageModel.objects.filter(nsdId=nsd_id):  # nsd_id may not exist
+        raise CatalogException("NS Descriptor (%s) already exists." % nsd_id)
+
+    for vnf in nsd["vnfs"]:
+        vnfd_id = vnf["properties"]["id"]
+        pkg = VnfPackageModel.objects.filter(vnfdId=vnfd_id)
+        if not pkg:
+            vnfd_name = vnf.get("vnf_id", "undefined")
+            logger.error("[%s] is not distributed.", vnfd_name)
+            raise CatalogException("VNF package(%s) is not distributed." % vnfd_id)
+
+    NSPackageModel(
+        nsPackageId=nsd_info_id,
+        nsdId=nsd_id,
+        nsdName=nsd["metadata"].get("name", nsd_id),
+        nsdDesginer=nsd["metadata"].get("vendor", "undefined"),
+        nsdDescription=nsd["metadata"].get("description", ""),
+        nsdVersion=nsd["metadata"].get("version", "undefined"),
+        nsPackageUri=local_file_name,  # TODO
+        sdcCsarId=nsd_info_id,
+        localFilePath=local_file_name,
+        nsdModel=nsd_json
+    ).save()
+
+
 def download(nsd_info_id):
     ns_pkgs = NSPackageModel.objects.filter(nsPackageId=nsd_info_id)
     if not ns_pkgs.exists():