author | Tero Marttila <terom@paivola.fi> |
Sun, 13 Jan 2013 03:30:49 +0200 | |
changeset 128 | 42d4bd708373 |
parent 121 | 4f16bf6365f1 |
child 130 | 4f8c465706be |
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 |
|
128
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
27 |
irker.add_option('--irker-part', action='store_true', |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
28 |
help="Use irker PART") |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
29 |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
return irker |
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
|
72
7bb07131c2b5
pvl.irker: drop --irker-target arg
Tero Marttila <terom@paivola.fi>
parents:
71
diff
changeset
|
32 |
def apply (options) : |
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
""" |
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
Return Irker (XXX: target) from options. |
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
""" |
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
|
79 | 37 |
# None -> stdout |
128
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
38 |
return Irker(options.irker, options) # options.irker_* |
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
class Irk (object) : |
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
""" |
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
|
42 |
Irker JSON connection speaks JSON over a stream. |
79 | 43 |
|
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
|
44 |
TODO: timeouts? |
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
""" |
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
PORT = 6659 |
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
|
79 | 49 |
@classmethod |
50 |
def connect (cls, url) : |
|
51 |
""" |
|
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
|
52 |
Connect to given URL string, or None -> stdout |
79 | 53 |
""" |
54 |
||
55 |
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
|
56 |
# 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
|
57 |
return cls(pvl.syslog.file.File(sys.stdout), recv=False) |
79 | 58 |
|
59 |
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
|
60 |
sock = pvl.socket.connect(url, port=cls.PORT) |
79 | 61 |
|
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
|
62 |
# 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
|
63 |
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
|
64 |
|
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 |
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
|
66 |
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
|
67 |
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
|
68 |
) |
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
69 |
|
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
|
70 |
def __init__ (self, send, recv=None) : |
79 | 71 |
""" |
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
72 |
Use given file-like object (write, flush, fileno) for output. |
79 | 73 |
""" |
74 |
||
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
|
75 |
self.send = send |
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
76 |
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
|
77 |
|
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
|
78 |
log.debug("%s <-> %s", send, recv) |
79 | 79 |
|
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
80 |
def fileno (self) : |
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
81 |
""" |
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
82 |
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
|
83 |
|
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
|
84 |
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
|
85 |
""" |
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
86 |
|
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
87 |
return self.recv.fileno() |
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
88 |
|
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
|
89 |
def __call__ (self, **opts) : |
79 | 90 |
""" |
91 |
Raises IOError on write errors. |
|
92 |
""" |
|
93 |
||
94 |
log.debug("%s", opts) |
|
95 |
||
96 |
# 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
|
97 |
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
|
98 |
|
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
|
99 |
# XXX: self.send.flush() |
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
100 |
|
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
|
101 |
def __iter__ (self) : |
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
102 |
""" |
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
|
103 |
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
|
104 |
""" |
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
105 |
|
121
4f16bf6365f1
pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents:
116
diff
changeset
|
106 |
if not self.recv : |
4f16bf6365f1
pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents:
116
diff
changeset
|
107 |
# never going to be anything |
4f16bf6365f1
pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents:
116
diff
changeset
|
108 |
return |
4f16bf6365f1
pvl.irker-syslog: fix not-polling on irk
Tero Marttila <terom@paivola.fi>
parents:
116
diff
changeset
|
109 |
|
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
|
110 |
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
|
111 |
# 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
|
112 |
yield json.loads(line) |
111
4b96c153c113
pvl.irk: crude support for reading lines from Irk
Tero Marttila <terom@paivola.fi>
parents:
83
diff
changeset
|
113 |
|
79 | 114 |
class IrkerTarget (object) : |
115 |
""" |
|
116 |
A channel on an Irk connection. |
|
117 |
""" |
|
118 |
||
128
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
119 |
def __init__ (self, irker, target, notice=None, part=None) : |
79 | 120 |
self.irker = irker |
121 |
self.target = target |
|
122 |
||
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
123 |
self._notice = notice |
128
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
124 |
self._part = part |
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
125 |
|
79 | 126 |
def join (self) : |
127 |
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
|
128 |
self.irker(to=str(self), privmsg='') |
79 | 129 |
|
130 |
def privmsg (self, *args) : |
|
131 |
for arg in args : |
|
132 |
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
|
133 |
self.irker(to=str(self), privmsg=arg) |
79 | 134 |
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
135 |
def notice (self, *args) : |
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
136 |
for arg in args : |
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
137 |
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
|
138 |
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
|
139 |
|
128
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
140 |
def part (self, msg='') : |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
141 |
log.info("%s: %s", self, msg) |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
142 |
|
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
143 |
if self._part : |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
144 |
self.irker(to=str(self), part=msg) |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
145 |
else : |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
146 |
log.warn("%s: no --irker-part") |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
147 |
|
83
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
148 |
def __call__ (self, *args) : |
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
149 |
# default msg policy |
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
150 |
if self._notice : |
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
151 |
return self.notice(*args) |
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
152 |
else : |
1cb48f2ba1e9
pvl.irker/irk: implement support for NOTICE
Tero Marttila <terom@paivola.fi>
parents:
80
diff
changeset
|
153 |
return self.privmsg(*args) |
79 | 154 |
|
155 |
def __str__ (self) : |
|
156 |
return self.target |
|
157 |
||
158 |
class Irker (object) : |
|
159 |
""" |
|
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
|
160 |
Reconnecting Irk. |
79 | 161 |
""" |
162 |
||
128
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
163 |
def __init__ (self, url=None, options=None) : |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
164 |
""" |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
165 |
url - irker to connect to |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
166 |
options - irker_* configs |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
167 |
""" |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
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 |
self.url = url |
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
170 |
self.targets = {} |
128
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
171 |
self.options = options |
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
172 |
|
79 | 173 |
self.connect() |
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
174 |
|
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
175 |
def connect (self) : |
79 | 176 |
""" |
177 |
Connect, and fix up our targets. |
|
178 |
""" |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
179 |
|
79 | 180 |
self.irk = Irk.connect(self.url) |
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 |
# rejoin |
79 | 183 |
for target in self.targets.itervalues() : |
184 |
target.join() |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
185 |
|
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
|
186 |
def __call__ (self, **opts) : |
79 | 187 |
""" |
188 |
Send on current irker connection. |
|
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
189 |
|
79 | 190 |
TODO: handle errors and reconnect? |
191 |
""" |
|
192 |
||
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
|
193 |
self.irk(**opts) |
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
194 |
|
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
|
195 |
def __getitem__ (self, target) : |
48
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
196 |
""" |
79 | 197 |
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
|
198 |
""" |
40ccb8d3c96e
pvl.verkko-syslog: syslog -> irker gateway
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
199 |
|
79 | 200 |
if target not in self.targets : |
128
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
201 |
self.targets[target] = IrkerTarget(self, target, |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
202 |
notice = self.options and self.options.irker_notice, |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
203 |
part = self.options and self.options.irker_part, |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
204 |
) |
79 | 205 |
self.targets[target].join() |
206 |
||
207 |
return self.targets[target] |
|
128
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
208 |
|
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
209 |
def __delitem__ (self, target) : |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
210 |
""" |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
211 |
Unbind given target URL. |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
212 |
""" |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
213 |
|
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
214 |
target = self.targets.pop(target) |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
215 |
target.part() |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
216 |
|
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
217 |
def __iter__ (self) : |
42d4bd708373
pvl.irk: implement optional --irker-part for targets
Tero Marttila <terom@paivola.fi>
parents:
121
diff
changeset
|
218 |
return iter(self.targets) |