mwxlib 0.94.4__py3-none-any.whl → 0.94.6__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.

Potentially problematic release.


This version of mwxlib might be problematic. Click here for more details.

mwx/bookshelf.py CHANGED
@@ -27,7 +27,7 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
27
27
  'buffer_deleted' : [ None, self.on_buffer_deleted ],
28
28
  'buffer_activated' : [ None, self.on_buffer_selected ],
29
29
  'buffer_inactivated' : [ None, ],
30
- 'buffer_caption_reset' : [ None, self.on_buffer_caption ],
30
+ 'buffer_caption_reset' : [ None, self.on_buffer_filename ],
31
31
  'buffer_filename_reset' : [ None, self.on_buffer_filename ],
32
32
  },
33
33
  }
@@ -44,7 +44,7 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
44
44
 
45
45
  @self.handler.bind('f5 pressed')
46
46
  def refresh(v):
47
- self.update(clear=0)
47
+ self.build_tree(clear=0)
48
48
  if self.target:
49
49
  self.target.current_editor.SetFocus()
50
50
  wx.CallAfter(self.SetFocus)
@@ -73,7 +73,7 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
73
73
  self.target = target
74
74
  for editor in self.target.all_editors:
75
75
  editor.handler.append(self.context)
76
- self.update()
76
+ self.build_tree()
77
77
 
78
78
  def detach(self):
79
79
  if not self.target:
@@ -81,26 +81,23 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
81
81
  for editor in self.target.all_editors:
82
82
  editor.handler.remove(self.context)
83
83
  self.target = None
84
- self.update()
84
+ self.build_tree()
85
85
 
86
86
  ## --------------------------------
87
87
  ## TreeList/Ctrl wrapper interface
88
88
  ## --------------------------------
89
89
 
90
- def update(self, clear=True):
90
+ def build_tree(self, clear=True):
91
91
  """Build tree control.
92
92
  All items will be cleared if specified.
93
93
  """
94
- try:
95
- self.Freeze()
96
- if clear:
97
- self.DeleteAllItems()
98
- self.AddRoot(self.Name)
99
- if self.target:
100
- for editor in self.target.all_editors:
101
- self._set_item(self.RootItem, editor.Name, editor.all_buffers)
102
- finally:
103
- self.Thaw()
94
+ if clear:
95
+ self.DeleteAllItems()
96
+ self.AddRoot(self.Name)
97
+ if self.target:
98
+ for editor in self.target.all_editors:
99
+ self._set_item(self.RootItem, editor.Name, editor.all_buffers)
100
+ self.Refresh()
104
101
 
105
102
  def _get_item(self, root, key):
106
103
  """Returns the first item [root/key] found.
@@ -129,11 +126,11 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
129
126
  ## Actions for bookshelf interfaces
130
127
  ## --------------------------------
131
128
 
132
- @postcall
129
+ ## @postcall
133
130
  def on_buffer_new(self, buf):
134
- self.update(clear=0)
131
+ self.build_tree(clear=0)
135
132
 
136
- @postcall
133
+ ## @postcall
137
134
  def on_buffer_deleted(self, buf):
138
135
  self.Delete(buf.__itemId)
139
136
 
@@ -141,10 +138,6 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
141
138
  def on_buffer_selected(self, buf):
142
139
  self.SelectItem(buf.__itemId)
143
140
 
144
- @postcall
145
- def on_buffer_caption(self, buf):
146
- self.SetItemText(buf.__itemId, buf.caption_prefix + buf.name)
147
-
148
141
  @postcall
149
142
  def on_buffer_filename(self, buf):
150
143
  self.SetItemText(buf.__itemId, buf.caption_prefix + buf.name)
mwx/controls.py CHANGED
@@ -741,7 +741,7 @@ class ControlPanel(scrolled.ScrolledPanel):
741
741
  except AttributeError:
742
742
  p.value = v
743
743
  except Exception as e: # failed to eval
744
- print("- Failed to reset {!r}: {}".format(p, e))
744
+ print(f"- Failed to reset {p!r}:", e)
745
745
  pass
746
746
 
747
747
  reset_params = set_params #: for backward compatibility
mwx/framework.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #! python3
2
2
  """mwxlib framework.
3
3
  """
4
- __version__ = "0.94.4"
4
+ __version__ = "0.94.6"
5
5
  __author__ = "Kazuya O'moto <komoto@jeol.co.jp>"
6
6
 
7
7
  from functools import wraps, partial
@@ -13,7 +13,6 @@ import builtins
13
13
  import datetime
14
14
  import textwrap
15
15
  import time
16
- import sys
17
16
  import os
18
17
  import re
19
18
  import wx
@@ -47,8 +46,6 @@ def deb(target=None, loop=True, locals=None, **kwargs):
47
46
  Note:
48
47
  This will execute the startup script $(PYTHONSTARTUP).
49
48
  """
50
- import wx
51
-
52
49
  quote_unqoute = """
53
50
  Anything one man can imagine, other man can make real.
54
51
  --- Jules Verne (1828--1905)
@@ -297,12 +294,14 @@ class KeyCtrlInterfaceMixin:
297
294
  key += ' pressed'
298
295
 
299
296
  if map not in self.handler:
300
- warnings.warn(f"New map to define_key {keymap!r} in {self}.", stacklevel=2)
297
+ warnings.warn(f"New map to define_key {keymap!r} in {self}.",
298
+ stacklevel=2)
301
299
  self.make_keymap(map) # make new keymap
302
300
 
303
301
  transaction = self.handler[map].get(key, [state])
304
302
  if len(transaction) > 1:
305
- warnings.warn(f"Duplicate define_key {keymap!r} in {self}.", stacklevel=2)
303
+ warnings.warn(f"Duplicate define_key {keymap!r} in {self}.",
304
+ stacklevel=2)
306
305
 
307
306
  if action is None:
308
307
  self.handler[map].pop(key, None) # cf. undefine_key
@@ -328,7 +327,8 @@ class CtrlInterface(KeyCtrlInterfaceMixin):
328
327
 
329
328
  def __init__(self):
330
329
  if hasattr(self, 'handler'):
331
- warnings.warn(f"Duplicate iniheritance of CtrlInterface by {self}.", stacklevel=2)
330
+ warnings.warn(f"Duplicate iniheritance of CtrlInterface by {self}.",
331
+ stacklevel=2)
332
332
  return
333
333
  self.__key = ''
334
334
  self.__button = ''
@@ -633,7 +633,8 @@ class MenuBar(wx.MenuBar, TreeList):
633
633
  Call when the menulist is changed.
634
634
  """
635
635
  if not self.Parent:
636
- warnings.warn(f"No parents bound to {self}.", stacklevel=2)
636
+ warnings.warn(f"No parents bound to {self}.",
637
+ stacklevel=2)
637
638
  return
638
639
 
639
640
  menu = self.getmenu(key)
@@ -660,7 +661,8 @@ class MenuBar(wx.MenuBar, TreeList):
660
661
  Call when the menulist is changed.
661
662
  """
662
663
  if not self.Parent:
663
- warnings.warn(f"No parents bound to {self}.", stacklevel=2)
664
+ warnings.warn(f"No parents bound to {self}.",
665
+ stacklevel=2)
664
666
  return
665
667
 
666
668
  for j in range(self.GetMenuCount()): # remove and del all top-level menu
@@ -1004,7 +1006,7 @@ class AuiNotebook(aui.AuiNotebook):
1004
1006
  pane.name = f"pane{j+1}"
1005
1007
  self._mgr.LoadPerspective(frames)
1006
1008
  self._mgr.Update()
1007
- except Exception:
1009
+ except Exception as e:
1008
1010
  print("- Failed to load perspective:", e)
1009
1011
  finally:
1010
1012
  self.Parent.Thaw()
@@ -1176,15 +1178,18 @@ class ShellFrame(MiniFrame):
1176
1178
  self._mgr.SetDockSizeConstraint(0.5, 0.5) # (w, h)/N
1177
1179
 
1178
1180
  self._mgr.AddPane(self.console,
1179
- aui.AuiPaneInfo().Name("console").CenterPane().Show(1))
1181
+ aui.AuiPaneInfo().Name("console").CenterPane()
1182
+ .MaximizeButton().Show(1))
1180
1183
 
1181
1184
  self._mgr.AddPane(self.ghost,
1182
1185
  aui.AuiPaneInfo().Name("ghost")
1183
- .Caption("Ghost in the Shell").Right().Show(0))
1186
+ .Caption("Ghost in the Shell").Right()
1187
+ .MaximizeButton().Show(0))
1184
1188
 
1185
1189
  self._mgr.AddPane(self.watcher,
1186
1190
  aui.AuiPaneInfo().Name("watcher")
1187
- .Caption("Watchdog in the Shell").Right().Position(1).Show(0))
1191
+ .Caption("Watchdog in the Shell").Right().Position(1)
1192
+ .MaximizeButton().Show(0))
1188
1193
 
1189
1194
  self._mgr.Update()
1190
1195
 
@@ -1264,35 +1269,30 @@ class ShellFrame(MiniFrame):
1264
1269
  },
1265
1270
  })
1266
1271
 
1267
- ## py-mode
1268
1272
  self.Scratch.set_attributes(Style=Nautilus.STYLE)
1273
+ self.Log.set_attributes(ReadOnly=True)
1274
+ self.Help.set_attributes(ReadOnly=True)
1269
1275
 
1270
1276
  self.set_hookable(self.Scratch)
1277
+ self.set_hookable(self.Log)
1271
1278
 
1272
1279
  @self.Scratch.define_key('C-j')
1273
- @postcall
1274
1280
  def eval_line():
1275
1281
  shell = self.current_shell
1276
1282
  self.Scratch.buffer.py_eval_line(shell.globals, shell.locals)
1277
1283
 
1278
1284
  @self.Scratch.define_key('C-S-j')
1279
- @postcall
1280
1285
  def eval_buffer():
1281
1286
  shell = self.current_shell
1282
1287
  self.Scratch.buffer.py_exec_region(shell.globals, shell.locals)
1283
1288
 
1284
- ## text-mode
1285
- self.set_hookable(self.Log)
1289
+ ## Session
1290
+ self.SESSION_FILE = get_rootpath(".debrc")
1291
+ self.SCRATCH_FILE = get_rootpath("scratch.py")
1292
+ self.LOGGING_FILE = get_rootpath("deb-logging.log")
1286
1293
 
1287
- self.Log.set_attributes(ReadOnly=True)
1288
- self.Help.set_attributes(ReadOnly=True)
1289
-
1290
- self.load_session(
1291
- os.path.abspath(debrc) if debrc else self.SESSION_FILE)
1292
-
1293
- SESSION_FILE = get_rootpath(".debrc")
1294
- SCRATCH_FILE = get_rootpath("scratch.py")
1295
- LOGGING_FILE = get_rootpath("deb-logging.log")
1294
+ wx.CallAfter(self.load_session,
1295
+ os.path.abspath(debrc) if debrc else self.SESSION_FILE)
1296
1296
 
1297
1297
  def load_session(self, filename):
1298
1298
  """Load session from file."""
@@ -1304,14 +1304,11 @@ class ShellFrame(MiniFrame):
1304
1304
  except Exception:
1305
1305
  pass
1306
1306
 
1307
- for book in self.all_editors:
1308
- book.delete_all_buffers() # Note: *log* is also flushed.
1307
+ _fload(self.Scratch, self.SCRATCH_FILE) # restore scratch
1309
1308
 
1310
1309
  ## Re-open the *log* file.
1311
1310
  self.add_log("#! Opened: <{}>\r\n".format(datetime.datetime.now()))
1312
1311
 
1313
- _fload(self.Scratch, self.SCRATCH_FILE) # restore scratch
1314
-
1315
1312
  fn = os.path.abspath(filename)
1316
1313
  try:
1317
1314
  with open(fn, encoding='utf-8', newline='') as i:
@@ -1351,9 +1348,9 @@ class ShellFrame(MiniFrame):
1351
1348
  "self.ghost.SetSelection({})".format(self.ghost.Selection),
1352
1349
  "self.watcher.SetSelection({})".format(self.watcher.Selection),
1353
1350
  ## Note: Perspectives should be called after all pages have been added.
1354
- "wx.CallAfter(self._mgr.LoadPerspective, {!r})".format(self._mgr.SavePerspective()),
1355
- "wx.CallAfter(self.ghost.loadPerspective, {!r})".format(self.ghost.savePerspective()),
1356
- "wx.CallAfter(self.watcher.loadPerspective, {!r})".format(self.watcher.savePerspective()),
1351
+ "self._mgr.LoadPerspective({!r})".format(self._mgr.SavePerspective()),
1352
+ "self.ghost.loadPerspective({!r})".format(self.ghost.savePerspective()),
1353
+ "self.watcher.loadPerspective({!r})".format(self.watcher.savePerspective()),
1357
1354
  "self._mgr.Update()\n",
1358
1355
  )))
1359
1356
 
mwx/graphman.py CHANGED
@@ -413,7 +413,7 @@ class LayerInterface(CtrlInterface):
413
413
  try:
414
414
  if session:
415
415
  self.load_session(session)
416
- except Exception as e:
416
+ except Exception:
417
417
  traceback.print_exc()
418
418
  print("- Failed to load session of", self)
419
419
 
@@ -473,7 +473,7 @@ class LayerInterface(CtrlInterface):
473
473
  if canvas:
474
474
  canvas.draw_idle()
475
475
  except Exception as e:
476
- print("- Failed to draw Arts of {}: {}".format(self.__module__, e))
476
+ print(f"- Failed to draw Arts of {self.__module__}:", e)
477
477
  del self.Arts
478
478
 
479
479
 
@@ -1055,7 +1055,8 @@ class Frame(mwx.Frame):
1055
1055
 
1056
1056
  if issubclass(cls, LayerInterface):
1057
1057
  cls.__module__ = module.__name__ # __main__ to module
1058
- warnings.warn(f"Duplicate iniheritance of LayerInterface by {cls}.", stacklevel=2)
1058
+ warnings.warn(f"Duplicate iniheritance of LayerInterface by {cls}.",
1059
+ stacklevel=2)
1059
1060
  module.Plugin = cls
1060
1061
  return cls
1061
1062
 
@@ -1099,13 +1100,14 @@ class Frame(mwx.Frame):
1099
1100
  else:
1100
1101
  module = import_module(name)
1101
1102
  except Exception as e:
1102
- print("- Unable to load {!r}: {}".format(root, e))
1103
+ print(f"- Unable to load {root!r}:", e)
1103
1104
  return False
1104
1105
 
1105
1106
  ## the module must have a class `Plugin`.
1106
1107
  if not hasattr(module, 'Plugin'):
1107
1108
  if isinstance(root, type):
1108
- warnings.warn(f"Use dummy plug for debugging {name!r}.", stacklevel=3)
1109
+ warnings.warn(f"Use dummy plug for debugging {name!r}.",
1110
+ stacklevel=3)
1109
1111
  module.__dummy_plug__ = root
1110
1112
  self.register(root, module)
1111
1113
  else:
@@ -1154,7 +1156,7 @@ class Frame(mwx.Frame):
1154
1156
  try:
1155
1157
  if session:
1156
1158
  plug.load_session(session)
1157
- except Exception as e:
1159
+ except Exception:
1158
1160
  traceback.print_exc()
1159
1161
  print("- Failed to load session of", plug)
1160
1162
  return None
mwx/nutshell.py CHANGED
@@ -1891,10 +1891,10 @@ class EditorBook(AuiNotebook, CtrlInterface):
1891
1891
  self.Freeze()
1892
1892
  buf = Buffer(self, filename, style=wx.BORDER_DEFAULT)
1893
1893
  self.set_attributes(buf, **self.defaultBufferStyle)
1894
- self.handler('buffer_new', buf)
1895
1894
  if index is None:
1896
1895
  index = self.PageCount
1897
1896
  self.InsertPage(index, buf, buf.name)
1897
+ self.handler('buffer_new', buf)
1898
1898
  return buf
1899
1899
  finally:
1900
1900
  self.Thaw()
@@ -1995,7 +1995,7 @@ class EditorBook(AuiNotebook, CtrlInterface):
1995
1995
  return True
1996
1996
  return False
1997
1997
  except Exception as e:
1998
- self.post_message("Failed to load {!r}: {}".format(buf.name, e))
1998
+ self.post_message(f"Failed to load {filename!r}:", e)
1999
1999
  self.delete_buffer(buf)
2000
2000
  if org:
2001
2001
  self.swap_buffer(org)
@@ -2031,7 +2031,7 @@ class EditorBook(AuiNotebook, CtrlInterface):
2031
2031
  return True
2032
2032
  return False
2033
2033
  except Exception as e:
2034
- self.post_message("Failed to save {!r}: {}".format(buf.name, e))
2034
+ self.post_message(f"Failed to save {filename!r}:", e)
2035
2035
  return False
2036
2036
 
2037
2037
  def load_buffer(self, buf=None):
mwx/utilus.py CHANGED
@@ -35,6 +35,8 @@ def ignore(*category):
35
35
  with warnings.catch_warnings():
36
36
  warnings.simplefilter("ignore", category)
37
37
  yield
38
+
39
+
38
40
  def atom(v):
39
41
  return not hasattr(v, '__name__')
40
42
 
mwx/wxwit.py CHANGED
@@ -71,14 +71,6 @@ class Inspector(it.InspectionTree, CtrlInterface):
71
71
  ## InspectionTree wrapper interface
72
72
  ## --------------------------------
73
73
 
74
- def BuildTree(self, *args, **kwargs):
75
- """(override)"""
76
- try:
77
- self.Freeze()
78
- it.InspectionTree.BuildTree(self, *args, **kwargs)
79
- finally:
80
- self.Thaw()
81
-
82
74
  def SetObj(self, obj):
83
75
  """Called from tree.toolFrame -> SetObj."""
84
76
  if self.target is obj:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mwxlib
3
- Version: 0.94.4
3
+ Version: 0.94.6
4
4
  Summary: A wrapper of matplotlib and wxPython (phoenix)
5
5
  Home-page: https://github.com/komoto48g/mwxlib
6
6
  Author: Kazuya O'moto
@@ -1,19 +1,19 @@
1
1
  mwx/__init__.py,sha256=zLsXDgqyC5NsPCjRxjS2huvZ3uDyeOJ1vapotqe2ULM,834
2
- mwx/bookshelf.py,sha256=OWeEXMqdSF1IqAKV15TnZ_R5578AV5VDyaB7CWd2sjs,5258
3
- mwx/controls.py,sha256=1eguX5eofsA6hmS2y7R4hvlFjFikVoZ8v2S1ES7rjEU,47196
4
- mwx/framework.py,sha256=3Yn4lK7_qnafFitJGTtdRHetZmdxFms-PVDpOdX4kWY,75522
5
- mwx/graphman.py,sha256=UsNBo5Z1eiuXj3VkxCZds_Uy8R0cQV7mXoCwLtejbCE,70001
2
+ mwx/bookshelf.py,sha256=UVVIwHaGO4aEHwZ8x5SKjpL-3MmQ1s6kkyuyRZqKWvU,5070
3
+ mwx/controls.py,sha256=prp1NhZqv1XANhi2PPxW9jtrgwj_02XMOOyyzZ48klM,47185
4
+ mwx/framework.py,sha256=Wxpr9WDshKkKG4x91POCHgU2TZoFhW9X4U8O6Lbxnck,75581
5
+ mwx/graphman.py,sha256=9MG0BzQh5lDDadyPPXps2M0hf6mPN3G0MQbBGdplY_I,70027
6
6
  mwx/images.py,sha256=mrnUYH12I3XLVSZcEXlpVltX0XMxufbl2yRvDIQJZqc,49957
7
7
  mwx/matplot2.py,sha256=qaF_gvLoLn-TimLbRR59KUavNr1ZpZQdSMqjzJk47rk,32682
8
8
  mwx/matplot2g.py,sha256=mDaD367wjq6xsyIDX9ot8jLwYYGayoavWMhqsQVBHac,65442
9
9
  mwx/matplot2lg.py,sha256=tg8u7w4DxiJdPN-E197NOmbQpc_1gZkgDHYv_xUhbFA,27224
10
10
  mwx/mgplt.py,sha256=ITzxA97yDwr_35BUk5OqnyskSuKVDbpf2AQCKY1jHTI,5671
11
- mwx/nutshell.py,sha256=tlpYJEpe9sRSnILZBHqu85kQ0VGzTGeLT4PpRDcJPno,135647
12
- mwx/utilus.py,sha256=5GVSNKyvNWxsDftIrTJUhBlnQAh3zvrW5BuQSGasJv8,37395
11
+ mwx/nutshell.py,sha256=qz4qnEuGm5vEUtltux6caBLAoth92qc1zAyEmL6nbCg,135625
12
+ mwx/utilus.py,sha256=FTJhVFmx6TAE5rvZ_nfxZgyyaW4zMpXEz74v72X6m7Y,37399
13
13
  mwx/wxmon.py,sha256=Qk86VbuuW2rR46pqEYLur13G_aloWz5SVv6sib30YY0,12717
14
14
  mwx/wxpdb.py,sha256=2z3ZD9Oo1H-ONBHlaprkB9hrTmAI7o03sqO46ppEFE4,19129
15
15
  mwx/wxwil.py,sha256=JK1du4i1RVMbDLqN8jLRDSu_JhKEp4mhHVMElzo4yoE,5578
16
- mwx/wxwit.py,sha256=2gFHi-8nwWRh26RdvZ_AUP--8PDjJB8TUU72y2fBUWM,7557
16
+ mwx/wxwit.py,sha256=MQxXR6VqqT25K6dTQ1U_42SMq1yJT6y54xrMq-OMOaQ,7334
17
17
  mwx/plugins/__init__.py,sha256=jnJ-Sl9XJ_7BFDslD_r7dsbxsOT57q_IaEriV53XIGY,41
18
18
  mwx/plugins/ffmpeg_view.py,sha256=vUYNybIJsF1JGkDzjBgDyBQvDh8e1oKHlEMY5Fwc8L4,9399
19
19
  mwx/plugins/fft_view.py,sha256=evj2kCe6N10JQczW8IajgLVrUWOihQaHQ2xiBzAsAl4,2675
@@ -21,8 +21,8 @@ mwx/plugins/frame_listview.py,sha256=T-2xSv_D2bk9fJ64aiSEe1rJRTeqaIpLVAYEUXW5vz8
21
21
  mwx/plugins/line_profile.py,sha256=WJB5z7F53yg4dII2R36IFZvtkSOGWT669b1HmAAXSnQ,816
22
22
  mwx/py/__init__.py,sha256=xykgfOytOwNuvXsfkLoumFZSTN-iBsHOjczYXngjmUE,12
23
23
  mwx/py/filling.py,sha256=KaHooM32hrGGgqw75Cbt8lAvACwC6RXadob9LGgNnEc,16806
24
- mwxlib-0.94.4.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
25
- mwxlib-0.94.4.dist-info/METADATA,sha256=kgPD9dBMgo_dMK-YF1Fye0nl2LqFpduWFVt9EgdXn7c,1925
26
- mwxlib-0.94.4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
27
- mwxlib-0.94.4.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
28
- mwxlib-0.94.4.dist-info/RECORD,,
24
+ mwxlib-0.94.6.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
25
+ mwxlib-0.94.6.dist-info/METADATA,sha256=jTXP1YrO9TOtK_CcgwIuZpoMNSKJ8H-VGmRfiqYoJgY,1925
26
+ mwxlib-0.94.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
27
+ mwxlib-0.94.6.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
28
+ mwxlib-0.94.6.dist-info/RECORD,,