def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) if len(self.since) == 0: self.since = utils.lookup_since(self.annotations) if len(self.since) == 0: self.since = containing_iface.since name = self.name overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') if utils.is_ugly_case(overridden_name): self.name_lower = overridden_name.lower() else: if overridden_name: name = overridden_name self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_') self.name_hyphen = self.name_lower.replace('_', '-') arg_count = 0 for a in self.args: a.post_process(interface_prefix, cns, cns_upper, cns_lower, arg_count) arg_count += 1 if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': self.deprecated = True
def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) if len(self.since) == 0: self.since = utils.lookup_since(self.annotations) if len(self.since) == 0: self.since = containing_iface.since name = self.name overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') if utils.is_ugly_case(overridden_name): self.name_lower = overridden_name.lower() else: if overridden_name: name = overridden_name self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_') self.name_hyphen = self.name_lower.replace('_', '-') # don't clash with the GType getter, e.g.: GType foo_bar_get_type (void); G_GNUC_CONST if self.name_lower == 'type': self.name_lower = 'type_' # recalculate arg self.arg.annotations = self.annotations self.arg.post_process(interface_prefix, cns, cns_upper, cns_lower, 0) if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': self.deprecated = True
def post_process(self, interface_prefix, c_namespace): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) if len(self.since) == 0: self.since = utils.lookup_since(self.annotations) name = self.name overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') if utils.is_ugly_case(overridden_name): self.name_lower = overridden_name.lower() else: if overridden_name: name = overridden_name self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_') self.name_hyphen = self.name_lower.replace('_', '-') arg_count = 0 for a in self.in_args: a.post_process(interface_prefix, c_namespace, arg_count) arg_count += 1 for a in self.out_args: a.post_process(interface_prefix, c_namespace, arg_count) arg_count += 1 if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': self.deprecated = True
def post_process(self, interface_prefix, c_namespace): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) if len(self.doc_string_brief) == 0: self.doc_string_brief = utils.lookup_brief_docs(self.annotations) if len(self.since) == 0: self.since = utils.lookup_since(self.annotations) overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') if utils.is_ugly_case(overridden_name): name = overridden_name.replace('_', '') name_with_ns = c_namespace + name self.name_without_prefix = name self.camel_name = name_with_ns if len(c_namespace) > 0: self.ns_upper = utils.camel_case_to_uscore(c_namespace).upper() + '_' self.name_lower = utils.camel_case_to_uscore(c_namespace) + '_' + overridden_name.lower() else: self.ns_upper = '' self.name_lower = overridden_name.lower() self.name_upper = overridden_name.upper() #raise RuntimeError('handle Ugly_Case ', overridden_name) else: if overridden_name: name = overridden_name else: name = self.name if name.startswith(interface_prefix): name = name[len(interface_prefix):] self.name_without_prefix = name name = utils.strip_dots(name) name_with_ns = utils.strip_dots(c_namespace + '.' + name) self.camel_name = name_with_ns if len(c_namespace) > 0: self.ns_upper = utils.camel_case_to_uscore(c_namespace).upper() + '_' self.name_lower = utils.camel_case_to_uscore(c_namespace) + '_' + utils.camel_case_to_uscore(name) else: self.ns_upper = '' self.name_lower = utils.camel_case_to_uscore(name_with_ns) self.name_upper = utils.camel_case_to_uscore(name).upper() self.name_hyphen = self.name_upper.lower().replace('_', '-') if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': self.deprecated = True for m in self.methods: m.post_process(interface_prefix, c_namespace) for s in self.signals: s.post_process(interface_prefix, c_namespace) for p in self.properties: p.post_process(interface_prefix, c_namespace)
def print_property(self, i, p): if utils.lookup_annotation(p.annotations, 'CIMSkip') == '1': return if p.writable: self.warning("property '%s' is writable, no code is generated for it", p.name) self.print_qualifiers(p, indent=1) (cimtype, suffix, _qualifiers) = self.signature_type(i, p.name, p.signature, p.annotations) cimname = utils.lookup_annotation(p.annotations, 'CIMName') if not cimname: cimname = p.name self.out.write(' %s %s%s;\n' % (cimtype, cimname, suffix)) self.out.write('\n')
def classname(self, interface): cimclass = utils.lookup_annotation(interface.annotations, 'CIMClass') if cimclass: return cimclass cimclass = self.cim_prefix + interface.name_without_prefix[1:] cimclass = cimclass.replace('.', '') return cimclass
def handle_references(self): """ 1. Convert all 'o' and 'ao' properties (=object paths) into references. 2. Convert all 'a{sv}' properties to setting objects. """ for i in self.ifaces: i.refs = [] i.settings = [] removed = [] for p in i.properties: if p.signature == 'o' or p.signature == 'ao' or utils.lookup_annotation(p.annotations, 'CIMAssociation'): i.refs.append(p) removed.append(p) if p.signature == 'a{sv}' or utils.lookup_annotation(p.annotations, 'CIMSetting'): i.settings.append(p) removed.append(p) i.properties = [p for p in i.properties if p not in removed]
def signature_type(self, i, name, sig, annotations, level=0, full_sig=None, method_name=None): """Convert DBus signature to a CIM type""" if not full_sig: full_sig = sig inst = utils.lookup_annotation(annotations, 'CIMEmbeddedInstance') if inst: return ('string', '', ['EmbeddedInstance("%s")' % (inst), ]) atype = utils.lookup_annotation(annotations, 'CIMType') if atype: return (atype, '', []) primitive_types = { 'y': 'uint8', 'b': 'boolean', 'n': 'sint16', 'q': 'uint16', 'i': 'sint32', 'u': 'uint32', 'x': 'sint64', 't': 'uint64', 'd': 'real64', 's': 'string', 'o': 'CIM_ManagedElement REF ', } if not sig: self.warning("unknown type for '%s' ('%s'): %s" % (name, full_sig, sig)) cimtype = primitive_types.get(sig, None) if cimtype: return (cimtype, '', []); if sig == 'a{sv}' and method_name: return('string', '', ['EmbeddedObject']) if sig[0] == 'a': (subtype, arr, quals) = self.signature_type(i, name, sig[1:], annotations, level + 1, full_sig); return (subtype, arr + '[]', quals) self.warning("cannot determine type of '%s' ('%s'): %s" % (name, full_sig, sig)) return ('UNKNOWN', '', [])
def print_setting(self, i, setting): if utils.lookup_annotation(setting.annotations, 'CIMSkip') == '1': return classname = utils.lookup_annotation(setting.annotations, 'CIMSetting') if not classname: classname = '%sSettingData' % (self.classname(i)) self.todo.write("// TODO: define following class:\n") self.print_qualifiers(setting, [], 0, stream=self.todo) self.todo.write('class %s : CIM_SettingData {\n' % (classname)) self.todo.write('};\n') # generate just the association self.out.write("[Association]\n") j = len('SettingData') assoc_name = classname[:-j] + 'Element' + classname[-j:] self.out.write('class %s : CIM_ElementSettingData {\n' % (assoc_name)) self.out.write(" %s REF ManagedElement;\n" % (self.classname(i))) self.out.write(" %s REF SettingData;\n" % (classname)) self.out.write('}\n')
def post_process(self, interface_prefix, c_namespace): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) if len(self.since) == 0: self.since = utils.lookup_since(self.annotations) name = self.name overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') if utils.is_ugly_case(overridden_name): self.name_lower = overridden_name.lower() else: if overridden_name: name = overridden_name self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_') if self.name_lower == 'type': self.name_lower = 'type_' self.name_hyphen = self.name_lower.replace('_', '-') # recalculate arg self.arg.annotations = self.annotations self.arg.post_process(interface_prefix, c_namespace, 0) if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': self.deprecated = True
def print_method(self, i, m): if utils.lookup_annotation(m.annotations, 'CIMSkip') == '1': return self.print_qualifiers(m, indent=1) self.out.write(4 * " " + "int32 %s (\n" % (m.name)) args = [] indent = 8 * " " for arg in m.in_args: name = arg.name (_type, suffix, qualifiers) = self.signature_type(i, arg.name, arg.signature, arg.annotations, 2, method_name=m.name) q = self.render_qualifiers(arg, qualifiers + ['In'], 2) args.append((indent + "[%s]\n" + indent + "%s %s%s") % (", ".join(q), _type, name, suffix)) for arg in m.out_args: name = arg.name (_type, suffix, qualifiers) = self.signature_type(i, arg.name, arg.signature, arg.annotations, 2, method_name=m.name) q = self.render_qualifiers(arg, qualifiers + ['In(false)', 'Out'], 2) args.append((indent + "[%s]\n" + indent + "%s %s%s") % (", ".join(q), _type, name, suffix)) s = ",\n".join(args) self.out.write(s) self.out.write("\n" + (4 * " ") + ");\n")
def print_reference(self, i, ref): if utils.lookup_annotation(ref.annotations, 'CIMSkip') == '1': return assoc_name = utils.lookup_annotation(ref.annotations, 'CIMAssociation') if not assoc_name: assoc_name = '%s%s' % (self.classname(i), ref.name) assoc_base = utils.lookup_annotation(ref.annotations, 'CIMAssociationBase') self.print_qualifiers(ref, ['Association'], 0) if assoc_base: self.out.write('class %s : %s {\n' % (assoc_name, assoc_base)) else: self.out.write('class %s {\n' % (assoc_name)) local_name = utils.lookup_annotation(ref.annotations, 'CIMAssociationLocalName') or 'Antecedent' remote_name = utils.lookup_annotation(ref.annotations, 'CIMAssociationRemoteName') or 'Dependent' local_type = utils.lookup_annotation(ref.annotations, 'CIMAssociationLocalType') or self.classname(i) remote_type = utils.lookup_annotation(ref.annotations, 'CIMAssociationLocalType') or 'CIM_ManagedObject' self.out.write(" %s REF %s;\n" % (local_type, local_name)) self.out.write(" %s REF %s;\n" % (remote_type, remote_name)) self.out.write('}\n')
def post_process(self, interface_prefix, cns, cns_upper, cns_lower, arg_number): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) if len(self.since) == 0: self.since = utils.lookup_since(self.annotations) if self.name == None: self.name = 'unnamed_arg%d'%arg_number # default to GVariant self.ctype_in_g = 'GVariant *' self.ctype_in = 'GVariant *' self.ctype_in_dup = 'GVariant *' self.ctype_out = 'GVariant **' self.gtype = 'G_TYPE_VARIANT' self.free_func = 'g_variant_unref' self.format_in = '@' + self.signature self.format_out = '@' + self.signature self.gvariant_get = 'XXX' self.gvalue_get = 'g_value_get_variant' if not utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.ForceGVariant'): if self.signature == 'b': self.ctype_in_g = 'gboolean ' self.ctype_in = 'gboolean ' self.ctype_out = 'gboolean *' self.gtype = 'G_TYPE_BOOLEAN' self.free_func = None self.format_in = 'b' self.format_out = 'b' self.gvariant_get = 'g_variant_get_boolean' self.gvalue_get = 'g_value_get_boolean' elif self.signature == 'y': self.ctype_in_g = 'guchar ' self.ctype_in = 'guchar ' self.ctype_out = 'guchar *' self.gtype = 'G_TYPE_UCHAR' self.free_func = None self.format_in = 'y' self.format_out = 'y' self.gvariant_get = 'g_variant_get_byte' self.gvalue_get = 'g_value_get_uchar' elif self.signature == 'n': self.ctype_in_g = 'gint ' self.ctype_in = 'gint16 ' self.ctype_out = 'gint16 *' self.gtype = 'G_TYPE_INT' self.free_func = None self.format_in = 'n' self.format_out = 'n' self.gvariant_get = 'g_variant_get_int16' self.gvalue_get = 'g_value_get_int' elif self.signature == 'q': self.ctype_in_g = 'guint ' self.ctype_in = 'guint16 ' self.ctype_out = 'guint16 *' self.gtype = 'G_TYPE_UINT' self.free_func = None self.format_in = 'q' self.format_out = 'q' self.gvariant_get = 'g_variant_get_uint16' self.gvalue_get = 'g_value_get_uint' elif self.signature == 'i': self.ctype_in_g = 'gint ' self.ctype_in = 'gint ' self.ctype_out = 'gint *' self.gtype = 'G_TYPE_INT' self.free_func = None self.format_in = 'i' self.format_out = 'i' self.gvariant_get = 'g_variant_get_int32' self.gvalue_get = 'g_value_get_int' elif self.signature == 'u': self.ctype_in_g = 'guint ' self.ctype_in = 'guint ' self.ctype_out = 'guint *' self.gtype = 'G_TYPE_UINT' self.free_func = None self.format_in = 'u' self.format_out = 'u' self.gvariant_get = 'g_variant_get_uint32' self.gvalue_get = 'g_value_get_uint' elif self.signature == 'x': self.ctype_in_g = 'gint64 ' self.ctype_in = 'gint64 ' self.ctype_out = 'gint64 *' self.gtype = 'G_TYPE_INT64' self.free_func = None self.format_in = 'x' self.format_out = 'x' self.gvariant_get = 'g_variant_get_int64' self.gvalue_get = 'g_value_get_int64' elif self.signature == 't': self.ctype_in_g = 'guint64 ' self.ctype_in = 'guint64 ' self.ctype_out = 'guint64 *' self.gtype = 'G_TYPE_UINT64' self.free_func = None self.format_in = 't' self.format_out = 't' self.gvariant_get = 'g_variant_get_uint64' self.gvalue_get = 'g_value_get_uint64' elif self.signature == 'd': self.ctype_in_g = 'gdouble ' self.ctype_in = 'gdouble ' self.ctype_out = 'gdouble *' self.gtype = 'G_TYPE_DOUBLE' self.free_func = None self.format_in = 'd' self.format_out = 'd' self.gvariant_get = 'g_variant_get_double' self.gvalue_get = 'g_value_get_double' elif self.signature == 's': self.ctype_in_g = 'const gchar *' self.ctype_in = 'const gchar *' self.ctype_in_dup = 'gchar *' self.ctype_out = 'gchar **' self.gtype = 'G_TYPE_STRING' self.free_func = 'g_free' self.format_in = 's' self.format_out = 's' self.gvariant_get = 'g_variant_get_string' self.gvalue_get = 'g_value_get_string' elif self.signature == 'o': self.ctype_in_g = 'const gchar *' self.ctype_in = 'const gchar *' self.ctype_in_dup = 'gchar *' self.ctype_out = 'gchar **' self.gtype = 'G_TYPE_STRING' self.free_func = 'g_free' self.format_in = 'o' self.format_out = 'o' self.gvariant_get = 'g_variant_get_string' self.gvalue_get = 'g_value_get_string' elif self.signature == 'g': self.ctype_in_g = 'const gchar *' self.ctype_in = 'const gchar *' self.ctype_in_dup = 'gchar *' self.ctype_out = 'gchar **' self.gtype = 'G_TYPE_STRING' self.free_func = 'g_free' self.format_in = 'g' self.format_out = 'g' self.gvariant_get = 'g_variant_get_string' self.gvalue_get = 'g_value_get_string' elif self.signature == 'ay': self.ctype_in_g = 'const gchar *' self.ctype_in = 'const gchar *' self.ctype_in_dup = 'gchar *' self.ctype_out = 'gchar **' self.gtype = 'G_TYPE_STRING' self.free_func = 'g_free' self.format_in = '^ay' self.format_out = '^ay' self.gvariant_get = 'g_variant_get_bytestring' self.gvalue_get = 'g_value_get_string' elif self.signature == 'as': self.ctype_in_g = 'const gchar *const *' self.ctype_in = 'const gchar *const *' self.ctype_in_dup = 'gchar **' self.ctype_out = 'gchar ***' self.gtype = 'G_TYPE_STRV' self.free_func = 'g_strfreev' self.format_in = '^as' self.format_out = '^as' self.gvariant_get = 'g_variant_get_strv' self.gvalue_get = 'g_value_get_boxed' elif self.signature == 'ao': self.ctype_in_g = 'const gchar *const *' self.ctype_in = 'const gchar *const *' self.ctype_in_dup = 'gchar **' self.ctype_out = 'gchar ***' self.gtype = 'G_TYPE_STRV' self.free_func = 'g_strfreev' self.format_in = '^ao' self.format_out = '^ao' self.gvariant_get = 'g_variant_get_objv' self.gvalue_get = 'g_value_get_boxed' elif self.signature == 'aay': self.ctype_in_g = 'const gchar *const *' self.ctype_in = 'const gchar *const *' self.ctype_in_dup = 'gchar **' self.ctype_out = 'gchar ***' self.gtype = 'G_TYPE_STRV' self.free_func = 'g_strfreev' self.format_in = '^aay' self.format_out = '^aay' self.gvariant_get = 'g_variant_get_bytestring_array' self.gvalue_get = 'g_value_get_boxed'
def post_process(self, interface_prefix, c_namespace, arg_number): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) if len(self.since) == 0: self.since = utils.lookup_since(self.annotations) if self.name == None: self.name = 'unnamed_arg%d'%arg_number # default to GVariant self.ctype_in_g = 'GVariant *' self.ctype_in = 'GVariant *' self.ctype_out = 'GVariant **' self.gtype = 'G_TYPE_VARIANT' self.free_func = 'g_variant_unref' self.format_in = '@' + self.signature self.format_out = '@' + self.signature if not utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.ForceGVariant'): if self.signature == 'b': self.ctype_in_g = 'gboolean ' self.ctype_in = 'gboolean ' self.ctype_out = 'gboolean *' self.gtype = 'G_TYPE_BOOLEAN' self.free_func = None self.format_in = 'b' self.format_out = 'b' elif self.signature == 'y': self.ctype_in_g = 'guchar ' self.ctype_in = 'guchar ' self.ctype_out = 'guchar *' self.gtype = 'G_TYPE_UCHAR' self.free_func = None self.format_in = 'y' self.format_out = 'y' elif self.signature == 'n': self.ctype_in_g = 'gint ' self.ctype_in = 'gint16 ' self.ctype_out = 'gint16 *' self.gtype = 'G_TYPE_INT' self.free_func = None self.format_in = 'n' self.format_out = 'n' elif self.signature == 'q': self.ctype_in_g = 'guint ' self.ctype_in = 'guint16 ' self.ctype_out = 'guint16 *' self.gtype = 'G_TYPE_UINT' self.free_func = None self.format_in = 'q' self.format_out = 'q' elif self.signature == 'i': self.ctype_in_g = 'gint ' self.ctype_in = 'gint ' self.ctype_out = 'gint *' self.gtype = 'G_TYPE_INT' self.free_func = None self.format_in = 'i' self.format_out = 'i' elif self.signature == 'u': self.ctype_in_g = 'guint ' self.ctype_in = 'guint ' self.ctype_out = 'guint *' self.gtype = 'G_TYPE_UINT' self.free_func = None self.format_in = 'u' self.format_out = 'u' elif self.signature == 'x': self.ctype_in_g = 'gint64 ' self.ctype_in = 'gint64 ' self.ctype_out = 'gint64 *' self.gtype = 'G_TYPE_INT64' self.free_func = None self.format_in = 'x' self.format_out = 'x' elif self.signature == 't': self.ctype_in_g = 'guint64 ' self.ctype_in = 'guint64 ' self.ctype_out = 'guint64 *' self.gtype = 'G_TYPE_UINT64' self.free_func = None self.format_in = 't' self.format_out = 't' elif self.signature == 'd': self.ctype_in_g = 'gdouble ' self.ctype_in = 'gdouble ' self.ctype_out = 'gdouble *' self.gtype = 'G_TYPE_DOUBLE' self.free_func = None self.format_in = 'd' self.format_out = 'd' elif self.signature == 's': self.ctype_in_g = 'const gchar *' self.ctype_in = 'const gchar *' self.ctype_out = 'gchar **' self.gtype = 'G_TYPE_STRING' self.free_func = 'g_free' self.format_in = 's' self.format_out = 's' elif self.signature == 'o': self.ctype_in_g = 'const gchar *' self.ctype_in = 'const gchar *' self.ctype_out = 'gchar **' self.gtype = 'G_TYPE_STRING' self.free_func = 'g_free' self.format_in = 'o' self.format_out = 'o' elif self.signature == 'g': self.ctype_in_g = 'const gchar *' self.ctype_in = 'const gchar *' self.ctype_out = 'gchar **' self.gtype = 'G_TYPE_STRING' self.free_func = 'g_free' self.format_in = 'g' self.format_out = 'g' elif self.signature == 'ay': self.ctype_in_g = 'const gchar *' self.ctype_in = 'const gchar *' self.ctype_out = 'gchar **' self.gtype = 'G_TYPE_STRING' self.free_func = 'g_free' self.format_in = '^ay' self.format_out = '^ay' elif self.signature == 'as': self.ctype_in_g = 'const gchar *const *' self.ctype_in = 'const gchar *const *' self.ctype_out = 'gchar ***' self.gtype = 'G_TYPE_STRV' self.free_func = 'g_strfreev' self.format_in = '^as' self.format_out = '^as' elif self.signature == 'ao': self.ctype_in_g = 'const gchar *const *' self.ctype_in = 'const gchar *const *' self.ctype_out = 'gchar ***' self.gtype = 'G_TYPE_STRV' self.free_func = 'g_strfreev' self.format_in = '^ao' self.format_out = '^ao' elif self.signature == 'aay': self.ctype_in_g = 'const gchar *const *' self.ctype_in = 'const gchar *const *' self.ctype_out = 'gchar ***' self.gtype = 'G_TYPE_STRV' self.free_func = 'g_strfreev' self.format_in = '^aay' self.format_out = '^aay'