server/repository.py
changeset 2665 0c6281487f90
parent 2650 18aec79ec3a3
child 2667 c8aa82538d8e
equal deleted inserted replaced
2664:1578e1a57828 2665:0c6281487f90
  1162 
  1162 
  1163     # pyro handling ###########################################################
  1163     # pyro handling ###########################################################
  1164 
  1164 
  1165     def pyro_register(self, host=''):
  1165     def pyro_register(self, host=''):
  1166         """register the repository as a pyro object"""
  1166         """register the repository as a pyro object"""
  1167         from Pyro import core
  1167         from logilab.common.pyro_ext import register_object
  1168         port = self.config['pyro-port']
  1168         appid = self.config['pyro-id'] or self.config.appid
  1169         nshost, nsgroup = self.config['pyro-ns-host'], self.config['pyro-ns-group']
  1169         daemon = register_object(self, appid, self.config['pyro-ns-group'],
  1170         nsgroup = ':' + nsgroup
  1170                                  self.config['pyro-host'],
  1171         core.initServer(banner=0)
  1171                                  self.config['pyro-ns-host'])
  1172         daemon = core.Daemon(host=host, port=port)
       
  1173         daemon.useNameServer(self.pyro_nameserver(nshost, nsgroup))
       
  1174         # use Delegation approach
       
  1175         impl = core.ObjBase()
       
  1176         impl.delegateTo(self)
       
  1177         nsid = self.config['pyro-id'] or self.config.appid
       
  1178         daemon.connect(impl, '%s.%s' % (nsgroup, nsid))
       
  1179         msg = 'repository registered as a pyro object using group %s and id %s'
  1172         msg = 'repository registered as a pyro object using group %s and id %s'
  1180         self.info(msg, nsgroup, nsid)
  1173         self.info(msg, self.config['pyro-ns-group'], appid)
  1181         self.pyro_registered = True
  1174         self.pyro_registered = True
  1182         return daemon
  1175         return daemon
  1183 
       
  1184     def pyro_nameserver(self, host=None, group=None):
       
  1185         """locate and bind the the name server to the daemon"""
       
  1186         from Pyro import naming, errors
       
  1187         # locate the name server
       
  1188         nameserver = naming.NameServerLocator().getNS(host)
       
  1189         if group is not None:
       
  1190             # make sure our namespace group exists
       
  1191             try:
       
  1192                 nameserver.createGroup(group)
       
  1193             except errors.NamingError:
       
  1194                 pass
       
  1195         return nameserver
       
  1196 
  1176 
  1197     # multi-sources planner helpers ###########################################
  1177     # multi-sources planner helpers ###########################################
  1198 
  1178 
  1199     @cached
  1179     @cached
  1200     def rel_type_sources(self, rtype):
  1180     def rel_type_sources(self, rtype):
  1215                    and source.support_relation(rtype))
  1195                    and source.support_relation(rtype))
  1216 
  1196 
  1217 
  1197 
  1218 def pyro_unregister(config):
  1198 def pyro_unregister(config):
  1219     """unregister the repository from the pyro name server"""
  1199     """unregister the repository from the pyro name server"""
  1220     nshost, nsgroup = config['pyro-ns-host'], config['pyro-ns-group']
  1200     from logilab.common.pyro_ext import ns_unregister
  1221     appid = config['pyro-id'] or config.appid
  1201     appid = config['pyro-id'] or config.appid
  1222     from Pyro import core, naming, errors
  1202     ns_unregister(appid, config['pyro-ns-group'], config['pyro-ns-host'])
  1223     core.initClient(banner=False)
       
  1224     try:
       
  1225         nameserver = naming.NameServerLocator().getNS(nshost)
       
  1226     except errors.PyroError, ex:
       
  1227         # name server not responding
       
  1228         config.error('can\'t locate pyro name server: %s', ex)
       
  1229         return
       
  1230     try:
       
  1231         nameserver.unregister(':%s.%s' % (nsgroup, appid))
       
  1232         config.info('%s unregistered from pyro name server', appid)
       
  1233     except errors.NamingError:
       
  1234         config.warning('%s already unregistered from pyro name server', appid)
       
  1235 
  1203 
  1236 
  1204 
  1237 from logging import getLogger
  1205 from logging import getLogger
  1238 from cubicweb import set_log_methods
  1206 from cubicweb import set_log_methods
  1239 set_log_methods(Repository, getLogger('cubicweb.repository'))
  1207 set_log_methods(Repository, getLogger('cubicweb.repository'))