Package papyros :: Module simplepyro
[hide private]
[frames] | no frames]

Source Code for Module papyros.simplepyro

 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   
15 -def locate_nameserver(host=None, port=None):
16 global NAME_SERVER 17 if NAME_SERVER is not None and host is None: 18 return NAME_SERVER 19 NAME_SERVER = None 20 if host is not None: 21 try: NAME_SERVER = NameServerProxy(PyroURI(host)) 22 except PyroError: pass 23 if NAME_SERVER is None: 24 NAME_SERVER = NameServerLocator().getNS(host=host, port=port) 25 ##print 'Naming Service found at', NAME_SERVER.URI 26 return NAME_SERVER
27
28 -def init_daemon(host=None, port=None):
29 global DAEMON 30 if DAEMON is None: 31 DAEMON = Daemon(host=host, port=port)
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 ##print 'Creating group', group 43 try: NAME_SERVER.createGroup(group) 44 except PyroError, ex: pass ##print ex 45 if not parts: 46 break 47 group += '.%s' % parts.pop(0) 48 # unregister previous object with this name (if any) 49 try: NAME_SERVER.resolve(name) 50 except PyroError, ex: pass ##print "!!", type(ex), ex 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 ##print 'creating', name 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
64 -def serve_forever(disconnect=False, host=None, port=None):
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