Hi sean, I would use the following code: def deDupe(self): keywords=[] for kw in self.keywords: if kw and not kw in keywords: keywords.append(kw) keywords.sort() self.keywords=keywords Assuming your empty line is really empty. HTH Tino Wildenhain --On Dienstag, 8. Mai 2001 11:55 -0700 sean.upton@uniontrib.com wrote:
Weird problem I am having with "lines" properties, mapping them to a python list in a product.
In a python product I'm working on, one class property in my primary class is a python list (well, an enhanced list class instance based upon a python list for underlying storage). This keyword class has a method called asTuple() which returns the list as a tuple; this is used to fill a DTML edit form textarea that uses "lines" as a type for the request object upon submission. This seems to work right, doing this:
<textarea name="keywords:lines" cols="40" rows="6"><dtml-in expr="keywords.asTuple()"><dtml-var sequence-item> </dtml-in></textarea>
[Notice the line feed before the </dtml-in>...]
Upon submission, manage_edit does a self.setKeys(REQUEST['keywords']), where setKeys() accepts a list, then removes duplicate entries, and goes through the resulting de-duplicated list of words, and uses a list append() method to add each entry.
Upon submission of this form, however, it adds an empty string as the 1st element of the list. This doesn't happen when unit testing my python code for my setKeys() method from the python shell.
What I am guessing is happening is that there is a blank line inserted AT THE END of the textarea. This is then shifted to the front when my code runs a sort() on the list as part of the de-duplication process. My de-duplication code:
def deDupe(self): """Scans through keyword list and de-dupes multiple entries for the same keyword""" #3 things: 2 loops and a sort, plus recursion via the 2nd loop - inefficient, but works for kw in self.keywords: if (self.keywords.count(kw) > 1): #If duplicate(s) of current kw, get rid of this one self.keywords.remove(kw) #technically, this removes 1st instance in list, this works #now, check for more duplicates, since above sometimes won't work in cases of several repreats for kw in self.keywords: if (self.keywords.count(kw) > 1): self.deDupe() self.keywords.sort() #sort the list
I figure that I could incorporate code to get rid of "empty" list entries. Is there an easier way to do this? The extra line feed at the end of the text area ends up being a nuisance, but I'm not sure if there is a way to get the DTML to output HTML just right so it works. I suppose that others have encountered this weirdness before. Thoughts?
Sean
========================= Sean Upton Senior Programmer/Analyst SignOnSanDiego.com The San Diego Union-Tribune 619.718.5241 sean.upton@uniontrib.com =========================
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )