def CreatePyTypeInfo(desc, path, package_required=True, generate_service_info=False): """Create the type objects from the proto file descriptor in |desc|.""" pypath = '' + path.replace('/', '.').replace('-', '_') + '_pb2' messages = [] # Proto messages. p = desc.PackageName() if p: n = '::' + p.replace('.', '::') + '::' else: if package_required: raise ValueError('Package statement required') n = '::' for m in desc.Messages(): messages.append( types.ProtoType(_CppName(m), _PyName(m, p), pypath, ns=n)) for e in desc.Enums(): messages.append(types.ProtoEnumType(_CppName(e), _PyName(e, p), ns=n)) if generate_service_info: for s in desc.Services(): messages.append(types.CapsuleType(_CppName(s), _PyName(s, p), ns=n)) return messages
def testCapsuleType(self): t = types.CapsuleType('c::name::cpp_name', 'pyname') header = '\n'.join(t.GenHeader()) + '\n' self.assertMultiLineEqual(header, textwrap.dedent("""\ // CLIF use `c::name::cpp_name*` as pyname bool Clif_PyObjAs(PyObject* input, c::name::cpp_name** output); PyObject* Clif_PyObjFrom(const c::name::cpp_name*, py::PostConv); """))
def WrapCapsule(self, p, unused_ln, ns, unused_class_ns=''): """Process AST.ForwardDecl p.""" self.types.append(types.CapsuleType(p.name.cpp_name, p.name.native, ns)) return []