| author | Tero Marttila <terom@paivola.fi> |
| Sun, 13 Jan 2013 03:30:11 +0200 | |
| changeset 127 | f143171884f9 |
| parent 121 | 4f16bf6365f1 |
| child 128 | 42d4bd708373 |
| permissions | -rw-r--r-- |
|
80
231d3de7081a
pvl.verkko-syslog: renamed pvl.irk
Tero Marttila <terom@paivola.fi>
parents:
79
diff
changeset
|
1 |
""" |
|
231d3de7081a
pvl.verkko-syslog: renamed pvl.irk
Tero Marttila <terom@paivola.fi>
parents:
79
diff
changeset
|
2 |
Irker client. |
|
231d3de7081a
pvl.verkko-syslog: renamed pvl.irk
Tero Marttila <terom@paivola.fi>
parents:
79
diff
changeset
|
3 |
""" |
|
231d3de7081a
pvl.verkko-syslog: renamed pvl.irk
Tero Marttila <terom@paivola.fi>
parents:
79
diff
changeset
|
4 |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
5 |
import pvl.syslog.file # for stdin |
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
6 |
import pvl.socket # for tcp |
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
7 |
|
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
import optparse, sys |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
|
|
80
231d3de7081a
pvl.verkko-syslog: renamed pvl.irk
Tero Marttila <terom@paivola.fi>
parents:
79
diff
changeset
|
10 |
import logging; log = logging.getLogger('pvl.irk')
|
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
|
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
12 |
import json |
|
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
13 |
|
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
def parser (parser, connect='tcp://localhost/', target=None) : |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
""" |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
Optparse option group. |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
""" |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
|
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
irker = optparse.OptionGroup(parser, 'Irker output') |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
|
|
72
7bb07131c2b5
pvl.irker: drop --irker-target arg
Tero Marttila <terom@paivola.fi>
parents:
71
diff
changeset
|
21 |
irker.add_option('--irker', metavar='URL', default=connect,
|
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
help="Irker daemon URL") |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
|
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
24 |
irker.add_option('--irker-notice', action='store_true',
|
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
25 |
help="Use irker NOTICE") |
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
26 |
|
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
return irker |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
|
|
72
7bb07131c2b5
pvl.irker: drop --irker-target arg
Tero Marttila <terom@paivola.fi>
parents:
71
diff
changeset
|
29 |
def apply (options) : |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
""" |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
Return Irker (XXX: target) from options. |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
""" |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
|
| 79 | 34 |
# None -> stdout |
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
35 |
return Irker(options.irker, options.irker_notice) |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
|
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
class Irk (object) : |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
""" |
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
39 |
Irker JSON connection speaks JSON over a stream. |
| 79 | 40 |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
41 |
TODO: timeouts? |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
""" |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
|
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
PORT = 6659 |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
|
| 79 | 46 |
@classmethod |
47 |
def connect (cls, url) : |
|
48 |
""" |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
49 |
Connect to given URL string, or None -> stdout |
| 79 | 50 |
""" |
51 |
||
52 |
if not url : |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
53 |
# no read |
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
54 |
return cls(pvl.syslog.file.File(sys.stdout), recv=False) |
| 79 | 55 |
|
56 |
else : |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
57 |
sock = pvl.socket.connect(url, port=cls.PORT) |
| 79 | 58 |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
59 |
# just to make things a bit more exciting... and we really don't want to be blocking on our output.. |
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
60 |
sock.setblocking(False) |
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
61 |
|
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
62 |
return cls( |
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
63 |
pvl.socket.WriteStream(sock, buffer=None), |
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
64 |
pvl.socket.ReadStream(sock) |
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
65 |
) |
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
66 |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
67 |
def __init__ (self, send, recv=None) : |
| 79 | 68 |
""" |
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
69 |
Use given file-like object (write, flush, fileno) for output. |
| 79 | 70 |
""" |
71 |
||
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
72 |
self.send = send |
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
73 |
self.recv = recv |
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
74 |
|
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
75 |
log.debug("%s <-> %s", send, recv)
|
| 79 | 76 |
|
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
77 |
def fileno (self) : |
|
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
78 |
""" |
|
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
79 |
Return fd. Useful for detecting error conditions (connection lost). |
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
80 |
|
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
81 |
Only valid if self.recv is True. |
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
82 |
""" |
|
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
83 |
|
|
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
84 |
return self.recv.fileno() |
|
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
85 |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
86 |
def __call__ (self, **opts) : |
| 79 | 87 |
""" |
88 |
Raises IOError on write errors. |
|
89 |
""" |
|
90 |
||
91 |
log.debug("%s", opts)
|
|
92 |
||
93 |
# write line + flush |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
94 |
self.send(json.dumps(opts)) |
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
95 |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
96 |
# XXX: self.send.flush() |
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
97 |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
98 |
def __iter__ (self) : |
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
99 |
""" |
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
100 |
Yield JSON inputs from source. |
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
101 |
""" |
|
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
102 |
|
|
121
4f16bf6365f1
pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents:
116
diff
changeset
|
103 |
if not self.recv : |
|
4f16bf6365f1
pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents:
116
diff
changeset
|
104 |
# never going to be anything |
|
4f16bf6365f1
pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents:
116
diff
changeset
|
105 |
return |
|
4f16bf6365f1
pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents:
116
diff
changeset
|
106 |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
107 |
for line in self.recv : |
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
108 |
# XXX: error handling? |
|
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
109 |
yield json.loads(line) |
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
110 |
|
| 79 | 111 |
class IrkerTarget (object) : |
112 |
""" |
|
113 |
A channel on an Irk connection. |
|
114 |
""" |
|
115 |
||
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
116 |
def __init__ (self, irker, target, notice=False) : |
| 79 | 117 |
self.irker = irker |
118 |
self.target = target |
|
119 |
||
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
120 |
self._notice = notice |
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
121 |
|
| 79 | 122 |
def join (self) : |
123 |
log.info("%s", self)
|
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
124 |
self.irker(to=str(self), privmsg='') |
| 79 | 125 |
|
126 |
def privmsg (self, *args) : |
|
127 |
for arg in args : |
|
128 |
log.info("%s: %s", self, arg)
|
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
129 |
self.irker(to=str(self), privmsg=arg) |
| 79 | 130 |
|
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
131 |
def notice (self, *args) : |
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
132 |
for arg in args : |
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
133 |
log.info("%s: %s", self, arg)
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
134 |
self.irker(to=str(self), notice=arg) |
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
135 |
|
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
136 |
def __call__ (self, *args) : |
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
137 |
# default msg policy |
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
138 |
if self._notice : |
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
139 |
return self.notice(*args) |
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
140 |
else : |
|
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
141 |
return self.privmsg(*args) |
| 79 | 142 |
|
143 |
def __str__ (self) : |
|
144 |
return self.target |
|
145 |
||
146 |
class Irker (object) : |
|
147 |
""" |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
148 |
Reconnecting Irk. |
| 79 | 149 |
""" |
150 |
||
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
151 |
def __init__ (self, url=None, notice=False) : |
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
152 |
self.url = url |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
153 |
self.targets = {}
|
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
154 |
self.notice = notice |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
155 |
|
| 79 | 156 |
self.connect() |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
157 |
|
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
158 |
def connect (self) : |
| 79 | 159 |
""" |
160 |
Connect, and fix up our targets. |
|
161 |
""" |
|
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
162 |
|
| 79 | 163 |
self.irk = Irk.connect(self.url) |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
164 |
|
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
165 |
# rejoin |
| 79 | 166 |
for target in self.targets.itervalues() : |
167 |
target.join() |
|
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
168 |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
169 |
def __call__ (self, **opts) : |
| 79 | 170 |
""" |
171 |
Send on current irker connection. |
|
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
172 |
|
| 79 | 173 |
TODO: handle errors and reconnect? |
174 |
""" |
|
175 |
||
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
176 |
self.irk(**opts) |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
177 |
|
|
116
89b7385d19ba
pvl.irk: split off url/socket stuff into pvl.socket, clarify Irk __call__/__iter__ iterface
Tero Marttila <terom@paivola.fi>
parents:
111
diff
changeset
|
178 |
def __getitem__ (self, target) : |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
179 |
""" |
| 79 | 180 |
Bind to given target URL, returning an IrkerTarget for sending messages. |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
181 |
""" |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
182 |
|
| 79 | 183 |
if target not in self.targets : |
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
184 |
self.targets[target] = IrkerTarget(self, target, notice=self.notice) |
| 79 | 185 |
self.targets[target].join() |
186 |
||
187 |
return self.targets[target] |