Searching for some kind of data type
Gary Herron
gherron at islandtraining.com
Sat Aug 2 12:18:34 EDT 2008
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
More information about the Python-list
mailing list