import uuid
from rest_framework import status
-from django.http import FileResponse
+from django.http import FileResponse, StreamingHttpResponse
from catalog.pub.config.config import CATALOG_ROOT_PATH
from catalog.pub.database.models import VnfPackageModel
from catalog.pub.exceptions import CatalogException
return pkg_info
-def fetch_vnf_pkg(vnf_pkg_id):
+def fetch_vnf_pkg(request, vnf_pkg_id):
nf_pkg = VnfPackageModel.objects.filter(vnfPackageId=vnf_pkg_id)
if not nf_pkg.exists():
raise CatalogException("VNF package (%s) does not exist" % vnf_pkg_id)
- if nf_pkg[0].localFilePath != "ONBOARDED":
+ if nf_pkg[0].onboardingState != "ONBOARDED":
raise CatalogException("VNF package (%s) is not on-boarded" % vnf_pkg_id)
file_path = nf_pkg[0].localFilePath
file_name = file_path.split('/')[-1]
file_name = file_name.split('\\')[-1]
- response = FileResponse(open(file_path, 'rb'), status=status.HTTP_200_OK)
+ file_range = request.META.get('RANGE')
+ if file_range:
+ start_end = file_range.split('-')
+ start = int(start_end[0])
+ end = int(start_end[1])
+ f = open(file_path, "rb")
+ f.seek(start, 0)
+ fs = f.read(end - start + 1)
+ response = StreamingHttpResponse(fs, status=status.HTTP_200_OK)
+ response['Content-Type'] = 'application/octet-stream'
+ response['Content-Range'] = file_range
+ else:
+ response = FileResponse(open(file_path, 'rb'), status=status.HTTP_200_OK)
response['Content-Disposition'] = 'attachment; filename=%s' % file_name.encode('utf-8')
return response
response = self.client.delete("/api/vnfpkgm/v1/vnf_packages/222")
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(response.data, None)
+
+ def test_fetch_vnf_pkg(self):
+ pass
+
+ def test_fetch_partical_vnf_pkg(self):
+ with open("vnfPackage.csar", "wb") as fp:
+ fp.writelines("AAAABBBBCCCCDDDD")
+ VnfPackageModel.objects.create(
+ vnfPackageId="222",
+ onboardingState="ONBOARDED",
+ localFilePath="vnfPackage.csar"
+ )
+ response = self.client.get("/api/vnfpkgm/v1/vnf_packages/222/package_content", RANGE="4-7")
+ partial_file_content = ''
+ for data in response.streaming_content:
+ partial_file_content = partial_file_content + data
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual('BBBB', partial_file_content)
+ os.remove("vnfPackage.csar")