[ditrack commit] r938 - src/trunk/DITrack
Vlad Skvortsov
vss at 73rus.com
Thu Dec 14 07:42:43 PST 2006
I have a few comments (below).
oleg at ditrack.org wrote:
> Author: oleg
> Date: 2006-12-04 11:02:24 -0800 (Mon, 04 Dec 2006)
> New Revision: 938
>
> Modified:
> src/trunk/DITrack/DB.py
> Log:
> Added handling of syntax error of a filter definition during the reading of filter config file
> Changed data type of the variable using for storage a filter conditions
>
>
> Modified: src/trunk/DITrack/DB.py
> ===================================================================
> --- src/trunk/DITrack/DB.py 2006-11-30 09:58:38 UTC (rev 937)
> +++ src/trunk/DITrack/DB.py 2006-12-04 19:02:24 UTC (rev 938)
> @@ -456,16 +456,18 @@
> + s + "' definition")
>
> filter = filters[s].strip()
> -
> +
> if not filter:
> raise CorruptedDB_UnparseableFiltersError("Empty filter "
> + s + "' definition")
> + try:
> + self.items[s] = Filter(filter)
> + except (FilterIsPredefinedError, FilterExpressionError):
> + raise CorruptedDB_UnparseableFiltersError("Syntax error in filter "
> + + s + "' definition")
>
> - self.items[s] = Filter(filter)
> + has_key = __contains__
>
> - has_key = __contains__
> -
> -
> class Filter:
> def __init__(self, str):
> "Initialize filter by parsing the expression passed"
> @@ -480,18 +482,26 @@
> # Split into subclauses.
> clauses = filter(lambda x: len(x), str.split(","))
>
> - self.conditions = []
> - condition_re = re.compile("^(.*[^!=])(!?=)(.*)$")
> + self.conditions = {}
> + condition_re = re.compile("^(?P<param>.*[^!=])(?P<condition>!?=)(?P<value>.*)$")
>
I do understand that it wasn't introduced in this particular commit.
However, it seems that the expression should look like
^(?P<param>[^!=]*)(?P<condition>!?=)(?P<value>.*)$
M?
>
> + i = 0
> for c in clauses:
> m = condition_re.match(c)
> if not m:
> raise FilterExpressionError(c)
>
> + condition = m.groupdict()
> +
> + if len(condition) != 3:
> + raise FilterExpressionError(c)
> +
> # Perform substitutions.
> - value = self.substitute(m.group(3))
> + condition['value'] = self.substitute(condition['value'])
>
> - self.conditions.append((m.group(1), m.group(2), value))
> + self.conditions[i] = condition
> +
> + i = i + 1
>
Is there a particular reason for using a dictionary instead of plain array?
>
> def substitute(self, str):
>
> @@ -527,12 +537,12 @@
> for c in self.conditions:
> assert(len(c) == 3)
>
> - if c[1] == "=":
> - if issue.info[c[0]] != c[2]: return None
> - elif c[1] == "!=":
> - if issue.info[c[0]] == c[2]: return None
> + if c['condition'] == "=":
> + if issue.info[c['param']] != c['value']: return None
> + elif c['condition'] == "!=":
> + if issue.info[c['param']] == c['value']: return None
> else:
> - raise NotImplemented(c[1])
> + raise NotImplemented(c['condition'])
>
> return True
>
>
> _______________________________________________
> Commit mailing list
> Commit at lists.ditrack.org
> http://lists.ditrack.org/mailman/listinfo/commit
>
--
Vlad Skvortsov, vss at 73rus.com, http://vss.73rus.com
More information about the Dev
mailing list