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')) |