pvl.irker: implement --irc-username option; improve handling of register errors
--- a/pvl/irker/irc.py Sat Jan 12 23:02:38 2013 +0200
+++ b/pvl/irker/irc.py Sat Jan 12 23:22:23 2013 +0200
@@ -31,15 +31,6 @@
return name.lower()
-def myusername ():
- """
- Return username current process is running under.
- """
-
- import getpass
-
- return getpass.getuser()
-
class IRCError (Exception) :
"""
A handled protocol error.
@@ -246,8 +237,13 @@
## Quit
def irc_ERROR (self, prefix, params) :
msg, = params
+ error = IRCError(None, msg)
- log.err(IRCError(None, msg))
+ log.err(error)
+
+ if self._registering :
+ self._registering.errback(error)
+ self._registering = None
def connectionLost (self, reason) :
irc.IRCClient.connectionLost(self, reason)
@@ -314,13 +310,7 @@
def __init__ (self, nickname=NICKNAME, username=None) :
# default nickname
self.nickname = nickname
-
- if username is True :
- # system
- self.username = myusername()
-
- else :
- self.username = username
+ self.username = username
# (scheme, host, port, nick) -> IRCClient
self.clients = {}
@@ -402,11 +392,17 @@
yield self.clients[lookup]
# connected client
- client = self.clients[lookup]
+ client = self.clients.get(lookup)
- log.msg('IRCFactory.client', url, ":", client)
+ if client :
+ log.msg('IRCFactory.client', url, ":", client)
- defer.returnValue(client)
+ defer.returnValue(client)
+ else :
+ log.msg('IRCFactory.client', url, ": client connect failed")
+
+ # XXX: get failure from first yield's errback... except inlineCallbacks drops it and goes to callback with None <_<
+ raise Exception("Client connect failed")
@defer.inlineCallbacks
def target (self, url) :
--- a/pvl/irker/irker.py Sat Jan 12 23:02:38 2013 +0200
+++ b/pvl/irker/irker.py Sat Jan 12 23:22:23 2013 +0200
@@ -13,9 +13,20 @@
import pvl.irker.irk
import pvl.irker.irc
+def myusername ():
+ """
+ Return username current process is running under.
+ """
+
+ import os, pwd
+
+ return pwd.getpwuid(os.getuid()).pw_name
+
+
class Options (usage.Options) :
optParameters = [
- [ 'irc-nickname', 'n', pvl.irker.irc.IRCFactory.NICKNAME, "Default IRC nickname" ],
+ [ 'irc-nickname', 'n', pvl.irker.irc.IRCFactory.NICKNAME, "Default IRC nickname" ],
+ [ 'irc-username', 'u', myusername(), "IRC username (default: system user)" ],
]
def __init__ (self) :
@@ -103,7 +114,7 @@
s = service.MultiService()
# IRC
- irc = pvl.irker.irc.IRCFactory(options['irc-nickname'], username=True) # use system username
+ irc = pvl.irker.irc.IRCFactory(options['irc-nickname'], options['irc-username'])
connect(irc, options.connect)
target(irc, options.target, options.privmsg)
@@ -129,7 +140,7 @@
log.startLogging(sys.stderr, setStdout=False)
# connect
- irc = pvl.irker.irc.IRCFactory(options['irc-nickname'], username=True) # use system username
+ irc = pvl.irker.irc.IRCFactory(options['irc-nickname'], options['irc-username'])
connect(irc, options.connect)
target(irc, options.target, options.privmsg)