Beispiel #1
0
 def _get_query(self, argv):
     mapper = models.class_mapper(self._obj)
     args, kwargs = _query_args(argv[1:], self._environ)
     q = _session.query(self._obj)
     if args:
         grps, left = divmod(len(args), 3)
         if grps:
             for name, op, val in _by_three(args[:grps*3]):
                 col = getattr(self._obj, name)
                 opm = {"=": col.__eq__,
                         ">": col.__gt__,
                         "<": col.__lt__,
                         "match": col.match,
                         "contains": col.contains,
                         "in": col.in_,
                         "like": col.like}.get(op)
                 if opm:
                     if op == "like":
                         val = val.replace("*", "%")
                         val = val.replace(".", "_")
                         if "%" not in val:
                             val = "%" + val + "%"
                     if op == "in":
                         val = val.split(",")
                     q = q.filter(opm(val))
         for name in args[grps*3:]:
             if name.startswith("="):
                 q = q.order_by(name[1:])
     if kwargs:
         for name, value in kwargs.items():
             col = getattr(self._obj, name)
             value = CLI.clieval(value)
             q = q.filter(col.__eq__(value))
     return q