3 from policy
import policy
6 def do_env_binding(binding
, iface
):
8 extra
= os
.path
.join(impl
.path
, binding
.insert
)
9 if binding
.name
in os
.environ
:
10 os
.environ
[binding
.name
] = extra
+ ':' + os
.environ
[binding
.name
]
12 os
.environ
[binding
.name
] = extra
14 def execute(iface
, prog
, prog_args
):
15 def setup_bindings(i
):
17 for dep
in impl
.dependencies
.values():
18 dep_iface
= dep
.get_interface()
19 for b
in dep
.bindings
:
20 if isinstance(b
, EnvironmentBinding
):
21 do_env_binding(b
, dep_iface
)
22 setup_bindings(dep_iface
)
25 prog_path
= os
.path
.join(policy
.implementation
[iface
].path
, prog
)
26 if not os
.path
.exists(prog_path
):
27 print "'%s' does not exist." % prog_path
28 print "(implementation '%s' + program '%s')" % (policy
.implementation
[iface
].path
, prog
)
30 os
.execl(prog_path
, prog_path
, *prog_args
)
32 def get_impl(interface
):
34 return policy
.implementation
[interface
]
36 if not interface
.name
:
37 raise SafeException("We don't have enough information to "
38 "run this program yet. "
39 "Need to download:\n%s" % interface
.uri
)
40 if interface
.implementations
:
42 if policy
.network_use
== network_offline
:
43 offline
= "\nThis may be because 'Network Use' is set to Off-line."
44 raise SafeException("No usable implementation found for '%s'.%s" %
45 (interface
.name
, offline
))