bin/pvl.irker
author Tero Marttila <terom@paivola.fi>
Fri, 11 Jan 2013 22:41:26 +0200
changeset 87 70edcd13a447
parent 81 448ed86d0510
child 92 715ca17d1260
permissions -rwxr-xr-x
pvl.syslog.rule: fix default rule and empty text format
81
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#!/usr/bin/python
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
from twisted.internet import reactor, endpoints, defer
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
from twisted.python import usage, log
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
import urlparse
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
import pvl.irker.irk
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
import pvl.irker.irc
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
class Options (usage.Options) :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
    optParameters = [
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
            [ 'irc-nickname', 'n',  pvl.irker.irc.IRCFactory.NICKNAME, "Default IRC nickname" ],
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
    ]
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
    def __init__ (self) :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
        usage.Options.__init__(self)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
        self.listen = []
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
        self.connect = []
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
        self.target = []
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
        self.privmsg = []
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
    def opt_listen_tcp (self, listen) :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
        """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
            Twisted endpoint.
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
        """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
        self.listen.append((endpoints.TCP4ServerEndpoint, (int(listen), )))
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
    def opt_connect (self, connect) :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
        """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
            Connect to given target.
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
        """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
        self.connect.append(urlparse.urlparse(connect))
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
    def opt_target (self, target) :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
        """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
            Join given target.
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
        """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
        self.target.append(urlparse.urlparse(target))
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
    def opt_privmsg (self, privmsg) :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
        """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
            Send message to targets
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
        """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
        self.privmsg.append(privmsg)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
@defer.inlineCallbacks
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
def connect (irc, connect) :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
        Connect to given urls.
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
    """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
            
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
    try :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
        clients = yield defer.gatherResults([irc.client(url) for url in connect])
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
    except Exception as ex :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
        log.err(ex)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
        return
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
    for client in clients :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
        log.msg('--connect', client)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
@defer.inlineCallbacks
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
def target (irc, target, privmsg) :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
    """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
        Connect to given urls.
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
    """
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
            
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
    try :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
        targets = yield defer.gatherResults([irc.target(url) for url in target])
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
    except Exception as ex :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
        log.err(ex)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
        return
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
    for target in targets :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
        log.msg('--target', target)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
        target.privmsg(*privmsg)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
def main (args) :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
    options = Options()
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
    options.parseOptions(args)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
    # logging
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
    log.startLogging(sys.stderr, setStdout=False)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
    # connect
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
    irc = pvl.irker.irc.IRCFactory()
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
    
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
    connect(irc, options.connect)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
    target(irc, options.target, options.privmsg)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
    # listen
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
    irk = pvl.irker.irk.IrkFactory(irc)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
    for endpoint, args in options.listen :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
        endpoint = endpoint(reactor, *args)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   105
        log.msg("listen:", endpoint)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
        endpoint.listen(irk)
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
    # go
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   111
    reactor.run()
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
    return 0
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
if __name__ == '__main__' :
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
    import sys
448ed86d0510 pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   117
    sys.exit(main(sys.argv[1:]))