When updating from a mirror, just ignore out-of-date copies.
[zeroinstall/zeroinstall-mseaborn.git] / zeroinstall / injector / autopolicy.py
blob4d831265dd749a5bb50c82feb377d4008055d0de
1 """
2 A simple non-interactive policy.
4 This module provides a simple policy that will select, download and run a suitable set of
5 implementations. It is not interactive. This is the policy used when you run B{0launch -c}, and
6 is also the policy used to run the injector's GUI.
8 @deprecated: The interesting functionality has moved into the L{policy.Policy} base-class.
9 """
11 # Copyright (C) 2006, Thomas Leonard
12 # See the README file for details, or visit http://0install.net.
14 import os
15 from logging import debug, info, warn
17 from zeroinstall.support import tasks
18 from zeroinstall.injector import model, policy, run
19 from zeroinstall.injector.handler import Handler
20 from zeroinstall import NeedDownload
22 class AutoPolicy(policy.Policy):
23 __slots__ = ['download_only']
25 def __init__(self, interface_uri, download_only = False, dry_run = False, src = False, handler = None):
26 """@param handler: (new in 0.30) handler to use, or None to create a L{Handler}"""
27 handler = handler or Handler()
28 if dry_run:
29 info("Note: dry_run is deprecated. Pass it to the handler instead!")
30 handler.dry_run = True
31 policy.Policy.__init__(self, interface_uri, handler, src = src)
32 self.download_only = download_only
34 def execute(self, prog_args, main = None, wrapper = None):
35 downloaded = self.download_uncached_implementations()
36 if downloaded:
37 self.handler.wait_for_blocker(downloaded)
38 if not self.download_only:
39 run.execute(self, prog_args, dry_run = self.handler.dry_run, main = main, wrapper = wrapper)
40 else:
41 info("Downloads done (download-only mode)")
43 def download_and_execute(self, prog_args, refresh = False, main = None):
44 refreshed = self.solve_with_downloads(refresh)
46 self.handler.wait_for_blocker(refreshed)
48 if not self.solver.ready:
49 raise model.SafeException("Can't find all required implementations:\n" +
50 '\n'.join(["- %s -> %s" % (iface, self.solver.selections[iface])
51 for iface in self.solver.selections]))
52 self.execute(prog_args, main = main)