mwxlib 0.94.2__py3-none-any.whl → 0.94.5__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
@@ -2,29 +2,17 @@
2
2
  import re
3
3
  import wx
4
4
 
5
- from .utilus import TreeList
6
- from .nutshell import EditorBook
7
- from .framework import CtrlInterface
5
+ from .framework import CtrlInterface, postcall
8
6
 
9
7
 
10
- class ItemData:
11
- """Item data for TreeListCtrl
12
- """
13
- def __init__(self, tree, buffer):
14
- self.tree = tree
15
- self.buffer = buffer
16
- self._itemId = None #: reference <TreeItemId>
17
-
18
-
19
- class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface, TreeList):
20
- """TreeList control
8
+ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
9
+ """TreeList/Ctrl
21
10
 
22
11
  Construct treectrl in the order of tree:list.
23
12
  """
24
13
  def __init__(self, parent, *args, **kwargs):
25
14
  wx.TreeCtrl.__init__(self, parent, *args, **kwargs)
26
15
  CtrlInterface.__init__(self)
27
- TreeList.__init__(self)
28
16
 
29
17
  self.Font = wx.Font(9, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
30
18
 
@@ -39,7 +27,7 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface, TreeList):
39
27
  'buffer_deleted' : [ None, self.on_buffer_deleted ],
40
28
  'buffer_activated' : [ None, self.on_buffer_selected ],
41
29
  'buffer_inactivated' : [ None, ],
42
- 'buffer_caption_reset' : [ None, self.on_buffer_caption ],
30
+ 'buffer_caption_reset' : [ None, self.on_buffer_filename ],
43
31
  'buffer_filename_reset' : [ None, self.on_buffer_filename ],
44
32
  },
45
33
  }
@@ -52,18 +40,20 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface, TreeList):
52
40
  def enter(v):
53
41
  data = self.GetItemData(self.Selection)
54
42
  if data:
55
- data.buffer.SetFocus()
43
+ data.SetFocus()
56
44
 
57
45
  @self.handler.bind('f5 pressed')
58
46
  def refresh(v):
59
- self.reset(clear=0)
47
+ self.build_tree(clear=0)
48
+ if self.target:
49
+ self.target.current_editor.SetFocus()
50
+ wx.CallAfter(self.SetFocus)
60
51
 
61
52
  @self.handler.bind('delete pressed')
62
53
  def delete(v):
63
54
  data = self.GetItemData(self.Selection)
64
55
  if data:
65
- buf = data.buffer
66
- buf.parent.kill_buffer(buf) # -> focus moves
56
+ data.parent.kill_buffer(data) # -> focus moves
67
57
  wx.CallAfter(self.SetFocus)
68
58
 
69
59
  @self.handler.bind('*button* pressed')
@@ -75,29 +65,39 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface, TreeList):
75
65
 
76
66
  def OnDestroy(self, evt):
77
67
  if evt.EventObject is self:
78
- self.unwatch()
68
+ self.detach()
79
69
  evt.Skip()
80
70
 
71
+ def attach(self, target):
72
+ self.detach()
73
+ self.target = target
74
+ for editor in self.target.all_editors:
75
+ editor.handler.append(self.context)
76
+ self.build_tree()
77
+
78
+ def detach(self):
79
+ if not self.target:
80
+ return
81
+ for editor in self.target.all_editors:
82
+ editor.handler.remove(self.context)
83
+ self.target = None
84
+ self.build_tree()
85
+
81
86
  ## --------------------------------
82
87
  ## TreeList/Ctrl wrapper interface
83
88
  ## --------------------------------
84
89
 
85
- def reset(self, clear=True):
90
+ def build_tree(self, clear=True):
86
91
  """Build tree control.
87
- All items will be reset after clear if specified.
92
+ All items will be cleared if specified.
88
93
  """
89
- try:
90
- self.Freeze()
91
- wnd = wx.Window.FindFocus() # original focus
92
- if clear:
93
- self.DeleteAllItems()
94
- self.AddRoot(self.Name)
95
- for branch in self:
96
- self._set_item(self.RootItem, *branch)
97
- finally:
98
- if wnd:
99
- wnd.SetFocus() # restore focus
100
- 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()
101
101
 
102
102
  def _get_item(self, root, key):
103
103
  """Returns the first item [root/key] found.
@@ -110,83 +110,42 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface, TreeList):
110
110
  return item
111
111
  item, cookie = self.GetNextChild(root, cookie)
112
112
 
113
- def _set_item(self, root, key, *values):
114
- """Set the item [root/key] with values recursively.
113
+ def _set_item(self, root, key, data):
114
+ """Set the item [root/key] with data recursively.
115
115
  """
116
116
  item = self._get_item(root, key) or self.AppendItem(root, key)
117
- branches = next((x for x in values if isinstance(x, (tuple, list))), [])
118
- rest = [x for x in values if x not in branches]
119
- if rest:
120
- ## Take the first element assuming it's client data.
121
- ## Set the item client data. (override as needed)
122
- try:
123
- data = rest[0]
124
- data._itemId = item
125
- self.SetItemData(item, data)
126
- buf = data.buffer
127
- self.SetItemText(item, buf.caption_prefix + buf.name)
128
- except AttributeError:
129
- pass
130
- for branch in branches:
131
- self._set_item(item, *branch)
117
+ if isinstance(data, list):
118
+ for buf in data:
119
+ self._set_item(item, buf.name, buf)
120
+ else:
121
+ data.__itemId = item
122
+ self.SetItemData(item, data)
123
+ self.SetItemText(item, data.caption_prefix + data.name)
132
124
 
133
125
  ## --------------------------------
134
126
  ## Actions for bookshelf interfaces
135
127
  ## --------------------------------
136
128
 
137
- def reset_tree(self, editor):
138
- """Reset a branch for EditorBook/Buffer."""
139
- self[editor.Name] = [
140
- [buf.name, ItemData(self, buf)] for buf in editor.all_buffers
141
- ]
142
-
143
- def watch(self, target):
144
- self.unwatch()
145
- self.target = target
146
- if self.target:
147
- for editor in self.target.get_pages(EditorBook):
148
- editor.handler.append(self.context)
149
- self.reset_tree(editor)
150
- self.reset()
151
-
152
- def unwatch(self):
153
- if self.target:
154
- for editor in self.target.get_pages(EditorBook):
155
- editor.handler.remove(self.context)
156
- self[:] = [] # clear tree
157
- self.reset()
158
- self.target = None
159
-
129
+ ## @postcall
160
130
  def on_buffer_new(self, buf):
161
- self[f"{buf.parent.Name}/{buf.name}"] = ItemData(self, buf)
162
- self.reset(clear=0)
131
+ self.build_tree(clear=0)
163
132
 
133
+ ## @postcall
164
134
  def on_buffer_deleted(self, buf):
165
- del self[f"{buf.parent.Name}/{buf.name}"]
166
- self.reset()
135
+ self.Delete(buf.__itemId)
167
136
 
137
+ @postcall
168
138
  def on_buffer_selected(self, buf):
169
- data = self[f"{buf.parent.Name}/{buf.name}"]
170
- self.SelectItem(data._itemId)
171
-
172
- def on_buffer_caption(self, buf):
173
- data = self[f"{buf.parent.Name}/{buf.name}"]
174
- self.SetItemText(data._itemId, buf.caption_prefix + buf.name)
139
+ self.SelectItem(buf.__itemId)
175
140
 
141
+ @postcall
176
142
  def on_buffer_filename(self, buf):
177
- self.reset_tree(buf.parent)
178
- self.reset()
143
+ self.SetItemText(buf.__itemId, buf.caption_prefix + buf.name)
179
144
 
180
145
  def OnSelChanged(self, evt):
181
146
  if self and self.HasFocus():
182
147
  data = self.GetItemData(evt.Item)
183
- if data and data.buffer:
184
- data.buffer.SetFocus()
148
+ if data:
149
+ data.SetFocus()
185
150
  self.SetFocus()
186
151
  evt.Skip()
187
-
188
- ## def OnItemTooltip(self, evt):
189
- ## data = self.GetItemData(evt.Item)
190
- ## if data and data.buffer:
191
- ## evt.SetToolTip(data.buffer.filename)
192
- ## evt.Skip()
mwx/framework.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #! python3
2
2
  """mwxlib framework.
3
3
  """
4
- __version__ = "0.94.2"
4
+ __version__ = "0.94.5"
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)
@@ -1004,7 +1001,7 @@ class AuiNotebook(aui.AuiNotebook):
1004
1001
  pane.name = f"pane{j+1}"
1005
1002
  self._mgr.LoadPerspective(frames)
1006
1003
  self._mgr.Update()
1007
- except Exception:
1004
+ except Exception as e:
1008
1005
  print("- Failed to load perspective:", e)
1009
1006
  finally:
1010
1007
  self.Parent.Thaw()
@@ -1016,7 +1013,7 @@ class FileDropLoader(wx.DropTarget):
1016
1013
  def __init__(self, target):
1017
1014
  wx.DropTarget.__init__(self)
1018
1015
 
1019
- self.book = target
1016
+ self.editor = target
1020
1017
  self.textdo = wx.TextDataObject()
1021
1018
  self.filedo = wx.FileDataObject()
1022
1019
  self.DataObject = wx.DataObjectComposite()
@@ -1024,7 +1021,7 @@ class FileDropLoader(wx.DropTarget):
1024
1021
  self.DataObject.Add(self.filedo, True)
1025
1022
 
1026
1023
  def OnData(self, x, y, result):
1027
- editor = self.book
1024
+ editor = self.editor
1028
1025
  self.GetData()
1029
1026
  if self.textdo.TextLength > 1:
1030
1027
  f = self.textdo.Text.strip()
@@ -1156,12 +1153,9 @@ class ShellFrame(MiniFrame):
1156
1153
 
1157
1154
  self.Bookshelf = EditorTreeCtrl(self, name="Bookshelf",
1158
1155
  style=wx.TR_DEFAULT_STYLE|wx.TR_HIDE_ROOT)
1159
- self.Bookshelf.watch(self.ghost)
1156
+ self.Bookshelf.attach(self)
1160
1157
 
1161
1158
  self.ghost.AddPage(self.Bookshelf, "Bookshelf", bitmap=Icon('book'))
1162
- ## self._mgr.AddPane(self.Bookshelf,
1163
- ## aui.AuiPaneInfo().Name("bookshelf")
1164
- ## .Caption("Bookshelf").Right().Show(1))
1165
1159
 
1166
1160
  self.ghost.SetDropTarget(FileDropLoader(self.Scratch))
1167
1161
 
@@ -1250,7 +1244,7 @@ class ShellFrame(MiniFrame):
1250
1244
  'add_log' : [ None, self.add_log ],
1251
1245
  'add_help' : [ None, self.add_help ],
1252
1246
  'title_window' : [ None, self.on_title_window ],
1253
- 'buffer_caption_reset' : [ None, self.on_buffer_caption ],
1247
+ 'buffer_caption_reset' : [ None, self.on_buffer_caption ], # => self.OnActivate
1254
1248
  },
1255
1249
  0 : {
1256
1250
  '* pressed' : (0, fork_debugger),
@@ -1638,7 +1632,7 @@ class ShellFrame(MiniFrame):
1638
1632
  filename, ln = m.groups()
1639
1633
  lineno = int(ln)
1640
1634
  editor = self.find_editor(filename) or self.Log
1641
- ret = self._load(filename, lineno, editor, verbose=1)
1635
+ ret = editor.load_file(filename, lineno, verbose=1)
1642
1636
  if ret:
1643
1637
  self.popup_window(editor, show, focus)
1644
1638
  return ret
@@ -1912,13 +1906,21 @@ class ShellFrame(MiniFrame):
1912
1906
  """Yields all editors in the notebooks."""
1913
1907
  yield from self.ghost.get_pages(type(self.Log))
1914
1908
 
1909
+ @property
1910
+ def current_editor(self):
1911
+ """Currently selected editor or scratch."""
1912
+ editor = self.ghost.CurrentPage
1913
+ if isinstance(editor, type(self.Log)):
1914
+ return editor
1915
+ return next((x for x in self.all_editors if x.IsShown()), self.Scratch)
1916
+
1915
1917
  def find_editor(self, fn):
1916
1918
  """Find an editor which has the specified fn:filename or code."""
1917
- for editor in self.all_editors:
1918
- buf = editor.find_buffer(fn)
1919
+ for book in self.all_editors:
1920
+ buf = book.find_buffer(fn)
1919
1921
  if buf:
1920
- editor.swap_page(buf)
1921
- return editor
1922
+ book.swap_page(buf)
1923
+ return book
1922
1924
 
1923
1925
  ## --------------------------------
1924
1926
  ## Find text dialog
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
 
@@ -1154,7 +1154,7 @@ class Frame(mwx.Frame):
1154
1154
  try:
1155
1155
  if session:
1156
1156
  plug.load_session(session)
1157
- except Exception as e:
1157
+ except Exception:
1158
1158
  traceback.print_exc()
1159
1159
  print("- Failed to load session of", plug)
1160
1160
  return None
mwx/matplot2g.py CHANGED
@@ -946,8 +946,6 @@ class GraphPlot(MatplotPanel):
946
946
  xr, yr = max(nx), max(ny) # bottom-right
947
947
  self.message("[Region] "
948
948
  "crop={}:{}:{}:{}".format(xr-xo, yr-yo, xo, yo)) # (W:H:left:top)
949
- else:
950
- return self.trace_point(x[[0,-1]], y[[0,-1]], type)
951
949
 
952
950
  def writeln(self):
953
951
  """Puts (override) attributes of current frame to the modeline."""
mwx/nutshell.py CHANGED
@@ -290,7 +290,7 @@ class EditorInterface(CtrlInterface):
290
290
  self.__mark = -1
291
291
  self.__stylus = {}
292
292
 
293
- ## Custom constants embedded in stc
293
+ ## Custom constants embedded in wx.stc
294
294
  stc.STC_P_WORD3 = 20
295
295
  stc.STC_STYLE_CARETLINE = 40
296
296
  stc.STC_STYLE_ANNOTATION = 41
@@ -986,7 +986,7 @@ class EditorInterface(CtrlInterface):
986
986
  self.EnsureVisible(self.cline)
987
987
  yield err
988
988
 
989
- def grep_barckward(self, pattern, flags=re.M):
989
+ def grep_backward(self, pattern, flags=re.M):
990
990
  text = self.GetTextRange(0, self.cpos)
991
991
  errs = re.finditer(pattern, text, flags)
992
992
  for err in reversed(list(errs)):
@@ -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()
@@ -1965,7 +1965,7 @@ class EditorBook(AuiNotebook, CtrlInterface):
1965
1965
  """
1966
1966
  buf = self.find_buffer(filename)
1967
1967
  if not buf:
1968
- buf = self.create_buffer(filename)
1968
+ buf = self.create_buffer("*temp file*")
1969
1969
  elif buf.need_buffer_save and verbose:
1970
1970
  if wx.MessageBox( # Confirm load.
1971
1971
  "You are leaving unsaved content.\n\n"
@@ -3141,10 +3141,6 @@ class Nautilus(Shell, EditorInterface):
3141
3141
 
3142
3142
  def help(self, obj):
3143
3143
  """Full description."""
3144
- ## if obj is None:
3145
- ## self.message("Currently redirected to stdin/stdout.")
3146
- ## wx.CallAfter(pydoc.help)
3147
- ## return
3148
3144
  doc = pydoc.plain(pydoc.render_doc(obj))\
3149
3145
  or "No description about {}".format(obj)
3150
3146
  self.parent.handler('add_help', doc) or print(doc)
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.2
3
+ Version: 0.94.5
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=FrissUYdGXLABOzJmMaQU6GXvu6n_9DVW3d5wGwQzjM,6613
2
+ mwx/bookshelf.py,sha256=UVVIwHaGO4aEHwZ8x5SKjpL-3MmQ1s6kkyuyRZqKWvU,5070
3
3
  mwx/controls.py,sha256=1eguX5eofsA6hmS2y7R4hvlFjFikVoZ8v2S1ES7rjEU,47196
4
- mwx/framework.py,sha256=1QVxdGh9q2auq4hQV-DaJsAZellHuUd9jpYfPBUj0fA,75394
5
- mwx/graphman.py,sha256=UsNBo5Z1eiuXj3VkxCZds_Uy8R0cQV7mXoCwLtejbCE,70001
4
+ mwx/framework.py,sha256=Hi16j2sajupXq2_m37VMfxumj6eXwfaGq8Le26IMfFc,75494
5
+ mwx/graphman.py,sha256=kntmZcVxIubUtH7mLiDyDr2rXw_2iEvtV9DkFDYtt8s,69991
6
6
  mwx/images.py,sha256=mrnUYH12I3XLVSZcEXlpVltX0XMxufbl2yRvDIQJZqc,49957
7
7
  mwx/matplot2.py,sha256=qaF_gvLoLn-TimLbRR59KUavNr1ZpZQdSMqjzJk47rk,32682
8
- mwx/matplot2g.py,sha256=Ca-3RJZmSiZcvNrXmeK_lFf2fdG-0gkp7dYkCtrKi2I,65530
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=iJEFzcu5qfp-HxXORB8ci-Q1z7a8zTPwbfFxik5h6pY,135802
12
- mwx/utilus.py,sha256=5GVSNKyvNWxsDftIrTJUhBlnQAh3zvrW5BuQSGasJv8,37395
11
+ mwx/nutshell.py,sha256=VcUDTzqdBdHztVGfkjqEL9DUO6cKaGYvYCAME0Jl0qk,135647
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.2.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
25
- mwxlib-0.94.2.dist-info/METADATA,sha256=nG8tQUyP23iDpjnaedgv9mFikcFoIBpFhFhfgI0wlWY,1925
26
- mwxlib-0.94.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
27
- mwxlib-0.94.2.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
28
- mwxlib-0.94.2.dist-info/RECORD,,
24
+ mwxlib-0.94.5.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
25
+ mwxlib-0.94.5.dist-info/METADATA,sha256=tMDN9Giu-NWqUZx5Pzf0OzlAtx_P6HSMW8EVWd0scMw,1925
26
+ mwxlib-0.94.5.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
27
+ mwxlib-0.94.5.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
28
+ mwxlib-0.94.5.dist-info/RECORD,,