On 2 Ago, 18:18, Gary Herron <[EMAIL PROTECTED]> wrote: > Larry Bates wrote: > > Giampaolo Rodola' wrote: > >> Hi, > >> for an FTP server I wrote I'd need to group the FTP commands in one > >> table that defines the command itself, the syntax string, required > >> permission, whether it requires authorization, whether it takes > >> argument and whether there's a need to validate the path from the > >> argument. > >> The more obvious way I found to do that is something like this: > > >> class CommandProperty: > >> def __init__(self, perm, auth_needed, arg_needed, check_path, > >> syntax): > >> self.perm = perm > >> self.auth_needed = auth_needed > >> self.arg_needed = arg_needed > >> self.check_path = check_path > >> self.syntax = syntax > > >> ftp_cmds = { > >> "ABOR" : CommandProperty(perm=None, auth_needed=True, > >> arg_needed=False, check_path=False, syntax="ABOR (abort transfer)."), > >> "APPE" : CommandProperty(perm='a', auth_needed=True, > >> arg_needed=True, check_path=True, syntax="APPE <SP> file-name > >> (append data to an existent file)."), > >> "CDUP" : CommandProperty(perm='e', > >> auth_needed=True,arg_needed=False, check_path=False, syntax="CDUP (go > >> to parentdirectory)."), > >> ... > >> ... > >> ... > >> } > > >> ...but I find it somewhat redundant and... "ugly". > >> I was wondering if there was some kind of data type which could better > >> fit such purpose or if someone could suggest me some other approach to > >> do this same thing. Maybe using a dictionary is not the better choice > >> here. > > >> Thanks in advance > > >> --- Giampaolo > >>http://code.google.com/p/pyftpdlib/ > > > Seems completely reasonable to me. You might just consider using > > keyword arguments in the __init__ method and eliminate the dictionary > > altogether. > > > Not tested, but you will get the idea: > > > class CommandProperty: > > def __init__(self, perm = perm, auth_needed = True, arg_needed = > > True, > > check_path = False, syntax = syntax): > > > self.perm = perm > > self.auth_needed = auth_needed > > self.arg_needed = arg_needed > > self.check_path = check_path > > self.syntax = syntax > > > ftpCommands = dict( > > ABOR = CommandProperty(perm = None, arg_needed = False, > > syntax="ABOR (abort transfer)."), > > APPE = CommandProperty(perm = 'a', check_path=True, > > syntax = "APPE <SP> file-name (append data to" \ > > "an existent file)."), > > CDUP = CommandProperty(perm= 'e', arg_needed = False, > > syntax="CDUP (go> to parentdirectory)."), > > ... > > ... > > ... > > ) > > How does this strike you? With care, the comment and the table could > be kept aligned and nicely readable > > cmd_data = dict( > # cmd = (perm, auth, arg, path, syntax), > ABOR = (None, False, False, False, "ABOR (abort transfer)."), > APPE = (None, False, False, True, "APPE <SP> file-name (append data to"), > ... > ] > > ftpCommands = {} > for cmd,args in cmd_data.iteritems(): > ftpCommands[cmd] = CommandProperty(*args) > > Gary Herron > > > > > > > IMHO this is a "little" easier to manage because you can take > > advantage of the default values for keyword arguments to eliminate > > some of the arguments. > > > Hope this helps, > > Larry > > -- > >http://mail.python.org/mailman/listinfo/python-list- Nascondi testo citato > > - Mostra testo citato -- Nascondi testo citato > > - Mostra testo citato -
Thanks, I didnt' know dict() could be used with =. I think I'm going to use this solution. --- Giampaolo http://code.google.com/p/pyftpdlib/ -- http://mail.python.org/mailman/listinfo/python-list