Updated uses of deprecated file() function
[zeroinstall.git] / zeroinstall / injector / config.py
blob6b0e8e25cf752513ac56f261f5910a5a6b94c57f
1 """
2 Holds user settings and various helper objects.
3 """
5 # Copyright (C) 2011, Thomas Leonard
6 # See the README file for details, or visit http://0install.net.
8 from zeroinstall import _
9 import os
10 from logging import info, warn
11 import ConfigParser
13 from zeroinstall import zerostore
14 from zeroinstall.injector.model import network_levels, network_full
15 from zeroinstall.injector.namespaces import config_site, config_prog
16 from zeroinstall.support import basedir
18 DEFAULT_FEED_MIRROR = "http://roscidus.com/0mirror"
19 DEFAULT_KEY_LOOKUP_SERVER = 'https://keylookup.appspot.com'
21 class Config(object):
22 """
23 @ivar auto_approve_keys: whether to approve known keys automatically
24 @type auto_approve_keys: bool
25 @ivar handler: handler for main-loop integration
26 @type handler: L{handler.Handler}
27 @ivar key_info_server: the base URL of a key information server
28 @type key_info_server: str
29 @ivar feed_mirror: the base URL of a mirror site for keys and feeds
30 @type feed_mirror: str | None
31 """
33 __slots__ = ['help_with_testing', 'freshness', 'network_use', 'feed_mirror', 'key_info_server', 'auto_approve_keys',
34 '_fetcher', '_stores', '_iface_cache', '_handler', '_trust_mgr']
36 def __init__(self, handler = None):
37 self.help_with_testing = False
38 self.freshness = 60 * 60 * 24 * 30
39 self.network_use = network_full
40 self._handler = handler
41 self._fetcher = self._stores = self._iface_cache = self._trust_mgr = None
42 self.feed_mirror = DEFAULT_FEED_MIRROR
43 self.key_info_server = DEFAULT_KEY_LOOKUP_SERVER
44 self.auto_approve_keys = True
46 @property
47 def stores(self):
48 if not self._stores:
49 self._stores = zerostore.Stores()
50 return self._stores
52 @property
53 def iface_cache(self):
54 if not self._iface_cache:
55 from zeroinstall.injector import iface_cache
56 self._iface_cache = iface_cache.iface_cache
57 #self._iface_cache = iface_cache.IfaceCache()
58 return self._iface_cache
60 @property
61 def fetcher(self):
62 if not self._fetcher:
63 from zeroinstall.injector import fetch
64 self._fetcher = fetch.Fetcher(self)
65 return self._fetcher
67 @property
68 def trust_mgr(self):
69 if not self._trust_mgr:
70 from zeroinstall.injector import trust
71 self._trust_mgr = trust.TrustMgr(self)
72 return self._trust_mgr
74 @property
75 def trust_db(self):
76 from zeroinstall.injector import trust
77 self._trust_db = trust.trust_db
79 @property
80 def handler(self):
81 if not self._handler:
82 from zeroinstall.injector import handler
83 if os.isatty(1):
84 self._handler = handler.ConsoleHandler()
85 else:
86 self._handler = handler.Handler()
87 return self._handler
89 def save_globals(self):
90 """Write global settings."""
91 parser = ConfigParser.ConfigParser()
92 parser.add_section('global')
94 parser.set('global', 'help_with_testing', self.help_with_testing)
95 parser.set('global', 'network_use', self.network_use)
96 parser.set('global', 'freshness', self.freshness)
97 parser.set('global', 'auto_approve_keys', self.auto_approve_keys)
99 path = basedir.save_config_path(config_site, config_prog)
100 path = os.path.join(path, 'global')
101 parser.write(open(path + '.new', 'w'))
102 os.rename(path + '.new', path)
104 def load_config(handler = None):
105 config = Config(handler)
106 parser = ConfigParser.RawConfigParser()
107 parser.add_section('global')
108 parser.set('global', 'help_with_testing', 'False')
109 parser.set('global', 'freshness', str(60 * 60 * 24 * 30)) # One month
110 parser.set('global', 'network_use', 'full')
111 parser.set('global', 'auto_approve_keys', 'True')
113 path = basedir.load_first_config(config_site, config_prog, 'global')
114 if path:
115 info("Loading configuration from %s", path)
116 try:
117 parser.read(path)
118 except Exception as ex:
119 warn(_("Error loading config: %s"), str(ex) or repr(ex))
121 config.help_with_testing = parser.getboolean('global', 'help_with_testing')
122 config.network_use = parser.get('global', 'network_use')
123 config.freshness = int(parser.get('global', 'freshness'))
124 config.auto_approve_keys = parser.getboolean('global', 'auto_approve_keys')
126 assert config.network_use in network_levels, config.network_use
128 return config