Bug 197 Remove ping pong images from SO code
[osm/SO.git] / rwlaunchpad / plugins / rwpkgmgr / rift / tasklets / rwpkgmgr / downloader / url.py
1 #
2 # Copyright 2016 RIFT.IO Inc
3 #
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
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
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.
15 #
16 import rift.downloader as downloader
17 from gi.repository import RwPkgMgmtYang
18
19
20 TaskStatus = RwPkgMgmtYang.TaskStatus
21
22
23 class PackageFileDownloader(downloader.UrlDownloader):
24 STATUS_MAP = {
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()
30 }
31
32 @classmethod
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
35 """
36 url_downloader = cls(
37 rpc_input.external_url,
38 rpc_input.package_id,
39 rpc_input.package_path,
40 rpc_input.package_type,
41 auth=auth,
42 proxy=proxy,
43 file_obj=file_obj,
44 log=log)
45
46 return url_downloader
47
48 def __init__(self,
49 url,
50 package_id,
51 package_path,
52 package_type,
53 proxy,
54 file_obj=None,
55 delete_on_fail=True,
56 decompress_on_fly=False,
57 auth=None,
58 log=None):
59 super().__init__(
60 url,
61 file_obj=file_obj,
62 delete_on_fail=delete_on_fail,
63 decompress_on_fly=decompress_on_fly,
64 auth=auth,
65 log=log)
66
67 self.package_id = package_id
68 self.package_type = package_type
69 self.package_path = package_path
70 self.proxy = proxy
71
72 def convert_to_yang(self):
73
74 job = RwPkgMgmtYang.DownloadJob.from_dict({
75 "url": self.meta.url,
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]
88 })
89
90 return job
91
92 # Start of delegate calls
93 def call_delegate(self, event):
94 if not self.delegate:
95 return
96
97 job = self.convert_to_yang()
98 getattr(self.delegate, event)(job)
99
100
101 def download_succeeded(self):
102
103 try:
104 # Add the file to package
105 self.proxy.package_file_add(
106 self.meta.filepath,
107 self.package_type,
108 self.package_id,
109 self.package_path)
110
111 except Exception as e:
112 self.log.exception(e)
113 self.job.detail = str(e)
114 self.download_failed()
115 return
116
117 super().download_succeeded()
118