<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7654.12">
<TITLE>RE: [Web-SIG] Trac-like Query Builder</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Gustavo Narea wrote:<BR>
&gt; Randy said:<BR>
&gt; &gt; Does anyone know of a Python package that would provide query building<BR>
&gt; &gt; functionality like Trac has when doing a custom query on the tickets?<BR>
&gt;<BR>
&gt; Are you talking about a front-end that allows end-users &quot;assemble&quot; the<BR>
&gt; query, or a back-end that turns user-provided data into a result filter<BR>
&gt; (e.g., SQL `WHERE` clause)?<BR>
&gt;<BR>
&gt; If it's the later, you may want to see this:<BR>
&gt; <A HREF="https://launchpad.net/booleano">https://launchpad.net/booleano</A><BR>
&gt; Unfortunately it's a rather new piece of software and should get the first<BR>
&gt; alpha/usable release this week.<BR>
<BR>
Heck, if all you want is the back end, Geniusql (and therefore Dejavu) allows you to build comparison expressions and combine them with &quot;+&quot;, &quot;&amp;&quot;, and &quot;|&quot;:<BR>
<BR>
&gt;&gt;&gt; from geniusql import logic<BR>
&gt;&gt;&gt; a = logic.comparison('Name', 6, ['Dave', 'Jerry', 'Sue'])<BR>
&gt;&gt;&gt; a<BR>
logic.Expression(lambda x: x.Name in ['Dave', 'Jerry', 'Sue'])<BR>
&gt;&gt;&gt; b = logic.comparison('Size', 2, 30)<BR>
&gt;&gt;&gt; b<BR>
logic.Expression(lambda x: x.Size == 30)<BR>
<BR>
&gt;&gt;&gt; a + b<BR>
logic.Expression(lambda x: (x.Name in ['Dave', 'Jerry', 'Sue']) and (x.Size == 30))<BR>
&gt;&gt;&gt; a &amp; b<BR>
logic.Expression(lambda x: (x.Name in ['Dave', 'Jerry', 'Sue']) and (x.Size == 30))<BR>
&gt;&gt;&gt; a | b<BR>
logic.Expression(lambda x: (x.Name in ['Dave', 'Jerry', 'Sue']) or (x.Size == 30))<BR>
<BR>
&gt;&gt;&gt; c = logic.Expression(lambda g, h: g.Name == h.Name)<BR>
&gt;&gt;&gt; c<BR>
logic.Expression(lambda g, h: g.Name == h.Name)<BR>
&gt;&gt;&gt; a + c<BR>
logic.Expression(lambda x, h: (x.Name in ['Dave', 'Jerry', 'Sue']) and (x.Name == h.Name))<BR>
<BR>
You then pass those to the storage layer where they are automatically converted to backend-specific SQL etc. Been runnin' like a champ for years, not days. [1]<BR>
<BR>
<BR>
Robert Brewer<BR>
fumanchu@aminus.org<BR>
<BR>
[1]&nbsp; OK, I did have to commit a patch just now for comparison() in py2.5+--but it's a short one ;)<BR>
<A HREF="http://www.aminus.net/geniusql/changeset/280">http://www.aminus.net/geniusql/changeset/280</A></FONT>
</P>

</BODY>
</HTML>