Python: Fix support for named exports

This commit is contained in:
Simon Hausmann 2024-08-13 10:56:12 +02:00 committed by Simon Hausmann
parent 2d5d53fba8
commit 636de6fc7c
7 changed files with 73 additions and 4 deletions

View file

@ -179,6 +179,11 @@ impl CompilationResult {
.into_iter()
.collect::<HashMap<String, PyObject>>()
}
#[getter]
fn named_exports(&self) -> Vec<(String, String)> {
self.result.named_exports(i_slint_core::InternalToken {}).cloned().collect::<Vec<_>>()
}
}
#[pyclass(unsendable)]

View file

@ -242,9 +242,15 @@ def load_file(path, quiet=False, style=None, include_paths=None, library_paths=N
setattr(module, comp_name, wrapper_class)
for name, struct_or_enum_prototype in result.structs_and_enums.items():
name = _normalize_prop(name)
struct_wrapper = _build_struct(name, struct_or_enum_prototype)
setattr(module, name, struct_wrapper)
for orig_name, new_name in result.named_exports:
orig_name = _normalize_prop(orig_name)
new_name = _normalize_prop(new_name)
setattr(module, new_name, getattr(module, orig_name))
return module

View file

@ -12,13 +12,16 @@ def test_load_file(caplog):
assert "The property 'color' has been deprecated. Please use 'background' instead" in caplog.text
assert len(list(module.__dict__.keys())) == 3
assert len(list(module.__dict__.keys())) == 6
assert "App" in module.__dict__
assert "Diag" in module.__dict__
assert "MyDiag" in module.__dict__
assert "MyData" in module.__dict__
assert "Secret_Struct" in module.__dict__
assert "Public_Struct" in module.__dict__
instance = module.App()
del instance
instance = module.Diag()
instance = module.MyDiag()
del instance
struct_instance = module.MyData()
@ -28,6 +31,9 @@ def test_load_file(caplog):
struct_instance = module.MyData(name="testing")
assert struct_instance.name == "testing"
assert module.Public_Struct is module.Secret_Struct
assert module.MyDiag is module.Diag
def test_load_file_fail():
with pytest.raises(CompileError, match="Could not compile non-existent.slint"):

View file

@ -15,9 +15,15 @@ export global SecondGlobal {
export struct MyData {
name: string,
age: int
age: int,
}
struct Secret-Struct {
balance: int,
}
export { Secret-Struct as Public-Struct }
export component App inherits Window {
in-out property <string> hello: "World";
callback say-hello(string) -> string;
@ -47,4 +53,6 @@ export component App inherits Window {
}
}
export component Diag inherits Window { }
component Diag inherits Window { }
export { Diag as MyDiag }