2 # Copyright 2016 RIFT.IO Inc
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
16 import rift
.downloader
as downloader
17 from gi
.repository
import RwPkgMgmtYang
20 TaskStatus
= RwPkgMgmtYang
.TaskStatus
23 class PackageFileDownloader(downloader
.UrlDownloader
):
25 downloader
.DownloadStatus
.STARTED
: TaskStatus
.QUEUED
.value_nick
.upper(),
26 downloader
.DownloadStatus
.IN_PROGRESS
: TaskStatus
.IN_PROGRESS
.value_nick
.upper(),
27 downloader
.DownloadStatus
.COMPLETED
: TaskStatus
.COMPLETED
.value_nick
.upper(),
28 downloader
.DownloadStatus
.FAILED
: TaskStatus
.FAILED
.value_nick
.upper(),
29 downloader
.DownloadStatus
.CANCELLED
: TaskStatus
.CANCELLED
.value_nick
.upper()
33 def from_rpc_input(cls
, rpc_input
, file_obj
, proxy
, log
=None, auth
=None):
34 """Convenience class to set up an instance form RPC data
37 rpc_input
.external_url
,
39 rpc_input
.package_path
,
40 rpc_input
.package_type
,
41 rpc_input
.vnfd_file_type
,
42 rpc_input
.nsd_file_type
,
60 decompress_on_fly
=False,
66 delete_on_fail
=delete_on_fail
,
67 decompress_on_fly
=decompress_on_fly
,
71 self
.package_id
= package_id
72 self
.package_type
= package_type
73 self
.package_path
= package_path
74 self
.package_file_type
= vnfd_file_type
.lower() if vnfd_file_type
else nsd_file_type
.lower()
77 def convert_to_yang(self
):
79 job
= RwPkgMgmtYang
.DownloadJob
.from_dict({
81 "download_id": self
.meta
.download_id
,
82 "package_id": self
.package_id
,
83 "package_path": self
.package_path
,
84 "package_type": self
.package_type
,
85 "detail": self
.meta
.detail
,
86 "progress_percent": self
.meta
.progress_percent
,
87 "bytes_downloaded": self
.meta
.bytes_downloaded
,
88 "bytes_total": self
.meta
.bytes_total
,
89 "bytes_per_second": self
.meta
.bytes_per_second
,
90 "start_time": self
.meta
.start_time
,
91 "stop_time": self
.meta
.stop_time
,
92 "status": self
.STATUS_MAP
[self
.meta
.status
]
97 # Start of delegate calls
98 def call_delegate(self
, event
):
102 job
= self
.convert_to_yang()
103 getattr(self
.delegate
, event
)(job
)
106 def download_succeeded(self
):
109 # Add the file to package
110 self
.proxy
.package_file_add(
115 self
.package_file_type
)
117 except Exception as e
:
118 self
.log
.exception(e
)
119 self
.job
.detail
= str(e
)
120 self
.download_failed()
123 super().download_succeeded()