2 The Python implementation of the Zero Install injector is divided into five sub-packages:
4 - L{zeroinstall.cmd} contains one module for each 0install sub-command (providing the shell-scripting interface)
5 - L{zeroinstall.injector} contains most of the interesting stuff for managing feeds, keys and downloads and for selecting versions
6 - L{zeroinstall.zerostore} contains low-level code for handling the implementation cache (where unpacked packages are stored)
7 - L{zeroinstall.gtkui} contains code for making GTK user-interfaces
8 - L{zeroinstall.support} contains helper code (not really specific to Zero Install)
10 @copyright: (C) 2011, Thomas Leonard
11 @see: U{http://0install.net}
13 @var _: a function for translating strings using the zero-install domain (for use internally by Zero Install)
19 if sys
.version_info
[0] > 2:
21 from gi
.repository
import GObject
as gobject
26 gobject
.threads_init()
28 logger
= logging
.getLogger('0install')
30 # Configure some basic logging, if the caller hasn't already done so.
34 from os
.path
import dirname
, join
38 translation
= gettext
.translation('zero-install', fallback
= False)
40 localedir
= join(dirname(dirname(__file__
)), 'share', 'locale')
41 translation
= gettext
.translation('zero-install',
42 localedir
= localedir
,
45 _
= translation
.ugettext
# Python 2
46 except AttributeError:
47 _
= translation
.gettext
# Python 3
49 class SafeException(Exception):
50 """An exception that can be reported to the user without a stack trace.
51 The command-line interface's C{--verbose} option will display the full stack trace."""
53 class NeedDownload(SafeException
):
54 """Thrown if we tried to start a download and downloading is
56 def __init__(self
, url
):
57 Exception.__init
__(self
, _("Would download '%s'") % url
)