def query_single(vnfPkgId):
-    # TODO
-    data = {
-        "id": "1",
-        "onboardingState": "CREATED",
-        "operationalState": "DISABLED",
-        "usageState": "NOT_IN_USE",
-        "userDefinedData": "1",
-        "_links": None
-    }
-    return data
+    pkg_info = {}
+    nf_pkg = VnfPackageModel.objects.filter(vnfPackageId=vnfPkgId)
+    if not nf_pkg.exists():
+        raise CatalogException('VNF package(%s) does not exist.' % vnfPkgId)
+    pkg_info["id"] = nf_pkg[0].vnfPackageId
+    pkg_info["vnfdId"] = nf_pkg[0].vnfdId
+    pkg_info["vnfdProvider"] = nf_pkg[0].vnfVendor
+    pkg_info["vnfProductName"] = nf_pkg[0].vnfdProductName
+    pkg_info["vnfSoftwareVersion"] = nf_pkg[0].vnfSoftwareVersion
+    pkg_info["vnfdVersion"] = nf_pkg[0].vnfdVersion
+    pkg_info["checksum"] = nf_pkg[0].checksum
+    pkg_info["softwareImages"] = ""  # TODO
+    pkg_info["additionalArtifacts"] = ""  # TODO
+    pkg_info["onboardingState"] = nf_pkg[0].onboardingState
+    pkg_info["operationalState"] = nf_pkg[0].operationalState
+    pkg_info["usageState"] = nf_pkg[0].usageState
+    pkg_info["userDefinedData"] = nf_pkg[0].userDefinedData
+    pkg_info["_links"] = ""  # TODO
+    return pkg_info
 
 
 def delete_single(vnfPkgId):