visidata 3.1__py3-none-any.whl → 3.1.1__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.
- visidata/__init__.py +1 -1
- visidata/main.py +1 -1
- {visidata-3.1.dist-info → visidata-3.1.1.dist-info}/METADATA +2 -2
- {visidata-3.1.dist-info → visidata-3.1.1.dist-info}/RECORD +13 -17
- visidata/features/errors_guide.py +0 -26
- visidata/guides/SortGuide.md +0 -0
- visidata/loaders/api_bitio.py +0 -102
- visidata/stored_prop.py +0 -38
- {visidata-3.1.data → visidata-3.1.1.data}/data/share/applications/visidata.desktop +0 -0
- {visidata-3.1.data → visidata-3.1.1.data}/data/share/man/man1/vd.1 +0 -0
- {visidata-3.1.data → visidata-3.1.1.data}/data/share/man/man1/visidata.1 +0 -0
- {visidata-3.1.data → visidata-3.1.1.data}/scripts/vd +0 -0
- {visidata-3.1.data → visidata-3.1.1.data}/scripts/vd2to3.vdx +0 -0
- {visidata-3.1.dist-info → visidata-3.1.1.dist-info}/LICENSE.gpl3 +0 -0
- {visidata-3.1.dist-info → visidata-3.1.1.dist-info}/WHEEL +0 -0
- {visidata-3.1.dist-info → visidata-3.1.1.dist-info}/entry_points.txt +0 -0
- {visidata-3.1.dist-info → visidata-3.1.1.dist-info}/top_level.txt +0 -0
visidata/__init__.py
CHANGED
visidata/main.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: visidata
|
3
|
-
Version: 3.1
|
3
|
+
Version: 3.1.1
|
4
4
|
Summary: terminal interface for exploring and arranging tabular data
|
5
5
|
Home-page: https://visidata.org
|
6
|
-
Download-URL: https://github.com/saulpw/visidata/tarball/3.1
|
6
|
+
Download-URL: https://github.com/saulpw/visidata/tarball/3.1.1
|
7
7
|
Author: Saul Pwanson
|
8
8
|
Author-email: visidata@saul.pw
|
9
9
|
License: GPLv3
|
@@ -1,4 +1,4 @@
|
|
1
|
-
visidata/__init__.py,sha256=
|
1
|
+
visidata/__init__.py,sha256=yUo-zFk3y3XmWuiF-qfR0dBCdnAB9_XpITIEOAPOTeE,4573
|
2
2
|
visidata/__main__.py,sha256=0j8M0MpINzX0XXcVj1lSDpDfol1qexKU2xZ6qiRoE_U,35
|
3
3
|
visidata/_input.py,sha256=S5GVdMbTa67Nqtu-wPr5wQ2SrN1WomAM09CV0dM3kxQ,23231
|
4
4
|
visidata/_open.py,sha256=t5cZIwb-5RkcE5sNnh21rfe3-dmwDKvjQTacHKlbSCA,6659
|
@@ -35,7 +35,7 @@ visidata/interface.py,sha256=PZRyTmmWFapiJJKiv39Ss0ry1kPPlUMDoMr0okvayg0,4336
|
|
35
35
|
visidata/keys.py,sha256=u_Z-ApRUvfOXBwpzkpRu4W7Rur2R7rPTeoPJgsop4QU,2620
|
36
36
|
visidata/macos.py,sha256=bqH73E27j8qDRtXsHPcUyQNFTAzD5Ki5QU6LjSUnnOI,3339
|
37
37
|
visidata/macros.py,sha256=DR51CVqMjTDGTsSqil3MFVygS6cZd8lyi6UTaWUGGJE,4778
|
38
|
-
visidata/main.py,sha256=
|
38
|
+
visidata/main.py,sha256=LJgtvtHpPSoVA_Yy80qKpIyJtcbclvPtLbk8T3Wa-Z4,13386
|
39
39
|
visidata/mainloop.py,sha256=EYt5DOs3FyxO6-8XyF6szmIVXt5pvcAle9age7FDgUs,10155
|
40
40
|
visidata/memory.py,sha256=CXYpZ0eoR_c9LZwhp1B9Jd0C7O3RMi72OBKuodamg28,1378
|
41
41
|
visidata/menu.py,sha256=WZ-Ba8-MCV61iVkJVCE8HRu-_5wk7jdYKDI6cnzsBJg,16791
|
@@ -60,7 +60,6 @@ visidata/sidebar.py,sha256=JVei9lQ0PFcyq8OwRWCli-YLXBzKlgvuhYji3oH8Jjg,7319
|
|
60
60
|
visidata/sort.py,sha256=TwAmVGDX6pe1xdKnDeS1qs3WzK-r_DqxgzObrECQX4k,3925
|
61
61
|
visidata/statusbar.py,sha256=cZZhTeaRat_4Gs2-A9BOwpthl7yoAswJjzia20RTXPU,9111
|
62
62
|
visidata/stored_list.py,sha256=HUGixWL77ps_WifIqHxM9XWzoN3JK7QRQI8faWlsiIg,1280
|
63
|
-
visidata/stored_prop.py,sha256=TNBq1bZuRr5lzxLU9khs-WwZdQdnIKVbmzwHcD6hy9k,1130
|
64
63
|
visidata/text_source.py,sha256=SkiMmOXuCwCrS5vkedzm6wusFPSKL1jOuGqxMdICix4,1649
|
65
64
|
visidata/textsheet.py,sha256=58xIv_tigQaX9ovPNvywvNACGd0viebWUL4qLVDI3TA,3731
|
66
65
|
visidata/theme.py,sha256=v9XoPeRQ-NhAKTux2zSxOiWWDL-FGfez7BPVqKitFGY,1152
|
@@ -130,7 +129,6 @@ visidata/features/currency_to_usd.py,sha256=BCmhWN5ZmWlgjVZY5CGRpG_iDDnTYk9twIrV
|
|
130
129
|
visidata/features/customdate.py,sha256=0VL9JzcphaTY8pToN9GizV3jfAIV1xTllFPGeQPmnr8,1191
|
131
130
|
visidata/features/dedupe.py,sha256=NBigolkiqgq3wqCmeVNuGhCd0FIkICyjsSjZjl1hL9U,3586
|
132
131
|
visidata/features/describe.py,sha256=p2b_d7AVpu0Zcaf2eGgTqSEAEj_4BMpuFIuaqYHiZ_s,5065
|
133
|
-
visidata/features/errors_guide.py,sha256=mkLXQYVcErP6ptRs8Oi_SbGwbYy2zirhbqstQQpIWUk,801
|
134
132
|
visidata/features/expand_cols.py,sha256=d9qm-uTvPrtP6BclHqlMSfJNtJWT8_Yi06i50k59DRw,7588
|
135
133
|
visidata/features/fill.py,sha256=_ZLb-ArfQ6vbcalpuTV8QYHhNEbZsj5cMmukLQ6DW6A,1127
|
136
134
|
visidata/features/freeze.py,sha256=Et-of6xca3sbx110RWwfSeJ5Y4RdnyrPH63jwoUlxm0,2488
|
@@ -184,14 +182,12 @@ visidata/guides/PivotGuide.md,sha256=mUBZ-3uihOyxrg_rRpgCJ59Zz_uX8T4byOv1WriZl3s
|
|
184
182
|
visidata/guides/RegexGuide.md,sha256=4R5_jgK0jLzyfbR72jiptVTCrGANlKEbx6w__X--JTw,2839
|
185
183
|
visidata/guides/SelectionGuide.md,sha256=_c4Rd2o3qJZwF-ErDb5oTF_mMsW6lF1oLcbezO2S-1A,1473
|
186
184
|
visidata/guides/SlideGuide.md,sha256=GWwGBiNb-Q6ZiWkmE4n8nKORUB-hcoHyUJyrubJTGa4,494
|
187
|
-
visidata/guides/SortGuide.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
188
185
|
visidata/guides/SplitpaneGuide.md,sha256=PYUBQ-qNKpMPqxBLd2Sd2JcoIV8qOZDA98v7BPkUKpE,382
|
189
186
|
visidata/guides/TypesSheet.md,sha256=XLxRCnxYNjb8m4junWhWZkg1Vqi8PT1CMZKHS4gvZpA,1521
|
190
187
|
visidata/guides/XsvGuide.md,sha256=4NbjaYq1Kk0RheXv683cTdOkykK2ofj-VF_DQY2CCJI,1072
|
191
188
|
visidata/loaders/__init__.py,sha256=oN_f4sosOdLzKcPH_KWm8r53g4xdzL9KtsEUAliTZRM,314
|
192
189
|
visidata/loaders/_pandas.py,sha256=bY4bOZhDDsSsb6hddlSRYC4KCNQ1-zhf09Ks3fTk4cY,16293
|
193
190
|
visidata/loaders/api_airtable.py,sha256=OMNicZ56NbkqjWAvhNOcw1ormu4KEvKyS4-Kv2mejjc,2228
|
194
|
-
visidata/loaders/api_bitio.py,sha256=oWP5ougl6ijAqXNE0ZBtR3ortcNdvcLVSXq2lVgpMT8,3274
|
195
191
|
visidata/loaders/api_matrix.py,sha256=eGIT6fuk1MDdf56Or3df9TNrVvXAcH1YkpBnkAH3UPw,5205
|
196
192
|
visidata/loaders/api_reddit.py,sha256=B76dKwowV1huDRZ8HZJKkq_n-9fESMSGHMJ-abM0nLw,12569
|
197
193
|
visidata/loaders/api_zulip.py,sha256=VQhc3D44DAZag4JS12n5IQMIoHaxLdFQ1jvuUthD8UY,9411
|
@@ -271,14 +267,14 @@ visidata/themes/ascii8.py,sha256=NQnTGNvBDJiwJPYNHXRdbIKGHDkhTJtguyXXHDUUxZY,250
|
|
271
267
|
visidata/themes/asciimono.py,sha256=V9qbQzsNuEti8_x-lO3Pw1rs0DpQM6Fk4sxAWs-Tm2Q,2484
|
272
268
|
visidata/themes/light.py,sha256=ciE-CPLalaMjKv-0alIPe4rPU_j-lBxpH9g7W-xNGqk,761
|
273
269
|
visidata/vendor/appdirs.py,sha256=bv3lwBYfZNtNPOva2Kg1hB-p2oyp8XXQnOtAGe662ps,24527
|
274
|
-
visidata-3.1.data/data/share/applications/visidata.desktop,sha256=0AYNevwQhmzguIPskekWPEh94g_blECxdKjtKEwBC04,125
|
275
|
-
visidata-3.1.data/data/share/man/man1/vd.1,sha256=dWMJZi0u_M81i0dwF1biWPmDyVOqajCZUUjfNQP5IyQ,59117
|
276
|
-
visidata-3.1.data/data/share/man/man1/visidata.1,sha256=dWMJZi0u_M81i0dwF1biWPmDyVOqajCZUUjfNQP5IyQ,59117
|
277
|
-
visidata-3.1.data/scripts/vd,sha256=1K_G6-qHOHs5JK6-wfraGXNnAyujDaDJGlw04WXPkQE,86
|
278
|
-
visidata-3.1.data/scripts/vd2to3.vdx,sha256=NdyyINfa8vvg2LgKfIohMMGcJOCjpx7hqZWv0bUF3EU,183
|
279
|
-
visidata-3.1.dist-info/LICENSE.gpl3,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
|
280
|
-
visidata-3.1.dist-info/METADATA,sha256=
|
281
|
-
visidata-3.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
282
|
-
visidata-3.1.dist-info/entry_points.txt,sha256=kji--8O48AhK0K4Z74s9b6Ve32kBD-0StD8imzzs12s,50
|
283
|
-
visidata-3.1.dist-info/top_level.txt,sha256=v2FzJlcgz-eSZeFIviYkZacHZJ8K3fjGbmj2B8QqyNc,9
|
284
|
-
visidata-3.1.dist-info/RECORD,,
|
270
|
+
visidata-3.1.1.data/data/share/applications/visidata.desktop,sha256=0AYNevwQhmzguIPskekWPEh94g_blECxdKjtKEwBC04,125
|
271
|
+
visidata-3.1.1.data/data/share/man/man1/vd.1,sha256=dWMJZi0u_M81i0dwF1biWPmDyVOqajCZUUjfNQP5IyQ,59117
|
272
|
+
visidata-3.1.1.data/data/share/man/man1/visidata.1,sha256=dWMJZi0u_M81i0dwF1biWPmDyVOqajCZUUjfNQP5IyQ,59117
|
273
|
+
visidata-3.1.1.data/scripts/vd,sha256=1K_G6-qHOHs5JK6-wfraGXNnAyujDaDJGlw04WXPkQE,86
|
274
|
+
visidata-3.1.1.data/scripts/vd2to3.vdx,sha256=NdyyINfa8vvg2LgKfIohMMGcJOCjpx7hqZWv0bUF3EU,183
|
275
|
+
visidata-3.1.1.dist-info/LICENSE.gpl3,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
|
276
|
+
visidata-3.1.1.dist-info/METADATA,sha256=gkRVYpo8I8e_pEiVDVbMeGlI9qVyhxsiJCbwoq4Dfpo,5316
|
277
|
+
visidata-3.1.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
278
|
+
visidata-3.1.1.dist-info/entry_points.txt,sha256=kji--8O48AhK0K4Z74s9b6Ve32kBD-0StD8imzzs12s,50
|
279
|
+
visidata-3.1.1.dist-info/top_level.txt,sha256=v2FzJlcgz-eSZeFIviYkZacHZJ8K3fjGbmj2B8QqyNc,9
|
280
|
+
visidata-3.1.1.dist-info/RECORD,,
|
@@ -1,26 +0,0 @@
|
|
1
|
-
from visidata import GuideSheet, vd
|
2
|
-
|
3
|
-
class ErrorsGuide(GuideSheet):
|
4
|
-
guide_text='''# What was that error?
|
5
|
-
|
6
|
-
Status messages include [:warning]warnings[/] and [:error]errors[/].
|
7
|
-
|
8
|
-
A command may issue a [:warning]warning[/] status and continue running.
|
9
|
-
A command that [:warning]fails[/] or [:error]errors[/] is aborted.
|
10
|
-
|
11
|
-
## Investigating errors further
|
12
|
-
|
13
|
-
If a Python Exception like [:error]RuntimeError[/] appears in the sidebar:
|
14
|
-
|
15
|
-
- {help.commands.error_recent}
|
16
|
-
- {help.commands.errors_all}
|
17
|
-
|
18
|
-
If [:note_type]{vd.options.note_format_exc}[/] or [:error]{vd.options.note_getter_exc}[/] appear inside a cell, it indicates an error happened during calculation, type-conversion, or formatting. When the cursor is on an error cell:
|
19
|
-
|
20
|
-
- {help.commands.error_cell}
|
21
|
-
'''
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
vd.addGuide('ErrorsSheet', ErrorsGuide)
|
26
|
-
|
visidata/guides/SortGuide.md
DELETED
File without changes
|
visidata/loaders/api_bitio.py
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
|
2
|
-
from visidata import *
|
3
|
-
|
4
|
-
vd.option('bitio_api_key', '', 'API key')
|
5
|
-
|
6
|
-
@VisiData.api
|
7
|
-
def new_bitio(vd, p):
|
8
|
-
vd.importExternal('bitdotio')
|
9
|
-
vd.requireOptions('bitio_api_key', help='https://docs.bit.io/docs/connecting-via-the-api')
|
10
|
-
return BitioReposSheet(p.name, source=p)
|
11
|
-
|
12
|
-
vd.openhttp_bitio = vd.new_bitio
|
13
|
-
|
14
|
-
@VisiData.lazy_property
|
15
|
-
def bitio_client(vd):
|
16
|
-
import bitdotio
|
17
|
-
return bitdotio.bitdotio(vd.options.bitio_api_key)
|
18
|
-
|
19
|
-
@VisiData.api
|
20
|
-
def bitio_api(vd, path, method, **kwargs):
|
21
|
-
t = vd.bitio_client.api_client.call_api(path, method,
|
22
|
-
header_params={'Accept': 'application/json',
|
23
|
-
'Authorization': 'Bearer '+vd.bitio_client.access_token,
|
24
|
-
'Content-Type': 'application/json'}, async_req=True, body=kwargs)
|
25
|
-
if not t.successful():
|
26
|
-
vd.warning(resp['Reason'])
|
27
|
-
return t.get()
|
28
|
-
|
29
|
-
|
30
|
-
class BitioReposSheet(Sheet):
|
31
|
-
rowtype = 'repos'
|
32
|
-
columns = [
|
33
|
-
AttrColumn('name'),
|
34
|
-
AttrColumn('creator'),
|
35
|
-
AttrColumn('owner'),
|
36
|
-
AttrColumn('bytes', type=int, width=0),
|
37
|
-
AttrColumn('collaborators'),
|
38
|
-
AttrColumn('description'),
|
39
|
-
AttrColumn('documentation'),
|
40
|
-
AttrColumn('endpoints'),
|
41
|
-
AttrColumn('is_private'),
|
42
|
-
AttrColumn('license'),
|
43
|
-
AttrColumn('query_count'),
|
44
|
-
AttrColumn('stars'),
|
45
|
-
AttrColumn('tables'),
|
46
|
-
AttrColumn('url'),
|
47
|
-
AttrColumn('watchers'),
|
48
|
-
]
|
49
|
-
defer = True
|
50
|
-
def iterload(self):
|
51
|
-
yield from vd.bitio_client.list_repos(self.source.name)
|
52
|
-
|
53
|
-
|
54
|
-
@asyncthread
|
55
|
-
def putChanges(self):
|
56
|
-
adds, mods, dels = self.getDeferredChanges()
|
57
|
-
for row in dels.values():
|
58
|
-
vd.bitio_api(f'/users/{self.source.name}/repos/{row.name}/', 'DELETE')
|
59
|
-
|
60
|
-
for row, rowmods in Progress(list(mods.values()), gerund="updating"):
|
61
|
-
kwargs = {col.name: val for col, val in rowmods.items()}
|
62
|
-
vd.bitio_api(f'/users/{self.source.name}/repos/{row.name}/', 'PATCH', **kwargs)
|
63
|
-
|
64
|
-
def openRow(self, row):
|
65
|
-
return BitioRepoSheet(self.source.name, row.name, source=row)
|
66
|
-
|
67
|
-
|
68
|
-
class BitioRepoSheet(Sheet):
|
69
|
-
rowtype = 'tables'
|
70
|
-
columns = [
|
71
|
-
AttrColumn('url'),
|
72
|
-
AttrColumn('current_name'),
|
73
|
-
AttrColumn('description'),
|
74
|
-
AttrColumn('columns'),
|
75
|
-
AttrColumn('num_records', type=int),
|
76
|
-
AttrColumn('bytes', type=int),
|
77
|
-
AttrColumn('repo'),
|
78
|
-
AttrColumn('documentation'),
|
79
|
-
]
|
80
|
-
def iterload(self):
|
81
|
-
yield from vd.bitio_client.list_tables(self.source.owner.split('/')[-2], self.source.name)
|
82
|
-
|
83
|
-
def openRow(self, row):
|
84
|
-
username = row.repo.split('/')[-4]
|
85
|
-
repo = row.repo.split('/')[-2]
|
86
|
-
return BitioTable(username, repo, source=row)
|
87
|
-
|
88
|
-
|
89
|
-
class BitioTable(Sheet):
|
90
|
-
def iterload(self):
|
91
|
-
username = self.source.repo.split('/')[-4]
|
92
|
-
repo = self.source.repo.split('/')[-2]
|
93
|
-
conn = vd.bitio_client.get_connection()
|
94
|
-
with conn.cursor() as cur:
|
95
|
-
cur.execute(f'SELECT * FROM "{username}/{repo}"."{self.source.current_name}"')
|
96
|
-
r = cur.fetchone()
|
97
|
-
if r:
|
98
|
-
yield r
|
99
|
-
self.columns = []
|
100
|
-
for c in vd.postgresGetColumns(cur):
|
101
|
-
self.addColumn(c)
|
102
|
-
yield from cur
|
visidata/stored_prop.py
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
from functools import wraps
|
2
|
-
import json
|
3
|
-
import atexit
|
4
|
-
|
5
|
-
from visidata import vd, VisiData, Path
|
6
|
-
|
7
|
-
vd.stored_properties = {}
|
8
|
-
|
9
|
-
@VisiData.class_api
|
10
|
-
@classmethod
|
11
|
-
def stored_property(vdcls, f):
|
12
|
-
def _save_on_exit():
|
13
|
-
if vd.stored_properties.get(f, None):
|
14
|
-
p = Path(vd.options.visidata_dir)/(f.__name__ + '.json')
|
15
|
-
with p.open(mode='w', encoding='utf-8') as fp:
|
16
|
-
fp.write(json.dumps(vd.stored_properties[f]))
|
17
|
-
|
18
|
-
@property
|
19
|
-
@wraps(f)
|
20
|
-
def _decorator(*args, **kwargs):
|
21
|
-
'Read persisted value from filesystem if available; otherwise call the decorated function to create a new instance.'
|
22
|
-
value = vd.stored_properties.get(f, None)
|
23
|
-
if value is not None:
|
24
|
-
return value
|
25
|
-
|
26
|
-
p = Path(vd.options.visidata_dir)/(f.__name__ + '.json')
|
27
|
-
if p.exists():
|
28
|
-
value = json.loads(p.open(encoding='utf-8-sig').read())
|
29
|
-
|
30
|
-
if value is None:
|
31
|
-
value = f(*args, **kwargs)
|
32
|
-
|
33
|
-
vd.stored_properties[f] = value
|
34
|
-
return value
|
35
|
-
|
36
|
-
atexit.register(_save_on_exit)
|
37
|
-
setattr(vdcls, f.__name__, _decorator)
|
38
|
-
return _decorator
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|