Exemplo n.º 1
0
def make_mask_xizer(iterable_in, enum_name, mask_out):
    code = []
    enum = ALL[enum_name]
    code.append(template("$mask_out = 0", mask_out=mask_out))
    for member in enum.members:
        if not isinstance(member, PyAttribute):
            continue
        key = pythonize_camelcase_name(member.name)
        value = member.value
        code.extend([
            template('if "${key}" in ${iterable_in}:',
                key=key,
                iterable_in=iterable_in),
            INDENT,
            template('$mask_out |= $value',
                mask_out=mask_out,
                value=value),
            DEDENT])
    return lambda code=code: code
Exemplo n.º 2
0
def make_values_xizer(enum_name, values_dict_name, mask_out='value_mask', list_out='value_list', xize=()):
    """
        make a simple values xizer code list and return it.
        A values xizer takes all values from the values dict
        and stores it in a values list and a values mask.
    """
    enum = ALL[enum_name]
    code = []
    pyvalues = []

    code.append(template("$mask_out, $list_out = 0, []",
        mask_out=mask_out,
        list_out=list_out
        ))
    for member in enum.members:#key, value in enum.values:
        if not isinstance(member, PyAttribute):
            continue

        key = pythonize_camelcase_name(member.name)
        value = member.value
        code.append(template('if "${key}" in ${values_dict_name}:',
                    key=key,
                    values_dict_name=values_dict_name))
        code.append(INDENT)
        code.append(template('$mask_out |= $value',
            mask_out=mask_out,
            value=value
            ))

        s = template('$values_dict_name["$key"]',
            values_dict_name=values_dict_name,
            key=key,
            )
        if key in xize:
            s = 'get_internal(%s)' % s

        code.append(template('$list_out.append($s)',
            list_out=list_out,
            s=s
            ))
        code.append(DEDENT)

    return lambda code=code: code
Exemplo n.º 3
0
def py_event(self, name):
    setup_type(self, name, 'Event')

    entry = INTERFACE.get('Events', {}).get(strip_ns(name), {})

    clsname = entry.get('classname', self.py_event_name)

    # Opcode define
    EVENTS[self.opcodes[name]] = clsname

    eventname = ('"%s"' % entry.get('eventname',
            'on_%s' % pythonize_camelcase_name(strip_ns(name))))
    struct = PyClass(clsname)
    struct.base = 'ooxcb.Event'
    struct.new_attribute('event_name', eventname)
    # each event class has an `opcode` attribute
    struct.new_attribute('opcode', self.opcodes[name])

    if not entry:
        clsname, membername = ('ooxcb.Connection', 'conn')
    else:
        membername = entry['member']
        # here we want to register the events to the original class.
        # TODO: The way I am doing that here is dirty.
        clsname = '"%s"' % entry.get('class',
                get_wrapped(get_field_by_name(self.fields, membername).py_type).replace('Mixin', ''))
        # the classnames are resolved later. see generate_all.

    struct.new_attribute('event_target_class', clsname)

    init = struct.new_method('__init__')
    init.arguments.extend(['conn'])
    init.code.append('ooxcb.Event.__init__(self, conn)')
    ALL[self.py_event_name] = WRAPPERS[self.py_event_name] = struct

    py_complex(self, name, struct)

    struct.get_member_by_name('read').code.append('self.event_target = self.%s' % membername)
Exemplo n.º 4
0
def pythonize_name(name):
    return INTERFACE.get('NameAliases', None) or pythonize_camelcase_name(name)