python: hide native module behind python front-end API

Encapsulate the rust code behind a public API (in __init__.py for now)
This commit is contained in:
Simon Hausmann 2023-12-21 11:37:53 +01:00 committed by Simon Hausmann
parent 07c168bbf9
commit d1529af3cc
7 changed files with 35 additions and 23 deletions

1
api/python/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
slint/*.so

View file

@ -2,7 +2,7 @@
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
[package]
name = "pyslint"
name = "slint-python"
version.workspace = true
authors.workspace = true
edition.workspace = true
@ -14,7 +14,6 @@ publish = false
rust-version.workspace = true
[lib]
name = "slint"
path = "lib.rs"
crate-type = ["cdylib"]
@ -26,3 +25,6 @@ pyo3 = { version = "0.20.0", features = ["extension-module", "indexmap", "chrono
indexmap = { version = "2.1.0" }
chrono = "0.4"
spin_on = "0.1"
[package.metadata.maturin]
python-source = "slint"

View file

@ -6,7 +6,7 @@ requires = ["maturin>=1,<2"]
build-backend = "maturin"
[project]
name = "pyslint"
name = "slint"
version = "1.4.0"
classifiers = [
"Development Status :: 3 - Alpha",

View file

@ -0,0 +1,10 @@
# Copyright © SixtyFPS GmbH <info@slint.dev>
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
from . import slint as native
def load_file(path):
compiler = native.ComponentCompiler()
compdef = compiler.build_from_path(path)
instance = compdef.create()
return instance

View file

@ -2,11 +2,11 @@
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
import pytest
import slint
from slint import ValueType;
from slint import slint as native
from slint.slint import ValueType;
def test_basic_compiler():
compiler = slint.ComponentCompiler()
compiler = native.ComponentCompiler()
assert compiler.include_paths == []
compiler.include_paths = ["testing"]
@ -54,7 +54,7 @@ def test_basic_compiler():
assert instance != None
def test_compiler_build_from_path():
compiler = slint.ComponentCompiler()
compiler = native.ComponentCompiler()
assert len(compiler.diagnostics) == 0
@ -62,5 +62,5 @@ def test_compiler_build_from_path():
diags = compiler.diagnostics
assert len(diags) == 1
assert diags[0].level == slint.DiagnosticLevel.Error
assert diags[0].level == native.DiagnosticLevel.Error
assert diags[0].message.startswith("Could not load Nonexistent.slint:")

View file

@ -2,11 +2,11 @@
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
import pytest
import slint
from slint import ValueType;
from slint import slint as native
from slint.slint import ValueType;
def test_property_access():
compiler = slint.ComponentCompiler()
compiler = native.ComponentCompiler()
compdef = compiler.build_from_source("""
export global TestGlobal {
@ -69,7 +69,7 @@ def test_property_access():
assert instance.get_global_property("TestGlobal", "theglobalprop") == "Ok"
def test_callbacks():
compiler = slint.ComponentCompiler()
compiler = native.ComponentCompiler()
compdef = compiler.build_from_source("""
export global TestGlobal {
@ -113,8 +113,7 @@ def test_callbacks():
if __name__ == "__main__":
compiler = slint.ComponentCompiler()
compdef = compiler.build_from_path("../../examples/printerdemo/ui/printerdemo.slint")
instance = compdef.create()
import slint
instance = slint.load_file("../../examples/printerdemo/ui/printerdemo.slint")
instance.set_global_callback("PrinterQueue", "start-job", lambda title: print(f"new print job {title}"))
instance.run()

View file

@ -2,8 +2,8 @@
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
import pytest
import slint
from slint import ValueType
from slint import slint as native
from slint.slint import ValueType;
from datetime import timedelta
def test_timer():
@ -13,14 +13,14 @@ def test_timer():
global counter
counter = counter + 1
if counter >= 2:
slint.quit_event_loop()
native.quit_event_loop()
test_timer = slint.Timer()
test_timer.start(slint.TimerMode.Repeated, timedelta(milliseconds=100), quit_after_two_invocations)
slint.run_event_loop()
test_timer = native.Timer()
test_timer.start(native.TimerMode.Repeated, timedelta(milliseconds=100), quit_after_two_invocations)
native.run_event_loop()
test_timer.stop()
assert(counter == 2)
def test_single_shot():
slint.Timer.single_shot(timedelta(milliseconds=100), slint.quit_event_loop)
slint.run_event_loop()
native.Timer.single_shot(timedelta(milliseconds=100), native.quit_event_loop)
native.run_event_loop()