[Zope] Finding matches between two lists

Jim Sanford jsanford@atinucleus.com
Fri, 3 Mar 2000 11:53:56 -0600


if you have 2 queries one of which returns tuples containing events and usernames,
and the second returning a tuple with the user's URL, this should work:

<dtml-in query_events_and_names>
   . . .
  <dtml-in "query_user_URL(username=username_from_query_events_and_name)">
    <a href="<dtml-var user_URL>"><dtml-var username_from_query_events_and_name></a>
  </dtml-in>
  . . .
</dtml-in>
 __________________________________________________________________
 
              Jim Sanford
      .       Database Engineer
     / \  /   Accelerated Technology, Inc.
    /   /     720 Oak Circle Drive East
   /  /  \    Mobile, AL 36609
  / /     \   Voice: 334-661-5770  fax: 334-661-5788
 /         \  E-Mail: jsanford@atinucleus.com
              Web: http://www.atinucleus.com
  
 Nucleus.  All You NEED in an RTOS.  Royalty Free
 __________________________________________________________________



----- Original Message ----- 
From: ed colmar <element@immersivearts.com>
To: <zope@zope.org>
Sent: Friday, March 03, 2000 10:14 AM
Subject: [Zope] Finding matches between two lists


Hey all!

This question went by last month without a reply, so I am going to try it
again.  I've also gotten a bit closer to the answer on my own.

---------

The layout:

Most of my code is in a Python Product, but there is still a bunch of dtml
used.

I have a class called "person" with a string variable called "name",  and
a class called "event" with a list variable called "eventnames".

Now when a addEventForm is filled out, then the viewEventPage is called, I
want all the people listed in "eventnames" to have a link to thier home
page if they exist.

---------

The DTML attempt:

I could never get this to work correctly.  Becuase it is looking through
two lists, the code causes the "eventnames" to be dispayed once for each
person listed.

<dtml-if eventnames><BR><BR><STRONG>Featuring people :</STRONG>     
        <dtml-with "PARENTS[0]">
          <dtml-in personValues>
            <dtml-if "meta_type == 'SRPersonPost'">
              <dtml-in eventnames>
                 <dtml-if "_['sequence-item'] == name">
                   <A href="<dtml-var site_url>/<dtml-var id>"><dtml-var
sequence-item></a>, 
                 <dtml-else><dtml-var sequence-item>, 
                 </dtml-if>
              </dtml-in>
            </dtml-if>
          </dtml-in>
        </dtml-with>
    </dtml-if eventnames>


---------

The Python attempt:

So I tried to change my strategy, and build a method to find the matches,
and return the list with the ids (if the person is listed) or a 'None' if
they are not listed.  I haven't been able to figure out what is going wrong
with this.

    def list_dj_list(self, namelist):
        """ should return a list of names & IDs from a list of names
        """
        rlist = map(None,self.ids)
        rlist = filter(lambda x,p=self : p.data[x].validated, rlist)
        rlist = filter(lambda x,p=self : p.data[x].meta_type ==
'SRPersonPost', rlist)
        rlist = filter(lambda x,p=self : p.data[x].name, rlist)
        rnames = []
        for i in range(len(namelist)):
            rnamelist = rlist
            rname = filter(lambda x,p=self,s=namelist[i] : p.data[x].name
== s, rnamelist)
            if len(rnames) == 0:
                rnames.append('None')
            elif len(rnames) == 1:
                rnames.append(rname)
            else:
                rnames.append('multiples')

        return rnames

---------

The question:

How can this be achieved?  I don't have a preferance over dtml or python,
but it seems like a python method is the proper way to do it.

Thanks for any help!

-ed-


_______________________________________________
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 )