tksheet 7.1.1__py3-none-any.whl → 7.1.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.
tksheet/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
  tksheet - A Python tkinter table widget
5
5
  """
6
6
 
7
- __version__ = "7.1.1"
7
+ __version__ = "7.1.3"
8
8
 
9
9
  from .colors import (
10
10
  color_map,
tksheet/functions.py CHANGED
@@ -628,6 +628,7 @@ def span_dict(
628
628
  ndim: int | None = None,
629
629
  convert: Callable | None = None,
630
630
  undo: bool = False,
631
+ emit_event: bool = False,
631
632
  widget: object = None,
632
633
  ) -> Span:
633
634
  d: Span = Span(
@@ -648,6 +649,7 @@ def span_dict(
648
649
  ndim=ndim,
649
650
  convert=convert,
650
651
  undo=undo,
652
+ emit_event=emit_event,
651
653
  widget=widget,
652
654
  )
653
655
  return d
tksheet/main_table.py CHANGED
@@ -1099,29 +1099,16 @@ class MainTable(tk.Canvas):
1099
1099
  def get_max_column_idx(self, maxidx: int | None = None) -> int:
1100
1100
  if maxidx is None:
1101
1101
  maxidx = len_to_idx(self.total_data_cols())
1102
- # max column number in cell_options
1103
- if maxidx < (maxk := max(self.cell_options, key=itemgetter(1), default=(0, 0))[1]):
1104
- maxidx = maxk
1105
- # max column number in column_options, index cell options
1106
- for d in (self.col_options, self.CH.cell_options):
1107
- if maxidx < (maxk := max(d, default=0)):
1108
- maxidx = maxk
1109
- # max column number in named spans
1110
- if maxidx < (
1111
- maxk := max(
1112
- (d["from_c"] for d in self.named_spans.values() if isinstance(d["from_c"], int)),
1113
- default=0,
1114
- )
1115
- ):
1116
- maxidx = maxk
1117
- if maxidx < (
1118
- maxk := max(
1119
- (d["upto_c"] for d in self.named_spans.values() if isinstance(d["upto_c"], int)),
1120
- default=0,
1121
- )
1122
- ):
1123
- maxidx = maxk
1124
- return maxidx
1102
+ maxiget = partial(max, key=itemgetter(1))
1103
+ return max(
1104
+ max(self.cell_options, key=itemgetter(1), default=(0, maxidx))[1],
1105
+ max(self.col_options, default=maxidx),
1106
+ max(self.CH.cell_options, default=maxidx),
1107
+ maxiget(map(maxiget, self.tagged_cells.values()), default=(0, maxidx))[1],
1108
+ max(map(max, self.tagged_columns.values()), default=maxidx),
1109
+ max((d.from_c for d in self.named_spans.values() if isinstance(d.from_c, int)), default=maxidx),
1110
+ max((d.upto_c for d in self.named_spans.values() if isinstance(d.upto_c, int)), default=maxidx),
1111
+ )
1125
1112
 
1126
1113
  def get_args_for_move_rows(
1127
1114
  self,
@@ -1329,28 +1316,16 @@ class MainTable(tk.Canvas):
1329
1316
  def get_max_row_idx(self, maxidx: int | None = None) -> int:
1330
1317
  if maxidx is None:
1331
1318
  maxidx = len_to_idx(self.total_data_rows())
1332
- if maxidx < (maxk := max(self.cell_options, key=itemgetter(0), default=(0, 0))[0]):
1333
- maxidx = maxk
1334
- # max row number in row_options, index cell options
1335
- for d in (self.row_options, self.RI.cell_options):
1336
- if maxidx < (maxk := max(d, default=0)):
1337
- maxidx = maxk
1338
- # max row number in named spans
1339
- if maxidx < (
1340
- maxk := max(
1341
- (d["from_r"] for d in self.named_spans.values() if isinstance(d["from_r"], int)),
1342
- default=0,
1343
- )
1344
- ):
1345
- maxidx = maxk
1346
- if maxidx < (
1347
- maxk := max(
1348
- (d["upto_r"] for d in self.named_spans.values() if isinstance(d["upto_r"], int)),
1349
- default=0,
1350
- )
1351
- ):
1352
- maxidx = maxk
1353
- return maxidx
1319
+ maxiget = partial(max, key=itemgetter(0))
1320
+ return max(
1321
+ max(self.cell_options, key=itemgetter(0), default=(maxidx, 0))[0],
1322
+ max(self.row_options, default=maxidx),
1323
+ max(self.RI.cell_options, default=maxidx),
1324
+ maxiget(map(maxiget, self.tagged_cells.values()), default=(maxidx, 0))[0],
1325
+ max(map(max, self.tagged_rows.values()), default=maxidx),
1326
+ max((d.from_r for d in self.named_spans.values() if isinstance(d.from_r, int)), default=maxidx),
1327
+ max((d.upto_r for d in self.named_spans.values() if isinstance(d.upto_r, int)), default=maxidx),
1328
+ )
1354
1329
 
1355
1330
  def get_full_new_idxs(
1356
1331
  self,
@@ -2724,42 +2699,22 @@ class MainTable(tk.Canvas):
2724
2699
  self.mouseclick_outside_editor_or_dropdown_all_canvases()
2725
2700
  self.focus_set()
2726
2701
  popup_menu = None
2727
- if self.single_selection_enabled and self.not_currently_resizing():
2728
- r = self.identify_row(y=event.y)
2729
- c = self.identify_col(x=event.x)
2730
- if r < len(self.row_positions) - 1 and c < len(self.col_positions) - 1:
2731
- if self.col_selected(c):
2732
- if self.rc_popup_menus_enabled:
2733
- popup_menu = self.CH.ch_rc_popup_menu
2734
- elif self.row_selected(r):
2735
- if self.rc_popup_menus_enabled:
2736
- popup_menu = self.RI.ri_rc_popup_menu
2737
- elif self.cell_selected(r, c):
2738
- if self.rc_popup_menus_enabled:
2739
- popup_menu = self.rc_popup_menu
2740
- else:
2741
- if self.rc_select_enabled:
2742
- self.select_cell(r, c, redraw=True)
2743
- if self.rc_popup_menus_enabled:
2744
- popup_menu = self.rc_popup_menu
2745
- else:
2746
- popup_menu = self.empty_rc_popup_menu
2747
- elif self.toggle_selection_enabled and self.not_currently_resizing():
2702
+ if (self.single_selection_enabled or self.toggle_selection_enabled) and self.not_currently_resizing():
2748
2703
  r = self.identify_row(y=event.y)
2749
2704
  c = self.identify_col(x=event.x)
2750
2705
  if r < len(self.row_positions) - 1 and c < len(self.col_positions) - 1:
2751
- if self.col_selected(c):
2752
- if self.rc_popup_menus_enabled:
2753
- popup_menu = self.CH.ch_rc_popup_menu
2754
- elif self.row_selected(r):
2755
- if self.rc_popup_menus_enabled:
2756
- popup_menu = self.RI.ri_rc_popup_menu
2757
- elif self.cell_selected(r, c):
2758
- if self.rc_popup_menus_enabled:
2759
- popup_menu = self.rc_popup_menu
2706
+ if self.col_selected(c) and self.rc_popup_menus_enabled:
2707
+ popup_menu = self.CH.ch_rc_popup_menu
2708
+ elif self.row_selected(r) and self.rc_popup_menus_enabled:
2709
+ popup_menu = self.RI.ri_rc_popup_menu
2710
+ elif self.cell_selected(r, c) and self.rc_popup_menus_enabled:
2711
+ popup_menu = self.rc_popup_menu
2760
2712
  else:
2761
2713
  if self.rc_select_enabled:
2762
- self.toggle_select_cell(r, c, redraw=True)
2714
+ if self.single_selection_enabled:
2715
+ self.select_cell(r, c, redraw=True)
2716
+ elif self.toggle_selection_enabled:
2717
+ self.toggle_select_cell(r, c, redraw=True)
2763
2718
  if self.rc_popup_menus_enabled:
2764
2719
  popup_menu = self.rc_popup_menu
2765
2720
  else:
@@ -3982,7 +3937,7 @@ class MainTable(tk.Canvas):
3982
3937
  # if to_add then it's an undo/redo and don't
3983
3938
  # need to create fresh options
3984
3939
  if create_ops:
3985
- # if rows are none it's a row options span
3940
+ # if cols are none it's a row options span
3986
3941
  if span["from_c"] is None:
3987
3942
  new_ops(
3988
3943
  mod_span(
@@ -6261,7 +6216,7 @@ class MainTable(tk.Canvas):
6261
6216
  return tuple(box.coords for item, box in self.get_selection_items())
6262
6217
 
6263
6218
  def get_all_selection_boxes_with_types(self) -> list[tuple[tuple[int, int, int, int], str]]:
6264
- return [(box.coords, box.type) for item, box in self.get_selection_items()]
6219
+ return [(box.coords, box.type_) for item, box in self.get_selection_items()]
6265
6220
 
6266
6221
  def all_selected(self) -> bool:
6267
6222
  return any(
@@ -6293,7 +6248,7 @@ class MainTable(tk.Canvas):
6293
6248
  box.coords.from_c <= c and box.coords.upto_c > c
6294
6249
  for item, box in self.get_selection_items(
6295
6250
  cells=False,
6296
- columns=False,
6251
+ rows=False,
6297
6252
  )
6298
6253
  )
6299
6254
 
tksheet/row_index.py CHANGED
@@ -129,7 +129,7 @@ class RowIndex(tk.Canvas):
129
129
  self.align = kwargs["row_index_align"]
130
130
  self.default_index = kwargs["default_row_index"].lower()
131
131
 
132
- self.reset_tree()
132
+ self.tree_reset()
133
133
  self.basic_bindings()
134
134
 
135
135
  def basic_bindings(self, enable: bool = True) -> None:
@@ -148,7 +148,7 @@ class RowIndex(tk.Canvas):
148
148
  self.unbind("<Double-Button-1>")
149
149
  self.unbind(rc_binding)
150
150
 
151
- def reset_tree(self) -> None:
151
+ def tree_reset(self) -> None:
152
152
  # treeview mode
153
153
  self.tree = {}
154
154
  self.tree_open_ids = set()
tksheet/sheet.py CHANGED
@@ -1476,7 +1476,7 @@ class Sheet(tk.Frame):
1476
1476
  if sheet_options:
1477
1477
  self.ops = new_sheet_options()
1478
1478
  if tree:
1479
- self.RI.reset_tree()
1479
+ self.RI.tree_reset()
1480
1480
  self.set_refresh_timer(redraw)
1481
1481
  return self
1482
1482
 
@@ -2998,9 +2998,10 @@ class Sheet(tk.Frame):
2998
2998
 
2999
2999
  def get_selected_min_max(
3000
3000
  self,
3001
- ) -> (
3002
- tuple[int, int, int, int] | tuple[None, None, None, None]
3003
- ): # returns (min_y, min_x, max_y, max_x) of any selections including rows/columns
3001
+ ) -> tuple[int, int, int, int] | tuple[None, None, None, None]:
3002
+ """
3003
+ Returns (min_y, min_x, max_y, max_x) of all selection boxes
3004
+ """
3004
3005
  return self.MT.get_selected_min_max()
3005
3006
 
3006
3007
  # Modifying Selected Cells
@@ -3286,12 +3287,12 @@ class Sheet(tk.Frame):
3286
3287
 
3287
3288
  def get_column_widths(self, canvas_positions: bool = False) -> list[float]:
3288
3289
  if canvas_positions:
3289
- return [int(n) for n in self.MT.col_positions]
3290
+ return self.MT.col_positions
3290
3291
  return self.MT.get_column_widths()
3291
3292
 
3292
3293
  def get_row_heights(self, canvas_positions: bool = False) -> list[float]:
3293
3294
  if canvas_positions:
3294
- return [int(n) for n in self.MT.row_positions]
3295
+ return self.MT.row_positions
3295
3296
  return self.MT.get_row_heights()
3296
3297
 
3297
3298
  def set_column_widths(
@@ -4391,6 +4392,62 @@ class Sheet(tk.Frame):
4391
4392
  )
4392
4393
  return self
4393
4394
 
4395
+ def tree_reset(self) -> Sheet:
4396
+ self.deselect()
4397
+ self.RI.tree_reset()
4398
+ return self
4399
+
4400
+ def tree_get_open(self) -> set[str]:
4401
+ """
4402
+ Returns the set[str] of iids that are open in the treeview
4403
+ """
4404
+ return self.RI.tree_open_ids
4405
+
4406
+ def tree_set_open(self, open_ids: set[str]) -> Sheet:
4407
+ """
4408
+ Accepts set[str] of iids that are open in the treeview
4409
+ Closes everything else
4410
+ """
4411
+ self.RI.tree_open_ids = open_ids
4412
+ self.hide_rows(
4413
+ set(self.MT.displayed_rows),
4414
+ redraw=False,
4415
+ deselect_all=False,
4416
+ data_indexes=True,
4417
+ )
4418
+ self.show_rows(
4419
+ (self.RI.tree_rns[iid] for iid in self.get_children("")),
4420
+ redraw=False,
4421
+ deselect_all=True,
4422
+ )
4423
+ if open_ids:
4424
+ self.tree_open(*open_ids)
4425
+ return self
4426
+
4427
+ def tree_open(self, *items) -> Sheet:
4428
+ """
4429
+ If used without args all items are opened
4430
+ """
4431
+ if items:
4432
+ for item in unpack(items):
4433
+ self.item(item, open_=True)
4434
+ else:
4435
+ for item in self.get_children():
4436
+ self.item(item, open_=True)
4437
+ return self
4438
+
4439
+ def tree_close(self, *items) -> Sheet:
4440
+ """
4441
+ If used without args all items are closed
4442
+ """
4443
+ if items:
4444
+ for item in unpack(items):
4445
+ self.item(item, open_=False)
4446
+ else:
4447
+ for item in self.get_children():
4448
+ self.item(item, open_=False)
4449
+ return self
4450
+
4394
4451
  def insert(
4395
4452
  self,
4396
4453
  parent: str = "",
@@ -4460,12 +4517,15 @@ class Sheet(tk.Frame):
4460
4517
  text: str | None = None,
4461
4518
  values: list | None = None,
4462
4519
  open_: bool | None = None,
4463
- ) -> DotDict:
4520
+ ) -> DotDict | Sheet:
4521
+ """
4522
+ Modify options for item
4523
+ If no options are set then returns DotDict of options for item
4524
+ Else returns Sheet
4525
+ """
4464
4526
  if not (item := item.lower()) or item not in self.RI.tree:
4465
4527
  raise ValueError(f"Item '{item}' does not exist.")
4466
4528
  if isinstance(iid, str):
4467
- if not (iid := iid.lower()):
4468
- raise ValueError(f"iid '{iid}' does not exist.")
4469
4529
  if iid in self.RI.tree:
4470
4530
  raise ValueError(f"Cannot rename '{iid}', it already exists.")
4471
4531
  iid = iid.lower()
@@ -4477,36 +4537,46 @@ class Sheet(tk.Frame):
4477
4537
  if isinstance(text, str):
4478
4538
  self.RI.tree[item].text = text
4479
4539
  if isinstance(values, list):
4480
- self.set_data(self.RI.tree_rns[item], values)
4540
+ self.set_data(self.RI.tree_rns[item], data=values)
4481
4541
  if isinstance(open_, bool):
4482
- if not self.RI.tree[item].children or not open_:
4542
+ if self.RI.tree[item].children:
4543
+ if open_:
4544
+ self.RI.tree_open_ids.add(item)
4545
+ self.show_rows(
4546
+ (self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True)),
4547
+ redraw=False,
4548
+ deselect_all=False,
4549
+ )
4550
+ else:
4551
+ self.RI.tree_open_ids.discard(item)
4552
+ self.hide_rows(
4553
+ (self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item)),
4554
+ redraw=False,
4555
+ deselect_all=False,
4556
+ data_indexes=True,
4557
+ )
4558
+ else:
4483
4559
  self.RI.tree_open_ids.discard(item)
4484
- if open_:
4485
- self.RI.tree_open_ids.add(item)
4486
- self.show_rows(
4487
- (self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True)),
4488
- redraw=False,
4489
- deselect_all=False,
4490
- )
4491
- elif self.RI.tree[item].children:
4492
- self.hide_rows(
4493
- (self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item)),
4494
- redraw=False,
4495
- deselect_all=False,
4496
- data_indexes=True,
4497
- )
4498
- self.set_refresh_timer(isinstance(text, str) or isinstance(values, list) or isinstance(open_, bool))
4499
- return DotDict(
4500
- text=self.RI.tree[item].text,
4501
- values=self[self.RI.tree_rns[item]].options(ndim=1).data,
4502
- open_=item in self.RI.tree_open_ids,
4503
- )
4560
+ get = not (isinstance(iid, str) or isinstance(text, str) or isinstance(values, list) or isinstance(open_, bool))
4561
+ self.set_refresh_timer(redraw=not get)
4562
+ if get:
4563
+ return DotDict(
4564
+ text=self.RI.tree[item].text,
4565
+ values=self[self.RI.tree_rns[item]].options(ndim=1).data,
4566
+ open_=item in self.RI.tree_open_ids,
4567
+ )
4568
+ return self
4504
4569
 
4505
4570
  def itemrow(self, item: str) -> int:
4506
- return self.RI.tree_rns[item.lower()]
4571
+ try:
4572
+ return self.RI.tree_rns[item.lower()]
4573
+ except Exception:
4574
+ raise ValueError(f"item '{item.lower()}' does not exist.")
4507
4575
 
4508
- def rowitem(self, row: int) -> str | None:
4509
- if len(self.MT._row_index) > row:
4576
+ def rowitem(self, row: int, data_index: bool = False) -> str | None:
4577
+ if not data_index:
4578
+ row = self.data_r(row)
4579
+ if isinstance(row, int) and len(self.MT._row_index) > row:
4510
4580
  return self.MT._row_index[row].iid
4511
4581
  return None
4512
4582
 
@@ -4522,11 +4592,6 @@ class Sheet(tk.Frame):
4522
4592
  else:
4523
4593
  yield from (n.iid for n in self.RI.tree[item].children)
4524
4594
 
4525
- def reset_tree(self) -> Sheet:
4526
- self.deselect()
4527
- self.RI.reset_tree()
4528
- return self
4529
-
4530
4595
  def del_items(self, *items) -> Sheet:
4531
4596
  """
4532
4597
  Also deletes all descendants of items
@@ -4736,7 +4801,7 @@ class Sheet(tk.Frame):
4736
4801
  def selection_add(self, *items) -> Sheet:
4737
4802
  for item in unpack(items):
4738
4803
  if (item := item.lower()) not in self.RI.tree:
4739
- raise ValueError(f"Item '{item}' does not exist.")
4804
+ continue
4740
4805
  if not self.item_displayed(item):
4741
4806
  self.display_item(item)
4742
4807
  self.add_row_selection(bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]))
@@ -4745,7 +4810,7 @@ class Sheet(tk.Frame):
4745
4810
  def selection_remove(self, *items) -> Sheet:
4746
4811
  for item in unpack(items):
4747
4812
  if (item := item.lower()) not in self.RI.tree:
4748
- raise ValueError(f"Item '{item}' does not exist.")
4813
+ continue
4749
4814
  try:
4750
4815
  self.deselect(bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]))
4751
4816
  except Exception:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.1.1
3
+ Version: 7.1.3
4
4
  Summary: Tkinter table / sheet widget
5
5
  Author-email: ragardner <github@ragardner.simplelogin.com>
6
6
  License: Copyright (c) 2019 ragardner and open source contributors
@@ -1,20 +1,20 @@
1
- tksheet/__init__.py,sha256=-P8w8KS0O82elJMwvIYsdoTCWYEV3mRGX_60GToTxWI,1874
1
+ tksheet/__init__.py,sha256=12WUGUlSqVLgEpsMVTdgp8OZ60dVldHopXMgu4ZY_FU,1874
2
2
  tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
3
3
  tksheet/column_headers.py,sha256=1I49CQS4unBcJ-y044R-DtYhJ4zUplrOfImOk8qHIj8,99396
4
4
  tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
5
- tksheet/functions.py,sha256=NnBFBvTqT6VhCK8pFlXqTwKekKpcsCYeuxaALcJeVzw,38651
6
- tksheet/main_table.py,sha256=SwJVPoivJuu8D37lvoo1Hn52P75TvjFwg-E2QHILhuw,319302
5
+ tksheet/functions.py,sha256=7S4cQDIQ-1JqwQCgJSeVUA6bui_CK09zTHrtg2H7UeU,38714
6
+ tksheet/main_table.py,sha256=Di80IjcLbHtS0_G6iLYst1Uj-jD7FURLYYnZJwNqNNk,317950
7
7
  tksheet/other_classes.py,sha256=s559IxoFEeAgxTKrrHZnAeXUXWIEmiP4tBncIdQIXSQ,13544
8
- tksheet/row_index.py,sha256=4Q_J83AKKZhajeK23_deby9CXfL4wl1MOWnSu8LW2PU,104428
9
- tksheet/sheet.py,sha256=66AKMY-wNiLi2briyUlbUHtsVNwEWKnljx58q1c1tKU,254086
8
+ tksheet/row_index.py,sha256=GzK6Gfi4v6zwALn5IvBz22SdSFLUgxS1yLX4bm7z3sg,104428
9
+ tksheet/sheet.py,sha256=mEb_DHSkp_eRri0Lk7CHnaXRj_0FR7luIxy_Tl4A3wg,255991
10
10
  tksheet/sheet_options.py,sha256=Vcy4RxTKvf2HM-Yc53ex0lpBe6ATXc_pdx4oLhfjDgU,11906
11
11
  tksheet/text_editor.py,sha256=7xsEbgIyAWHDBWroh2wk1VeoVftFALlPZC9OANgD6LA,6662
12
12
  tksheet/themes.py,sha256=OwUe31NRbosjw3ZoZsMyB8lNVyYin9YcKLhCturi5q8,13398
13
13
  tksheet/top_left_rectangle.py,sha256=-2u9GfOvcqhkKwHEtbqdFvXCY3RbvL5k2Sh9l3r_k04,8275
14
14
  tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
15
15
  tksheet/vars.py,sha256=Iukk7-MMT9X7vv0m3nQPKzbp2Iw2Pg1wJEW7js919Mo,2092
16
- tksheet-7.1.1.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
- tksheet-7.1.1.dist-info/METADATA,sha256=2PCCoZogg-1iMfDoYbKCV6a_2N8Tf0kYgIX4o908q98,6013
18
- tksheet-7.1.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
- tksheet-7.1.1.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
- tksheet-7.1.1.dist-info/RECORD,,
16
+ tksheet-7.1.3.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
+ tksheet-7.1.3.dist-info/METADATA,sha256=P0uPdX4DxlWtwLB-i_3uqzndcS06_-UnyWDDBuU0FWI,6013
18
+ tksheet-7.1.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
+ tksheet-7.1.3.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
+ tksheet-7.1.3.dist-info/RECORD,,