2 Save per-interface configuration information.
5 # Copyright (C) 2009, Thomas Leonard
6 # See the README file for details, or visit http://0install.net.
9 from xml
.dom
import minidom
, XMLNS_NAMESPACE
11 from zeroinstall
.support
import basedir
13 from zeroinstall
.injector
.model
import escape
14 from zeroinstall
.injector
.namespaces
import config_site
, config_prog
, XMLNS_IFACE
15 from zeroinstall
.injector
.iface_cache
import iface_cache
17 def _add_impl(parent
, impl
):
18 if impl
.user_stability
:
19 doc
= parent
.ownerDocument
20 node
= doc
.createElementNS(XMLNS_IFACE
, 'implementation')
21 parent
.appendChild(node
)
22 node
.setAttribute('user-stability', str(impl
.user_stability
))
23 node
.setAttribute('id', impl
.id)
26 # This is wrong. Feed and interface settings should be saved in separate files.
27 save_interface(iface_cache
.get_interface(feed
.url
))
29 def save_interface(interface
):
30 user_overrides
= basedir
.save_config_path(config_site
, config_prog
, 'user_overrides')
32 impl
= minidom
.getDOMImplementation()
33 doc
= impl
.createDocument(XMLNS_IFACE
, 'interface-preferences', None)
35 root
= doc
.documentElement
36 root
.setAttributeNS(XMLNS_NAMESPACE
, 'xmlns', XMLNS_IFACE
)
37 root
.setAttribute('uri', interface
.uri
)
39 if interface
.stability_policy
:
40 root
.setAttribute('stability-policy', str(interface
.stability_policy
))
42 if interface
.last_checked
:
43 root
.setAttribute('last-checked', str(interface
.last_checked
))
45 impls
= interface
.implementations
.values()
50 for feed
in interface
.extra_feeds
:
51 if feed
.user_override
:
52 elem
= doc
.createElementNS(XMLNS_IFACE
, 'feed')
53 root
.appendChild(elem
)
54 elem
.setAttribute('src', feed
.uri
)
56 elem
.setAttribute('arch', feed
.arch
)
59 tmp_fd
, tmp_name
= tempfile
.mkstemp(dir = user_overrides
)
61 tmp_file
= os
.fdopen(tmp_fd
, 'w')
62 doc
.writexml(tmp_file
, addindent
= " ", newl
= '\n')
64 path
= os
.path
.join(user_overrides
, escape(interface
.uri
))
65 os
.rename(tmp_name
, path
)