def get(self, use_base_env=False, **kwargs): l = self.filter(**kwargs).get_jiter() if len(l) == 0: return None for (o, _) in l: if o.jeeves_id != l[0][0].jeeves_id: raise Exception( "wow such error: get() found rows for more than one jeeves_id" ) cur = None for (o, conditions) in l: old = cur cur = FObject(o) for var_name, val in conditions.iteritems(): if val: cur = Facet( acquire_label_by_name(self.model._meta.app_label, var_name), cur, old) else: cur = Facet( acquire_label_by_name(self.model._meta.app_label, var_name), old, cur) try: return partialEval( cur, {} if use_base_env else JeevesLib.jeevesState.pathenv.getEnv()) except TypeError: raise Exception( "wow such error: could not find a row for every condition")
def jmap(iterable, mapper): if isinstance(iterable, JList2): return jmap_jlist2(iterable, mapper) if isinstance(iterable, FObject) and isinstance(iterable.v, JList2): return jmap_jlist2(iterable.v, mapper) iterable = partialEval(fexpr_cast(iterable), jeevesState.pathenv.getEnv()) return FObject(JList(jmap2(iterable, mapper)))
def get(self, use_base_env=False, **kwargs): """Fetches a JList of rows that match the conditions. """ matches = self.filter(**kwargs).get_jiter() if len(matches) == 0: return None for (row, _) in matches: if row.jeeves_id != matches[0][0].jeeves_id: raise Exception( "wow such error: \ get() found rows for more than one jeeves_id" ) viewer = JeevesLib.get_viewer() has_viewer = not isinstance(viewer, FNull) pathenv = JeevesLib.jeevesState.pathenv.getEnv() solverstate = JeevesLib.get_solverstate() cur = None for (row, conditions) in matches: old = cur cur = FObject(row) for var_name, val in conditions.iteritems(): label = acquire_label_by_name(self.model._meta.app_label, var_name, obj=row) if has_viewer: if solverstate.assignLabel(label, pathenv): if not val: cur = old else: if val: cur = old else: if val: cur = Facet(label, cur, old) else: cur = Facet(label, old, cur) try: return cur.partialEval({} if use_base_env else JeevesLib.jeevesState.pathenv.getEnv()) except TypeError: raise Exception( "wow such error: \ could not find a row for every condition" )
def get(self, use_base_env=False, **kwargs): """Fetches a JList of rows that match the conditions. """ matches = self.filter(**kwargs).get_jiter() if len(matches) == 0: return None for (row, _) in matches: if row.jeeves_id != matches[0][0].jeeves_id: raise Exception("wow such error: \ get() found rows for more than one jeeves_id") viewer = JeevesLib.get_viewer() has_viewer = not isinstance(viewer, FNull) pathenv = JeevesLib.jeevesState.pathenv.getEnv() solverstate = JeevesLib.get_solverstate() cur = None for (row, conditions) in matches: old = cur cur = FObject(row) for var_name, (label, val) in conditions.iteritems(): # TODO: Figure out if we need to make obj the faceted value. ''' if has_viewer: if solverstate.assignLabel(label, pathenv): if not val: cur = old else: if val: cur = old else: ''' if val: cur = Facet(label, cur, old) else: cur = Facet(label, old, cur) try: return cur.partialEval({} if use_base_env \ else JeevesLib.jeevesState.pathenv.getEnv()) except TypeError: raise Exception("wow such error: \ could not find a row for every condition")
def rec(cur_e, i): if i == len(all_vars): return FObject( [i for i, e in self.l if all(cur_e[v] == e[v] for v in e)]) else: cur_e1 = dict(cur_e) cur_e2 = dict(cur_e) cur_e1[all_vars[i]] = True cur_e2[all_vars[i]] = False return Facet(getLabel(all_vars[i]), rec(cur_e1, i + 1), rec(cur_e2, i + 1))
def jmap_jlist2(jlist2, mapper): ans = JList2([]) env = jeevesState.pathenv.getEnv() for i, e in jlist2.l: popcount = 0 for vname, vval in e.iteritems(): if vname not in env: v = getLabel(vname) jeevesState.pathenv.push(v, vval) popcount += 1 elif env[vname] != vval: break ans.l.append((mapper(i), e)) for _ in xrange(popcount): jeevesState.pathenv.pop() return FObject(ans)
def jmap2(iterator, mapper): if isinstance(iterator, Facet): if jeevesState.pathenv.hasPosVar(iterator.cond): return jmap2(iterator.thn, mapper) if jeevesState.pathenv.hasNegVar(iterator.cond): return jmap2(iterator.els, mapper) with PositiveVariable(iterator.cond): thn = jmap2(iterator.thn, mapper) with NegativeVariable(iterator.cond): els = jmap2(iterator.els, mapper) return Facet(iterator.cond, thn, els) elif isinstance(iterator, FObject): return jmap2(iterator.v, mapper) elif isinstance(iterator, JList): return jmap2(iterator.l, mapper) elif isinstance(iterator, JList2): return jmap2(iterator.convert_to_jlist1().l, mapper) elif isinstance(iterator, list) or isinstance(iterator, tuple): return FObject([mapper(item) for item in iterator]) else: return jmap2(iterator.__iter__(), mapper)
def __init__(self, l): self.l = l if isinstance(l, FExpr) else FObject(l) self.validate()