2 Holds user settings and various helper objects.
5 # Copyright (C) 2011, Thomas Leonard
6 # See the README file for details, or visit http://0install.net.
8 from zeroinstall
import _
10 from logging
import info
, warn
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'
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
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
49 self
._stores
= zerostore
.Stores()
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
63 from zeroinstall
.injector
import fetch
64 self
._fetcher
= fetch
.Fetcher(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
76 from zeroinstall
.injector
import trust
77 self
._trust
_db
= trust
.trust_db
82 from zeroinstall
.injector
import handler
84 self
._handler
= handler
.ConsoleHandler()
86 self
._handler
= handler
.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(file(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')
115 info("Loading configuration from %s", 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