unisi 0.3.6__py3-none-any.whl → 0.3.7__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.
unisi/containers.py CHANGED
@@ -8,7 +8,8 @@ class Block(Unit):
8
8
  self._mark_changed = None
9
9
  self.name = name
10
10
  self.type = 'block'
11
- self.value = list(elems)
11
+ self.value = list(elems)
12
+ self._user = None
12
13
  self.add(options)
13
14
  if getattr(self,'scaler', False):
14
15
  scaler = ContentScaler(elements = lambda: self.scroll_list)
@@ -47,16 +48,15 @@ class Block(Unit):
47
48
  else:
48
49
  elem.llm = None
49
50
  print(f'Empty dependency list for llm calculation for {elem.name} {elem.type}!')
50
-
51
- user = Unishare.context_user()
51
+
52
52
  if hasattr(self,'closable'):
53
53
  def close(*_):
54
+ user = Unishare.context_user()
54
55
  delete_unit(user.screen.blocks, self.name)
55
- self.close = close
56
-
57
- self.set_reactivity(user)
56
+ self.close = close
58
57
 
59
58
  def set_reactivity(self, user, override = False):
59
+ self._user = user
60
60
  if user:
61
61
  super().set_reactivity(user, override)
62
62
  for elem in flatten(self.value):
@@ -72,13 +72,14 @@ class Block(Unit):
72
72
 
73
73
  @scroll_list.setter
74
74
  def scroll_list(self, lst):
75
- self.value = [self.value[0] if self.value else [], lst]
75
+ self.value = ChangedProxy([self.value[0] if self.value else [], lst], self)
76
76
  if hasattr(self,'scaler'):
77
77
  sval = self.scaler.value
78
78
  if sval != 1:
79
79
  self.scaler.value = 1
80
- self.scaler.changed(self.scaler, sval)
81
- self.set_reactivity(Unishare.context_user())
80
+ self.scaler.changed(self.scaler, sval)
81
+ for image in lst:
82
+ image.set_reactivity(self._user)
82
83
 
83
84
  def find(self, elem: Unit | str):
84
85
  for e in flatten(self.value):
@@ -123,8 +124,6 @@ class ParamBlock(Block):
123
124
  self.value.append(block)
124
125
  cnt += 1
125
126
  block.append(el)
126
-
127
- self.set_reactivity(Unishare.context_user())
128
127
 
129
128
  @property
130
129
  def params(self):
@@ -160,3 +159,8 @@ class Screen(Unit):
160
159
  self.name = name
161
160
  self.type = 'screen'
162
161
 
162
+ def set_reactivity(self, user, override = False):
163
+ super().set_reactivity(user, override)
164
+ for block in flatten(self.blocks):
165
+ block.set_reactivity(user, override)
166
+
unisi/units.py CHANGED
@@ -25,7 +25,7 @@ class ChangedProxy:
25
25
  return value
26
26
 
27
27
  def __setattr__(self, name, value):
28
- if name in ('_obj', '_unit'):
28
+ if name.startswith('_'):
29
29
  super().__setattr__(name, value)
30
30
  else:
31
31
  self._obj.__setattr__(name, value)
@@ -90,14 +90,14 @@ class Unit:
90
90
 
91
91
  def set_reactivity(self, user, override = False):
92
92
  changed_call = None
93
- if user:
94
- if not hasattr(self, 'id') and (override or not self._mark_changed):
95
- self.__dict__.update({property : ChangedProxy(value, self) for property, value in self.__dict__.items()
96
- if not isinstance(value, atomics) and not callable(value)})
97
-
98
- def changed_call(property = None, value = None):
99
- if self.specific_changed_register(property, value):
100
- user.register_changed_unit(self, property, value)
93
+
94
+ if not hasattr(self, 'id') and (override or not self._mark_changed):
95
+ self.__dict__.update({property : ChangedProxy(value, self) for property, value in self.__dict__.items()
96
+ if property[0] != '_' and not isinstance(value, atomics) and not callable(value)})
97
+
98
+ def changed_call(property = None, value = None):
99
+ if self.specific_changed_register(property, value):
100
+ user.register_changed_unit(self, property, value)
101
101
  super().__setattr__('_mark_changed', changed_call)
102
102
 
103
103
  def add(self, kwargs):
unisi/users.py CHANGED
@@ -217,7 +217,7 @@ class User:
217
217
  return ['toolbar', e.name]
218
218
 
219
219
  def prepare_result(self, raw):
220
- reload_screen = self.screen in self.changed_units
220
+ reload_screen = any(u.type == 'screen' for u in self.changed_units)
221
221
  if reload_screen or raw is True or raw == Redesign:
222
222
  self.screen.reload = reload_screen or raw == Redesign
223
223
  raw = self.screen
@@ -248,15 +248,17 @@ class User:
248
248
  if screen_change_message or message.screen_type:
249
249
  for s in self.screens:
250
250
  if s.name == message.value:
251
- self.screen_module = s
252
- if screen_change_message:
253
- break
254
- if self.voice:
255
- self.voice.set_screen(s.screen)
256
- self.voice.start()
257
- if getattr(s.screen,'prepare', None):
258
- s.screen.prepare()
259
- return True
251
+ if self.screen_module != s:
252
+ self.changed_units.add(s.screen)
253
+ self.screen_module = s
254
+ if screen_change_message:
255
+ break
256
+ if self.voice:
257
+ self.voice.set_screen(s.screen)
258
+ self.voice.start()
259
+ if getattr(s.screen,'prepare', None):
260
+ s.screen.prepare()
261
+ return True
260
262
  else:
261
263
  error = f'Unknown screen name: {message.value}'
262
264
  self.log(error)
unisi/voicecom.py CHANGED
@@ -28,7 +28,7 @@ def word_to_number(word: str):
28
28
 
29
29
  command_synonyms = dict( #-> words
30
30
  value = ['is', 'equals'],
31
- select = ['choose','set'],
31
+ root = ['select', 'choose','set'],
32
32
  backspace = ['back'],
33
33
  enter = ['push', 'execute','run'],
34
34
  clean = ['empty','erase'],
@@ -38,7 +38,7 @@ command_synonyms = dict( #-> words
38
38
  ok = ['okay']
39
39
  )
40
40
 
41
- root_commands = ['select', 'screen', 'stop', 'reset', 'ok']
41
+ root_commands = ['root', 'screen', 'stop', 'reset', 'ok']
42
42
  ext_root_commands = root_commands[:]
43
43
 
44
44
  modes = dict( #-> actions
@@ -62,7 +62,7 @@ for mode, commands in modes.items():
62
62
 
63
63
  class VoiceCom:
64
64
  def __init__(self, user):
65
- self.block = self.assist_block()
65
+ self.block = self.assist_block(user)
66
66
  self.user = user
67
67
  self.previous_unit_value_x = None
68
68
  self.unit = None
@@ -72,19 +72,22 @@ class VoiceCom:
72
72
  async def keyboard_input(self, _, value):
73
73
  return await self.process_string(value)
74
74
 
75
- def assist_block(self) -> Block:
75
+ def assist_block(self, user) -> Block:
76
76
  self.input = Edit('Recognized words', '', update = self.keyboard_input)
77
77
  self.message = Edit('System message', '', edit = False)
78
78
  self.context_list = Select('Elements', None, self.select_elem, type = 'list', width = 250)
79
79
  self.command_list = Select('Commands', None, self.select_command, type = 'list', width = 250)
80
80
 
81
- return Block("Mate:",
81
+ block = Block("Mate:",
82
82
  self.message,
83
83
  self.input,
84
84
  self.context_list,
85
85
  self.command_list,
86
86
  closable = True, icon = 'mic'
87
- )
87
+ )
88
+ block.set_reactivity(user)
89
+ return block
90
+
88
91
  def set_screen(self, screen):
89
92
  self.calc_interactive_units()
90
93
  self.screen = screen
@@ -94,7 +97,7 @@ class VoiceCom:
94
97
  elem.value = value
95
98
  if value:
96
99
  if self.mode == 'screen':
97
- return self.user.set_screen(value)
100
+ self.user.set_screen(value)
98
101
  self.activate_unit(self.name2unit.get(value, None))
99
102
 
100
103
  async def select_command(self, _, value):
@@ -285,11 +288,11 @@ class VoiceCom:
285
288
  self.input.value = ' '.join(self.buffer)
286
289
  case 'screen':
287
290
  if command == 'ok' and self.context:
288
- return self.user.set_screen(self.context)
291
+ self.user.set_screen(self.context)
289
292
  else:
290
293
  screen_name, similarity = self.buffer_suits_name(word)
291
294
  if similarity > 0.9:
292
- return self.user.set_screen(screen_name)
295
+ self.user.set_screen(screen_name)
293
296
  else:
294
297
  self.context = screen_name
295
298
  self.message.value = '"Ok" to confirm'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unisi
3
- Version: 0.3.6
3
+ Version: 0.3.7
4
4
  Summary: Unified System Interface, GUI and Remote API
5
5
  Author-Email: UNISI Tech <g.dernovoy@gmail.com>
6
6
  License: Apache-2.0
@@ -1,11 +1,11 @@
1
- unisi-0.3.6.dist-info/METADATA,sha256=kC-BQUL80ALV3IhLI4c7AYobZS7AjUwLhNofmGSwWjI,27449
2
- unisi-0.3.6.dist-info/WHEEL,sha256=pM0IBB6ZwH3nkEPhtcp50KvKNX-07jYtnb1g1m6Z4Co,90
3
- unisi-0.3.6.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
- unisi-0.3.6.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1
+ unisi-0.3.7.dist-info/METADATA,sha256=tH5Nkp5SF1MCz7LLmbc19Qsz-9z6N55cJaHI7A_EIQA,27449
2
+ unisi-0.3.7.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
3
+ unisi-0.3.7.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
+ unisi-0.3.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
5
5
  unisi/__init__.py,sha256=JVioDSebhtmoYTldT6ChEayuRTHOgYsAflcxcBYWBTY,279
6
6
  unisi/autotest.py,sha256=qYKwSPEPUEio6koUSu1tc71pDkX-doCQJlyRppaXCtY,8709
7
7
  unisi/common.py,sha256=f8UEj1R4V5KxpKnetcuxsBbeONNaRrL0LpL07HsFPuM,5511
8
- unisi/containers.py,sha256=CUogDcpGCIiWGlj1Cdfi4C8DjTUwwRL94Wh_6VqnR5k,7026
8
+ unisi/containers.py,sha256=KfWowgU2ab94BHL_gvZNpQ1X5PfZHJlV7YlpvWwJKhE,7249
9
9
  unisi/dbunits.py,sha256=G__LLHS-WqdYB4KOOfIYGfcK_SgRWD6LbMj6wqVCyxw,7423
10
10
  unisi/graphs.py,sha256=DTyLUPzi9ErKY6ADXVMXf9-uJskNISZY_xDvsnhMs1Q,6959
11
11
  unisi/jsoncomparison/__init__.py,sha256=lsWkYEuL6v3Qol-lwSUvB6y63tm6AKcCMUd4DZDx3Cg,350
@@ -20,10 +20,10 @@ unisi/proxy.py,sha256=QMHSSFJtmVZIexIMAsuFNlF5JpnYNG90rkTM3PYJhY4,7750
20
20
  unisi/reloader.py,sha256=WKY2TrmxLbQTknvZuY1IHInnwSgWXFbUoOtrdbh6yNo,6869
21
21
  unisi/server.py,sha256=URTreRlTlqpa6XnzcXk4L1LGDE9rWTca-C-85JcEtLg,6078
22
22
  unisi/tables.py,sha256=yF6Y2dczZoSD3fo7K14pyo3vP6A0U8dt-u4xY0SS8HU,13848
23
- unisi/units.py,sha256=ylegaC_Ollnw6MdrIOUjDhy1-GBHTBp1XxKHy1ntAiQ,10992
24
- unisi/users.py,sha256=2n2pSyNiCUJIVf5sTWq1J2I-2cdoVsqY9Gcoz0rWwdE,15950
23
+ unisi/units.py,sha256=dz32RPejz0SlCpysgwaEuxYS0crqsyzhGITe8Tu8wzg,10962
24
+ unisi/users.py,sha256=W9QO1773xdSdk3w7bfctJSsPakAMD1_HY7sKVdHRUgY,16109
25
25
  unisi/utils.py,sha256=NHoRMItaMleHg2UEp96_zzvrtGaZHcLNUZqmKkEwiHQ,2474
26
- unisi/voicecom.py,sha256=KJOKNui9H2HXPJUBys5kIl03nhMvsaIUC4bWBKBtc_U,16650
26
+ unisi/voicecom.py,sha256=QzS1gIrBeGLO5dEwiu7KIEdJIIVbPBZFGb5nY632Ws8,16707
27
27
  unisi/web/css/715.b9adf6e0.css,sha256=qCrEgBq7Nh72Eud21l81kYXEmdx0n75yU41ksuiBosQ,3264
28
28
  unisi/web/css/app.31d6cfe0.css,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  unisi/web/css/vendor.f7e3cefe.css,sha256=0cbvPPBV-_jv7jBIC9glq8c1QgCowWt_TxoBalHGdAs,220668
@@ -46,4 +46,4 @@ unisi/web/js/715.85ab2263.js,sha256=bFrNpz9nqi4gTv983uwGl-UReWI6r4I_IF9P1-iyQlc,
46
46
  unisi/web/js/935.cc0c012c.js,sha256=FzVIRBr4vyQgW38ROCoh929gtzuXqM73Cf77vejfDWk,6561
47
47
  unisi/web/js/app.5ba3308e.js,sha256=ddyKZ0-oImCxOSfWqS5WTXsToI9rq8FBhab-DDQA8Dw,6150
48
48
  unisi/web/js/vendor.1bb14e9d.js,sha256=7q80jaZcms7UhWSqHAk2pXSx67cYQJGlsp-6DBXBZuU,1253597
49
- unisi-0.3.6.dist-info/RECORD,,
49
+ unisi-0.3.7.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: pdm-backend (2.4.2)
2
+ Generator: pdm-backend (2.4.3)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any