1 import rift
.downloader
as downloader
2 from gi
.repository
import RwPkgMgmtYang
5 TaskStatus
= RwPkgMgmtYang
.TaskStatus
8 class PackageFileDownloader(downloader
.UrlDownloader
):
10 downloader
.DownloadStatus
.STARTED
: TaskStatus
.QUEUED
.value_nick
.upper(),
11 downloader
.DownloadStatus
.IN_PROGRESS
: TaskStatus
.IN_PROGRESS
.value_nick
.upper(),
12 downloader
.DownloadStatus
.COMPLETED
: TaskStatus
.COMPLETED
.value_nick
.upper(),
13 downloader
.DownloadStatus
.FAILED
: TaskStatus
.FAILED
.value_nick
.upper(),
14 downloader
.DownloadStatus
.CANCELLED
: TaskStatus
.CANCELLED
.value_nick
.upper()
18 def from_rpc_input(cls
, rpc_input
, file_obj
, proxy
, log
=None, auth
=None):
19 """Convenience class to set up an instance form RPC data
22 rpc_input
.external_url
,
24 rpc_input
.package_path
,
25 rpc_input
.package_type
,
41 decompress_on_fly
=False,
47 delete_on_fail
=delete_on_fail
,
48 decompress_on_fly
=decompress_on_fly
,
52 self
.package_id
= package_id
53 self
.package_type
= package_type
54 self
.package_path
= package_path
57 def convert_to_yang(self
):
59 job
= RwPkgMgmtYang
.DownloadJob
.from_dict({
61 "download_id": self
.meta
.download_id
,
62 "package_id": self
.package_id
,
63 "package_path": self
.package_path
,
64 "package_type": self
.package_type
,
65 "detail": self
.meta
.detail
,
66 "progress_percent": self
.meta
.progress_percent
,
67 "bytes_downloaded": self
.meta
.bytes_downloaded
,
68 "bytes_total": self
.meta
.bytes_total
,
69 "bytes_per_second": self
.meta
.bytes_per_second
,
70 "start_time": self
.meta
.start_time
,
71 "stop_time": self
.meta
.stop_time
,
72 "status": self
.STATUS_MAP
[self
.meta
.status
]
77 # Start of delegate calls
78 def call_delegate(self
, event
):
82 job
= self
.convert_to_yang()
83 getattr(self
.delegate
, event
)(job
)
86 def download_succeeded(self
):
89 # Add the file to package
90 self
.proxy
.package_file_add(
96 except Exception as e
:
98 self
.job
.detail
= str(e
)
99 self
.download_failed()
102 super().download_succeeded()