3 from model
import Interface
, SafeException
, EnvironmentBinding
5 def do_env_binding(binding
, path
):
6 extra
= os
.path
.join(path
, binding
.insert
)
7 if binding
.name
in os
.environ
:
8 os
.environ
[binding
.name
] = extra
+ ':' + os
.environ
[binding
.name
]
10 os
.environ
[binding
.name
] = extra
11 #print "%s=%s" % (binding.name, os.environ[binding.name])
13 def execute(policy
, prog_args
):
14 iface
= policy
.get_interface(policy
.root
)
16 raise SafeException("Interface '%s' cannot be executed directly; it is just a library "
17 "to be used by other programs (or missing 'main' attribute on the "
18 "root <interface> element)." % iface
.name
)
20 def setup_bindings(i
):
21 impl
= policy
.get_implementation(i
)
22 for dep
in impl
.dependencies
.values():
23 dep_iface
= policy
.get_interface(dep
.interface
)
24 for b
in dep
.bindings
:
25 if isinstance(b
, EnvironmentBinding
):
26 dep_impl
= policy
.get_implementation(dep_iface
)
27 do_env_binding(b
, policy
.get_implementation_path(dep_impl
))
28 setup_bindings(dep_iface
)
31 root_impl
= policy
.get_implementation(iface
)
32 prog_path
= os
.path
.join(policy
.get_implementation_path(root_impl
), iface
.main
)
33 if not os
.path
.exists(prog_path
):
34 print >>sys
.stderr
, "'%s' does not exist." % prog_path
35 print >>sys
.stderr
, "(implementation '%s' + program '%s')" % (policy
.implementation
[iface
].id, iface
.main
)
37 os
.execl(prog_path
, prog_path
, *prog_args
)