select()
return result[0]
-def mustconnect(host, port = -1):
+def mustconnect(host, revision = latest):
"""A convenience function for connect.
This function will connect to the given host, perform a select
any of these steps fail, an exception is raised. If successful,
the file descriptor for the server connection is returned.
"""
- fd = connect(host, port)
+ fd = connect(host)
while True:
resp = getresp()
if resp is not None and resp.getcmd() == u".connect":
break
select()
- if resp.getcode() != 200:
+ if resp.getcode() != 201:
raise RuntimeError, resp.intresp()[0][0]
+ if not checkproto(resp, revision):
+ raise RuntimeError, resp
return fd
-def cnl(host = None, port = -1, useauthless = True, **kw):
+def cnl(host = None, useauthless = True, revision = latest, **kw):
"""A convenience function for connect and loginasync.
This function will connect to the given server, or the server in
- the environment variable $DCSERVER if none is given, and
- authenticate to the server. If any of the steps fail, an exception
- is raised.
+ the environment variable $DCSERVER if none is given, or, if that
+ fails, localhost, and authenticate to the server. If any of the
+ steps fail, an exception is raised.
"""
if host is None:
host = os.getenv("DCSERVER")
if host is None:
- raise ValueError, "No DC host to connect to"
- fd = mustconnect(host, port)
+ host = "localhost"
+ fd = mustconnect(host, revision)
err, reason = login(useauthless, **kw)
if err != "success":
raise RuntimeError, (err, reason)
if resp.getcode() != code:
raise ValueError, resp.getcode()
return resp
+
+def ecmds(*args):
+ """Another convenience function for ecmd.
+
+ Like ecmda, but will fail on all 5xx codes, and succeed on all
+ others.
+ """
+ resp = ecmd(*args)
+ if resp.getcode() >= 500 and resp.getcode() < 600:
+ raise ValueError, tuple(resp.extract()[0])
+ return resp
+
+def getresps():
+ """A generator function which will iterate over all responses from
+ getresp.
+ """
+ while True:
+ resp = getresp()
+ if resp is None:
+ break
+ else:
+ yield resp