Esempio n. 1
0
def get_attribute(obj, name_list):
    try:
        attr_name = name_list.pop(0)
        attr = getattr(obj, attr_name)
        if attr.__class__.__module__ != None.__class__.__module__:
            if isinstance(attr, datatypes.Reference1):
                obj = attr.get_item()
            elif isinstance(attr,
                            (datatypes.ReferenceN, datatypes.Composition)):
                obj = attr.get_items()
            elif isinstance(attr, datatypes.List):
                obj = tuple(attr.value)
            elif isinstance(attr, datatypes.Dictionary):
                obj = hashabledict(attr.value)
            elif isinstance(attr, datatypes.Date):
                obj = attr
            else:
                obj = attr.value
        elif attr_name in ('created', 'modified'):
            obj = Date(attr)
        elif isinstance(attr, dict):
            obj = hashabledict(attr)
        else:
            obj = attr

        if len(name_list) > 0:
            if isinstance(obj, ObjectSet):
                obj = tuple([get_attribute(item, name_list[:])
                             for item in obj])
            else:
                obj = get_attribute(obj, name_list[:])
        return obj
    except AttributeError:
        return None
Esempio n. 2
0
    "or": lambda a, b: a or b,
    "and": lambda a, b: a and b,
}

opn1 = {"not": lambda a: not a}

operators2 = frozenset(opn2.keys())
operators1 = frozenset(opn1.keys())

fn = {
    "len": len,
    "abs": abs,
    "str": str,
    "lower": lambda a: a.lower(),
    "upper": lambda a: a.upper(),
    "date": lambda a: Date.from_iso_8601(a).value,
    "trunc": lambda a: int(a),
    "round": lambda a: int(a + 0.5),
    "sgn": lambda a: ((a < 0 and -1) or (a > 0 and 1) or 0),
    "isnone": lambda a, b: a or b,
    "getattr": lambda a, b: get_attribute(a, [b]),
}


def prepare(ast):
    prepared = []
    vars = {}
    for cmd in ast:
        cmd_code, args = cmd
        cmd_prep = globals().get("h_%s_prepare" % cmd_code, None)
        if cmd_prep is not None:
Esempio n. 3
0
        'or': lambda a, b: a or b,
        'and': lambda a, b: a and b}

opn1 = {
    "not": lambda a: not a}

operators2 = frozenset(opn2.keys())
operators1 = frozenset(opn1.keys())

fn = {'len': len,
      'abs': abs,
      'str': str,
      'lower': lambda a: a.lower(),
      'upper': lambda a: a.upper(),
      'date': lambda a: Date.from_iso_8601(a).value,
      'trunc': lambda a: int(a),
      'round': lambda a: int(a + 0.5),
      'sgn': lambda a: ((a < 0 and -1) or (a > 0 and 1) or 0),
      'isnone': lambda a, b: a or b,
      'getattr': lambda a, b: get_attribute(a, [b])}


def prepare(ast):
    prepared = []
    vars = {}
    for cmd in ast:
        cmd_code, args = cmd
        cmd_prep = globals().get('h_%s_prepare' % cmd_code, None)
        if cmd_prep is not None:
            cmd_prepared = cmd_prep(args, vars)
Esempio n. 4
0
def _date_reviver(dct):
    if '__date__' in dct:
        return Date.from_iso_8601(dct['value'])
    return dct
}

opn1 = {
    "not": lambda a: not a
}

operators2 = opn2.keys()
operators1 = opn1.keys()

fn  = {
    'len' : len,
    'abs' : abs,
    'str' : str,
    'lower' : lambda a: a.lower(),
    'upper' : lambda a: a.upper(),
    'date' : lambda a: Date.from_iso_8601(a),
    'trunc' : lambda a: int(a),
    'round' : lambda a: int(a+0.5),
    'sgn' : lambda a: ( (a<0 and -1) or (a>0 and 1) or 0 ),
    'isnone' : lambda a,b: a or b,
    'getattr' : lambda a,b: getAttribute(a, [b])
}

def evaluateStack(stack, variables, forObject=None):
    try:
        op = stack.pop()
    except AttributeError:
        op = stack

    if op in operators2:
        op1 = evaluateStack(stack, variables, forObject)
Esempio n. 6
0
def _date_reviver(dct):
    if '__date__' in dct:
        return Date.from_iso_8601(dct['value'])
    return dct