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