mwxlib 1.3.0__py3-none-any.whl → 1.3.3__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
@@ -13,9 +13,11 @@ class MyDropTarget(wx.DropTarget):
13
13
 
14
14
  self.tree = tree
15
15
  self.datado = wx.CustomDataObject("TreeItem")
16
+ self.textdo = wx.TextDataObject()
16
17
  self.filedo = wx.FileDataObject()
17
18
  self.do = wx.DataObjectComposite()
18
19
  self.do.Add(self.datado)
20
+ self.do.Add(self.textdo)
19
21
  self.do.Add(self.filedo)
20
22
  self.SetDataObject(self.do)
21
23
 
@@ -31,20 +33,22 @@ class MyDropTarget(wx.DropTarget):
31
33
  def OnData(self, x, y, result):
32
34
  item = self.tree.Selection
33
35
  name = self.tree.GetItemText(item)
34
- editor = self.tree.Parent.FindWindow(name) # window.Name (not page.caption)
35
- def _load(f):
36
- if editor.load_file(f):
37
- editor.buffer.SetFocus()
38
- editor.message(f"Loaded {f!r} successfully.")
36
+ editor = self.tree.Parent.FindWindow(name) # window.Name
39
37
  self.GetData()
40
- data = self.datado.Data
41
- if data:
42
- f = data.tobytes().decode()
43
- _load(f)
38
+ if self.datado.Data:
39
+ fn = self.datado.Data.tobytes().decode()
40
+ editor.load_file(fn)
44
41
  self.datado.SetData(b"")
42
+ elif self.textdo.Text:
43
+ fn = self.textdo.Text.strip()
44
+ res = editor.parent.handler("text_dropped", fn)
45
+ if res is None or not any(res):
46
+ editor.load_file(fn)
47
+ result = wx.DragCopy
48
+ self.textdo.SetText("")
45
49
  else:
46
- for f in self.filedo.Filenames:
47
- _load(f)
50
+ for fn in self.filedo.Filenames:
51
+ editor.load_file(fn)
48
52
  self.filedo.SetData(wx.DF_FILENAME, None)
49
53
  return result
50
54
 
mwx/framework.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #! python3
2
2
  """mwxlib framework.
3
3
  """
4
- __version__ = "1.3.0"
4
+ __version__ = "1.3.3"
5
5
  __author__ = "Kazuya O'moto <komoto@jeol.co.jp>"
6
6
 
7
7
  from contextlib import contextmanager
@@ -872,18 +872,18 @@ class AuiNotebook(aui.AuiNotebook):
872
872
  self.Bind(aui.EVT_AUINOTEBOOK_TAB_RIGHT_DOWN, tab_menu)
873
873
 
874
874
  @property
875
- def all_pages(self):
876
- """Returns all window pages."""
875
+ def all_pages(self): # (deprecated) internal use only
876
+ """Returns all window pages (internal use only)."""
877
877
  return [self.GetPage(i) for i in range(self.PageCount)]
878
878
 
879
879
  @property
880
- def all_tabs(self):
881
- """Returns all AuiTabCtrl objects."""
880
+ def all_tabs(self): # (deprecated) internal use only
881
+ """Returns all AuiTabCtrl objects (internal use only)."""
882
882
  return [x for x in self.Children if isinstance(x, aui.AuiTabCtrl)]
883
883
 
884
884
  @property
885
- def all_panes(self):
886
- """Returns all AuiPaneInfo excluding `dummy` one."""
885
+ def all_panes(self): # (deprecated) internal use only
886
+ """Returns all AuiPaneInfo excluding `dummy` one (internal use only)."""
887
887
  return list(self._mgr.AllPanes)[1:]
888
888
 
889
889
  def get_pages(self, type=None):
@@ -1033,30 +1033,24 @@ class FileDropLoader(wx.DropTarget):
1033
1033
  index, flags = self.target.HitTest((x, y))
1034
1034
  if index != -1:
1035
1035
  self.target.Selection = index
1036
+ result = wx.DragCopy
1037
+ else:
1038
+ result = wx.DragNone
1036
1039
  return result
1037
1040
 
1038
1041
  def OnData(self, x, y, result):
1039
1042
  editor = self.target.Parent.current_editor
1040
1043
  self.GetData()
1041
- if self.textdo.TextLength > 1:
1042
- f = self.textdo.Text.strip()
1043
- res = editor.load_file(f)
1044
- if res:
1045
- editor.buffer.SetFocus()
1046
- editor.message(f"Loaded {f!r} successfully.")
1047
- result = wx.DragCopy
1048
- elif res is None:
1049
- editor.message(f"Loading {f!r} canceled.")
1050
- result = wx.DragCancel
1051
- else:
1052
- editor.message(f"Loading {f!r} failed.")
1053
- result = wx.DragNone
1054
- self.textdo.SetText('')
1044
+ if self.textdo.Text:
1045
+ fn = self.textdo.Text.strip()
1046
+ res = editor.parent.handler("text_dropped", fn)
1047
+ if res is None or not any(res):
1048
+ editor.load_file(fn)
1049
+ result = wx.DragCopy
1050
+ self.textdo.SetText("")
1055
1051
  else:
1056
- for f in self.filedo.Filenames:
1057
- if editor.load_file(f):
1058
- editor.buffer.SetFocus()
1059
- editor.message(f"Loaded {f!r} successfully.")
1052
+ for fn in self.filedo.Filenames:
1053
+ editor.load_file(fn)
1060
1054
  self.filedo.SetData(wx.DF_FILENAME, None)
1061
1055
  return result
1062
1056
 
@@ -1535,7 +1529,7 @@ class ShellFrame(MiniFrame):
1535
1529
 
1536
1530
  def OnConsolePageClose(self, evt): #<wx._aui.AuiNotebookEvent>
1537
1531
  nb = evt.EventObject
1538
- win = nb.all_pages[evt.Selection]
1532
+ win = list(nb.get_pages())[evt.Selection]
1539
1533
  if win is self.rootshell:
1540
1534
  ## self.message("Don't close the root shell.")
1541
1535
  nb.WindowStyle &= ~aui.AUI_NB_CLOSE_ON_ACTIVE_TAB
@@ -1550,22 +1544,20 @@ class ShellFrame(MiniFrame):
1550
1544
  def About(self, evt=None):
1551
1545
  self.add_help(
1552
1546
  '\n\n'.join((
1553
- "#<module 'mwx' from {!r}>".format(__file__),
1554
- "Author: {!r}".format(__author__),
1555
- "Version: {!s}".format(__version__),
1547
+ f"#<module 'mwx' from {__file__!r}>",
1548
+ f"Author: {__author__!r}",
1549
+ f"Version: {__version__!s}",
1556
1550
  self.__class__.__doc__,
1557
1551
  self.rootshell.__class__.__doc__,
1558
-
1559
- ## Thanks to wx.py.shell.
1560
- "#{!r}".format(wx.py),
1561
- "Author: {!r}".format(wx.py.version.__author__),
1562
- "Version: {!s}".format(wx.py.version.VERSION),
1552
+ ## --- Thanks to <wx.py.shell> ---
1553
+ f"#{wx.py!r}",
1554
+ f"Author: {wx.py.version.__author__!r}",
1555
+ f"Version: {wx.py.version.VERSION!s}",
1563
1556
  wx.py.shell.Shell.__doc__,
1564
1557
  textwrap.indent("*original" + wx.py.shell.HELP_TEXT, ' '*4),
1565
-
1566
- ## Thanks are also due to wx.
1567
- "#{!r}".format(wx),
1568
- "To show the credit, press C-M-Mbutton.\n",
1558
+ ## --- Thanks are also due to <wx> ---
1559
+ ## f"#{wx!r}".format(wx),
1560
+ ## f"To show the credit, press [C-M-Mbutton].", # cf. wx.InfoMessageBox(None)
1569
1561
  ))
1570
1562
  )
1571
1563
 
@@ -1846,7 +1838,7 @@ class ShellFrame(MiniFrame):
1846
1838
 
1847
1839
  def add_log(self, text, noerr=None):
1848
1840
  """Add text to the logging buffer.
1849
- If noerr <bool> is specified, add a line-marker.
1841
+ If noerr:bool is specified, add a line-marker.
1850
1842
  """
1851
1843
  buf = self.Log.default_buffer or self.Log.new_buffer()
1852
1844
  with buf.off_readonly():
@@ -1861,11 +1853,18 @@ class ShellFrame(MiniFrame):
1861
1853
  ## with open(self.LOGGING_FILE, 'a', encoding='utf-8', newline='') as o:
1862
1854
  ## o.write(text)
1863
1855
 
1864
- def add_help(self, text):
1865
- """Add text to the help buffer."""
1856
+ def add_help(self, text, title=None):
1857
+ """Add text to the help buffer.
1858
+ If title:str is specified, create a new buffer with that title.
1859
+ """
1866
1860
  buf = self.Help.default_buffer or self.Help.new_buffer()
1861
+ if title is not None:
1862
+ self.Help.find_file(f"*{title}*")
1863
+ buf = self.Help.buffer
1867
1864
  with buf.off_readonly():
1868
- buf.SetText(text)
1865
+ buf.Text = text
1866
+ buf.EmptyUndoBuffer()
1867
+ buf.SetSavePoint()
1869
1868
  ## Overwrite text and popup the window.
1870
1869
  self.popup_window(self.Help)
1871
1870
  self.Help.swap_page(buf)
mwx/graphman.py CHANGED
@@ -887,7 +887,7 @@ class Frame(mwx.Frame):
887
887
  return
888
888
  self.Quit()
889
889
  break
890
- for frame in self.graph.all_frames:
890
+ for frame in self.graph.get_all_frames():
891
891
  if frame.pathname is None:
892
892
  if wx.MessageBox( # Confirm close.
893
893
  "You are closing unsaved frame.\n\n"
@@ -970,7 +970,7 @@ class Frame(mwx.Frame):
970
970
  win.handler('page_shown', win)
971
971
  elif not show and shown:
972
972
  if isinstance(win, aui.AuiNotebook):
973
- for plug in win.all_pages:
973
+ for plug in win.get_pages():
974
974
  plug.handler('page_closed', plug)
975
975
  else:
976
976
  win.handler('page_closed', win)
@@ -1016,7 +1016,7 @@ class Frame(mwx.Frame):
1016
1016
  pane = evt.GetPane()
1017
1017
  win = pane.window
1018
1018
  if isinstance(win, aui.AuiNotebook):
1019
- for plug in win.all_pages:
1019
+ for plug in win.get_pages():
1020
1020
  plug.handler('page_closed', plug)
1021
1021
  else:
1022
1022
  win.handler('page_closed', win)
@@ -1103,6 +1103,7 @@ class Frame(mwx.Frame):
1103
1103
  else:
1104
1104
  module = import_module(name)
1105
1105
  except Exception as e:
1106
+ traceback.print_exc()
1106
1107
  print(f"- Unable to load {root!r}.", e)
1107
1108
  return False
1108
1109
 
@@ -1425,7 +1426,7 @@ class Frame(mwx.Frame):
1425
1426
  """
1426
1427
  view = self.selected_view
1427
1428
  if not frames:
1428
- frames = view.all_frames
1429
+ frames = view.get_all_frames()
1429
1430
  if not frames:
1430
1431
  return None
1431
1432
 
@@ -1691,7 +1692,7 @@ class Frame(mwx.Frame):
1691
1692
  def save_buffers_as_tiffs(self, path=None, frames=None):
1692
1693
  """Save buffers to a file as a multi-page tiff."""
1693
1694
  if not frames:
1694
- frames = self.selected_view.all_frames
1695
+ frames = self.selected_view.get_all_frames()
1695
1696
  if not frames:
1696
1697
  return None
1697
1698
 
@@ -1810,7 +1811,7 @@ class Frame(mwx.Frame):
1810
1811
 
1811
1812
  def _save(view):
1812
1813
  name = view.Name
1813
- paths = [x.pathname for x in view.all_frames if x.pathname]
1814
+ paths = [x.pathname for x in view.get_all_frames() if x.pathname]
1814
1815
  o.write(f"self.{name}.unit = {view.unit:g}\n")
1815
1816
  o.write(f"self.load_frame({paths!r}, self.{name})\n")
1816
1817
  try:
mwx/matplot2g.py CHANGED
@@ -772,6 +772,10 @@ class GraphPlot(MatplotPanel):
772
772
  return next((art for art in self.__Arts if art.name == j), None)
773
773
  return self.__Arts[j]
774
774
 
775
+ def get_all_frames(self):
776
+ """List of arts <matplotlib.image.AxesImage>."""
777
+ return self.__Arts
778
+
775
779
  ## --------------------------------
776
780
  ## Property of frame / drawer
777
781
  ## --------------------------------
@@ -780,10 +784,10 @@ class GraphPlot(MatplotPanel):
780
784
  nbytes_threshold = 24e6
781
785
 
782
786
  #: image cutoff score percentiles
783
- score_percentile = 0.01
787
+ score_percentile = 0.005
784
788
 
785
789
  @property
786
- def all_frames(self):
790
+ def all_frames(self): # (deprecated) for backward compatibility
787
791
  """List of arts <matplotlib.image.AxesImage>."""
788
792
  return self.__Arts
789
793
 
mwx/nutshell.py CHANGED
@@ -27,14 +27,14 @@ from wx.py.shell import Shell
27
27
  from wx.py.editwindow import EditWindow
28
28
 
29
29
  from .utilus import funcall as _F
30
- from .utilus import ignore
30
+ from .utilus import ignore, typename
31
31
  from .utilus import split_words, split_paren, split_tokens, find_modules
32
32
  from .framework import CtrlInterface, AuiNotebook, Menu
33
33
 
34
34
 
35
35
  ## URL pattern (flag = re.M | re.A)
36
36
  ## url_re = r"https?://[\w/:%#$&?()~.=+-]+"
37
- url_re = r"https?://[\w/:%#$&?~.=+-]+" # excluding ()
37
+ url_re = r"https?://[\w/:%#$&?!@~.,;=+-]+" # excluding ()
38
38
 
39
39
  ## no-file pattern
40
40
  nofile_re = r'[\/:*?"<>|]'
@@ -2022,12 +2022,11 @@ class Buffer(EditorInterface, EditWindow):
2022
2022
  ## File I/O
2023
2023
  ## --------------------------------
2024
2024
 
2025
- def _load_textfile(self, text, filename):
2025
+ def _load_textfile(self, text):
2026
2026
  with self.off_readonly():
2027
2027
  self.Text = text
2028
2028
  self.EmptyUndoBuffer()
2029
2029
  self.SetSavePoint()
2030
- self.update_filestamp(filename)
2031
2030
  self.handler('buffer_loaded', self)
2032
2031
 
2033
2032
  def _load_file(self, filename):
@@ -2214,7 +2213,7 @@ class EditorBook(AuiNotebook, CtrlInterface):
2214
2213
 
2215
2214
  def OnPageClose(self, evt): #<wx._aui.AuiNotebookEvent>
2216
2215
  nb = evt.EventObject
2217
- buf = nb.all_pages[evt.Selection]
2216
+ buf = list(nb.get_pages())[evt.Selection]
2218
2217
  if buf.need_buffer_save:
2219
2218
  if wx.MessageBox( # Confirm close.
2220
2219
  "You are closing unsaved content.\n\n"
@@ -2276,9 +2275,7 @@ class EditorBook(AuiNotebook, CtrlInterface):
2276
2275
 
2277
2276
  @property
2278
2277
  def all_buffers(self): # (deprecated) for backward compatibility
2279
- """Returns all buffer pages.
2280
- cf. equiv. AuiNotebook.all_pages or get_pages()
2281
- """
2278
+ """Returns all buffers."""
2282
2279
  return [self.GetPage(j) for j in range(self.PageCount)]
2283
2280
 
2284
2281
  def get_all_buffers(self, fn=None):
@@ -2391,7 +2388,8 @@ class EditorBook(AuiNotebook, CtrlInterface):
2391
2388
  elif not buf.need_buffer_load:
2392
2389
  self.swap_buffer(buf, lineno)
2393
2390
  return True
2394
- buf._load_textfile(''.join(lines), filename)
2391
+ buf._load_textfile(''.join(lines))
2392
+ buf.update_filestamp(filename)
2395
2393
  self.swap_buffer(buf, lineno)
2396
2394
  return True
2397
2395
  return False
@@ -2421,7 +2419,8 @@ class EditorBook(AuiNotebook, CtrlInterface):
2421
2419
  kwargs.setdefault('timeout', 3.0)
2422
2420
  res = requests.get(filename, **kwargs)
2423
2421
  if res.status_code == requests.codes.OK:
2424
- buf._load_textfile(res.text, filename)
2422
+ buf._load_textfile(res.text)
2423
+ buf.update_filestamp(filename)
2425
2424
  self.swap_buffer(buf, lineno)
2426
2425
  return True
2427
2426
  res.raise_for_status() # raise HTTP error; don't catch here.
@@ -2653,7 +2652,7 @@ class Nautilus(EditorInterface, Shell):
2653
2652
 
2654
2653
  C-up : [0] retrieve previous history
2655
2654
  C-down : [0] retrieve next history
2656
- C-j, M-j : [0] tooltip of eval (for the selected or focused word)
2655
+ C-j : [0] tooltip of eval (for the selected or focused word)
2657
2656
  C-h, M-h : [0] calltip of help (for the selected or focused func)
2658
2657
  TAB : [1] history-comp
2659
2658
  M-p : [1] retrieve previous history in history-comp mode
@@ -3520,13 +3519,13 @@ class Nautilus(EditorInterface, Shell):
3520
3519
  """Short information."""
3521
3520
  doc = inspect.getdoc(obj)\
3522
3521
  or "No information about {}".format(obj)
3523
- self.parent.handler('add_help', doc) or print(doc)
3522
+ self.parent.handler('add_help', doc, typename(obj)) or print(doc)
3524
3523
 
3525
3524
  def help(self, obj):
3526
3525
  """Full description."""
3527
3526
  doc = pydoc.plain(pydoc.render_doc(obj))\
3528
3527
  or "No description about {}".format(obj)
3529
- self.parent.handler('add_help', doc) or print(doc)
3528
+ self.parent.handler('add_help', doc, typename(obj)) or print(doc)
3530
3529
 
3531
3530
  def eval(self, text):
3532
3531
  return eval(text, self.globals, self.locals)
mwx/wxpdb.py CHANGED
@@ -103,7 +103,7 @@ class Debugger(Pdb):
103
103
  pdb.input = _input
104
104
 
105
105
  def _help():
106
- self.parent.handler('add_help', pdb.__doc__)
106
+ self.parent.handler('add_help', pdb.__doc__, "pdb")
107
107
  pdb.help = _help
108
108
 
109
109
  def dispatch(evt):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mwxlib
3
- Version: 1.3.0
3
+ Version: 1.3.3
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,18 +1,18 @@
1
1
  mwx/__init__.py,sha256=pS7ZG8QKRypiFFiaWAq_opBB6I_1viZ0zUMk2TbjzE0,667
2
- mwx/bookshelf.py,sha256=REBMiiC2IE4MUtoDu5T8klFizBr4G0tdFrZinR2yVUg,7547
2
+ mwx/bookshelf.py,sha256=SFT_08Us0d0tjwlKX9HWaRdbZpcBBK4sCkP2DSetRbE,7747
3
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
4
+ mwx/framework.py,sha256=6TtB58J5aYE5R3zNLC7xlhT77FkxKV4cq48jwH8AnrY,76906
5
+ mwx/graphman.py,sha256=jZvSH5SPV_L_cTbYCG2JHN1phuvTpe-UjXmcyJz0QX0,70398
6
6
  mwx/images.py,sha256=oxCn0P-emiWujSS2gUgU5TUnr5cPjix2jBcjOBDr24I,48701
7
7
  mwx/matplot2.py,sha256=Zwte-wwzCg_OHzsBniVgKdaNLzsvJaa1gc0n7VdAqxw,33150
8
- mwx/matplot2g.py,sha256=ceeAjFkrDz49aSLo_9dIWZZd4HhnSjxe8u9G_ipBHek,64195
8
+ mwx/matplot2g.py,sha256=yloFQCVjR2r4pDBJeKh3uqbdOxoeKO5Z5lhmjVwdRac,64361
9
9
  mwx/matplot2lg.py,sha256=JRWjWnLJUytbSq6wxs4P0gbVUr3xoLSF6Wwqd5V_pJI,27404
10
10
  mwx/mgplt.py,sha256=8mXbHpCmm7lz3XbAxOg7IVC7DaSGBEby1UfTlMl9kjk,5604
11
- mwx/nutshell.py,sha256=PUVlIac1HMIoaHj2m8ZUmiOIE_xcsWlTJifm9GRPAjM,141572
11
+ mwx/nutshell.py,sha256=8U40niudjo2EjAoSzaZ2g9W-uSlrfcNqfo4A0s2GiaU,141577
12
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
- mwx/wxpdb.py,sha256=ge4hNfeigHGcpnioU1B_BJX_QZjNdtnokUrcZOxcEcI,18814
15
+ mwx/wxpdb.py,sha256=KkTQKwsr7g0uJeN8qdgMz7P2a-I859G1XJyPibAOUDI,18821
16
16
  mwx/wxwil.py,sha256=hhyB1lPrF9ixeObxCOKQv0Theu-B-kpJg_yVU3EGSNg,5406
17
17
  mwx/wxwit.py,sha256=1hHtMi2YEy2T_LnUpwdmrIdtCuvxMOFyykqnbq6jLP0,7294
18
18
  mwx/plugins/__init__.py,sha256=jnJ-Sl9XJ_7BFDslD_r7dsbxsOT57q_IaEriV53XIGY,41
@@ -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.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,,
25
+ mwxlib-1.3.3.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
26
+ mwxlib-1.3.3.dist-info/METADATA,sha256=wyWGjSDomWzGvIQGyxsVLhdBd1xLwoaX54A0aDFdNUU,7456
27
+ mwxlib-1.3.3.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
28
+ mwxlib-1.3.3.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
29
+ mwxlib-1.3.3.dist-info/RECORD,,
File without changes