ex4nicegui 0.8.0__py3-none-any.whl → 0.8.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,58 @@
1
+ from typing import Tuple
2
+ from . import utils
3
+ from .base import Proxy
4
+
5
+
6
+ class BoolProxy(Proxy):
7
+ def __init__(self, value: bool):
8
+ from ex4nicegui.utils.signals import to_ref
9
+
10
+ if isinstance(value, (bool, int)):
11
+ self._ref = to_ref(value)
12
+ else:
13
+ raise ValueError("only accepts boolean or integer values")
14
+
15
+ def __bool__(self):
16
+ return self._ref.value
17
+
18
+ def __str__(self):
19
+ return str(self._ref.value)
20
+
21
+ def __eq__(self, other):
22
+ return self._ref.value.__eq__(utils.to_value(other))
23
+
24
+ def __ne__(self, other):
25
+ return self._ref.value.__ne__(utils.to_value(other))
26
+
27
+ def __lt__(self, value) -> bool:
28
+ return self._ref.value.__lt__(bool(utils.to_value(value)))
29
+
30
+ def __le__(self, value) -> bool:
31
+ return self._ref.value.__le__(bool(utils.to_value(value)))
32
+
33
+ def __gt__(self, value) -> bool:
34
+ return self._ref.value.__gt__(bool(utils.to_value(value)))
35
+
36
+ def __ge__(self, value) -> bool:
37
+ return self._ref.value.__ge__(bool(utils.to_value(value)))
38
+
39
+ def __and__(self, other):
40
+ return self._ref.value.__and__(utils.to_value(other))
41
+
42
+ def __or__(self, other):
43
+ return self._ref.value.__or__(utils.to_value(other))
44
+
45
+ def __xor__(self, other):
46
+ return self._ref.value.__xor__(utils.to_value(other))
47
+
48
+ def __rand__(self, value: bool, /) -> bool:
49
+ return self._ref.value.__rand__(value)
50
+
51
+ def __ror__(self, value: bool, /) -> bool:
52
+ return self._ref.value.__ror__(value)
53
+
54
+ def __rxor__(self, value: bool, /) -> bool:
55
+ return self._ref.value.__rxor__(value)
56
+
57
+ def __getnewargs__(self) -> Tuple[int]:
58
+ return (int(self._ref.value),)
@@ -0,0 +1,88 @@
1
+ from . import utils
2
+ import datetime
3
+ from .base import Proxy
4
+
5
+
6
+ class DateProxy(Proxy, datetime.date):
7
+ def __new__(cls, year, month=None, day=None):
8
+ return super().__new__(cls, year, month, day)
9
+
10
+ def __init__(self, year, month, day):
11
+ from ex4nicegui.utils.signals import to_ref
12
+
13
+ self._ref = to_ref(datetime.date(year, month, day))
14
+
15
+ def __str__(self):
16
+ return str(self._ref.value)
17
+
18
+ def ctime(self):
19
+ return self._ref.value.ctime()
20
+
21
+ def strftime(self, fmt):
22
+ return self._ref.value.strftime(fmt)
23
+
24
+ def __format__(self, fmt):
25
+ return self._ref.value.__format__(fmt)
26
+
27
+ def isoformat(self):
28
+ return self._ref.value.isoformat()
29
+
30
+ @property
31
+ def year(self):
32
+ return self._ref.value.year
33
+
34
+ @property
35
+ def month(self):
36
+ return self._ref.value.month
37
+
38
+ @property
39
+ def day(self):
40
+ return self._ref.value.day
41
+
42
+ def timetuple(self):
43
+ return self._ref.value.timetuple()
44
+
45
+ def toordinal(self):
46
+ return self._ref.value.toordinal()
47
+
48
+ def replace(self, year=None, month=None, day=None):
49
+ return self._ref.value.replace(year=year, month=month, day=day)
50
+
51
+ def __eq__(self, other):
52
+ return self._ref.value.__eq__(utils.to_value(other))
53
+
54
+ def __le__(self, other):
55
+ return self._ref.value.__le__(utils.to_value(other))
56
+
57
+ def __lt__(self, other):
58
+ return self._ref.value.__lt__(utils.to_value(other))
59
+
60
+ def __ge__(self, other):
61
+ return self._ref.value.__ge__(utils.to_value(other))
62
+
63
+ def __gt__(self, other):
64
+ return self._ref.value.__gt__(utils.to_value(other))
65
+
66
+ def __hash__(self):
67
+ return self._ref.value.__hash__()
68
+
69
+ def __add__(self, other):
70
+ return self._ref.value.__add__(utils.to_value(other))
71
+
72
+ def __radd__(self, other):
73
+ return self._ref.value.__radd__(utils.to_value(other))
74
+
75
+ def __sub__(self, other):
76
+ return self._ref.value.__sub__(utils.to_value(other))
77
+
78
+ def weekday(self):
79
+ return self._ref.value.weekday()
80
+
81
+ def isoweekday(self):
82
+ return self._ref.value.isoweekday()
83
+
84
+ def isocalendar(self):
85
+ return self._ref.value.isocalendar()
86
+
87
+ def __reduce__(self):
88
+ return self._ref.value.__reduce__()
@@ -0,0 +1,126 @@
1
+ import sys
2
+ from typing import Any, Callable, Dict, List, Optional, Type, TypeVar, Generic
3
+ from .base import ProxyProtocol
4
+ from .int import IntProxy
5
+ from .list import ListProxy
6
+ from .string import StringProxy
7
+ from .float import FloatProxy
8
+ from .bool import BoolProxy
9
+ from .date import DateProxy
10
+ from .dict import DictProxy
11
+ import datetime
12
+ import warnings
13
+ from . import to_value_if_base_type_proxy
14
+
15
+ T = TypeVar("T")
16
+
17
+
18
+ class ProxyDescriptor(Generic[T]):
19
+ def __init__(
20
+ self,
21
+ name: str,
22
+ value: T,
23
+ proxy_builder: Callable[[T], ProxyProtocol],
24
+ proxy_rebuilder: Optional[Callable[[ProxyProtocol], ProxyProtocol]] = None,
25
+ ) -> None:
26
+ self.value = value
27
+ self.name = name
28
+ self._proxy_builder = proxy_builder
29
+ self._proxy_rebuilder = proxy_rebuilder
30
+
31
+ def __get__(self, instance: object, owner: Any):
32
+ if instance is None:
33
+ return self
34
+
35
+ proxy = instance.__dict__.get(self.name, None)
36
+ if proxy is None:
37
+ proxy = self._proxy_builder(self.value)
38
+ instance.__dict__[self.name] = proxy
39
+ else:
40
+ proxy = self._proxy_rebuilder(proxy) if self._proxy_rebuilder else proxy
41
+ proxy._ref.value # type: ignore
42
+ return proxy
43
+
44
+ def __set__(self, instance: object, value: T) -> None:
45
+ value = to_value_if_base_type_proxy(value)
46
+ proxy = instance.__dict__.get(self.name, None)
47
+ if proxy is None:
48
+ proxy = self._proxy_builder(value) # type: ignore
49
+ instance.__dict__[self.name] = proxy
50
+
51
+ proxy._ref.value = value # type: ignore
52
+
53
+
54
+ class IntDescriptor(ProxyDescriptor[int]):
55
+ def __init__(self, name: str, value: int) -> None:
56
+ super().__init__(name, value, IntProxy)
57
+
58
+
59
+ class ListDescriptor(ProxyDescriptor[Callable[[], List]]):
60
+ def __init__(self, name: str, value: Callable[[], List]) -> None:
61
+ super().__init__(name, value, lambda x: ListProxy(x() if callable(x) else x))
62
+
63
+
64
+ class DictDescriptor(ProxyDescriptor[Dict]):
65
+ def __init__(self, name: str, value: Dict) -> None:
66
+ super().__init__(name, value, DictProxy)
67
+
68
+
69
+ class StringDescriptor(ProxyDescriptor[str]):
70
+ def __init__(self, name: str, value: str) -> None:
71
+ def rebuild_proxy(proxy: ProxyProtocol) -> ProxyProtocol:
72
+ sp = StringProxy(proxy._ref.value)
73
+ sp._ref = proxy._ref
74
+ return sp
75
+
76
+ super().__init__(name, value, StringProxy, rebuild_proxy)
77
+
78
+
79
+ class FloatDescriptor(ProxyDescriptor[float]):
80
+ def __init__(self, name: str, value: float) -> None:
81
+ super().__init__(name, value, FloatProxy)
82
+
83
+
84
+ class BoolDescriptor(ProxyDescriptor[bool]):
85
+ def __init__(self, name: str, value: bool) -> None:
86
+ super().__init__(name, value, BoolProxy)
87
+
88
+
89
+ class DateDescriptor(ProxyDescriptor[datetime.date]):
90
+ def __init__(self, name: str, value: datetime.date) -> None:
91
+ super().__init__(name, value, lambda x: DateProxy(x.year, x.month, x.day))
92
+
93
+
94
+ def class_var_setter(cls: Type, name: str, value, list_var_flat: str) -> None:
95
+ if value is None or isinstance(value, str):
96
+ setattr(cls, name, StringDescriptor(name, value))
97
+ elif isinstance(value, bool):
98
+ setattr(cls, name, BoolDescriptor(name, value))
99
+ elif isinstance(value, int):
100
+ setattr(cls, name, IntDescriptor(name, value))
101
+ elif callable(value) and hasattr(value, list_var_flat):
102
+ setattr(cls, name, ListDescriptor(name, value))
103
+
104
+ elif isinstance(value, list):
105
+ if len(value) > 0:
106
+ with warnings.catch_warnings():
107
+ warnings.showwarning = _custom_showwarning
108
+ warnings.warn(
109
+ f"The variable [{cls.__name__}.{name}] will be empty list.you should initialize it in the constructor,or use list_var for definition.\n {name} = rxui.list_var(lambda:[1,2,3])",
110
+ stacklevel=3,
111
+ )
112
+ setattr(cls, name, ListDescriptor(name, lambda: []))
113
+
114
+ elif isinstance(value, dict):
115
+ pass # TODO
116
+ # setattr(cls, name, DictDescriptor(name, value))
117
+ elif isinstance(value, float):
118
+ setattr(cls, name, FloatDescriptor(name, value))
119
+ elif isinstance(value, datetime.date):
120
+ setattr(cls, name, DateDescriptor(name, value))
121
+ else:
122
+ pass
123
+
124
+
125
+ def _custom_showwarning(message, category, filename, lineno, file=None, line=None):
126
+ sys.stderr.write(f"{filename}:{lineno}: {category.__name__}: {message}\n")
@@ -0,0 +1,110 @@
1
+ import sys
2
+ from typing import Dict, Iterator, TypeVar, Generic
3
+ import datetime
4
+ from .string import StringProxy
5
+ from .int import IntProxy
6
+ from .float import FloatProxy
7
+ from .bool import BoolProxy
8
+ from .date import DateProxy
9
+
10
+ from signe import to_raw
11
+ from ex4nicegui.utils.signals import to_ref_wrapper
12
+
13
+
14
+ _KT = TypeVar("_KT")
15
+ _VT = TypeVar("_VT")
16
+
17
+
18
+ class DictProxy(dict, Generic[_KT, _VT]):
19
+ def __init__(self, value: Dict):
20
+ from ex4nicegui.utils.signals import deep_ref
21
+
22
+ super().__init__(value)
23
+ self._ref = deep_ref(value)
24
+
25
+ self.__key_cache = {}
26
+
27
+ def copy(self) -> Dict[_KT, _VT]:
28
+ return to_raw(self._ref.value).copy()
29
+
30
+ def keys(self):
31
+ return to_raw(self._ref.value).keys()
32
+
33
+ def values(self):
34
+ return to_raw(self._ref.value).values()
35
+
36
+ def items(self):
37
+ return to_raw(self._ref.value).items()
38
+
39
+ def get(self, key: _KT, default, /):
40
+ return self._ref.value.get(key, default)
41
+
42
+ def pop(self, key: _KT, default, /):
43
+ return self._ref.value.pop(key, default)
44
+
45
+ def __len__(self) -> int:
46
+ return self._ref.value.__len__()
47
+
48
+ def __getitem__(self, key: _KT, /):
49
+ print("getitem")
50
+ value = self._ref.value.__getitem__(key)
51
+
52
+ if isinstance(value, str):
53
+ if key not in self.__key_cache:
54
+ self.__key_cache[key] = StringProxy(value)
55
+
56
+ sp = self.__key_cache[key]
57
+
58
+ def getter():
59
+ return to_raw(self._ref.value)[key]
60
+
61
+ def setter(v):
62
+ self._ref.value[key] = v
63
+
64
+ sp._ref = to_ref_wrapper(getter, setter)
65
+
66
+ return sp
67
+ elif isinstance(value, int):
68
+ return IntProxy(value)
69
+ elif isinstance(value, float):
70
+ return FloatProxy(value)
71
+ elif isinstance(value, bool):
72
+ return BoolProxy(value)
73
+ elif isinstance(value, datetime.date):
74
+ return DateProxy(value.year, value.month, value.day)
75
+ else:
76
+ pass
77
+
78
+ return value
79
+
80
+ def __setitem__(self, key: _KT, value: _VT, /) -> None:
81
+ self._ref.value.__setitem__(key, value)
82
+
83
+ def __delitem__(self, key: _KT, /) -> None:
84
+ self._ref.value.__delitem__(key)
85
+
86
+ def __iter__(self) -> Iterator[_KT]:
87
+ return self._ref.value.__iter__()
88
+
89
+ def __eq__(self, value: object, /) -> bool:
90
+ return self._ref.value.__eq__(value)
91
+
92
+ def __reversed__(self) -> Iterator[_KT]:
93
+ return self._ref.value.__reversed__()
94
+
95
+ def __str__(self) -> str:
96
+ return self._ref.value.__str__()
97
+
98
+ def __contains__(self, key: object) -> bool:
99
+ return self._ref.value.__contains__(key)
100
+
101
+ if sys.version_info >= (3, 9):
102
+
103
+ def __or__(self, value, /):
104
+ return self._ref.value.__or__(value)
105
+
106
+ def __ror__(self, value, /):
107
+ return self._ref.value.__ror__(value)
108
+
109
+ def __ior__(self, value, /):
110
+ self._ref.value.update(value)
@@ -0,0 +1,153 @@
1
+ import sys
2
+ from typing import Any, Optional, SupportsIndex, Tuple, overload
3
+ from . import utils
4
+ from .base import Proxy
5
+
6
+
7
+ class FloatProxy(Proxy):
8
+ # def __new__(cls, value):
9
+ # return super().__new__(cls, value)
10
+
11
+ def __init__(self, value: float):
12
+ from ex4nicegui.utils.signals import to_ref
13
+
14
+ self._ref = to_ref(value)
15
+
16
+ def __str__(self) -> str:
17
+ return str(self._ref.value)
18
+
19
+ def as_integer_ratio(self) -> Tuple[int, int]:
20
+ return self._ref.value.as_integer_ratio()
21
+
22
+ def hex(self) -> str:
23
+ return self._ref.value.hex()
24
+
25
+ def is_integer(self) -> bool:
26
+ return self._ref.value.is_integer()
27
+
28
+ @property
29
+ def real(self) -> float:
30
+ return self._ref.value.real
31
+
32
+ @property
33
+ def imag(self) -> float:
34
+ return self._ref.value.imag
35
+
36
+ def conjugate(self) -> float:
37
+ return self._ref.value.conjugate()
38
+
39
+ def __add__(self, value: float, /) -> float:
40
+ return self._ref.value.__add__(float(utils.to_value(value)))
41
+
42
+ def __sub__(self, value: float, /) -> float:
43
+ return self._ref.value.__sub__(float(utils.to_value(value)))
44
+
45
+ def __mul__(self, value: float, /) -> float:
46
+ return self._ref.value.__mul__(float(utils.to_value(value)))
47
+
48
+ def __floordiv__(self, value: float, /) -> float:
49
+ return self._ref.value.__floordiv__(float(utils.to_value(value)))
50
+
51
+ def __truediv__(self, value: float, /) -> float:
52
+ return self._ref.value.__truediv__(float(utils.to_value(value)))
53
+
54
+ def __mod__(self, value: float, /) -> float:
55
+ return self._ref.value.__mod__(float(utils.to_value(value)))
56
+
57
+ def __divmod__(self, value: float, /) -> Tuple[float, float]:
58
+ return self._ref.value.__divmod__(float(utils.to_value(value)))
59
+
60
+ @overload
61
+ def __pow__(self, value: int, mod: None = None, /) -> float: ...
62
+ # positive __value -> float; negative __value -> complex
63
+ # return type must be Any as `float | complex` causes too many false-positive errors
64
+ @overload
65
+ def __pow__(self, value: float, mod: None = None, /) -> Any: ...
66
+
67
+ def __pow__(self, value: float, mod: None = None, /) -> Any:
68
+ return self._ref.value.__pow__(float(utils.to_value(value)), mod)
69
+
70
+ def __radd__(self, value: float, /) -> float:
71
+ return self._ref.value.__radd__(float(utils.to_value(value)))
72
+
73
+ def __rsub__(self, value: float, /) -> float:
74
+ return self._ref.value.__rsub__(float(utils.to_value(value)))
75
+
76
+ def __rmul__(self, value: float, /) -> float:
77
+ return self._ref.value.__rmul__(float(utils.to_value(value)))
78
+
79
+ def __rfloordiv__(self, value: float, /) -> float:
80
+ return self._ref.value.__rfloordiv__(float(utils.to_value(value)))
81
+
82
+ def __rtruediv__(self, value: float, /) -> float:
83
+ return self._ref.value.__rtruediv__(float(utils.to_value(value)))
84
+
85
+ def __rmod__(self, value: float, /) -> float:
86
+ return self._ref.value.__rmod__(float(utils.to_value(value)))
87
+
88
+ def __rdivmod__(self, value: float, /) -> Tuple[float, float]:
89
+ return self._ref.value.__rdivmod__(float(utils.to_value(value)))
90
+
91
+ def __rpow__(self, value, mod: None = None, /) -> float:
92
+ return self._ref.value.__rpow__(float(utils.to_value(value)), mod) # type: ignore
93
+
94
+ def __getnewargs__(self) -> Tuple[float]:
95
+ return (self._ref.value,)
96
+
97
+ def __trunc__(self) -> int:
98
+ return self._ref.value.__trunc__()
99
+
100
+ if sys.version_info >= (3, 9):
101
+
102
+ def __ceil__(self) -> int:
103
+ return self._ref.value.__ceil__()
104
+
105
+ def __floor__(self) -> int:
106
+ return self._ref.value.__floor__()
107
+
108
+ @overload
109
+ def __round__(self, ndigits: None = None, /) -> int: ...
110
+ @overload
111
+ def __round__(self, ndigits: SupportsIndex, /) -> float: ...
112
+
113
+ def __round__(self, ndigits: Optional[SupportsIndex] = None, /):
114
+ return self._ref.value.__round__(ndigits)
115
+
116
+ def __eq__(self, value: object, /) -> bool:
117
+ return self._ref.value.__eq__(float(utils.to_value(value)))
118
+
119
+ def __ne__(self, value: object, /) -> bool:
120
+ return self._ref.value.__ne__(float(utils.to_value(value)))
121
+
122
+ def __lt__(self, value: float, /) -> bool:
123
+ return self._ref.value.__lt__(float(utils.to_value(value)))
124
+
125
+ def __le__(self, value: float, /) -> bool:
126
+ return self._ref.value.__le__(float(utils.to_value(value)))
127
+
128
+ def __gt__(self, value: float, /) -> bool:
129
+ return self._ref.value.__gt__(float(utils.to_value(value)))
130
+
131
+ def __ge__(self, value: float, /) -> bool:
132
+ return self._ref.value.__ge__(float(utils.to_value(value)))
133
+
134
+ def __neg__(self) -> float:
135
+ return self._ref.value.__neg__()
136
+
137
+ def __pos__(self) -> float:
138
+ return self._ref.value.__pos__()
139
+
140
+ def __int__(self) -> int:
141
+ return self._ref.value.__int__()
142
+
143
+ def __float__(self) -> float:
144
+ return self._ref.value.__float__()
145
+
146
+ def __abs__(self) -> float:
147
+ return self._ref.value.__abs__()
148
+
149
+ def __hash__(self) -> int:
150
+ return self._ref.value.__hash__()
151
+
152
+ def __bool__(self) -> bool:
153
+ return self._ref.value.__bool__()