Return filedes from mustconnect and cnl.
[doldaconnect.git] / lib / python / dolcon / __init__.py
1 from dolmod import *
2 import os
3
4 def login(useauthless = True, **kw):
5     result = [None]
6     def mycb(*v):
7         result[0] = v
8     loginasync(mycb, useauthless, **kw)
9     while result[0] is None:
10         select()
11     return result[0]
12
13 def mustconnect(host, port = -1):
14     fd = connect(host, port)
15     while True:
16         resp = getresp()
17         if resp is not None and resp.getcmd() == u".connect":
18             break
19         select()
20     if resp.getcode() != 200:
21         raise RuntimeError, resp.intresp()[0][0]
22     return fd
23
24 def cnl(host = None, port = -1, useauthless = True, **kw):
25     if host is None:
26         host = os.getenv("DCSERVER")
27     if host is None:
28         raise ValueError, "No DC host to connect to"
29     fd = mustconnect(host, port)
30     err, reason = login(useauthless, **kw)
31     if err != "success":
32         raise RuntimeError, (err, reason)
33     return fd
34     
35 def ecmd(*args):
36     tag = qcmd(*args)
37     while True:
38         resp = getresp(tag)
39         if resp is not None:
40             break;
41         select()
42     return resp
43
44 def ecmda(code, *args):
45     resp = ecmd(*args)
46     if resp.getcode() != code:
47         raise ValueError, resp.getcode()
48     return resp