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
,
56 decompress_on_fly
=False,
62 delete_on_fail
=delete_on_fail
,
63 decompress_on_fly
=decompress_on_fly
,
67 self
.package_id
= package_id
68 self
.package_type
= package_type
69 self
.package_path
= package_path
72 def convert_to_yang(self
):
74 job
= RwPkgMgmtYang
.DownloadJob
.from_dict({
76 "download_id": self
.meta
.download_id
,
77 "package_id": self
.package_id
,
78 "package_path": self
.package_path
,
79 "package_type": self
.package_type
,
80 "detail": self
.meta
.detail
,
81 "progress_percent": self
.meta
.progress_percent
,
82 "bytes_downloaded": self
.meta
.bytes_downloaded
,
83 "bytes_total": self
.meta
.bytes_total
,
84 "bytes_per_second": self
.meta
.bytes_per_second
,
85 "start_time": self
.meta
.start_time
,
86 "stop_time": self
.meta
.stop_time
,
87 "status": self
.STATUS_MAP
[self
.meta
.status
]
92 # Start of delegate calls
93 def call_delegate(self
, event
):
97 job
= self
.convert_to_yang()
98 getattr(self
.delegate
, event
)(job
)
101 def download_succeeded(self
):
104 # Add the file to package
105 self
.proxy
.package_file_add(
111 except Exception as e
:
112 self
.log
.exception(e
)
113 self
.job
.detail
= str(e
)
114 self
.download_failed()
117 super().download_succeeded()