Searching for some kind of data type
Larry Bates
larry.bates at websafe.com`
Sat Aug 2 11:28:28 EDT 2008
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)."),
...
...
...
)
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
More information about the Python-list
mailing list