#: a conflict marker string and a result list. See :mod:`wizard.resolve`
#: for more information.
resolutions = {}
+ #: Instance of :class:`wizard.install.ArgSchema` that defines the arguments
+ #: this application requires.
+ install_schema = None
def __init__(self, name):
self.name = name
self.versions = {}
take a :class:`wizard.deploy.Deployment` as a parameter.) Subclasses should
provide an implementation.
"""
- raise NotImplemented
+ raise NotImplementedError
def upgrade(self, deployment, version, options):
"""
Run for 'wizard upgrade' to upgrade database schemas and other
upgraded. This assumes that the current working directory is the
deployment. Subclasses should provide an implementation.
"""
- raise NotImplemented
+ raise NotImplementedError
def backup(self, deployment, outdir, options):
"""
Run for 'wizard backup' and upgrades to backup database schemas
Static user files may not need to be backed up, since in
many applications upgrades do not modify static files.
"""
- raise NotImplemented
+ raise NotImplementedError
def restore(self, deployment, backup_dir, options):
"""
Run for 'wizard restore' and failed upgrades to restore database
that the current working directory is the deployment. Subclasses
should provide an implementation.
"""
- raise NotImplemented
+ raise NotImplementedError
def detectVersion(self, deployment):
"""
Checks source files to determine the version manually. This assumes
that the current working directory is the deployment. Subclasses
should provide an implementation.
"""
- raise NotImplemented
+ raise NotImplementedError
+ def download(self, version):
+ """
+ Returns a URL that can be used to download a tarball of ``version`` of
+ this application.
+ """
+ raise NotImplementedError
def checkWeb(self, deployment, output=None):
"""
Checks if the autoinstall is viewable from the web. To get
page does not contain the features you search for. Try
not to depend on pages that are not the main page.
"""
- raise NotImplemented
+ raise NotImplementedError
def checkConfig(self, deployment):
"""
Checks whether or not an autoinstall has been configured/installed
# XXX: Unfortunately, this doesn't quite work because we package
# bogus config files in the -scripts versions of installs. Maybe
# we should check a hash or something?
- raise NotImplemented
+ raise NotImplementedError
@staticmethod
def make(name):
"""Makes an application, but uses the correct subtype if available."""
"""Generic error class for this module."""
pass
+class RecoverableFailure(Error):
+ """
+ The installer failed, but we were able to determine what the
+ error was, and should give the user a second chance if we were
+ running interactively.
+ """
+ #: List of the errors that were found.
+ errors = None
+ def __init__(self, errors):
+ self.errors = errors
+ def __str__(self):
+ return """Installation failed due to the following errors: %s""" % ", ".join(self.errors)
+
class NoRepositoryError(Error):
"""
:class:`Application` does not appear to have a Git repository