listpick 0.1.16.11__py3-none-any.whl → 0.1.16.13__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 listpick might be problematic. Click here for more details.

listpick/ui/build_help.py CHANGED
@@ -117,8 +117,9 @@ def build_help_rows(keys_dict: dict, debug: bool = False) -> list[list[str]]:
117
117
  "col_select_next": "Select next column.",
118
118
  "col_select_prev": "Select previous column.",
119
119
  "col_hide": "Hide column.",
120
- "edit": "Edit cell.",
121
- "edit_picker": "Edit cell from options dialogue.",
120
+ "edit": "Edit (editable) cell.",
121
+ "edit_nvim": "Edit (editable) cell(s) in nvim.",
122
+ "edit_picker": "Edit (editable) cell from options dialogue.",
122
123
  "edit_ipython": "Drop to ipython shell with environment as `self`",
123
124
  "copy": "Copy selections.",
124
125
  "paste": "Paste into picker.",
@@ -131,8 +132,8 @@ def build_help_rows(keys_dict: dict, debug: bool = False) -> list[list[str]]:
131
132
  "undo": "Undo.",
132
133
  "scroll_right": "Scroll right (5 chars).",
133
134
  "scroll_left": "Scroll left (5 chars).",
134
- "scroll_right_25": "Scroll right (25 chars).",
135
- "scroll_left_25": "Scroll left (25 chars).",
135
+ "scroll_right_25": "Scroll right (25 chars).",
136
+ "scroll_left_25": "Scroll left (25 chars).",
136
137
  "scroll_far_right": "Scroll to the end of the column set.",
137
138
  "scroll_far_left": "Scroll to the left home.",
138
139
  "add_column_before": "Insert column before cursor.",
@@ -146,15 +147,15 @@ def build_help_rows(keys_dict: dict, debug: bool = False) -> list[list[str]]:
146
147
  "sheet_prev": "Go to the previous sheet.",
147
148
  "toggle_right_pane": "Toggle the right pane",
148
149
  "cycle_right_pane": "Cycle through right pane views",
149
- "toggle_left_pane": "Toggle the left pane",
150
- "cycle_left_pane": "Cycle through left pane views",
150
+ "toggle_left_pane": "Toggle the left pane",
151
+ "cycle_left_pane": "Cycle through left pane views",
151
152
  }
152
153
  sections = {
153
154
  "Navigation:": [ "cursor_down", "cursor_up", "half_page_up", "half_page_down", "page_up", "page_down", "cursor_bottom", "cursor_top", "five_up", "five_down", "scroll_right", "scroll_left", "scroll_right_25", "scroll_left_25", "scroll_far_right", "scroll_far_left" ],
154
155
  "Selection:": [ "toggle_select", "select_all", "select_none", "visual_selection_toggle", "visual_deselection_toggle", "enter" ],
155
156
  "UI:": [ "toggle_footer", "redraw_screen", "decrease_lines_per_page", "increase_lines_per_page", "increase_column_width", "decrease_column_width", "notification_toggle", "toggle_right_pane", "cycle_right_pane", "toggle_left_pane", "cycle_left_pane"],
156
157
  "Sort:": [ "cycle_sort_method", "cycle_sort_method_reverse", "cycle_sort_order", ] ,
157
- "Data manipulation:": [ "delete", "delete_column", "edit", "edit_picker", "edit_ipython", "add_column_before", "add_column_after", "add_row_before", "add_row_after"],
158
+ "Data manipulation:": [ "delete", "delete_column", "edit", "edit_nvim", "edit_picker", "edit_ipython", "add_column_before", "add_column_after", "add_row_before", "add_row_after"],
158
159
  "Filter and search:": [ "filter_input", "search_input", "continue_search_forward", "continue_search_backward", ] ,
159
160
  "Settings:": [ "settings_input", "settings_options" ],
160
161
  "Options and modes:": [ "opts_input", "opts_select", "mode_next", "mode_prev", "pipe_input", "reset_opts", "col_select", "col_select_next", "col_select_prev", "col_hide" ],
listpick/ui/keys.py CHANGED
@@ -62,7 +62,8 @@ picker_keys = {
62
62
  "col_select_prev": [ord('<')],
63
63
  "col_hide": [ord('!'), ord('@'), ord('#'), ord('$'), ord('%'), ord('^'), ord('&'), ord('*'), ord('('), ord(')')],
64
64
  "edit": [ord('e')],
65
- "edit_picker": [ord('E')],
65
+ # "edit_picker": [ord('E')],
66
+ "edit_nvim": [ord('E')],
66
67
  "edit_ipython": [5], # Ctrl+e
67
68
  "copy": [ord('y')],
68
69
  "paste": [ord('p')],
@@ -248,11 +249,14 @@ edit_menu_keys = {
248
249
  "col_select_prev": [ord('<'), ord('h')],
249
250
  "col_hide": [ord('!'), ord('@'), ord('#'), ord('$'), ord('%'), ord('^'), ord('&'), ord('*'), ord('('), ord(')')],
250
251
  "edit": [ord('e')],
251
- "edit_picker": [ord('E')],
252
+ "edit_nvim": [ord('E')],
252
253
  "edit_ipython": [5], # Ctrl+e
253
254
  "copy": [ord('y')],
254
255
  "save": [19, ord('D')], # Ctrl+s
255
256
  "load": [ord('L'), 15], # Ctrl+o
256
257
  "open": [ord('O')],
257
258
  "toggle_footer": [ord('_')],
259
+ "visual_selection_toggle": [ord('v')],
260
+ "visual_deselection_toggle": [ord('V')],
261
+ "toggle_select": [ord(' ')],
258
262
  }
@@ -0,0 +1,10 @@
1
+ #!/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ generate_data_utils.py
5
+
6
+ Author: GrimAndGreedy
7
+ License: MIT
8
+ """
9
+
10
+ from listpick.utils.generate_data_utils import ProcessSafePriorityQueue
@@ -37,39 +37,57 @@ def generate_columns_worker(
37
37
  getting_data: threading.Event,
38
38
  task_queue: PriorityQueue,
39
39
  completed_cells: set,
40
+ state: dict,
40
41
  ) -> None:
41
42
  """ Get a task from the priorty queue and fill the data for that cell."""
42
- while task_queue.qsize() > 0:
43
+ while task_queue.qsize() > 0 and not state["thread_stop_event"].is_set():
43
44
  _, (i, j) = task_queue.get()
44
45
 
45
46
  if (i, j) in completed_cells:
46
47
  task_queue.task_done()
47
48
  continue
48
49
 
50
+ if state["thread_stop_event"].is_set():
51
+ with task_queue.mutex:
52
+ task_queue.queue.clear()
53
+
49
54
  generate_cell(
50
55
  func=funcs[j],
51
56
  file=files[i],
52
57
  items=items,
53
58
  row=i,
54
59
  col=j+1,
60
+ state=state,
55
61
  )
56
62
  completed_cells.add((i, j))
57
63
  task_queue.task_done()
58
64
  getting_data.set()
59
65
 
60
- def generate_cell(func: Callable, file: str, items: list[list[str]], row: int, col: int) -> None:
66
+ def generate_cell(func: Callable, file: str, items: list[list[str]], row: int, col: int, state: dict) -> None:
61
67
  """
62
68
  Takes a function, file and a file and then sets items[row][col] to the result.
63
69
  """
64
-
65
- items[row][col] = func(file).strip()
66
-
67
- def update_queue(task_queue: PriorityQueue, visible_rows_indices: list[int], rows: int, cols: int):
70
+ if not state["thread_stop_event"].is_set():
71
+ try:
72
+ result = func(file).strip()
73
+ if not state["thread_stop_event"].is_set():
74
+ items[row][col] = result
75
+ except Exception as e:
76
+ pass
77
+ # import pyperclip
78
+ # pyperclip.copy(f"({row}, {col}): len(items)={len(items)}, len(items[0])={len(items[0])} {e}")
79
+
80
+ def update_queue(task_queue: PriorityQueue, visible_rows_indices: list[int], rows: int, cols: int, state: dict):
68
81
  """ Increase the priority of getting the data for the cells that are currently visible. """
69
82
  while task_queue.qsize() > 0:
70
83
  time.sleep(0.1)
84
+ if state["thread_stop_event"].is_set():
85
+ with task_queue.mutex:
86
+ task_queue.queue.clear()
87
+ break
71
88
  for row in visible_rows_indices:
72
89
  for col in range(cols):
90
+ if state["generate_data_for_hidden_columns"] == False and col+1 in state["hidden_columns"]: continue
73
91
  if 0 <= row < rows:
74
92
  task_queue.put((1, (row, col)))
75
93
 
@@ -124,7 +142,9 @@ def generate_picker_data_from_file(
124
142
  items,
125
143
  header,
126
144
  visible_rows_indices,
127
- getting_data
145
+ getting_data,
146
+ state,
147
+
128
148
  ) -> None:
129
149
  """
130
150
  Generate data for Picker based upon the toml file commands.
@@ -155,6 +175,7 @@ def generate_picker_data_from_file(
155
175
  picker_header = header,
156
176
  visible_rows_indices = visible_rows_indices,
157
177
  getting_data = getting_data,
178
+ state=state,
158
179
  )
159
180
 
160
181
  def generate_picker_data(
@@ -164,7 +185,8 @@ def generate_picker_data(
164
185
  items,
165
186
  picker_header,
166
187
  visible_rows_indices,
167
- getting_data
188
+ getting_data,
189
+ state,
168
190
  ) -> None:
169
191
  """
170
192
  Generate data from a list of files and a list of column functions which will be used to
@@ -180,13 +202,13 @@ def generate_picker_data(
180
202
 
181
203
  items.clear()
182
204
  items.extend([[file] + ["..." for _ in column_functions] for file in files])
183
- # items[:] = [[file] + ["..." for _ in column_functions] for file in files]
184
205
  picker_header[:] = data_header
185
206
 
186
207
 
187
- task_queue = PriorityQueue()
208
+ task_queue = state["data_generation_queue"]
188
209
  for i in range(len(files)):
189
210
  for j in range(len(column_functions)):
211
+ if state["generate_data_for_hidden_columns"] == False and j+1 in state["hidden_columns"]: continue
190
212
  task_queue.put((10, (i, j)))
191
213
 
192
214
  num_workers = os.cpu_count()
@@ -197,14 +219,16 @@ def generate_picker_data(
197
219
  for _ in range(num_workers):
198
220
  gen_items_thread = threading.Thread(
199
221
  target=generate_columns_worker,
200
- args=(column_functions, files, items, getting_data, task_queue, completed_cells),
222
+ args=(column_functions, files, items, getting_data, task_queue, completed_cells, state),
201
223
  )
224
+ state["threads"].append(gen_items_thread)
202
225
  gen_items_thread.daemon = True
203
226
  gen_items_thread.start()
204
227
 
205
228
  update_queue_thread = threading.Thread(
206
229
  target=update_queue,
207
- args=(task_queue, visible_rows_indices, len(files), len(column_functions)),
230
+ args=(task_queue, visible_rows_indices, len(files), len(column_functions), state),
208
231
  )
232
+ state["threads"].append(update_queue_thread)
209
233
  update_queue_thread.daemon = True
210
234
  update_queue_thread.start()
@@ -0,0 +1,43 @@
1
+ #!/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ generate_data_utils.py
5
+
6
+ Author: GrimAndGreedy
7
+ License: MIT
8
+ """
9
+
10
+ def sort_priority_first(element):
11
+ return element[0]
12
+
13
+ class ProcessSafePriorityQueue:
14
+ def __init__(self, manager):
15
+ self.data = manager.list()
16
+ self.lock = manager.Lock()
17
+
18
+ def put(self, item):
19
+ with self.lock:
20
+ self.data.append(item)
21
+ self.data.sort(key=sort_priority_first)
22
+
23
+ def get(self, timeout=None):
24
+ start = time.time()
25
+ while True:
26
+ with self.lock:
27
+ if self.data:
28
+ return self.data.pop(0)
29
+ if timeout is not None and (time.time() - start) > timeout:
30
+ raise IndexError("get timeout")
31
+ time.sleep(0.01)
32
+
33
+ def qsize(self):
34
+ with self.lock:
35
+ return len(self.data)
36
+
37
+ def empty(self):
38
+ with self.lock:
39
+ return len(self.data) == 0
40
+
41
+ def clear(self):
42
+ with self.lock:
43
+ self.data[:] = []
listpick/utils/utils.py CHANGED
@@ -16,9 +16,12 @@ from typing import Tuple, Dict
16
16
  import logging
17
17
  import shlex
18
18
  from collections import defaultdict
19
+ import time
19
20
 
20
21
  logger = logging.getLogger('picker_log')
21
22
 
23
+
24
+
22
25
  def clip_left(text, n):
23
26
  """
24
27
  Clips the first `n` display-width characters from the left of the input string.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: listpick
3
- Version: 0.1.16.11
3
+ Version: 0.1.16.13
4
4
  Summary: Listpick is a powerful TUI data tool for creating TUI apps or viewing/comparing tabulated data.
5
5
  Home-page: https://github.com/grimandgreedy/listpick
6
6
  Author: Grim
@@ -41,13 +41,9 @@ Dynamic: requires-dist
41
41
  Dynamic: requires-python
42
42
  Dynamic: summary
43
43
 
44
- qq# listpick
44
+ # listpick
45
45
 
46
- listpick is a TUI tool which displays a tabulated list of rows and allows the user to operate upon these rows--select, copy, pipe. A very simple concept but also, I hope, a powerful tool that will make it easier for people to develop TUI apps.
47
-
48
- Rows of data can be viewed, selected, generated, saved, loaded, refreshed, modified or copied to the clipboard. Easy to integrate into your project by creating a `menu = Picker(stdscr: curses.window, items: list[list[str]])` and then the menu will be displayed by running `menu.run()`.
49
-
50
- It works great as the backend for a TUI application and can also be used as a standalone data viewer.
46
+ listpick is a powerful TUI data tool for viewing, editing and operating upon tabulated data; can be used to build TUI applications, generate data columns, or function as a command-line utility.
51
47
 
52
48
  **NOTE**: listpick is still in development.
53
49
 
@@ -72,18 +68,13 @@ x = Picker(
72
68
  ["row zero column zero", "row zero column one"],
73
69
  ["row one column zero", "row one column one"]
74
70
  ],
75
- header=["H0", "H1"]
71
+ header=["H0", "H1"],
72
+ cell_cursor=True,
76
73
  )
77
74
  x.run()
78
75
 
79
76
  close_curses(stdscr)
80
77
 
81
- ```
82
- Or use the listpick binary to generate and display rows based on a list of commands:
83
-
84
- ```
85
- wget https://raw.githubusercontent.com/grimandgreedy/listpick/refs/heads/master/examples/data_generation/list_files.toml
86
- listpick -g list_files.py
87
78
  ```
88
79
 
89
80
  ## Overview
@@ -102,23 +93,33 @@ The application allows you to:
102
93
  ## Examples
103
94
 
104
95
 
96
+ ### listpick as a command-line tool
105
97
 
106
- ### Aria2TUI
98
+ listpick can be used as a command-line tool for tabulating command outputs:
99
+ ```bash
100
+ df -h | listpick --stdin
101
+ ```
102
+
103
+ <div align="center"> <img src="assets/listpick_df_example.png" alt="lpfman" width="90%"> </div>
104
+
105
+ ### Applications
107
106
 
108
- [Aria2TUI](https://github.com/grimandgreedy/Aria2TUI) is implemented using listpick. This is a good example of how listpick can be used for menus, data viewing, and active data retrieval.
107
+ #### Aria2TUI
109
108
 
110
- <div align="center"> <img src="assets/aria2tui_graph_screenshot.png" alt="Aria2TUI" width="70%"> </div>
109
+ [Aria2TUI](https://github.com/grimandgreedy/Aria2TUI): TUI client for the aria2c download utility.
111
110
 
112
- ### lpfman
113
- [lpfman](https://github.com/grimandgreedy/lpfman) is a terminal file manager with extensive column support.
111
+ <div align="center"> <img src="assets/aria2tui_graph_screenshot.png" alt="Aria2TUI" width="90%"> </div>
114
112
 
115
- <div align="center"> <img src="https://github.com/grimandgreedy/lpfman/blob/master/assets/lpfman_image_preview.png?raw=true" alt="lpfman" width="70%"> </div>
113
+ #### lpfman
114
+ [lpfman](https://github.com/grimandgreedy/lpfman): Terminal file manager with extensive column support.
115
+
116
+ <div align="center"> <img src="https://github.com/grimandgreedy/lpfman/blob/master/assets/lpfman_02.png?raw=true" alt="lpfman" width="90%"> </div>
116
117
 
117
118
 
118
119
  ### Data generation from toml file
119
120
 
120
121
  ```python
121
- listpick -g ./examples/data_generation/video_duplicates.toml
122
+ listpick -g ./listpick/examples/data_generation/video_duplicates.toml
122
123
  ```
123
124
  - From the list of commands in the toml file we generate the properties we will use to identify the duplicates.
124
125
 
@@ -127,7 +128,7 @@ listpick -g ./examples/data_generation/video_duplicates.toml
127
128
 
128
129
  - We get the SHA1 hash to identify identical files; we also get the size, duration, resolution, and bitrate so that we can identify a video duplicate that may have the same duration but a lower resolution.
129
130
 
130
- <div align="center"> <img src="assets/file_compare.png" alt="Video Compare" width="70%"> </div>
131
+ <div align="center"> <img src="assets/file_compare.png" alt="Video Compare" width="90%"> </div>
131
132
 
132
133
 
133
134
  ## Description
@@ -135,7 +136,7 @@ listpick -g ./examples/data_generation/video_duplicates.toml
135
136
  ### Key Features:
136
137
  1. **File Input Support:**
137
138
  ```python
138
- listpick -i ~/dn.pkl -t pkl
139
+ listpick -i ~/items.csv
139
140
  ```
140
141
  - Text files (TSV, CSV)
141
142
  - JSON
@@ -207,19 +208,6 @@ listpick -g ./examples/data_generation/video_duplicates.toml
207
208
  - Opening files with a specific application `xargs -d \n -I{} mpv {}` will open the files in mpv
208
209
  - Dumping data. `xargs -d \n -I{} echo {} > ~/stuff.txt`
209
210
 
210
- ## Overview
211
-
212
- The application allows you to:
213
- - Select multiple items from different file types and input streams
214
- - Navigate between selected items with arrow keys
215
- - Delete individual items
216
- - Highlight specific items for quick selection
217
- - Perform complex filtering operations
218
- - Sort data based on specified columns
219
- - Persistent save/load of selections
220
- - Copy/paste selections to clipboard
221
-
222
-
223
211
  ## Support and Feedback
224
212
 
225
213
  Feel free to request features. Please report any errors you encounter with appropriate context.
@@ -1,6 +1,6 @@
1
1
  listpick/__init__.py,sha256=ExXc97-bibodH--wlwpQivl0zCNR5D1hvpvrf7OBofU,154
2
2
  listpick/__main__.py,sha256=wkCjDdqw093W27yWwnlC3nG_sMRKaIad7hHHWy0RBgY,193
3
- listpick/listpick_app.py,sha256=IavN099zeGWv36ogNjbR20vHXtvRYR74-pZfqiSFHng,211476
3
+ listpick/listpick_app.py,sha256=IECGLycdZb7YDXapnxHzj8wlaVHJJEKZk3m5I675UaM,222093
4
4
  listpick/pane/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  listpick/pane/get_data.py,sha256=l12mHIb6qoZWIfW5zZZY8K8EqNcyIcRiHgtRaM2CVGs,2735
6
6
  listpick/pane/left_pane_functions.py,sha256=SVIW4Ef8uNPBQRk4hL67mEFL3pfgChSFZSMRz06CVzw,5543
@@ -8,12 +8,12 @@ listpick/pane/pane_functions.py,sha256=_dL9jHpd3sT0enL9H_bMcUsBlMELXdtP9dtKFSC2K
8
8
  listpick/pane/pane_functions_1.py,sha256=_dL9jHpd3sT0enL9H_bMcUsBlMELXdtP9dtKFSC2KPQ,5117
9
9
  listpick/pane/pane_utils.py,sha256=cnuzBH52wdWoKrHR6iMBF4N-uhwpXYpHDnrglk21pqg,2539
10
10
  listpick/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- listpick/ui/build_help.py,sha256=DJm_WxgdfrI6nJ8yjdraBrI6bECvNrXp1vU-kHxCczo,10961
11
+ listpick/ui/build_help.py,sha256=WVxrMaZ94oY32ijb4A3NdxQYDySF_FvygYuqiTHNIsk,11072
12
12
  listpick/ui/draw_screen.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  listpick/ui/footer.py,sha256=NcdH1uO_ma91m0qCczyQZ3zGrexfkiEnwDf5E4tHSMk,15089
14
14
  listpick/ui/help_screen.py,sha256=zbfGIgb-IXtATpl4_Sx7nPbsnRXZ7eiMYlCKGS9EFmw,5608
15
15
  listpick/ui/input_field.py,sha256=scJjvmSS0QqeDbCky7_0Zgt35Aki7gezRJkrQROlLg4,30034
16
- listpick/ui/keys.py,sha256=5wXx7K4zLsKw3yt_Q9_GCpgtcGMvQyChXrBhXtuc8-8,13852
16
+ listpick/ui/keys.py,sha256=PN19jCQeXJCdmaP_FT--3TKFZ_8Iv71Pa_yGFp6H3FA,14062
17
17
  listpick/ui/picker_colours.py,sha256=PYWtJEbBCsiM-Gbm83vJiFoIwfKuJuP4SGKxpozszKY,15159
18
18
  listpick/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  listpick/utils/clipboard_operations.py,sha256=ORdNm2kgGbfs51xJSvgJPERgoSmBgT11axuMkvSoP9A,3133
@@ -21,7 +21,9 @@ listpick/utils/config.py,sha256=MEnAZg2Rhfl38XofEIN0uoVAOY7I0ftc79Evk3fOiVw,1654
21
21
  listpick/utils/dump.py,sha256=60YVIMNtBoYvWhmzfTJOsNGcetOvcCB3_T7yv-bYTPQ,3838
22
22
  listpick/utils/filtering.py,sha256=59_YIEYRV0ovnjF4iyuShq276FMAx5gBD9m3mE9IqJg,1237
23
23
  listpick/utils/generate_data.py,sha256=TCGwDrN49Xx33AdURpQRGi6Xi2uwjt96rEeWWYS8mFE,4649
24
- listpick/utils/generate_data_multithreaded.py,sha256=9TF-Z1qF3GDNFbe5K9Gf6EUj0UpruZTdKWHxz6jgGHY,6590
24
+ listpick/utils/generate_data_multiprocessing.py,sha256=B797wFm7bSpoe0wb5C_q1J96ffVp3JCB5Lu4Rly8K8M,178
25
+ listpick/utils/generate_data_multithreaded.py,sha256=jI9kWgWegnumegQOnKxrJg854lGw59cOXm-IyzdpjQ8,7631
26
+ listpick/utils/generate_data_utils.py,sha256=Aw1uL4Feqm6-23K-PhQg232N5dQZ16RGNIF_dvTPbtQ,1009
25
27
  listpick/utils/graphing.py,sha256=ugjAH8js_iH7hulg4SySxb_W_f8B6GhTaceN5i7DID4,6954
26
28
  listpick/utils/keycodes.py,sha256=ZGkw1-4szxPnP81wj80r92L6_neIOlBBjQltEieCwnk,2696
27
29
  listpick/utils/options_selectors.py,sha256=fQqTCAqRsrMhZwXUtsPBm47svkaUaeJqWsMW7Q4JTYY,3083
@@ -32,10 +34,10 @@ listpick/utils/searching.py,sha256=Xk5UIqamNHL2L90z3ACB_Giqdpi9iRKoAJ6pKaqaD7Q,3
32
34
  listpick/utils/sorting.py,sha256=WZZiVlVA3Zkcpwji3U5SNFlQ14zVEk3cZJtQirBkecQ,5329
33
35
  listpick/utils/table_to_list_of_lists.py,sha256=XBj7eGBDF15BRME-swnoXyOfZWxXCxrXp0pzsBfcJ5g,12224
34
36
  listpick/utils/user_input.py,sha256=L3ylI7nnuFM_TP1XKwpiKpxUSkNb2W5cr7mJjTmv_6E,4582
35
- listpick/utils/utils.py,sha256=_Z3pGDMPnEgPuhl_1BpEtXYi5tfWbuwRitj8Y5TeRUg,13653
36
- listpick-0.1.16.11.dist-info/licenses/LICENSE.txt,sha256=2mP-MRHJptADDNE9VInMNg1tE-C6Qv93Z4CCQKrpg9w,1061
37
- listpick-0.1.16.11.dist-info/METADATA,sha256=WRPPZnTIxabHjUTi34ZG_CjXad6aDbMqoO-V_7z7eQk,8025
38
- listpick-0.1.16.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
39
- listpick-0.1.16.11.dist-info/entry_points.txt,sha256=-QCf_BKIkUz35Y9nkYpjZWs2Qg0KfRna2PAs5DnF6BE,43
40
- listpick-0.1.16.11.dist-info/top_level.txt,sha256=5mtsGEz86rz3qQDe0D463gGjAfSp6A3EWg4J4AGYr-Q,9
41
- listpick-0.1.16.11.dist-info/RECORD,,
37
+ listpick/utils/utils.py,sha256=jML0lWl1xxrN7olSBiXUWR2ZdcJMrb5FFcweEz7kDiA,13667
38
+ listpick-0.1.16.13.dist-info/licenses/LICENSE.txt,sha256=2mP-MRHJptADDNE9VInMNg1tE-C6Qv93Z4CCQKrpg9w,1061
39
+ listpick-0.1.16.13.dist-info/METADATA,sha256=6S2mKlbYNClwZJQ-Zz9M3VW6MLe3ZoySrNieroiyKC0,7144
40
+ listpick-0.1.16.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
41
+ listpick-0.1.16.13.dist-info/entry_points.txt,sha256=-QCf_BKIkUz35Y9nkYpjZWs2Qg0KfRna2PAs5DnF6BE,43
42
+ listpick-0.1.16.13.dist-info/top_level.txt,sha256=5mtsGEz86rz3qQDe0D463gGjAfSp6A3EWg4J4AGYr-Q,9
43
+ listpick-0.1.16.13.dist-info/RECORD,,