MCPcopy Create free account
hub / github.com/AstroPrint/AstroBox / SoftwareUpdater

Class SoftwareUpdater

src/astroprint/software.py:143–301  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

141 return True
142
143class SoftwareUpdater(threading.Thread):
144 updatePhaseProgressInfo = {
145 "download": (0.0, 0.25, "Downloading package..."),
146 "sources_update": (0.26, 0.4, "Updating dependency list..."),
147 "deps_download": (0.41, 0.6, "Downloading dependencies..."),
148 "deps_install": (0.61, 0.75, "Installing dependencies..."),
149 "release_install": (0.76, 0.85, "Upgrading package..."),
150 "release_configure": (0.86, 0.96, "Configuring Package..."),
151 "release_finalize": (0.96, 1.0, "Finalizing package...")
152 }
153
154 def __init__(self, manager, versionData, progressCb, completionCb):
155 super(SoftwareUpdater, self).__init__()
156 self.vData = versionData
157 self._manager = manager
158 self._progressCb = progressCb
159 self._completionCb = completionCb
160 self._logger = logging.getLogger(__name__)
161 self._currentPackage = 0
162 self._pkgCount = len(versionData)
163 self._pkgPrgSpread = 1.0 / self._pkgCount
164 self._lastPkgPrgEnd = 0
165 self._cache = None
166 self._stop = False
167
168 def stop(self):
169 self._stop = True
170
171 def run(self):
172 #We need to give the UI a chance to update before starting so that the message can be sent...
173 self._progressCb("download", 0.0, "Starting...")
174 #disconnect from the cloud during software upgrade. The reboot will take care of reconnect
175 boxrouterManager().boxrouter_disconnect()
176
177 time.sleep(2)
178 self._installNextPackage()
179
180 def _installNextPackage(self):
181 if not self._stop:
182 self._installPackage(self.vData[self._currentPackage])
183
184 def _installPackage(self, relData):
185 r = requests.get(relData['download_url'], stream=True, headers = self._manager._requestHeaders)
186
187 if r.status_code == 200:
188 releaseHandle, releasePath = mkstemp()
189
190 content_length = float(r.headers['Content-Length'])
191 downloaded_size = 0.0
192
193 self._logger.info('Downloading release.')
194 with os.fdopen(releaseHandle, "wb") as fd:
195 for chunk in r.iter_content(150000):
196 downloaded_size += len(chunk)
197 fd.write(chunk)
198 self._onProgress("download", round((downloaded_size / content_length), 2))
199
200 self._logger.info('Release downloaded.')

Callers 1

updateSoftwareMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected