visidata 2.11.1__py3-none-any.whl → 3.0.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.
Files changed (256) hide show
  1. visidata/__init__.py +72 -91
  2. visidata/_input.py +259 -42
  3. visidata/_open.py +84 -29
  4. visidata/_types.py +21 -3
  5. visidata/_urlcache.py +17 -4
  6. visidata/aggregators.py +78 -25
  7. visidata/apps/__init__.py +0 -0
  8. visidata/apps/vdsql/__about__.py +8 -0
  9. visidata/apps/vdsql/__init__.py +5 -0
  10. visidata/apps/vdsql/__main__.py +27 -0
  11. visidata/apps/vdsql/_ibis.py +748 -0
  12. visidata/apps/vdsql/bigquery.py +61 -0
  13. visidata/apps/vdsql/clickhouse.py +53 -0
  14. visidata/apps/vdsql/setup.py +40 -0
  15. visidata/apps/vdsql/snowflake.py +67 -0
  16. visidata/apps/vgit/__init__.py +13 -0
  17. {vgit → visidata/apps/vgit}/blame.py +5 -2
  18. {vgit → visidata/apps/vgit}/branch.py +31 -16
  19. {vgit → visidata/apps/vgit}/config.py +3 -3
  20. visidata/apps/vgit/diff.py +169 -0
  21. visidata/apps/vgit/gitsheet.py +161 -0
  22. {vgit → visidata/apps/vgit}/grep.py +6 -5
  23. visidata/apps/vgit/log.py +81 -0
  24. {vgit → visidata/apps/vgit}/main.py +18 -5
  25. {vgit → visidata/apps/vgit}/remote.py +8 -4
  26. visidata/apps/vgit/repos.py +71 -0
  27. {vgit → visidata/apps/vgit}/setup.py +6 -4
  28. visidata/apps/vgit/stash.py +69 -0
  29. visidata/apps/vgit/status.py +204 -0
  30. {vgit → visidata/apps/vgit}/statusbar.py +2 -0
  31. visidata/basesheet.py +63 -51
  32. visidata/canvas.py +208 -93
  33. visidata/choose.py +6 -6
  34. visidata/clean_names.py +29 -0
  35. visidata/clipboard.py +73 -17
  36. visidata/cliptext.py +220 -46
  37. visidata/cmdlog.py +88 -114
  38. visidata/color.py +142 -56
  39. visidata/column.py +121 -129
  40. visidata/ddw/input.ddw +74 -79
  41. visidata/ddw/regex.ddw +57 -0
  42. visidata/ddwplay.py +33 -14
  43. visidata/deprecated.py +77 -3
  44. visidata/desktop/visidata.desktop +7 -0
  45. visidata/editor.py +12 -6
  46. visidata/errors.py +6 -2
  47. visidata/experimental/__init__.py +0 -0
  48. visidata/experimental/diff_sheet.py +29 -0
  49. visidata/experimental/digit_autoedit.py +6 -0
  50. visidata/experimental/gdrive.py +89 -0
  51. visidata/experimental/google.py +37 -0
  52. visidata/experimental/gsheets.py +79 -0
  53. visidata/experimental/live_search.py +37 -0
  54. visidata/experimental/liveupdate.py +45 -0
  55. visidata/experimental/mark.py +133 -0
  56. visidata/experimental/noahs_tapestry/__init__.py +1 -0
  57. visidata/experimental/noahs_tapestry/tapestry.py +147 -0
  58. visidata/experimental/rownum.py +73 -0
  59. visidata/experimental/slide_cells.py +26 -0
  60. visidata/expr.py +8 -4
  61. visidata/extensible.py +22 -4
  62. visidata/features/__init__.py +0 -0
  63. visidata/features/addcol_audiometadata.py +42 -0
  64. visidata/features/addcol_histogram.py +34 -0
  65. visidata/features/canvas_save_svg.py +69 -0
  66. visidata/features/change_precision.py +46 -0
  67. visidata/features/cmdpalette.py +197 -0
  68. visidata/features/colorbrewer.py +363 -0
  69. visidata/{colorsheet.py → features/colorsheet.py} +17 -16
  70. visidata/features/command_server.py +105 -0
  71. visidata/features/currency_to_usd.py +70 -0
  72. visidata/{customdate.py → features/customdate.py} +2 -0
  73. visidata/features/dedupe.py +132 -0
  74. visidata/{describe.py → features/describe.py} +17 -15
  75. visidata/features/errors_guide.py +26 -0
  76. visidata/features/expand_cols.py +202 -0
  77. visidata/{fill.py → features/fill.py} +3 -1
  78. visidata/{freeze.py → features/freeze.py} +11 -6
  79. visidata/features/graph_seaborn.py +79 -0
  80. visidata/features/helloworld.py +10 -0
  81. visidata/features/hint_types.py +17 -0
  82. visidata/{incr.py → features/incr.py} +5 -0
  83. visidata/{join.py → features/join.py} +107 -53
  84. visidata/features/known_cols.py +21 -0
  85. visidata/features/layout.py +62 -0
  86. visidata/{melt.py → features/melt.py} +32 -21
  87. visidata/features/normcol.py +118 -0
  88. visidata/features/open_config.py +7 -0
  89. visidata/features/open_syspaste.py +18 -0
  90. visidata/features/ping.py +157 -0
  91. visidata/features/procmgr.py +208 -0
  92. visidata/features/random_sample.py +6 -0
  93. visidata/{regex.py → features/regex.py} +47 -31
  94. visidata/features/reload_every.py +55 -0
  95. visidata/features/rename_col_cascade.py +30 -0
  96. visidata/features/scroll_context.py +60 -0
  97. visidata/features/select_equal_selected.py +11 -0
  98. visidata/features/setcol_fake.py +65 -0
  99. visidata/{slide.py → features/slide.py} +77 -21
  100. visidata/features/sparkline.py +48 -0
  101. visidata/features/status_source.py +20 -0
  102. visidata/{sysedit.py → features/sysedit.py} +2 -1
  103. visidata/features/sysopen_mailcap.py +46 -0
  104. visidata/features/term_extras.py +13 -0
  105. visidata/{transpose.py → features/transpose.py} +5 -4
  106. visidata/features/type_ipaddr.py +73 -0
  107. visidata/features/type_url.py +11 -0
  108. visidata/{unfurl.py → features/unfurl.py} +9 -9
  109. visidata/{window.py → features/window.py} +2 -2
  110. visidata/form.py +50 -21
  111. visidata/freqtbl.py +81 -33
  112. visidata/fuzzymatch.py +414 -0
  113. visidata/graph.py +105 -33
  114. visidata/guide.py +200 -0
  115. visidata/help.py +75 -44
  116. visidata/hint.py +39 -0
  117. visidata/indexsheet.py +109 -0
  118. visidata/input_history.py +55 -0
  119. visidata/interface.py +58 -0
  120. visidata/keys.py +20 -16
  121. visidata/loaders/__init__.py +9 -0
  122. visidata/loaders/_pandas.py +61 -21
  123. visidata/loaders/api_airtable.py +70 -0
  124. visidata/loaders/api_bitio.py +102 -0
  125. visidata/loaders/api_matrix.py +148 -0
  126. visidata/loaders/api_reddit.py +306 -0
  127. visidata/loaders/api_zulip.py +249 -0
  128. visidata/loaders/archive.py +41 -7
  129. visidata/loaders/arrow.py +7 -7
  130. visidata/loaders/conll.py +49 -0
  131. visidata/loaders/csv.py +25 -7
  132. visidata/loaders/eml.py +3 -4
  133. visidata/loaders/f5log.py +1204 -0
  134. visidata/loaders/fec.py +325 -0
  135. visidata/loaders/fixed_width.py +2 -4
  136. visidata/loaders/frictionless.py +3 -3
  137. visidata/loaders/geojson.py +8 -5
  138. visidata/loaders/google.py +48 -0
  139. visidata/loaders/graphviz.py +4 -4
  140. visidata/loaders/hdf5.py +4 -4
  141. visidata/loaders/html.py +54 -12
  142. visidata/loaders/http.py +84 -30
  143. visidata/loaders/imap.py +20 -10
  144. visidata/loaders/jrnl.py +52 -0
  145. visidata/loaders/json.py +83 -29
  146. visidata/loaders/jsonla.py +74 -0
  147. visidata/loaders/lsv.py +15 -11
  148. visidata/loaders/mailbox.py +40 -0
  149. visidata/loaders/markdown.py +1 -3
  150. visidata/loaders/mbtiles.py +4 -5
  151. visidata/loaders/mysql.py +11 -13
  152. visidata/loaders/npy.py +7 -7
  153. visidata/loaders/odf.py +4 -1
  154. visidata/loaders/orgmode.py +428 -0
  155. visidata/loaders/pandas_freqtbl.py +14 -20
  156. visidata/loaders/parquet.py +62 -6
  157. visidata/loaders/pcap.py +3 -3
  158. visidata/loaders/pdf.py +4 -3
  159. visidata/loaders/png.py +19 -13
  160. visidata/loaders/postgres.py +9 -8
  161. visidata/loaders/rec.py +7 -3
  162. visidata/loaders/s3.py +342 -0
  163. visidata/loaders/sas.py +5 -5
  164. visidata/loaders/scrape.py +186 -0
  165. visidata/loaders/shp.py +6 -5
  166. visidata/loaders/spss.py +5 -6
  167. visidata/loaders/sqlite.py +68 -28
  168. visidata/loaders/texttables.py +1 -1
  169. visidata/loaders/toml.py +60 -0
  170. visidata/loaders/tsv.py +61 -19
  171. visidata/loaders/ttf.py +19 -7
  172. visidata/loaders/unzip_http.py +6 -5
  173. visidata/loaders/usv.py +1 -1
  174. visidata/loaders/vcf.py +16 -16
  175. visidata/loaders/vds.py +10 -7
  176. visidata/loaders/vdx.py +30 -5
  177. visidata/loaders/xlsb.py +8 -1
  178. visidata/loaders/xlsx.py +145 -25
  179. visidata/loaders/xml.py +6 -3
  180. visidata/loaders/xword.py +4 -4
  181. visidata/loaders/yaml.py +15 -5
  182. visidata/macros.py +129 -42
  183. visidata/main.py +119 -94
  184. visidata/mainloop.py +101 -155
  185. visidata/man/parse_options.py +2 -2
  186. visidata/man/vd.1 +302 -149
  187. visidata/man/vd.txt +291 -154
  188. visidata/memory.py +3 -3
  189. visidata/menu.py +104 -423
  190. visidata/metasheets.py +59 -141
  191. visidata/modify.py +78 -23
  192. visidata/motd.py +3 -3
  193. visidata/mouse.py +137 -0
  194. visidata/movement.py +43 -35
  195. visidata/optionssheet.py +99 -0
  196. visidata/path.py +113 -32
  197. visidata/pivot.py +73 -47
  198. visidata/plugins.py +65 -192
  199. visidata/pyobj.py +55 -205
  200. visidata/rename_col.py +20 -0
  201. visidata/save.py +37 -20
  202. visidata/search.py +54 -10
  203. visidata/selection.py +84 -5
  204. visidata/settings.py +162 -25
  205. visidata/sheets.py +239 -260
  206. visidata/shell.py +51 -21
  207. visidata/sidebar.py +162 -0
  208. visidata/sort.py +11 -4
  209. visidata/statusbar.py +114 -104
  210. visidata/stored_list.py +43 -0
  211. visidata/stored_prop.py +38 -0
  212. visidata/tests/benchmark.csv +52 -0
  213. visidata/tests/conftest.py +3 -3
  214. visidata/tests/test_cliptext.py +39 -0
  215. visidata/tests/test_commands.py +65 -7
  216. visidata/tests/test_edittext.py +2 -2
  217. visidata/tests/test_features.py +28 -0
  218. visidata/tests/test_menu.py +14 -0
  219. visidata/tests/test_path.py +13 -4
  220. visidata/text_source.py +53 -0
  221. visidata/textsheet.py +10 -3
  222. visidata/theme.py +44 -0
  223. visidata/themes/__init__.py +0 -0
  224. visidata/themes/ascii8.py +84 -0
  225. visidata/themes/asciimono.py +84 -0
  226. visidata/themes/light.py +17 -0
  227. visidata/threads.py +89 -40
  228. visidata/tuiwin.py +22 -0
  229. visidata/type_currency.py +22 -3
  230. visidata/type_date.py +31 -9
  231. visidata/type_floatsi.py +5 -1
  232. visidata/undo.py +17 -5
  233. visidata/utils.py +106 -23
  234. visidata/vdobj.py +28 -17
  235. visidata/windows.py +10 -0
  236. visidata/wrappers.py +9 -3
  237. visidata-3.0.1.data/data/share/applications/visidata.desktop +7 -0
  238. {visidata-2.11.1.data → visidata-3.0.1.data}/data/share/man/man1/vd.1 +302 -149
  239. {visidata-2.11.1.data → visidata-3.0.1.data}/data/share/man/man1/visidata.1 +302 -149
  240. visidata-3.0.1.data/scripts/vd2to3.vdx +9 -0
  241. {visidata-2.11.1.dist-info → visidata-3.0.1.dist-info}/METADATA +12 -8
  242. visidata-3.0.1.dist-info/RECORD +258 -0
  243. {visidata-2.11.1.dist-info → visidata-3.0.1.dist-info}/WHEEL +1 -1
  244. vgit/__init__.py +0 -1
  245. vgit/gitsheet.py +0 -164
  246. visidata/layout.py +0 -44
  247. visidata/misc.py +0 -5
  248. visidata-2.11.1.data/scripts/vgit +0 -9
  249. visidata-2.11.1.dist-info/RECORD +0 -155
  250. {vgit → visidata/apps/vgit}/__main__.py +0 -0
  251. {vgit → visidata/apps/vgit}/abort.py +0 -0
  252. /visidata/{repeat.py → features/repeat.py} +0 -0
  253. {visidata-2.11.1.data → visidata-3.0.1.data}/scripts/vd +0 -0
  254. {visidata-2.11.1.dist-info → visidata-3.0.1.dist-info}/LICENSE.gpl3 +0 -0
  255. {visidata-2.11.1.dist-info → visidata-3.0.1.dist-info}/entry_points.txt +0 -0
  256. {visidata-2.11.1.dist-info → visidata-3.0.1.dist-info}/top_level.txt +0 -0
visidata/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  'VisiData: a curses interface for exploring and arranging tabular data'
2
2
 
3
- __version__ = '2.11,1'
3
+ __version__ = '3.0.1'
4
4
  __version_info__ = 'VisiData v' + __version__
5
5
  __author__ = 'Saul Pwanson <vd@saul.pw>'
6
6
  __status__ = 'Production/Stable'
@@ -14,19 +14,19 @@ class EscapeException(BaseException):
14
14
 
15
15
  def addGlobals(*args, **kwargs):
16
16
  '''Update the VisiData globals dict with items from *args* and *kwargs*, which are mappings of names to functions.
17
- Importers can call ``addGlobals(globals())`` to have their globals accessible to execstrings.'''
17
+ Importers can call ``addGlobals(globals())`` to have their globals accessible to execstrings.
18
+
19
+ Dunder methods are ignored, to prevent accidentally overwriting housekeeping methods.'''
20
+ drop_dunder = lambda d: {k: v for k, v in d.items() if not k.startswith("__")}
18
21
  for g in args:
19
- globals().update(g)
20
- globals().update(kwargs)
22
+ globals().update(drop_dunder(g))
23
+ globals().update(drop_dunder(kwargs))
21
24
 
22
25
 
23
26
  def getGlobals():
24
27
  'Return the VisiData globals dict.'
25
28
  return globals()
26
29
 
27
- from builtins import *
28
- from copy import copy, deepcopy
29
-
30
30
  from .utils import *
31
31
 
32
32
  from .extensible import *
@@ -41,136 +41,117 @@ vd.getGlobals = getGlobals
41
41
  import visidata.keys
42
42
 
43
43
  from .basesheet import *
44
+
44
45
  import visidata.settings
45
- from .errors import *
46
- from .editor import *
47
- from .cliptext import *
48
- from .color import *
49
- from .mainloop import *
50
- from .wrappers import *
51
- from .undo import *
52
46
 
53
- from ._types import *
54
- from .column import *
47
+ # importModule tracks where commands/options/etc are coming from (via vd.importingModule)
48
+ core_imports = '''
49
+ import visidata.errors
50
+ import visidata.editor
51
+ import visidata.color
52
+ import visidata.cliptext
53
+ import visidata.mainloop
55
54
 
56
- from .sheets import *
55
+ import visidata.menu
56
+ import visidata.wrappers
57
+ import visidata.undo
58
+ import visidata._types
59
+ import visidata.column
60
+
61
+ import visidata.interface
62
+ import visidata.sheets
63
+ import visidata.rename_col
64
+ import visidata.indexsheet
57
65
 
58
66
  import visidata.statusbar
59
67
 
60
68
  import visidata.textsheet
61
69
  import visidata.threads
62
- from .path import *
70
+ import visidata.path
71
+ import visidata.guide
72
+
73
+ import visidata.stored_list
63
74
  import visidata._input
75
+ import visidata.tuiwin
76
+ import visidata.mouse
64
77
  import visidata.movement
65
78
 
66
- import visidata.type_currency
67
79
  import visidata.type_date
68
- import visidata.type_floatsi
69
80
 
70
81
  import visidata._urlcache
71
82
  import visidata.selection
83
+ import visidata.text_source
84
+ import visidata.loaders
72
85
  import visidata.loaders.tsv
73
86
  import visidata.pyobj
74
87
  import visidata.loaders.json
75
88
  import visidata._open
76
- import visidata.metasheets
77
- import visidata.cmdlog
78
89
  import visidata.save
79
- import visidata.clipboard
80
- import visidata.sysedit
81
- import visidata.slide
82
90
  import visidata.search
83
- import visidata.expr
84
91
 
85
- import visidata.menu
92
+ import visidata.expr
93
+ import visidata.metasheets
94
+ import visidata.input_history
95
+ import visidata.optionssheet
96
+ import visidata.type_currency
97
+ import visidata.type_floatsi
98
+ import visidata.clean_names
99
+ import visidata.cmdlog
100
+ import visidata.clipboard
86
101
  import visidata.choose
87
- import visidata.join
88
102
  import visidata.aggregators
89
- import visidata.describe
90
103
  import visidata.pivot
91
104
  import visidata.freqtbl
92
- import visidata.melt
93
- import visidata.freeze
94
- import visidata.regex
95
105
  import visidata.canvas
96
106
  import visidata.canvas_text
97
107
  import visidata.graph
98
108
  import visidata.motd
99
- import visidata.transpose
100
109
  import visidata.shell
101
- import visidata.layout
102
110
  import visidata.main
103
111
  import visidata.help
104
112
  import visidata.modify
105
113
  import visidata.sort
106
- import visidata.unfurl
107
- import visidata.fill
108
- import visidata.incr
109
- import visidata.window
110
- import visidata.customdate
111
- import visidata.misc
112
114
  import visidata.memory
113
115
  import visidata.macros
116
+
114
117
  import visidata.macos
115
- import visidata.repeat
116
-
117
- import visidata.loaders.csv
118
- import visidata.loaders.archive
119
- import visidata.loaders.xlsx
120
- import visidata.loaders.xlsb
121
- import visidata.loaders.hdf5
122
- import visidata.loaders.sqlite
123
- import visidata.loaders.fixed_width
124
- import visidata.loaders.postgres
125
- import visidata.loaders.mysql
126
- import visidata.loaders.shp
127
- import visidata.loaders.geojson
128
- import visidata.loaders.mbtiles
129
- import visidata.loaders.http
130
- import visidata.loaders.html
131
- import visidata.loaders.markdown
132
- import visidata.loaders.pcap
133
- import visidata.loaders.png
134
- import visidata.loaders.ttf
135
- import visidata.loaders.sas
136
- import visidata.loaders.spss
137
- import visidata.loaders.xml
138
- import visidata.loaders.yaml
139
- import visidata.loaders._pandas
140
- import visidata.loaders.graphviz
141
- import visidata.loaders.npy
142
- import visidata.loaders.usv
143
- import visidata.loaders.frictionless
144
- import visidata.loaders.imap
145
-
146
- import visidata.loaders.pdf
147
- import visidata.loaders.pandas_freqtbl
148
- import visidata.loaders.xword
149
- import visidata.loaders.vcf
150
- import visidata.loaders.texttables
151
- import visidata.loaders.rec
152
- import visidata.loaders.eml
153
- import visidata.loaders.vds
154
- import visidata.loaders.odf
155
- import visidata.loaders.lsv
156
- import visidata.loaders.arrow
157
- import visidata.loaders.parquet
158
-
159
- import visidata.loaders.vdx
118
+ import visidata.windows
160
119
 
161
120
  import visidata.form
121
+ import visidata.sidebar
162
122
 
163
123
  import visidata.ddwplay
164
124
  import visidata.plugins
165
125
 
166
- import visidata.colorsheet
126
+ import visidata.theme
127
+ import visidata.apps
128
+ import visidata.fuzzymatch
129
+ import visidata.hint
130
+ '''
131
+
132
+ for line in core_imports.splitlines():
133
+ if not line: continue
134
+ module = line[len('import '):]
135
+ vd.importModule(module)
136
+
137
+ vd.importSubmodules('visidata.loaders')
138
+
139
+ def importFeatures():
140
+ vd.importSubmodules('visidata.features')
141
+ vd.importSubmodules('visidata.themes')
142
+
143
+ vd.importStar('visidata.deprecated')
144
+
145
+ vd.importStar('builtins')
146
+ vd.importStar('copy')
147
+ vd.importStar('math')
148
+ vd.importStar('random')
149
+ vd.importStar('itertools')
167
150
 
168
- from .deprecated import *
151
+ import visidata.experimental # import nothing by default but make package accessible
169
152
 
170
- import math
171
- import random
172
- from math import *
153
+ vd.finalInit() # call all VisiData.init() from modules
173
154
 
174
- vd.finalInit()
155
+ importFeatures()
175
156
 
176
157
  vd.addGlobals(globals())