--- a/cwctl.py Tue Apr 10 17:07:03 2012 +0200
+++ b/cwctl.py Tue Apr 10 17:09:04 2012 +0200
@@ -1,4 +1,4 @@
-# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# 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.
@@ -38,6 +38,8 @@
from os.path import exists, join, isfile, isdir, dirname, abspath
+from urlparse import urlparse
+
from logilab.common.clcommands import CommandLine
from logilab.common.shellutils import ASK
@@ -867,31 +869,45 @@
'group': 'local'
}),
- ('pyro',
- {'short': 'P', 'action' : 'store_true',
- 'help': 'connect to a running instance through Pyro.',
- 'group': 'remote',
- }),
- ('pyro-ns-host',
- {'short': 'H', 'type' : 'string', 'metavar': '<host[:port]>',
- 'help': 'Pyro name server host. If not set, will be detected by '
- 'using a broadcast query.',
+ ('repo-uri',
+ {'short': 'H', 'type' : 'string', 'metavar': '<protocol>://<[host][:port]>',
+ 'help': 'URI of the CubicWeb repository to connect to. URI can be \
+pyro://[host:port] the Pyro name server host; if the pyro nameserver is not set, \
+it will be detected by using a broadcast query, a ZMQ URL or \
+inmemory:// (default) use an in-memory repository.',
'group': 'remote'
}),
)
def run(self, args):
appid = args.pop(0)
- if self.config.pyro:
+ if self.config.repo_uri:
+ uri = urlparse(self.config.repo_uri)
+ if uri.scheme == 'pyro':
+ cnxtype = uri.scheme
+ hostport = uri.netloc
+ elif uri.scheme == 'inmemory':
+ cnxtype = ''
+ hostport = ''
+ else:
+ cnxtype = 'zmq'
+ hostport = self.config.repo_uri
+ else:
+ cnxtype = ''
+
+ if cnxtype:
from cubicweb import AuthenticationError
- from cubicweb.dbapi import connect
+ from cubicweb.dbapi import connect, ConnectionProperties
from cubicweb.server.utils import manager_userpasswd
from cubicweb.server.migractions import ServerMigrationHelper
+ cnxprops = ConnectionProperties(cnxtype=cnxtype)
+
while True:
try:
login, pwd = manager_userpasswd(msg=None)
cnx = connect(appid, login=login, password=pwd,
- host=self.config.pyro_ns_host, mulcnx=False)
+ host=hostport, mulcnx=False,
+ cnxprops=cnxprops)
except AuthenticationError, ex:
print ex
except (KeyboardInterrupt, EOFError):
@@ -927,7 +943,7 @@
else:
mih.interactive_shell()
finally:
- if not self.config.pyro:
+ if not cnxtype: # shutdown in-memory repo
mih.shutdown()
else:
cnx.close()