コード例 #1
0
ファイル: query.py プロジェクト: Schevo/schevo
 def _results(self):
     on = self.on
     if isinstance(on, base.Query):
         on = on()
     operator = self.operator
     field_name = self.field_name
     value = self.value
     if operator is o_in:
         if isinstance(value, base.Query):
             value = value()
         value = frozenset(value)
         return results(
             obj for obj in on if getattr(obj, field_name) in value)
     else:
         if operator is o_any:
             return results(on)
         elif operator is o_assigned:
             return results(
                 obj for obj in on
                 if getattr(obj, field_name) is not UNASSIGNED)
         elif operator is o_unassigned:
             if isinstance(on, base.Extent):
                 kw = {field_name: UNASSIGNED}
                 return results(on.find(**kw))
             else:
                 return results(
                     obj for obj in on
                     if getattr(obj, field_name) is UNASSIGNED)
         if value is not None:
             field = self.FieldClass(self, field_name)
             field.set(value)
             value = field.get()
         if isinstance(on, base.Extent) and operator is o_eq:
             kw = {field_name: value}
             return results(on.find(**kw))
         elif operator.operator:
             oper = operator.operator
             def generator():
                 for obj in on:
                     a = getattr(obj, field_name)
                     b = value
                     try:
                         result = oper(a, b)
                     except TypeError:
                         # Cannot compare e.g. UNASSIGNED with
                         # datetime; assume no match.
                         continue
                     if result:
                         yield obj
             return results(generator())
コード例 #2
0
ファイル: query.py プロジェクト: Schevo/schevo
 def __unicode__(self):
     FieldClass = self.FieldClass
     field = FieldClass(self, self.field_name)
     operator = self.operator
     on = self.on
     if isinstance(on, base.Extent):
         on_label = plural(on)
     else:
         on_label = unicode(on)
     s = u'%s where %s %s' % (
         on_label,
         label(field),
         label(self.operator),
         )
     if operator is not o_any:
         value = self.value
         if isinstance(value, Query):
             s += u' %s' % value
         else:
             field.set(value)
             s += u' %s' % field
     return s