laketower 0.5.1__py3-none-any.whl → 0.6.5__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 laketower might be problematic. Click here for more details.

Files changed (33) hide show
  1. laketower/__about__.py +1 -1
  2. laketower/cli.py +269 -101
  3. laketower/config.py +96 -14
  4. laketower/static/datatables.bundle.js +27931 -0
  5. laketower/static/datatables.js +55 -0
  6. laketower/static/editor.bundle.js +27433 -0
  7. laketower/static/editor.js +74 -0
  8. laketower/static/vendor/bootstrap/bootstrap.bundle.min.js +7 -0
  9. laketower/static/vendor/bootstrap-icons/bootstrap-icons.min.css +5 -0
  10. laketower/static/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
  11. laketower/static/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
  12. laketower/static/vendor/datatables.net-bs5/dataTables.bootstrap5.css +610 -0
  13. laketower/static/vendor/datatables.net-columncontrol-bs5/columnControl.bootstrap5.min.css +1 -0
  14. laketower/static/vendor/halfmoon/halfmoon.min.css +22 -0
  15. laketower/static/vendor/halfmoon/halfmoon.modern.css +282 -0
  16. laketower/tables.py +218 -16
  17. laketower/templates/_base.html +99 -20
  18. laketower/templates/queries/view.html +50 -8
  19. laketower/templates/tables/_macros.html +3 -0
  20. laketower/templates/tables/history.html +6 -0
  21. laketower/templates/tables/import.html +71 -0
  22. laketower/templates/tables/index.html +6 -0
  23. laketower/templates/tables/query.html +53 -7
  24. laketower/templates/tables/statistics.html +10 -4
  25. laketower/templates/tables/view.html +48 -42
  26. laketower/web.py +253 -30
  27. {laketower-0.5.1.dist-info → laketower-0.6.5.dist-info}/METADATA +189 -5
  28. laketower-0.6.5.dist-info/RECORD +35 -0
  29. laketower-0.6.5.dist-info/entry_points.txt +2 -0
  30. laketower-0.5.1.dist-info/RECORD +0 -22
  31. laketower-0.5.1.dist-info/entry_points.txt +0 -2
  32. {laketower-0.5.1.dist-info → laketower-0.6.5.dist-info}/WHEEL +0 -0
  33. {laketower-0.5.1.dist-info → laketower-0.6.5.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: laketower
3
- Version: 0.5.1
3
+ Version: 0.6.5
4
4
  Summary: Oversee your lakehouse
5
5
  Project-URL: Repository, https://github.com/datalpia/laketower
6
6
  Project-URL: Issues, https://github.com/datalpia/laketower/issues
@@ -22,21 +22,24 @@ Classifier: Topic :: Database
22
22
  Classifier: Topic :: Software Development
23
23
  Classifier: Topic :: Utilities
24
24
  Requires-Python: <3.14,>=3.10
25
+ Requires-Dist: bleach
25
26
  Requires-Dist: deltalake<2,>=1
26
27
  Requires-Dist: duckdb
27
28
  Requires-Dist: fastapi
28
29
  Requires-Dist: jinja2!=3.1.5,>=3
29
- Requires-Dist: pandas
30
+ Requires-Dist: markdown
30
31
  Requires-Dist: pyarrow!=19.0.0
31
32
  Requires-Dist: pydantic-settings>=2
32
33
  Requires-Dist: pydantic>=2
34
+ Requires-Dist: python-multipart
33
35
  Requires-Dist: pyyaml
34
36
  Requires-Dist: rich
35
37
  Requires-Dist: sqlglot
38
+ Requires-Dist: tzdata
36
39
  Requires-Dist: uvicorn
37
40
  Description-Content-Type: text/markdown
38
41
 
39
- # Laketower
42
+ # 🗼 Laketower
40
43
 
41
44
  > Oversee your lakehouse
42
45
 
@@ -50,13 +53,16 @@ Utility application to explore and manage tables in your data lakehouse, especia
50
53
  ## Features
51
54
 
52
55
  - Delta Lake table format support
56
+ - Remote tables support (S3, ADLS)
53
57
  - Inspect table metadata
54
58
  - Inspect table schema
55
59
  - Inspect table history
56
60
  - Get table statistics
61
+ - Import data into a table from CSV files
57
62
  - View table content with a simple query builder
58
63
  - Query all registered tables with DuckDB SQL dialect
59
64
  - Execute saved queries
65
+ - Export query results to CSV files
60
66
  - Static and versionable YAML configuration
61
67
  - Web application
62
68
  - CLI application
@@ -86,6 +92,11 @@ Laketower configuration is based on a static YAML configuration file allowing to
86
92
  Format:
87
93
 
88
94
  ```yaml
95
+ settings:
96
+ max_query_rows: 1000
97
+ web:
98
+ hide_tables: false
99
+
89
100
  tables:
90
101
  - name: <table_name>
91
102
  uri: <local path to table>
@@ -94,12 +105,18 @@ tables:
94
105
  queries:
95
106
  - name: <query_name>
96
107
  title: <Query name>
108
+ description: <Query description>
109
+ parameters:
110
+ <param_name_1>:
111
+ default: <default_value>
97
112
  sql: <sql expression>
98
113
  ```
99
114
 
100
115
  Current limitations:
101
116
 
102
- - `tables.uri`: only local paths are allowed
117
+ - `tables.uri`:
118
+ - Local paths are supported (`./path/to/table`, `/abs/path/to/table`, `file:///abs/path/to/table`)
119
+ - Remote paths to S3 (`s3://<bucket>/<path>`) and ADLS (`abfss://<container>/<path>`)
103
120
  - `tables.format`: only `delta` is allowed
104
121
 
105
122
  Example from the provided demo:
@@ -138,6 +155,103 @@ queries:
138
155
  day asc
139
156
  ```
140
157
 
158
+ Support for environment variables substitution is also supported within the YAML
159
+ configuration using a object containing a single key `env` with the name of the
160
+ environment variable to be injected. The value of the variable can contain JSON
161
+ and will be decoded in a best effort manner (default to string value). For instance:
162
+
163
+ ```yaml
164
+ # export TABLE_URI=path/to/table
165
+
166
+ tables:
167
+ - name: sample_table
168
+ uri:
169
+ env: TABLE_URI
170
+ format: delta
171
+ ```
172
+
173
+ #### Remote S3 Tables
174
+
175
+ Configuring S3 tables (AWS, MinIO, Cloudflare R2):
176
+
177
+ ```yaml
178
+ tables:
179
+ - name: delta_table_s3
180
+ uri: s3://<bucket>/path/to/table
181
+ format: delta
182
+ connection:
183
+ s3:
184
+ s3_access_key_id: access-key-id
185
+ s3_secret_access_key: secret-access-key
186
+ s3_region: s3-region
187
+ s3_endpoint_url: http://s3.domain.com
188
+ s3_allow_http: false
189
+ ```
190
+
191
+ Depending on your object storage location and configuration, one might have to
192
+ set part or all the available `connection.s3` parameters. The only required ones
193
+ are `s3_access_key_id` and `s3_secret_access_key`.
194
+
195
+ Also as a security best practice, it is best not to write secrets directly in
196
+ static configuration files, so one can use environment variables to all dynamic substitution,
197
+ e.g.
198
+
199
+ ```yaml
200
+ tables:
201
+ - name: delta_table_s3
202
+ uri: s3://<bucket>/path/to/table
203
+ format: delta
204
+ connection:
205
+ s3:
206
+ s3_access_key_id: access-key-id
207
+ s3_secret_access_key:
208
+ env: S3_SECRET_ACCESS_KEY
209
+ s3_region: s3-region
210
+ s3_endpoint_url: http://s3.domain.com
211
+ s3_allow_http: false
212
+ ```
213
+
214
+ #### Remote ADLS Tables
215
+
216
+ Configuring Azure ADLS tables:
217
+
218
+ ```yaml
219
+ tables:
220
+ - name: delta_table_adls
221
+ uri: abfss://<container>/path/to/table
222
+ format: delta
223
+ connection:
224
+ adls:
225
+ adls_account_name: adls-account-name
226
+ adls_access_key: adls-access-key
227
+ adls_sas_key: adls-sas-key
228
+ adls_tenant_id: adls-tenant-id
229
+ adls_client_id: adls-client-id
230
+ adls_client_secret: adls-client-secret
231
+ azure_msi_endpoint: https://msi.azure.com
232
+ use_azure_cli: false
233
+ ```
234
+
235
+ Depending on your object storage location and configuration, one might have to
236
+ set part or all the available `connection.adls` parameters. The only required one
237
+ is `adls_account_name`.
238
+
239
+ Also as a security best practice, it is best not to write secrets directly in
240
+ static configuration files, so one can use environment variables to all dynamic substitution,
241
+ e.g.
242
+
243
+ ```yaml
244
+ tables:
245
+ - name: delta_table_adls
246
+ uri: abfss://<container>/path/to/table
247
+ format: delta
248
+ connection:
249
+ adls:
250
+ adls_account_name: adls-account-name
251
+ adls_access_key:
252
+ env: ADLS_ACCESS_KEY
253
+ ```
254
+
141
255
  ### Web Application
142
256
 
143
257
  The easiest way to get started is to launch the Laketower web application:
@@ -152,6 +266,7 @@ $ laketower -c demo/laketower.yml web
152
266
  ![Laketower UI - Tables View](https://raw.githubusercontent.com/datalpia/laketower/refs/heads/main/docs/static/tables_view.png)
153
267
  ![Laketower UI - Tables Statistics](https://raw.githubusercontent.com/datalpia/laketower/refs/heads/main/docs/static/tables_statistics.png)
154
268
  ![Laketower UI - Tables History](https://raw.githubusercontent.com/datalpia/laketower/refs/heads/main/docs/static/tables_history.png)
269
+ ![Laketower UI - Tables Import](https://raw.githubusercontent.com/datalpia/laketower/refs/heads/main/docs/static/tables_import.png)
155
270
  ![Laketower UI - Tables Query](https://raw.githubusercontent.com/datalpia/laketower/refs/heads/main/docs/static/tables_query.png)
156
271
  ![Laketower UI - Queries View](https://raw.githubusercontent.com/datalpia/laketower/refs/heads/main/docs/static/queries_view.png)
157
272
 
@@ -321,6 +436,29 @@ $ laketower -c demo/laketower.yml tables statistics --version 0 weather
321
436
  └──────────────────────┴───────┴──────┴──────┴──────┴──────┘
322
437
  ```
323
438
 
439
+ #### Import data into a given table
440
+
441
+ Import a CSV dataset into a table in append mode:
442
+
443
+ ```bash
444
+ $ laketower -c demo/laketower.yml tables import weather --file data.csv --mode append --format csv --delimiter ',' --encoding 'utf-8'
445
+ ```
446
+
447
+ `--mode` argument can be one of:
448
+ - `append`: append rows to the table (default)
449
+ - `overwrite`: replace all rows with the ones from the input file
450
+
451
+ `--format` argument can be one of:
452
+ - `csv`: CSV file format (default)
453
+
454
+ `--delimiter` argument can be:
455
+ - Any single character (only valid for CSV file format)
456
+ - Default is _comma_ (`','`)
457
+
458
+ `--encoding` argument can be:
459
+ - Any [standard Python encoding](https://docs.python.org/3/library/codecs.html#standard-encodings),
460
+ - Default is `'utf-8'`
461
+
324
462
  #### View a given table
325
463
 
326
464
  Using a simple query builder, the content of a table can be displayed.
@@ -398,6 +536,32 @@ $ laketower -c demo/laketower.yml tables query "select date_trunc('day', time) a
398
536
  │ 2025-02-11 00:00:00+01:00 │ 4.833333373069763 │
399
537
  │ 2025-02-10 00:00:00+01:00 │ 2.1083333243926368 │
400
538
  └───────────────────────────┴────────────────────┘
539
+ 3 rows returned
540
+ Execution time: 33.72ms
541
+ ```
542
+
543
+ Use named parameters within a giving query (note: escape `$` prefixes properly!):
544
+
545
+ ```bash
546
+ $ laketower -c demo/laketower.yml tables query "select date_trunc('day', time) as day, avg(temperature_2m) as mean_temperature from weather where day between \$start_date and \$end_date group by day order by day desc" -p start_date 2025-01-29 -p end_date 2025-01-31
547
+
548
+ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓
549
+ ┃ day ┃ mean_temperature ┃
550
+ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━┩
551
+ │ 2025-01-31 00:00:00+01:00 │ 5.683333257834117 │
552
+ │ 2025-01-30 00:00:00+01:00 │ 8.900000015894571 │
553
+ │ 2025-01-29 00:00:00+01:00 │ 7.770833313465118 │
554
+ └───────────────────────────┴────────────────────┘
555
+ 4 rows returned
556
+ Execution time: 30.59ms
557
+ ```
558
+
559
+ Export query results to CSV:
560
+
561
+ ```bash
562
+ $ laketower -c demo/laketower.yml tables query --output results.csv "select date_trunc('day', time) as day, avg(temperature_2m) as mean_temperature from weather group by day order by day desc limit 3"
563
+
564
+ Query results written to: results.csv
401
565
  ```
402
566
 
403
567
  #### List saved queries
@@ -437,10 +601,30 @@ $ laketower -c demo/laketower.yml queries view daily_avg_temperature
437
601
  │ 2025-02-11 00:00:00+01:00 │ 5.0 │
438
602
  │ 2025-02-12 00:00:00+01:00 │ 5.0 │
439
603
  └───────────────────────────┴─────────────────┘
604
+ 18 rows returned
605
+ Execution time: 39.52ms
606
+ ```
607
+
608
+ Executing a predefined query with parameters (here `start_date` and `end_date`):
609
+
610
+ ```bash
611
+ $ laketower -c demo/laketower.yml queries view daily_avg_temperature_params -p start_date 2025-02-01 -p end_date 2025-02-05
612
+
613
+ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
614
+ ┃ day ┃ avg_temperature ┃
615
+ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
616
+ │ 2025-02-01 00:00:00+01:00 │ 4.0 │
617
+ │ 2025-02-02 00:00:00+01:00 │ 4.0 │
618
+ │ 2025-02-03 00:00:00+01:00 │ 4.0 │
619
+ │ 2025-02-04 00:00:00+01:00 │ 3.0 │
620
+ │ 2025-02-05 00:00:00+01:00 │ 3.0 │
621
+ └───────────────────────────┴─────────────────┘
622
+ 6 rows returned
623
+ Execution time: 32.08ms
440
624
  ```
441
625
 
442
626
  ## License
443
627
 
444
628
  Licensed under [Apache License 2.0](LICENSE)
445
629
 
446
- Copyright (c) 2025 - present Romain Clement
630
+ Copyright (c) 2025 - present Romain Clement / Datalpia
@@ -0,0 +1,35 @@
1
+ laketower/__about__.py,sha256=KDgkBrBsBSUzbLgrOZ89YsNN06fU4j5bmcuEwo6q5pg,22
2
+ laketower/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ laketower/__main__.py,sha256=czKxJKG8OfncnxWmpaOWx7b1JBwFnZNQi7wKSTncB4M,108
4
+ laketower/cli.py,sha256=6jwvG2ZjNQNOJJS6fWzOcr8cp2u0VMgMuBd9vIIaS8o,18071
5
+ laketower/config.py,sha256=9zY69hIDSYcNqZtWGu-Jv23BFmLtHh2p03DZq9-1s_c,3703
6
+ laketower/tables.py,sha256=o5OxrSTamUFZC8j7qBnJWEAZ_9tG1sPzif2XFAJjIM0,11713
7
+ laketower/web.py,sha256=mm-zNsi8mc_5ig8TWXt4p8k2GghFvVIIjpAguAGT6Nw,14696
8
+ laketower/static/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ laketower/static/datatables.bundle.js,sha256=k9QXhh0gBLtw5gJRJToDrgdNVPBWAKRdNfBmYvziuiA,814319
10
+ laketower/static/datatables.js,sha256=lsBkx3Kt9GwGDZ97JEgDkwvfBlzK3THlN1K43iOrqvM,1857
11
+ laketower/static/editor.bundle.js,sha256=Wa1bS0xWwKDjHKPTdXd-PX41JAGkCjd0VLBCF-SyXWk,1159343
12
+ laketower/static/editor.js,sha256=C8saQJH68X7CtdRyBmvrQxsDJ013YWoMfWF-6hzf_5s,15870
13
+ laketower/static/vendor/bootstrap/bootstrap.bundle.min.js,sha256=5P1JGBOIxI7FBAvT_mb1fCnI5n_NhQKzNUuW7Hq0fMc,80496
14
+ laketower/static/vendor/bootstrap-icons/bootstrap-icons.min.css,sha256=pdY4ejLKO67E0CM2tbPtq1DJ3VGDVVdqAR6j3ZwdiE4,87008
15
+ laketower/static/vendor/bootstrap-icons/fonts/bootstrap-icons.woff,sha256=9VUTt7WRy4SjuH_w406iTUgx1v7cIuVLkRymS1tUShU,180288
16
+ laketower/static/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2,sha256=bHVxA2ShylYEJncW9tKJl7JjGf2weM8R4LQqtm_y6mE,134044
17
+ laketower/static/vendor/datatables.net-bs5/dataTables.bootstrap5.css,sha256=OPNPBvNyQahoUZ5gvqCCz9nPPIoUug2nn2_fpg9D8H0,21837
18
+ laketower/static/vendor/datatables.net-columncontrol-bs5/columnControl.bootstrap5.min.css,sha256=JwBYwZbQtbi-PwceKQ4KeqQp6E0QnGzeUSbaX-26UZc,13574
19
+ laketower/static/vendor/halfmoon/halfmoon.min.css,sha256=RjeFzczeuZHCyS-Gvz-kleETzBF_o84ZRHukze_yv6o,369168
20
+ laketower/static/vendor/halfmoon/halfmoon.modern.css,sha256=DD6elX-jPmbFYPsGvzodUv2-9FHkxHlVtQi0_RJVULs,10576
21
+ laketower/templates/_base.html,sha256=bRSdILczy9V05fMNu-iz30dLB6e14XFUhurBu2AlGK4,7065
22
+ laketower/templates/index.html,sha256=dLF2Og0qgzBkvGyVRidRNzTv0u4o97ifOx1jVeig8Kg,59
23
+ laketower/templates/queries/view.html,sha256=2vEqpOsgx6lPCYEcxW5VM60oERwayjrDlSaCznJ6MkY,3426
24
+ laketower/templates/tables/_macros.html,sha256=sCI1TOFW0QA74oSXW87H6dNTudOs7n-FretnTPFcRh4,1174
25
+ laketower/templates/tables/history.html,sha256=a5GBLXCiLlbWno5eR0XT5i_oMAghylUBBFOpr27NB3Q,1853
26
+ laketower/templates/tables/import.html,sha256=bQZwRrv84tDBuf0AHJyc7L-PjW-XSoZhMHNDIo6TP4c,2604
27
+ laketower/templates/tables/index.html,sha256=saNdQbJAjMJAzayTk4rA5Mmw_bCXvor2WpghVmoWSAI,2507
28
+ laketower/templates/tables/query.html,sha256=lI_jHcXV-lxMIDyWhNcfFwwJUFLHIICue9usZ5obnx0,3344
29
+ laketower/templates/tables/statistics.html,sha256=yVsu-hNPSQ3-IX-4Z4bukLR4nERvy5PwWENfkW24xyg,1858
30
+ laketower/templates/tables/view.html,sha256=D5jkzzMM6YaFKPquTGnh--7tlNBtF0iztBN0ULvLePs,3947
31
+ laketower-0.6.5.dist-info/METADATA,sha256=HEAXi9UmhTPoKgaVSUm2TrJFsK31dlHwzlgSG7gEoVs,27905
32
+ laketower-0.6.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
33
+ laketower-0.6.5.dist-info/entry_points.txt,sha256=sJpQgRwdeZhRBudNqBTqtHPCE-uLC9YgFXJY2CTEyCk,53
34
+ laketower-0.6.5.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
35
+ laketower-0.6.5.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ laketower = laketower.__main__:cli
@@ -1,22 +0,0 @@
1
- laketower/__about__.py,sha256=eZ1bOun1DDVV0YLOBW4wj2FP1ajReLjbIrGmzN7ASBw,22
2
- laketower/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- laketower/__main__.py,sha256=czKxJKG8OfncnxWmpaOWx7b1JBwFnZNQi7wKSTncB4M,108
4
- laketower/cli.py,sha256=U4gI12egcOs51wxjmQlU70XhA2QGcowc0AmTYpUKEFE,11962
5
- laketower/config.py,sha256=NdUDF7lr2hEW9Gujp0OpkOKcDP46ju1y_r0IM4Hrx2M,1100
6
- laketower/tables.py,sha256=Y-9kf6rwNbAVFgxzm6hAFlEMxGMqHyv7RiveDgMBNf4,4437
7
- laketower/web.py,sha256=5NMKj26aVz3cKnUAe-3sLDJ_4Ue3u0VXhATrDQ8GVF8,7205
8
- laketower/static/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- laketower/templates/_base.html,sha256=S-8kjAfYBx3Btb4FwzM2qyfkGYrOBHhpvCWR32mCvOw,3729
10
- laketower/templates/index.html,sha256=dLF2Og0qgzBkvGyVRidRNzTv0u4o97ifOx1jVeig8Kg,59
11
- laketower/templates/queries/view.html,sha256=2jW08X-PflXmsfy7u9ibX1BF8G5dx9X_n_Eoq3jzizA,1686
12
- laketower/templates/tables/_macros.html,sha256=fnj_8nBco0iS6mlBmGmfT2PZhI2Y82yP0cm8tRxchpU,965
13
- laketower/templates/tables/history.html,sha256=yAW0xw9_Uxp0QZYKje6qhcbpeznxI3fb740hfNyILZ8,1740
14
- laketower/templates/tables/index.html,sha256=oY13l_p8qozlLONanLpga1WhEo4oTP92pRf9sBSuFZI,2394
15
- laketower/templates/tables/query.html,sha256=YAFnW8Q5abDsbeglFHHZmJfGJXPjI2s4Nxf6gF_-Eg0,1360
16
- laketower/templates/tables/statistics.html,sha256=rgIOuF2PlHo2jvcYDAnxa5ObNortwyALlrURpM7qxMw,1714
17
- laketower/templates/tables/view.html,sha256=psfeRKkN19Q3Ko5Sm2570qRhehvuoEBPG89zFU5KQlc,3872
18
- laketower-0.5.1.dist-info/METADATA,sha256=OrkW0OD9bJ6JnIaPlyEmGJAU8pEWuJrCg9kJRVjwnCY,21353
19
- laketower-0.5.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
20
- laketower-0.5.1.dist-info/entry_points.txt,sha256=OL_4klopvyEzasJOFJ-sKu54lv24Jvomni32h1WVUjk,48
21
- laketower-0.5.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
22
- laketower-0.5.1.dist-info/RECORD,,
@@ -1,2 +0,0 @@
1
- [console_scripts]
2
- laketower = laketower:cli.cli