Deal with nfPackage
[vfc/nfvo/catalog.git] / catalog / packages / views / vnfpkg_views.py
1 # Copyright 2017 ZTE Corporation.\r
2 #\r
3 # Licensed under the Apache License, Version 2.0 (the "License");\r
4 # you may not use this file except in compliance with the License.\r
5 # You may obtain a copy of the License at\r
6 #\r
7 #         http://www.apache.org/licenses/LICENSE-2.0\r
8 #\r
9 # Unless required by applicable law or agreed to in writing, software\r
10 # distributed under the License is distributed on an "AS IS" BASIS,\r
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
12 # See the License for the specific language governing permissions and\r
13 # limitations under the License.\r
14 \r
15 import os\r
16 import traceback\r
17 import logging\r
18 from catalog.pub.config.config import CATALOG_ROOT_PATH\r
19 from drf_yasg.utils import swagger_auto_schema\r
20 from rest_framework import status\r
21 from rest_framework.views import APIView\r
22 from rest_framework.response import Response\r
23 from catalog.packages.biz.nf_package import VnfpkgUploadThread\r
24 from catalog.pub.exceptions import CatalogException\r
25 from catalog.packages.serializers.upload_vnf_pkg_from_uri_req import UploadVnfPackageFromUriRequestSerializer\r
26 \r
27 logger = logging.getLogger(__name__)\r
28 \r
29 \r
30 class vnf_packages(APIView):\r
31     @swagger_auto_schema(\r
32         responses={\r
33             # status.HTTP_200_OK: Serializer(),\r
34             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
35         }\r
36     )\r
37     def get(self, request):\r
38         # TODO\r
39         return None\r
40 \r
41     @swagger_auto_schema(\r
42         # request_body=CreateVnfReqSerializer(),\r
43         responses={\r
44             #     status.HTTP_201_CREATED: CreateVnfRespSerializer(),\r
45             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
46         }\r
47     )\r
48     def post(self, request):\r
49         # TODO\r
50         return None\r
51 \r
52 \r
53 class vnf_package(APIView):\r
54     @swagger_auto_schema(\r
55         responses={\r
56             # status.HTTP_200_OK: Serializer(),\r
57             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
58         }\r
59     )\r
60     def get(self, request):\r
61         # TODO\r
62         return None\r
63 \r
64     @swagger_auto_schema(\r
65         # request_body=CreateVnfReqSerializer(),\r
66         responses={\r
67             #     status.HTTP_201_CREATED: CreateVnfRespSerializer(),\r
68             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
69         }\r
70     )\r
71     def post(self, request):\r
72         # TODO\r
73         return None\r
74 \r
75 \r
76 class vnfd(APIView):\r
77     @swagger_auto_schema(\r
78         responses={\r
79             # status.HTTP_200_OK: Serializer(),\r
80             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
81         }\r
82     )\r
83     def get(self, request):\r
84         # TODO\r
85         return None\r
86 \r
87     @swagger_auto_schema(\r
88         # request_body=CreateVnfReqSerializer(),\r
89         responses={\r
90             #     status.HTTP_201_CREATED: CreateVnfRespSerializer(),\r
91             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
92         }\r
93     )\r
94     def post(self, request):\r
95         # TODO\r
96         return None\r
97 \r
98 \r
99 class package_content(APIView):\r
100     @swagger_auto_schema(\r
101         responses={\r
102             # status.HTTP_200_OK: Serializer(),\r
103             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
104         }\r
105     )\r
106     def get(self, request):\r
107         # TODO\r
108         return None\r
109 \r
110     @swagger_auto_schema(\r
111         # request_body=CreateVnfReqSerializer(),\r
112         responses={\r
113             #     status.HTTP_201_CREATED: CreateVnfRespSerializer(),\r
114             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
115         }\r
116     )\r
117     def post(self, request):\r
118         # TODO\r
119         return None\r
120 \r
121     def put(self, request, vnfPkgId):\r
122         logger.debug("UploadVnf %s" % vnfPkgId)\r
123         file_object = request.FILES.get('file')\r
124         upload_path = os.path.join(CATALOG_ROOT_PATH, vnfPkgId)\r
125         if not os.path.exists(upload_path):\r
126             os.makedirs(upload_path, 0o777)\r
127         try:\r
128             upload_file_name = os.path.join(upload_path, file_object.name)\r
129             with open(upload_file_name, 'wb+') as dest_file:\r
130                 for chunk in file_object.chunks():\r
131                     dest_file.write(chunk)\r
132         except Exception as e:\r
133             logger.error("File upload exception.[%s:%s]" % (type(e), str(e)))\r
134             logger.error("%s", traceback.format_exc())\r
135         return Response(None, status.HTTP_202_ACCEPTED)\r
136 \r
137 \r
138 class upload_from_uri(APIView):\r
139     @swagger_auto_schema(\r
140         responses={\r
141             # status.HTTP_200_OK: Serializer(),\r
142             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
143         }\r
144     )\r
145     def get(self, request):\r
146         # TODO\r
147         return None\r
148 \r
149     @swagger_auto_schema(\r
150         request_body=UploadVnfPackageFromUriRequestSerializer(),\r
151         responses={\r
152             status.HTTP_202_ACCEPTED: "Successfully",\r
153             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
154         }\r
155     )\r
156     def post(self, request, vnfPkgId):\r
157         try:\r
158             req_serializer = UploadVnfPackageFromUriRequestSerializer(data=request.data)\r
159             if not req_serializer.is_valid():\r
160                 raise CatalogException\r
161             VnfpkgUploadThread(req_serializer.data, vnfPkgId).start()\r
162             return Response(None, status=status.HTTP_202_ACCEPTED)\r
163         except CatalogException:\r
164             logger.error(traceback.format_exc())\r
165             return Response(data={'error': 'Upload vnfPkg failed.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)\r
166         except Exception as e:\r
167             logger.error(e.message)\r
168             logger.error(traceback.format_exc())\r
169             return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)\r
170 \r
171 \r
172 class artifacts(APIView):\r
173     @swagger_auto_schema(\r
174         responses={\r
175             # status.HTTP_200_OK: Serializer(),\r
176             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
177         }\r
178     )\r
179     def get(self, request):\r
180         # TODO\r
181         return None\r
182 \r
183     @swagger_auto_schema(\r
184         # request_body=CreateVnfReqSerializer(),\r
185         responses={\r
186             #     status.HTTP_201_CREATED: CreateVnfRespSerializer(),\r
187             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
188         }\r
189     )\r
190     def post(self, request):\r
191         # TODO\r
192         return None\r
193 \r
194 \r
195 class vnfpkg_subscriptions(APIView):\r
196     @swagger_auto_schema(\r
197         responses={\r
198             # status.HTTP_200_OK: Serializer(),\r
199             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
200         }\r
201     )\r
202     def get(self, request):\r
203         # TODO\r
204         return None\r
205 \r
206     @swagger_auto_schema(\r
207         # request_body=CreateVnfReqSerializer(),\r
208         responses={\r
209             #     status.HTTP_201_CREATED: CreateVnfRespSerializer(),\r
210             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
211         }\r
212     )\r
213     def post(self, request):\r
214         # TODO\r
215         return None\r
216 \r
217 \r
218 class vnfpkg_subscription(APIView):\r
219     @swagger_auto_schema(\r
220         responses={\r
221             # status.HTTP_200_OK: Serializer(),\r
222             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
223         }\r
224     )\r
225     def get(self, request):\r
226         # TODO\r
227         return None\r
228 \r
229     @swagger_auto_schema(\r
230         # request_body=CreateVnfReqSerializer(),\r
231         responses={\r
232             #     status.HTTP_201_CREATED: CreateVnfRespSerializer(),\r
233             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
234         }\r
235     )\r
236     def post(self, request):\r
237         # TODO\r
238         return None\r