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