Beispiel #1
0
    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")
Beispiel #2
0
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)))
Beispiel #3
0
    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"
            )
Beispiel #4
0
    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")
Beispiel #5
0
 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))
Beispiel #6
0
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)
Beispiel #7
0
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)
Beispiel #8
0
 def __init__(self, l):
     self.l = l if isinstance(l, FExpr) else FObject(l)
     self.validate()