Allow import paths in the schema loader

This commit is contained in:
Jason Paryani
2013-08-13 23:00:43 -07:00
parent 1cffd23371
commit b4ae2a0bff

View File

@@ -28,6 +28,7 @@ ctypedef char * Object
ctypedef bint Bool ctypedef bint Bool
ctypedef float Float32 ctypedef float Float32
ctypedef double Float64 ctypedef double Float64
from libc.stdlib cimport malloc, free
ctypedef fused valid_values: ctypedef fused valid_values:
int int
@@ -524,12 +525,18 @@ cdef class SchemaParser:
def __dealloc__(self): def __dealloc__(self):
del self.thisptr del self.thisptr
def parseDiskFile(self, displayName, diskPath): def parseDiskFile(self, displayName, diskPath, imports):
cdef StringPtr * importArray = [] cdef StringPtr * importArray = <StringPtr *>malloc(sizeof(StringPtr) * len(imports))
cdef ArrayPtr[StringPtr] imports = ArrayPtr[StringPtr](importArray, <size_t>0)
for i in range(len(imports)):
importArray[i] = StringPtr(imports[i])
cdef ArrayPtr[StringPtr] importsPtr = ArrayPtr[StringPtr](importArray, <size_t>len(imports))
ret = ParsedSchema() ret = ParsedSchema()
ret._init(self.thisptr.parseDiskFile(displayName, diskPath, imports)) ret._init(self.thisptr.parseDiskFile(displayName, diskPath, importsPtr))
free(importArray)
return ret return ret
@@ -629,7 +636,7 @@ def _load(nodeSchema, module):
_load(schema, local_module) _load(schema, local_module)
def load(file_name, display_name=None): def load(file_name, display_name=None, imports=[]):
if display_name is None: if display_name is None:
display_name = os.path.basename(file_name) display_name = os.path.basename(file_name)
module = ModuleType(display_name) module = ModuleType(display_name)
@@ -637,7 +644,7 @@ def load(file_name, display_name=None):
module._parser = parser module._parser = parser
fileSchema = parser.parseDiskFile(display_name, file_name) fileSchema = parser.parseDiskFile(display_name, file_name, imports)
_load(fileSchema, module) _load(fileSchema, module)
return module return module