1 '''Reduces the Pyro boilerplate code for several common functions.'''
2
3 __all__ = ['DAEMON', 'NAME_SERVER', 'create_proxy', 'get_proxy']
4
5 import sys
6 from Pyro.errors import PyroError
7 from Pyro.protocol import getHostname
8 from Pyro.naming import NameServerLocator, NameServerProxy
9 from Pyro.core import Daemon, PyroURI, ObjBase, DynamicProxy, DynamicProxyWithAttrs
10
11 DAEMON = None
12 NAME_SERVER = None
13
14
27
32
33 -def publish_object(obj, name=None, host=None, port=None,
34 nameserver_host=None, nameserver_port=None):
35 init_daemon(host,port)
36 if name is not None:
37 DAEMON.useNameServer(locate_nameserver(nameserver_host, nameserver_port))
38 parts = name.split('.')[:-1]
39 if parts:
40 group = parts.pop(0)
41 while True:
42
43 try: NAME_SERVER.createGroup(group)
44 except PyroError, ex: pass
45 if not parts:
46 break
47 group += '.%s' % parts.pop(0)
48
49 try: NAME_SERVER.resolve(name)
50 except PyroError, ex: pass
51 else: NAME_SERVER.unregister(name)
52 if not isinstance(obj, ObjBase):
53 temp = ObjBase()
54 temp.delegateTo(obj)
55 obj = temp; del temp
56
57 return DAEMON.connect(obj, name)
58
59 -def get_proxy(name, with_attrs=False, nameserver_host=None, nameserver_port=None):
60 name_server = locate_nameserver(nameserver_host,nameserver_port)
61 proxy_cls = with_attrs and DynamicProxyWithAttrs or DynamicProxy
62 return proxy_cls(name_server.resolve(name))
63
65 init_daemon(host,port)
66 print >> sys.stderr, 'Waiting for connections at %s:%s ..' % (DAEMON.hostname,
67 DAEMON.port)
68 try: DAEMON.requestLoop()
69 finally: DAEMON.shutdown(disconnect=disconnect)
70