def val(x): v = value(x, e.expr, variables=True) if isinstance(v, Variable): return (0, v) elif isinstance(v, BNode): return (1, v) elif isinstance(v, URIRef): return (2, v) elif isinstance(v, Literal): return (3, v)
def evalOrderBy(ctx, part): res = evalPart(ctx, part.p) for e in reversed(part.expr): reverse = bool(e.order and e.order == 'DESC') res = sorted(res, key=lambda x: _val(value(x, e.expr, variables=True)), reverse=reverse) return res