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
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
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)
def pythonize_name(name): return INTERFACE.get('NameAliases', None) or pythonize_camelcase_name(name)