[Twisted-Python] distrib.UserDirectory improvements

Paul Boehm paul at soniq.net
Thu Jun 12 17:40:31 EDT 2003

moshez suggested me to extend distrib.UserDirectory for my needs.
attached is what i am using right now. 

i hope to integrate this into distrib.py for cvs, later.
please give me feedback!

-------------- next part --------------
from twisted.web import widgets, static
from twisted.web.distrib import *
import os

if (os.sys.platform != 'win32') and (os.name != 'java'):
        import pwd

# Lines below this, can be merged into distrib.py

def createUserPath(homedir, username, dirname, subdir=''):
    if dirname[0:1] == '~':
        userpath = os.path.join(homedir, dirname[1:])
        userpath = os.path.join(dirname, username, subdir)

    return userpath

class UserDirectory(widgets.Gadget, widgets.StreamWidget):
    def __init__(self, userDirName='~/public_html', 
                 userSocketName='~/.twistd-web-pb', pbextension='.twistd'):

        self.userDirName = userDirName
        self.userSocketName = userSocketName
        self.pbextension = pbextension

    def stream(self, write, request):
        for user in pwd.getpwall():
            pw_name, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell \
                     = user
            realname = string.split(pw_gecos,',')[0]
            if not realname:
                realname = pw_name
            fmtStr = '<LI><A HREF="%s/">%s (%s)</a>\n'
            userdirpath = createUserPath(pw_dir, pw_name, self.userDirName)
            if os.path.exists(userdirpath):
                write(fmtStr% (pw_name,realname,'file'))
            twistdsock = createUserPath(pw_dir, pw_name, 
                                        self.userSocketName, "twistd-web-pb")
            if os.path.exists(twistdsock):
                linknm = '%s%s' % (pw_name, self.pbextension)
                write(fmtStr % (linknm, realname, self.pbextension))

    def getWidget(self, chnam, request):
        print "x"
        if chnam[-len(self.pbextension):] == self.pbextension:
            username = chnam[:-len(self.pbextension)]
            sub = 1
            username = chnam
            sub = 0

            pw_name, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell \
                     = pwd.getpwnam(username)
        except KeyError:
            return error.NoResource()

        if sub:
            userpath = createUserPath(pw_dir, username, self.userSocketName,
            rs = ResourceSubscription('unix', userpath)
            self.putChild(chnam, rs)
            return rs
            userpath = createUserPath(pw_dir, username, self.userDirName)
            return static.File(userpath)

More information about the Twisted-Python mailing list