[cw-ctl] silence msgcat and msgfmt (closes #2527594)
# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr## This file is part of CubicWeb.## CubicWeb is free software: you can redistribute it and/or modify it under the# terms of the GNU Lesser General Public License as published by the Free# Software Foundation, either version 2.1 of the License, or (at your option)# any later version.## CubicWeb is distributed in the hope that it will be useful, but WITHOUT# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more# details.## You should have received a copy of the GNU Lesser General Public License along# with CubicWeb. If not, see <http://www.gnu.org/licenses/>."""Source to query another RQL repository using pyro"""__docformat__="restructuredtext en"_=unicodeimportthreadingfromPyro.errorsimportPyroError,ConnectionClosedErrorfromlogilab.common.configurationimportREQUIREDfromcubicwebimportdbapifromcubicwebimportConnectionErrorfromcubicweb.server.sourcesimportConnectionWrapperfromcubicweb.server.sources.remoterqlimportRemoteSourceclassPyroRQLSource(RemoteSource):"""External repository source, using Pyro connection"""CNX_TYPE='pyro'options=RemoteSource.options+(# XXX pyro-ns host/port('pyro-ns-id',{'type':'string','default':REQUIRED,'help':'identifier of the repository in the pyro name server','group':'remote-source','level':0,}),('pyro-ns-host',{'type':'string','default':None,'help':'Pyro name server\'s host. If not set, default to the value \from all_in_one.conf. It may contains port information using <host>:<port> notation.','group':'remote-source','level':1,}),('pyro-ns-group',{'type':'string','default':None,'help':'Pyro name server\'s group where the repository will be \registered. If not set, default to the value from all_in_one.conf.','group':'remote-source','level':2,}),)def_get_connection(self):"""open and return a connection to the source"""nshost=self.config.get('pyro-ns-host')orself.repo.config['pyro-ns-host']nsgroup=self.config.get('pyro-ns-group')orself.repo.config['pyro-ns-group']self.info('connecting to instance :%s.%s for user %s',nsgroup,self.config['pyro-ns-id'],self.config['cubicweb-user'])returndbapi.connect(database=self.config['pyro-ns-id'],login=self.config['cubicweb-user'],password=self.config['cubicweb-password'],host=nshost,group=nsgroup,setvreg=False)defget_connection(self):try:returnself._get_connection()except(ConnectionError,PyroError),ex:self.critical("can't get connection to source %s: %s",self.uri,ex)returnConnectionWrapper()defcheck_connection(self,cnx):"""check connection validity, return None if the connection is still valid else a new connection """# we have to transfer manually thread ownership. This can be done safely# since the connections set holding the connection is affected to one# session/thread and can't be called simultaneouslytry:cnx._repo._transferThread(threading.currentThread())exceptAttributeError:# inmemory connectionpasstry:returnsuper(PyroRQLSource,self).check_connection(cnx)exceptConnectionClosedError:# try to reconnectreturnself.get_connection()