Searching for some kind of data type
Giampaolo Rodola'
gnewsg at gmail.com
Sat Aug 2 14:11:25 EDT 2008
On 2 Ago, 18:18, Gary Herron <gher... at islandtraining.com> 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/
More information about the Python-list
mailing list