mwxlib 1.2.9__py3-none-any.whl → 1.3.0__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
@@ -99,14 +99,14 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
99
99
  }
100
100
  def _attach():
101
101
  if self and self.parent:
102
- for editor in self.parent.all_editors:
102
+ for editor in self.parent.get_all_editors():
103
103
  editor.handler.append(self.context)
104
104
  self.build_tree()
105
105
  wx.CallAfter(_attach)
106
106
 
107
107
  def OnDestroy(self, evt):
108
108
  if self and self.parent:
109
- for editor in self.parent.all_editors:
109
+ for editor in self.parent.get_all_editors():
110
110
  editor.handler.remove(self.context)
111
111
  evt.Skip()
112
112
 
@@ -129,8 +129,8 @@ class EditorTreeCtrl(wx.TreeCtrl, CtrlInterface):
129
129
  if clear:
130
130
  self.DeleteAllItems()
131
131
  self.AddRoot(self.Name)
132
- for editor in self.parent.all_editors:
133
- self._set_item(self.RootItem, editor.Name, editor.all_buffers)
132
+ for editor in self.parent.get_all_editors():
133
+ self._set_item(self.RootItem, editor.Name, editor.get_all_buffers())
134
134
  self.Refresh()
135
135
 
136
136
  def _gen_items(self, root, key=None):
mwx/controls.py CHANGED
@@ -591,6 +591,7 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
591
591
  for cc in obj.Children: # child of child <wx._core.SizerItem>
592
592
  cc.Show(not cc.IsShown())
593
593
  self.Layout()
594
+ self.SendSizeEvent()
594
595
  break
595
596
  evt.Skip()
596
597
 
mwx/framework.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #! python3
2
2
  """mwxlib framework.
3
3
  """
4
- __version__ = "1.2.9"
4
+ __version__ = "1.3.0"
5
5
  __author__ = "Kazuya O'moto <komoto@jeol.co.jp>"
6
6
 
7
7
  from contextlib import contextmanager
@@ -1337,8 +1337,8 @@ class ShellFrame(MiniFrame):
1337
1337
  o.write("self.SetSize({})\n".format(self.Size))
1338
1338
  o.write("self.SetPosition({})\n".format(self.Position))
1339
1339
 
1340
- for book in self.all_editors:
1341
- for buf in book.all_buffers:
1340
+ for book in self.get_all_editors():
1341
+ for buf in book.get_all_buffers():
1342
1342
  if buf.mtdelta is not None:
1343
1343
  o.write("self.{}.load_file({!r}, {})\n"
1344
1344
  .format(book.Name, buf.filename, buf.markline+1))
@@ -1446,8 +1446,8 @@ class ShellFrame(MiniFrame):
1446
1446
  "The trace pointer will be cleared.")
1447
1447
  self.debugger.unwatch() # cf. [pointer_unset] stop_trace
1448
1448
 
1449
- for book in self.all_editors:
1450
- for buf in book.all_buffers:
1449
+ for book in self.get_all_editors():
1450
+ for buf in book.get_all_buffers():
1451
1451
  if buf.need_buffer_save:
1452
1452
  self.popup_window(book)
1453
1453
  buf.SetFocus()
@@ -1473,8 +1473,8 @@ class ShellFrame(MiniFrame):
1473
1473
  elif evt.GetActivationReason() == evt.Reason_Mouse\
1474
1474
  and self.__autoload:
1475
1475
  ## Check all buffers that need to be loaded.
1476
- for book in self.all_editors:
1477
- for buf in book.all_buffers:
1476
+ for book in self.get_all_editors():
1477
+ for buf in book.get_all_buffers():
1478
1478
  if buf.need_buffer_load:
1479
1479
  if wx.MessageBox( # Confirm load.
1480
1480
  "The file has been modified externally.\n\n"
@@ -1874,12 +1874,14 @@ class ShellFrame(MiniFrame):
1874
1874
  if not hasattr(target, '__dict__'):
1875
1875
  raise TypeError("primitive objects cannot be targeted")
1876
1876
 
1877
- shell = self.rootshell.__class__(self, target, name="clone",
1878
- style=wx.CLIP_CHILDREN|wx.BORDER_NONE)
1879
- self.handler('shell_new', shell)
1880
- self.Show()
1881
- self.console.AddPage(shell, typename(shell.target))
1877
+ shell = self.find_shell(target)
1878
+ if not shell:
1879
+ shell = self.rootshell.__class__(self, target, name="clone",
1880
+ style=wx.CLIP_CHILDREN|wx.BORDER_NONE)
1881
+ self.console.AddPage(shell, typename(shell.target))
1882
+ self.handler('shell_new', shell)
1882
1883
  self.popup_window(shell)
1884
+ self.Show()
1883
1885
  shell.SetFocus()
1884
1886
  return shell
1885
1887
 
@@ -1905,8 +1907,16 @@ class ShellFrame(MiniFrame):
1905
1907
  yield from self.console.get_pages(type)
1906
1908
  yield from self.ghost.get_pages(type)
1907
1909
 
1910
+ def get_all_shells(self):
1911
+ """Yields all shells in the notebooks."""
1912
+ yield from self.console.get_pages(type(self.rootshell))
1913
+
1914
+ def get_all_editors(self):
1915
+ """Yields all editors in the notebooks."""
1916
+ yield from self.ghost.get_pages(type(self.Log))
1917
+
1908
1918
  @property
1909
- def all_shells(self):
1919
+ def all_shells(self): # (deprecated) for backward compatibility
1910
1920
  """Yields all books in the notebooks."""
1911
1921
  return self.console.get_pages(type(self.rootshell))
1912
1922
 
@@ -1915,8 +1925,17 @@ class ShellFrame(MiniFrame):
1915
1925
  """Currently selected shell or rootshell."""
1916
1926
  return self.console.CurrentPage
1917
1927
 
1928
+ def find_shell(self, target):
1929
+ """Find a shell targeting the specified object.
1930
+ If found, switch to the corresponding page.
1931
+ """
1932
+ for shell in self.get_all_shells():
1933
+ if shell.target is target:
1934
+ self.console.swap_page(shell)
1935
+ return shell
1936
+
1918
1937
  @property
1919
- def all_editors(self):
1938
+ def all_editors(self): # (deprecated) for backward compatibility
1920
1939
  """Yields all editors in the notebooks."""
1921
1940
  return self.ghost.get_pages(type(self.Log))
1922
1941
 
@@ -1926,22 +1945,17 @@ class ShellFrame(MiniFrame):
1926
1945
  editor = self.ghost.CurrentPage
1927
1946
  if isinstance(editor, type(self.Log)):
1928
1947
  return editor
1929
- return next((x for x in self.all_editors if x.IsShown()), self.Scratch)
1948
+ return next((x for x in self.get_all_editors() if x.IsShown()), self.Scratch)
1930
1949
 
1931
1950
  def find_editor(self, fn):
1932
- """Find an editor with the specified fn:filename or code.
1933
- If found, switch to the buffer page.
1951
+ """Find an editor containing the specified fn:filename or code.
1952
+ If found, switch to the corresponding page.
1934
1953
  """
1935
- return next(self.find_editors(fn), None)
1936
-
1937
- def find_editors(self, fn):
1938
- """Yields all editors with the specified fn:filename or code."""
1939
- def _f(book):
1954
+ for book in self.get_all_editors():
1940
1955
  buf = book.find_buffer(fn)
1941
1956
  if buf:
1942
1957
  book.swap_page(buf)
1943
- return buf
1944
- return filter(_f, self.all_editors)
1958
+ return book
1945
1959
 
1946
1960
  ## --------------------------------
1947
1961
  ## Find text dialog
mwx/graphman.py CHANGED
@@ -1328,7 +1328,7 @@ class Frame(mwx.Frame):
1328
1328
  self.load_plug(plug.__module__, force=1, session=session)
1329
1329
 
1330
1330
  ## Update shell.target --> new plug
1331
- for shell in self.shellframe.all_shells:
1331
+ for shell in self.shellframe.get_all_shells():
1332
1332
  if shell.target is plug:
1333
1333
  shell.handler('shell_activated', shell)
1334
1334
 
@@ -1492,7 +1492,7 @@ class Frame(mwx.Frame):
1492
1492
  else:
1493
1493
  fn = attr.get('pathname') # if not found, try pathname
1494
1494
  if fn.startswith(r'\\'):
1495
- warn(f"The pathnme of {fn!r} contains network path, "
1495
+ warn(f"The pathname of {fn!r} contains network path, "
1496
1496
  f"so the search may take long time.", stacklevel=3)
1497
1497
  if not os.path.exists(fn):
1498
1498
  mis[name] = res.pop(name) # pop missing items
mwx/nutshell.py CHANGED
@@ -629,7 +629,7 @@ class EditorInterface(AutoCompInterfaceMixin, CtrlInterface):
629
629
  self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_VLINE, *v)
630
630
  self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_VLINE, *v)
631
631
 
632
- ## Custom indicators ([BUG] indicator=1 is reset when the buffer is udpated.)
632
+ ## Custom indicators ([BUG] indicator=1 is reset when the buffer is updated.)
633
633
  ## [10-11] filter_text
634
634
  ## [2] URL
635
635
  ## [3] match_paren
@@ -2214,7 +2214,7 @@ class EditorBook(AuiNotebook, CtrlInterface):
2214
2214
 
2215
2215
  def OnPageClose(self, evt): #<wx._aui.AuiNotebookEvent>
2216
2216
  nb = evt.EventObject
2217
- buf = nb.all_buffers[evt.Selection]
2217
+ buf = nb.all_pages[evt.Selection]
2218
2218
  if buf.need_buffer_save:
2219
2219
  if wx.MessageBox( # Confirm close.
2220
2220
  "You are closing unsaved content.\n\n"
@@ -2258,7 +2258,7 @@ class EditorBook(AuiNotebook, CtrlInterface):
2258
2258
  _setattribute(buf, kwargs)
2259
2259
  else:
2260
2260
  self.defaultBufferStyle.update(kwargs)
2261
- for buf in self.all_buffers:
2261
+ for buf in self.get_all_buffers():
2262
2262
  _setattribute(buf, self.defaultBufferStyle)
2263
2263
 
2264
2264
  def on_activated(self, buf):
@@ -2275,12 +2275,26 @@ class EditorBook(AuiNotebook, CtrlInterface):
2275
2275
  ## --------------------------------
2276
2276
 
2277
2277
  @property
2278
- def all_buffers(self):
2278
+ def all_buffers(self): # (deprecated) for backward compatibility
2279
2279
  """Returns all buffer pages.
2280
- cf. equiv. AuiNotebook.all_pages
2280
+ cf. equiv. AuiNotebook.all_pages or get_pages()
2281
2281
  """
2282
2282
  return [self.GetPage(j) for j in range(self.PageCount)]
2283
2283
 
2284
+ def get_all_buffers(self, fn=None):
2285
+ """Yields all buffers with specified fn:filename or code."""
2286
+ if fn is None:
2287
+ yield from self.get_pages(Buffer)
2288
+ elif isinstance(fn, str):
2289
+ g = os.path.realpath(fn)
2290
+ for buf in self.get_pages(Buffer):
2291
+ if fn == buf.filename or g == os.path.realpath(buf.filename):
2292
+ yield buf
2293
+ else:
2294
+ for buf in self.get_pages(Buffer):
2295
+ if fn is buf or fn in buf: # check code
2296
+ yield buf
2297
+
2284
2298
  @property
2285
2299
  def menu(self):
2286
2300
  """Yields context menu."""
@@ -2290,7 +2304,7 @@ class EditorBook(AuiNotebook, CtrlInterface):
2290
2304
  lambda v: buf.SetFocus(),
2291
2305
  lambda v: v.Check(buf is self.buffer))
2292
2306
 
2293
- return (_menu(j+1, x) for j, x in enumerate(self.all_buffers))
2307
+ return (_menu(j+1, x) for j, x in enumerate(self.get_all_buffers()))
2294
2308
 
2295
2309
  @property
2296
2310
  def buffer(self):
@@ -2298,16 +2312,8 @@ class EditorBook(AuiNotebook, CtrlInterface):
2298
2312
  return self.CurrentPage
2299
2313
 
2300
2314
  def find_buffer(self, fn):
2301
- """Find buffer with specified fn:filename or code."""
2302
- if isinstance(fn, str):
2303
- g = os.path.realpath(fn)
2304
- for buf in self.all_buffers:
2305
- if fn == buf.filename or g == os.path.realpath(buf.filename):
2306
- return buf
2307
- else:
2308
- for buf in self.all_buffers:
2309
- if fn is buf or fn in buf: # check code
2310
- return buf
2315
+ """Find a buffer with specified fn:filename or code."""
2316
+ return next(self.get_all_buffers(fn), None)
2311
2317
 
2312
2318
  def swap_buffer(self, buf, lineno=0):
2313
2319
  self.swap_page(buf)
@@ -2436,13 +2442,14 @@ class EditorBook(AuiNotebook, CtrlInterface):
2436
2442
  wildcard='|'.join(self.wildcards),
2437
2443
  style=wx.FD_OPEN|wx.FD_MULTIPLE) as dlg:
2438
2444
  if dlg.ShowModal() == wx.ID_OK:
2439
- for fn in dlg.Paths:
2440
- self.find_file(fn)
2441
- return
2442
- if self.load_file(filename) == False: # noqa: not None
2445
+ return all([self.find_file(fn) for fn in dlg.Paths])
2446
+ return None
2447
+ retval = self.load_file(filename)
2448
+ if retval == False: # noqa: not None
2443
2449
  buf = self.create_buffer(filename)
2444
2450
  self.swap_buffer(buf)
2445
2451
  self.post_message("New file.")
2452
+ return retval
2446
2453
 
2447
2454
  def save_file(self, filename, buf=None, verbose=True):
2448
2455
  """Save the current buffer to a file.
@@ -2506,7 +2513,7 @@ class EditorBook(AuiNotebook, CtrlInterface):
2506
2513
  return self.save_file(dlg.Path, buf)
2507
2514
 
2508
2515
  def save_all_buffers(self):
2509
- for buf in self.all_buffers:
2516
+ for buf in self.get_all_buffers():
2510
2517
  if buf.need_buffer_save:
2511
2518
  self.save_buffer(buf)
2512
2519
 
@@ -2525,7 +2532,7 @@ class EditorBook(AuiNotebook, CtrlInterface):
2525
2532
  wx.CallAfter(self.delete_buffer, buf)
2526
2533
 
2527
2534
  def kill_all_buffers(self):
2528
- for buf in self.all_buffers:
2535
+ for buf in self.get_all_buffers():
2529
2536
  if buf.need_buffer_save:
2530
2537
  if wx.MessageBox( # Confirm close.
2531
2538
  "You are closing unsaved content.\n\n"
@@ -2839,8 +2846,8 @@ class Nautilus(EditorInterface, Shell):
2839
2846
  'C-S-v pressed' : (0, _F(self.Paste, rectangle=1)),
2840
2847
  'S-insert pressed' : (0, _F(self.Paste)),
2841
2848
  'C-S-insert pressed' : (0, _F(self.Paste, rectangle=1)),
2842
- 'C-j pressed' : (0, self.eval_line),
2843
- 'M-j pressed' : (0, self.exec_region),
2849
+ 'C-j pressed' : (0, _F(self.eval_line)),
2850
+ 'M-j pressed' : (0, _F(self.exec_region)),
2844
2851
  'C-h pressed' : (0, self.call_helpTip),
2845
2852
  'M-h pressed' : (0, self.call_helpDoc),
2846
2853
  '. pressed' : (2, self.OnEnterDot),
@@ -2898,7 +2905,7 @@ class Nautilus(EditorInterface, Shell):
2898
2905
  '*backspace pressed' : (2, self.OnBackspace),
2899
2906
  '*backspace released' : (2, self.call_word_autocomp),
2900
2907
  'C-S-backspace pressed' : (2, ),
2901
- 'C-j pressed' : (2, self.eval_line),
2908
+ 'C-j pressed' : (2, _F(self.eval_line)),
2902
2909
  '*alt pressed' : (2, ),
2903
2910
  '*ctrl pressed' : (2, ),
2904
2911
  '*shift pressed' : (2, ),
@@ -2926,7 +2933,7 @@ class Nautilus(EditorInterface, Shell):
2926
2933
  '*backspace pressed' : (3, self.OnBackspace),
2927
2934
  '*backspace released' : (3, self.call_apropos_autocomp),
2928
2935
  'C-S-backspace pressed' : (3, ),
2929
- 'C-j pressed' : (3, self.eval_line),
2936
+ 'C-j pressed' : (3, _F(self.eval_line)),
2930
2937
  '*alt pressed' : (3, ),
2931
2938
  '*ctrl pressed' : (3, ),
2932
2939
  '*shift pressed' : (3, ),
@@ -2954,7 +2961,7 @@ class Nautilus(EditorInterface, Shell):
2954
2961
  '*backspace pressed' : (4, self.OnBackspace),
2955
2962
  '*backspace released' : (4, self.call_text_autocomp),
2956
2963
  'C-S-backspace pressed' : (4, ),
2957
- 'C-j pressed' : (4, self.eval_line),
2964
+ 'C-j pressed' : (4, _F(self.eval_line)),
2958
2965
  '*alt pressed' : (4, ),
2959
2966
  '*ctrl pressed' : (4, ),
2960
2967
  '*shift pressed' : (4, ),
@@ -3594,7 +3601,7 @@ class Nautilus(EditorInterface, Shell):
3594
3601
  self.cpos, self.anchor = self.anchor, self.cpos
3595
3602
  self.EnsureCaretVisible()
3596
3603
 
3597
- def eval_line(self, evt):
3604
+ def eval_line(self):
3598
3605
  """Evaluate the selected word or line."""
3599
3606
  if self.CallTipActive():
3600
3607
  self.CallTipCancel()
@@ -3614,7 +3621,7 @@ class Nautilus(EditorInterface, Shell):
3614
3621
  else:
3615
3622
  self.message("No words")
3616
3623
 
3617
- def exec_region(self, evt):
3624
+ def exec_region(self):
3618
3625
  """Execute the the selected region."""
3619
3626
  if self.CallTipActive():
3620
3627
  self.CallTipCancel()
mwx/testsuite.py CHANGED
@@ -8,7 +8,7 @@ Usage:
8
8
  frm = wx.Frame(None)
9
9
  frm.Show()
10
10
 
11
- Is equivlent to:
11
+ Is equivalent to:
12
12
  app = wx.App()
13
13
  frm = wx.Frame(None)
14
14
  frm.Show()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mwxlib
3
- Version: 1.2.9
3
+ Version: 1.3.0
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,15 +1,15 @@
1
1
  mwx/__init__.py,sha256=pS7ZG8QKRypiFFiaWAq_opBB6I_1viZ0zUMk2TbjzE0,667
2
- mwx/bookshelf.py,sha256=b_TMDaNIzLHoL0xbbqb3tt0BnRvhLAqaCn_pBdrigZw,7523
3
- mwx/controls.py,sha256=iSevLKxgB3vdGJr3Wv8nccbFNSw1Voazt_HYjp3RrmM,48044
4
- mwx/framework.py,sha256=FU5XzSPNg-vWZPvG8lMi7u5htB3aUkdKgpbXlSqIFEU,76141
5
- mwx/graphman.py,sha256=sKwPy31H4lwtShTAui_6upe_Ys2-MwBHhdFq-3onBNE,70328
2
+ mwx/bookshelf.py,sha256=REBMiiC2IE4MUtoDu5T8klFizBr4G0tdFrZinR2yVUg,7547
3
+ mwx/controls.py,sha256=ojMUTl-1YRVVEH32WBIK_NUED6UWAil6EGAYigqh5ak,48090
4
+ mwx/framework.py,sha256=TOKFx4epSTgHClbKtL--K_8gRSc7OwAHjl6tZpSDtlo,76805
5
+ mwx/graphman.py,sha256=knoleskaSdwu65jHNfzrnaCEaN1wHtr3ouQg4tM2doE,70335
6
6
  mwx/images.py,sha256=oxCn0P-emiWujSS2gUgU5TUnr5cPjix2jBcjOBDr24I,48701
7
7
  mwx/matplot2.py,sha256=Zwte-wwzCg_OHzsBniVgKdaNLzsvJaa1gc0n7VdAqxw,33150
8
8
  mwx/matplot2g.py,sha256=ceeAjFkrDz49aSLo_9dIWZZd4HhnSjxe8u9G_ipBHek,64195
9
9
  mwx/matplot2lg.py,sha256=JRWjWnLJUytbSq6wxs4P0gbVUr3xoLSF6Wwqd5V_pJI,27404
10
10
  mwx/mgplt.py,sha256=8mXbHpCmm7lz3XbAxOg7IVC7DaSGBEby1UfTlMl9kjk,5604
11
- mwx/nutshell.py,sha256=Cy2P4XZ0Wife66oXv3I0dRztlBmlSAlUkVhOq2tWPgs,141187
12
- mwx/testsuite.py,sha256=kiM3-BVhr42LRRN7xG7pYl3at8o2vnypWSxD8KRvA7c,1228
11
+ mwx/nutshell.py,sha256=PUVlIac1HMIoaHj2m8ZUmiOIE_xcsWlTJifm9GRPAjM,141572
12
+ mwx/testsuite.py,sha256=Zk75onPSEn2tf0swS3l-vIn6yTXGB7allIyvJsPHj20,1229
13
13
  mwx/utilus.py,sha256=bDeooo2bOcZwvkIdi0ElkT-qoblqzHNFsIveb72NFOo,37528
14
14
  mwx/wxmon.py,sha256=yzWqrbY6LzpfRwQeytYUeqFhFuLVm_XEvrVAL_k0HBQ,12756
15
15
  mwx/wxpdb.py,sha256=ge4hNfeigHGcpnioU1B_BJX_QZjNdtnokUrcZOxcEcI,18814
@@ -22,8 +22,8 @@ mwx/plugins/frame_listview.py,sha256=gowjQ-ARNonMkDSXkQgPKq4U9YBJ-vQ0jK2krBVOdCs
22
22
  mwx/plugins/line_profile.py,sha256=zzm6_7lnAnNepLbh07ordp3nRWDFQJtu719ZVjrVf8s,819
23
23
  mwx/py/__init__.py,sha256=xykgfOytOwNuvXsfkLoumFZSTN-iBsHOjczYXngjmUE,12
24
24
  mwx/py/filling.py,sha256=fumUG1F5M9TL-Dfqni4G85uk7TmvnUunTbdcPDV0vfo,16857
25
- mwxlib-1.2.9.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
26
- mwxlib-1.2.9.dist-info/METADATA,sha256=zDuA9RxTUziGyT-aTZFZhLSh2fN1_USrpr6lpoTLuT0,7456
27
- mwxlib-1.2.9.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
28
- mwxlib-1.2.9.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
29
- mwxlib-1.2.9.dist-info/RECORD,,
25
+ mwxlib-1.3.0.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
26
+ mwxlib-1.3.0.dist-info/METADATA,sha256=0Q6nnQK4gPzt6Kgg98OVyzhNbMDIN9xwfy9tL3xYlY0,7456
27
+ mwxlib-1.3.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
28
+ mwxlib-1.3.0.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
29
+ mwxlib-1.3.0.dist-info/RECORD,,
File without changes