Fetching latest commit…
Cannot retrieve the latest commit at this time
|Failed to load latest commit information.|
esky: keep frozen apps fresh Esky is an auto-update framework for frozen Python applications, built on top of bbfreeze. It provides a simple API through which apps can find, fetch and install updates, and a bootstrapping mechanism that keeps the app safe in the face of failed or partial updates. The main interface is the 'Esky' class, which represents a frozen app. An Esky must be given the path to the top-level directory of the frozen app, and a 'VersionFinder' object that it will use to search for updates. Typical usage for an app automatically updating itself would look something like this: if hasattr(sys,"frozen"): app = esky.Esky(sys.executable,"http://example.com/downloads/") new_version = app.find_update() if new_version is not None: app.install_update(new_version) A simple default VersionFinder is provided that hits a specified URL to get a list of available versions. More sophisticated implementations will likely be added in the future, and you're encouraged to develop a custom VersionFinder subclass to meet your specific needs. When properly installed, the on-disk layout of an app managed by esky looks like this: prog.exe - esky bootstrapping executable updates/ - work area for fetching/unpacking updates appname-X.Y.platform/ - specific version of the application prog.exe - executable(s) as produced by bbfreeze library.zip - pure-python modules frozen by bbfreeze pythonXY.dll - python DLL esky-bootstrap.txt - list of files expected in the bootstrapping env ...other deps... The "appname-X.Y" directory is simply a bbfrozen app directory with some extra bootstrapping information produced by esky. To freeze your app in such a format, there is a "bdist_esky" command that can be used with a standard distutils setup.py file. To upgrade to a new version "appname-X.Z", esky performs the following steps: * extract it into a temporary directory under "updates" * move all bootstrapping files into "appname-X.Z.platform/esky-bootstrap" * atomically rename it into the main directory as "appname-X.Z.platform" * move contents of "appname-X.Z.platform/esky-bootstrap" into the main dir * remove the "appname-X.Z.platform/esky-bootstrap" directory * remove files not in "appname-X.Z.platform/esky-bootstrap.txt" * remove the "appname-X.Y.platform" directory Where such facilities are provided by the operating system, this process is performed within a filesystem transaction. Neverthless, the esky bootstrapping executable is able to detect and recover from a failed update should such an unfortunate situation arise. To clean up after failed or partial updates, applications should periodically call the "cleanup" method on their esky.