2 Save per-interface configuration information.
5 # Copyright (C) 2006, Thomas Leonard
6 # See the README file for details, or visit http://0install.net.
9 from xml
.dom
import minidom
, XMLNS_NAMESPACE
15 from namespaces
import config_site
, config_prog
, XMLNS_IFACE
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)
25 def save_interface(interface
):
26 user_overrides
= basedir
.save_config_path(config_site
, config_prog
, 'user_overrides')
28 impl
= minidom
.getDOMImplementation()
29 doc
= impl
.createDocument(XMLNS_IFACE
, 'interface-preferences', None)
31 root
= doc
.documentElement
32 root
.setAttributeNS(XMLNS_NAMESPACE
, 'xmlns', XMLNS_IFACE
)
33 root
.setAttribute('uri', interface
.uri
)
35 if interface
.stability_policy
:
36 root
.setAttribute('stability-policy', str(interface
.stability_policy
))
38 if interface
.last_checked
:
39 root
.setAttribute('last-checked', str(interface
.last_checked
))
41 impls
= interface
.implementations
.values()
46 for feed
in interface
.extra_feeds
:
47 if feed
.user_override
:
48 elem
= doc
.createElementNS(XMLNS_IFACE
, 'feed')
49 root
.appendChild(elem
)
50 elem
.setAttribute('src', feed
.uri
)
52 elem
.setAttribute('arch', feed
.arch
)
55 tmp_fd
, tmp_name
= tempfile
.mkstemp(dir = user_overrides
)
57 doc
.writexml(os
.fdopen(tmp_fd
, 'w'), addindent
= " ", newl
= '\n')
58 path
= os
.path
.join(user_overrides
, escape(interface
.uri
))
59 os
.rename(tmp_name
, path
)