From 4fb74372f2ce360e6b24c47c3f2cb110a42fdf2d Mon Sep 17 00:00:00 2001 From: Jason Paryani Date: Wed, 19 Nov 2014 02:19:21 -0800 Subject: [PATCH] Allow creation of ListSchema from other Schemas --- capnp/includes/capnp_cpp.pxd | 5 +++++ capnp/lib/capnp.pyx | 28 ++++++++++++++++++++++++++++ test/test_schema.py | 4 ++++ 3 files changed, 37 insertions(+) diff --git a/capnp/includes/capnp_cpp.pxd b/capnp/includes/capnp_cpp.pxd index 5be4180..a017593 100644 --- a/capnp/includes/capnp_cpp.pxd +++ b/capnp/includes/capnp_cpp.pxd @@ -217,6 +217,11 @@ cdef extern from "capnp/schema.h" namespace " ::capnp": cdef cppclass ListSchema: SchemaType getElementType() + ListSchema listSchemaOfStruct" ::capnp::ListSchema::of"(StructSchema) + ListSchema listSchemaOfEnum" ::capnp::ListSchema::of"(EnumSchema) + ListSchema listSchemaOfInterface" ::capnp::ListSchema::of"(InterfaceSchema) + ListSchema listSchemaOfList" ::capnp::ListSchema::of"(ListSchema) + cdef cppclass ConstSchema: pass diff --git a/capnp/lib/capnp.pyx b/capnp/lib/capnp.pyx index 96a3c1d..fc07694 100644 --- a/capnp/lib/capnp.pyx +++ b/capnp/lib/capnp.pyx @@ -2569,6 +2569,34 @@ cdef class _EnumSchema: cdef class ListSchema: cdef C_ListSchema thisptr + def __init__(self, schema=None): + cdef _StructSchema ss + cdef _EnumSchema es + cdef _InterfaceSchema iis + cdef ListSchema ls + + if schema is not None: + if hasattr(schema, 'schema'): + s = schema.schema + else: + s = schema + + typeSchema = type(s) + if typeSchema is _StructSchema: + ss = s + self.thisptr = capnp.listSchemaOfStruct(ss.thisptr) + elif typeSchema is _EnumSchema: + es = s + self.thisptr = capnp.listSchemaOfEnum(es.thisptr) + elif typeSchema is _InterfaceSchema: + iis = s + self.thisptr = capnp.listSchemaOfInterface(iis.thisptr) + elif typeSchema is ListSchema: + ls = s + self.thisptr = capnp.listSchemaOfList(ls.thisptr) + else: + raise ValueError("Unknown schema type") + cdef _init(self, C_ListSchema other): self.thisptr = other return self diff --git a/test/test_schema.py b/test/test_schema.py index cc34e52..61899b8 100644 --- a/test/test_schema.py +++ b/test/test_schema.py @@ -18,3 +18,7 @@ def test_list_schema(addressbook): personType = peopleField.schema.elementType assert personType.node.id == addressbook.Person.schema.node.id + + personListSchema = capnp.ListSchema(addressbook.Person) + + assert personListSchema.elementType.node.id == addressbook.Person.schema.node.id