tab-cli 0.1.4__tar.gz → 0.1.6__tar.gz
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.
- tab_cli-0.1.6/AGENTS.md +158 -0
- tab_cli-0.1.6/CHANGELOG.md +18 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/PKG-INFO +2 -1
- {tab_cli-0.1.4 → tab_cli-0.1.6}/docs/cli-ref.md +6 -3
- tab_cli-0.1.6/docs/configuration.md +34 -0
- tab_cli-0.1.6/docs/gen_assets.sh +3 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/docs/index.md +16 -2
- {tab_cli-0.1.4 → tab_cli-0.1.6}/mkdocs.yml +1 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/pyproject.toml +2 -1
- tab_cli-0.1.6/src/tab_cli/cli.py +386 -0
- tab_cli-0.1.6/src/tab_cli/config.py +47 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/formats/parquet.py +1 -1
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/handlers/__init__.py +35 -0
- tab_cli-0.1.6/tests/test_cli.py +357 -0
- tab_cli-0.1.4/CHANGELOG.md +0 -11
- tab_cli-0.1.4/docs/gen_assets.sh +0 -3
- tab_cli-0.1.4/src/tab_cli/cli.py +0 -188
- tab_cli-0.1.4/src/tab_cli/config.py +0 -14
- tab_cli-0.1.4/tests/test_cli.py +0 -108
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.gitignore +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/.gitignore +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/282ad8cf3324b2679a7d460c0fc324adfa21dcfad2f197ac6991b98ec91f98495bb3ddb2cba36ce5dfa28a52063a373bb03f5d2e34f6e0c7b6b81b3046a4d7d0 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/891d7ed26f62b0f8757b081e9d76840636877f1613ee17b7695fe2ee8640258c56e01291934e3797728bc2300a1b5f41e3f3ef81ab532c0e5ab475bb9b6f097a +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/8926397375b8328137652c18cd4371808b214cb26864d77dd33c8eea895e10e62c297064c3d4c703d58ee11dee81bbf9851525e3a0c33151f54c164b8a4343b0 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/89d29d938e64b1295e138faedfa5df6f6729a67e5ba8e0c3fdd1c9266e0f59a4bc35b8a21e14225072317879af3323fa0457e01d9b08608770bc23957feec6c0 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/95fc2854c0fa2528b03e2bcabc7612f56f0bcb3d6f54a06293e21d1887885a449907b5b320a1a94bac712bf56fdad0a4184b17047c1fc179dfa83acab3f70d21 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/9a58ceae46de4649375b6b880b8500c85d34c8e9bc650dc4c993afb2fa8d45c4180331821c6226a0fb1475b04a0b9a849502647ef9c4dcac74769eb501c885fa +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/a19ae062208aa20b7310705af3d26ef53095a9dabfad080883cc7a32e98687063179db95cb2c71ef9064801c59fa46d261f172d83e83f96a39c274387b59dca4 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/d1169a8d10067493e42752c2a7615ff27f55bd90c38b91feef918958e29a2239ee289a0cde8385441d1f0fe9af1fb634fa6d56438b9f33ec382e81fa59d70b54 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/e171e5c6039c050c2368584a537d36df221b1f9f23d285c0399b95b14608d67006229823e6831bff7d8b0c2f9e86ebaec9c6811461119195f430ade055073fed +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/op_links/ee118dd19aac4e1cb354f83a37dadca70bc5f086cc8d36cd0059b222bf8c7250824401ff681518d0120f8db1f96f0025c464dcfc3b1ee28777e8c76325760134 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/282ad8cf3324b2679a7d460c0fc324adfa21dcfad2f197ac6991b98ec91f98495bb3ddb2cba36ce5dfa28a52063a373bb03f5d2e34f6e0c7b6b81b3046a4d7d0 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/891d7ed26f62b0f8757b081e9d76840636877f1613ee17b7695fe2ee8640258c56e01291934e3797728bc2300a1b5f41e3f3ef81ab532c0e5ab475bb9b6f097a +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/8926397375b8328137652c18cd4371808b214cb26864d77dd33c8eea895e10e62c297064c3d4c703d58ee11dee81bbf9851525e3a0c33151f54c164b8a4343b0 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/89d29d938e64b1295e138faedfa5df6f6729a67e5ba8e0c3fdd1c9266e0f59a4bc35b8a21e14225072317879af3323fa0457e01d9b08608770bc23957feec6c0 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/95fc2854c0fa2528b03e2bcabc7612f56f0bcb3d6f54a06293e21d1887885a449907b5b320a1a94bac712bf56fdad0a4184b17047c1fc179dfa83acab3f70d21 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/9a58ceae46de4649375b6b880b8500c85d34c8e9bc650dc4c993afb2fa8d45c4180331821c6226a0fb1475b04a0b9a849502647ef9c4dcac74769eb501c885fa +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/a19ae062208aa20b7310705af3d26ef53095a9dabfad080883cc7a32e98687063179db95cb2c71ef9064801c59fa46d261f172d83e83f96a39c274387b59dca4 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/d1169a8d10067493e42752c2a7615ff27f55bd90c38b91feef918958e29a2239ee289a0cde8385441d1f0fe9af1fb634fa6d56438b9f33ec382e81fa59d70b54 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/e171e5c6039c050c2368584a537d36df221b1f9f23d285c0399b95b14608d67006229823e6831bff7d8b0c2f9e86ebaec9c6811461119195f430ade055073fed +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/operations/ee118dd19aac4e1cb354f83a37dadca70bc5f086cc8d36cd0059b222bf8c7250824401ff681518d0120f8db1f96f0025c464dcfc3b1ee28777e8c76325760134 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/segments/1029dd1c1f4430d8a667a0e48d0b817652c7ddca6f5ff56cac1755e5bb0c1cb7586935941c9b36f26cab05c0effe6154d073bd1dffbe37f22fed0a6e7d79201f +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/segments/3228b9bef9d8374b5532b40df2da8be3bfc86de713bdad7fe620977ffa7c56db83928678caa792bf0d328db607028e045a9e41423ef7501e5b550651c3815ffe +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/segments/424c9a53f5458b328d77ed6a943dc35662e949befa8725cfc7eead01a270417c8d07c1001b11623a088da8d2c9c34a41573314fa2394643147e4027e8a96a605 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/segments/44107e81054aa5544b36eab8d811908a559b4d9027dc3fa1762c44e39551652199ef2a31f9bbcda79773c906151c12578cb18c43e0045de8b20c357272e1c62a +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/segments/52ea57bde33e8ef4718d833c2df3cf0a9e90fdcd5715c0caad50b4e37ea60aca2b8c71096de6920dc936c40b6291e896293f91c7cfd2aa96cf6c2aa49ef662c8 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/segments/5ea52f6d4771afda4747b9f44954102c02ae2d0686f8aa9eca36c29796bbba0d14e851c0dca0a6af17bfbbbac174e3be645ae708d958390168e85c64786fc9ef +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/segments/86a1cfa113399acc7dd2dc90262a845558affb5e9373b6300dff68a485482c5e17ace9466bbc23b4301013ca1a27a577ca57ea838113f45bf321a64a242b1ad3 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/segments/8ef99a12ae0624db198d9ecd83014fb8353c4731e0ba9a472f1fc339784308e38f1287d0765a7b0444f1a89c218c76a820dc4c9a3a39c1cedcd7423a4f5f88dc +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/segments/cb3e8da2bf2b7efae4a6e8fd0b8562dacd16ca0531b173a91480a9e60ee795ac5bec13fc6eb461e03edc9a26f5ff1d5ba53521a1c1a6c1ee1765b544b7d7bf73 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/segments/d27ad326963b75736b636adad9fb812eb3f2871e0efb4bc7db37d4b701a4282911eaaee91bed3a759e940769b667be1ed66f2d7f2f41ac3906b87ab7eec19c3a +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/index/type +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_heads/heads/891d7ed26f62b0f8757b081e9d76840636877f1613ee17b7695fe2ee8640258c56e01291934e3797728bc2300a1b5f41e3f3ef81ab532c0e5ab475bb9b6f097a +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_heads/type +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/operations/282ad8cf3324b2679a7d460c0fc324adfa21dcfad2f197ac6991b98ec91f98495bb3ddb2cba36ce5dfa28a52063a373bb03f5d2e34f6e0c7b6b81b3046a4d7d0 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/operations/891d7ed26f62b0f8757b081e9d76840636877f1613ee17b7695fe2ee8640258c56e01291934e3797728bc2300a1b5f41e3f3ef81ab532c0e5ab475bb9b6f097a +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/operations/8926397375b8328137652c18cd4371808b214cb26864d77dd33c8eea895e10e62c297064c3d4c703d58ee11dee81bbf9851525e3a0c33151f54c164b8a4343b0 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/operations/89d29d938e64b1295e138faedfa5df6f6729a67e5ba8e0c3fdd1c9266e0f59a4bc35b8a21e14225072317879af3323fa0457e01d9b08608770bc23957feec6c0 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/operations/95fc2854c0fa2528b03e2bcabc7612f56f0bcb3d6f54a06293e21d1887885a449907b5b320a1a94bac712bf56fdad0a4184b17047c1fc179dfa83acab3f70d21 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/operations/9a58ceae46de4649375b6b880b8500c85d34c8e9bc650dc4c993afb2fa8d45c4180331821c6226a0fb1475b04a0b9a849502647ef9c4dcac74769eb501c885fa +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/operations/a19ae062208aa20b7310705af3d26ef53095a9dabfad080883cc7a32e98687063179db95cb2c71ef9064801c59fa46d261f172d83e83f96a39c274387b59dca4 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/operations/d1169a8d10067493e42752c2a7615ff27f55bd90c38b91feef918958e29a2239ee289a0cde8385441d1f0fe9af1fb634fa6d56438b9f33ec382e81fa59d70b54 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/operations/e171e5c6039c050c2368584a537d36df221b1f9f23d285c0399b95b14608d67006229823e6831bff7d8b0c2f9e86ebaec9c6811461119195f430ade055073fed +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/operations/ee118dd19aac4e1cb354f83a37dadca70bc5f086cc8d36cd0059b222bf8c7250824401ff681518d0120f8db1f96f0025c464dcfc3b1ee28777e8c76325760134 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/type +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/views/123b0e36150cf8e99d644d2dfd1a7b0c8d2f676a78248d6902516d9ae58903665c79ec3f5f6729b98a1237dcf2abc1d41e690ae0ad30888c84786bcc9de5e314 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/views/2ac0b7d8b1fdfac82b3ff3926e0018f72ef2b48f85b41f5fa541271370e1197d41e37c2c6d62af0c6974658c4a9e5e945b8efcbcc7748bdd99bd9483f7e13e22 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/views/67b8396b301935ff624ff98952c57d8ee021e7d885e1220053b993e7bc822a4cf061298e9643ded745c55f3ed8e923a6731524129993d2664f48b60660761145 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/views/9c6fca696f77383cc87d068fe3f5912466b157dccc6465973e653dd4d2c02e2eca9c0725c071857bf3f4f0e263259eafc18f1739615a501e672bb2afd415316b +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/views/cae2e3e5952cb5ba93f27e3898d90dac6c41fc9e20c66ef0791e71b91dc103d924996c921c88179705264a224fb5d2bb29091fc8f18f0ea7a088aaabb859ea2a +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/views/cd8efb6da14127c81c37b56ead18a39b30f2cd154891185a6e906efb491dbf63f290eed3c31d4725f490a93208ffbe5cdc031d5b6de38fcb77cbb11f0357118f +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/views/e434359d6306a4f6997733b9b5308299984f05219c92e1b2a31f1203126be0fada5fc09a2ba86c98d1318981cb53997c7f8674ef25da6ca7bf9fd849598cd355 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/views/ea75e7ccb42f52b013dc1b45bb4e6d692b37c5e38bd39356ba2806be83ca5ca03ce20481db2788428126f93663e6723f99f4d46c5c705f5b12b70e2127ab15ba +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/views/fa5dec7ee06fbc6cbb2798c8e98bab482a6750776de41406fb06893c83f71f5015ec7ee2873642714b7bbc1c496f880e3acf44ffdabf2f87a39e0fbd68a4cc46 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/op_store/views/ffde172c6285c71851b22780e34962d8f9234067af59ff2dc38b74e905dc540fe35b944e8c0b2d4230dfcf778424a335494cd0aeea1bb4be2a11c4b5428ad465 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/14e3f15273e204cadfe38dd2f38cebd1343a6bfbb91c6af0f5f9de6e9003d8ec8b0eb676975af9dca2d06ee5e6b3886c3c5d3755c6f149b6b09172cccc35adff +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/42e0f32dd10ba6ae9f2297ca8ad0bd16337f14545b29f956ce380a7ab92bab771cbc9e04755752a6fa13231286f724379d6662b0fb257ef2cc2c52fe680eb95d +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/466a441e56afdde383cef1d6127ca1d4c825157feb65a59f8f6ff5fa7a523bd683d0b7a6bb16c00afff53a890319a472d98da9af3dea5675168a4d424aa7af32 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/482ae5a29fbe856c7272f2071b8b0f0359ee2d89ff392b8a900643fbd0836eccd067b8bf41909e206c90d45d6e7d8b6686b93ecaee5fe1a9060d87b672101310 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/5403fa06049419ddcf620ce0dc20911583e1b1062b42630ee325aa5ac2f918dd266dfed93ebc808a2aecb37ac3a33e251fe1396fd24b8ed566bfbd61a81ff959 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/56119fa0480cb66159978b1a8c9b031f9e978b7a3172eb87407a701fea34fdd90db7771cd433a2cf7e8a84a7b49c924f973eccb0eb05685ec42f36f7ef61cc06 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/90b1f4de4ba65e0652f1de45e4c84b623f99bd9d9453667e19c7040857bd397e59e7a84406f2ab6204d25789d995c47c350d8abc47a4bbb102059f3111f20028 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/9215bd4ac28fdecba111c63bace46d0f1c253ad3af44e0e74bd43d30757bef2e655538c1172c8f25769bce0a3c669b713440773c1859f0a136d9ca42501f2470 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/a79320f784ef97b3d6297e55a48b17a517a38d95d5c61ba8d01c59d68dcd2ccf3a96479f4fc3c4cafdcd56dc7bd58b1cb987e079764c1646533ab32418900727 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/abe6b7a350e1604cb8f5a2cd10cef13a019bd797770e6dc37414d33d98dcf36d8ec80a2ae13bd7dd2d2076772c0ffadec0b53ba72f4669b461fff2da5d30f1ba +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/b7689d54193a3798edd58d758966ad65ad57297c5276eab3e4ef07380779363efe9e462a149f4d42f55bbe004eb5ba88bf35df4c78ac975275530382390159d6 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/e75f5f3431d172d7e9434dfaef2be50812105b3ead73eeb10345c9b6892e9cbb5ee0602ebb0ceaf5ab87d22f45930dc30d136d0aac77310fb0261b3857ffde9b +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/extra/heads/56119fa0480cb66159978b1a8c9b031f9e978b7a3172eb87407a701fea34fdd90db7771cd433a2cf7e8a84a7b49c924f973eccb0eb05685ec42f36f7ef61cc06 +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/git_target +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/store/type +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/submodule_store/type +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/repo/workspace_store/index +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/working_copy/checkout +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/working_copy/tree_state +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/.jj/working_copy/type +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/LICENSE +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/Makefile +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/README.md +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/docs/cloud.md +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/__init__.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/formats/__init__.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/formats/avro.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/formats/base.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/formats/csv.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/formats/jsonl.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/handlers/base.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/handlers/cli_table.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/storage/__init__.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/storage/aws.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/storage/az.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/storage/base.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/storage/fsspec.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/storage/gcloud.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/storage/local.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/style.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/src/tab_cli/url_parser.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/tests/__init__.py +0 -0
- {tab_cli-0.1.4 → tab_cli-0.1.6}/tests/assets/test.csv +0 -0
tab_cli-0.1.6/AGENTS.md
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
This file gives coding agents the repository-specific commands and conventions for `tab-cli`.
|
|
6
|
+
Use it as the default operating guide when changing code in this repo.
|
|
7
|
+
|
|
8
|
+
## Project Snapshot
|
|
9
|
+
|
|
10
|
+
- Language: Python.
|
|
11
|
+
- Package manager and task runner: `uv`.
|
|
12
|
+
- Build backend: Hatchling.
|
|
13
|
+
- CLI framework: Typer.
|
|
14
|
+
- Data engine: Polars.
|
|
15
|
+
- Terminal rendering: Rich.
|
|
16
|
+
- Logging: Loguru.
|
|
17
|
+
- Main package path: `src/tab_cli`.
|
|
18
|
+
- Tests path: `tests`.
|
|
19
|
+
- Docs path: `docs` with `mkdocs.yml`.
|
|
20
|
+
|
|
21
|
+
## Setup
|
|
22
|
+
|
|
23
|
+
- Sync the development environment with `uv sync --dev`.
|
|
24
|
+
- Install the CLI tool locally with `uv tool install . --force`.
|
|
25
|
+
- Python requirement is `>=3.10`.
|
|
26
|
+
- Optional cloud extras exist for `s3`, `gcs`, and `azure`.
|
|
27
|
+
- `uv.lock` is committed; prefer `uv` commands over raw `pip` when possible.
|
|
28
|
+
|
|
29
|
+
## Makefile Notes
|
|
30
|
+
|
|
31
|
+
- `make dev` runs `uv sync --dev`.
|
|
32
|
+
- `make test` runs `uv run pytest`.
|
|
33
|
+
- `make build` runs `uv build` after `clean`.
|
|
34
|
+
- `make docs` runs the MkDocs build target.
|
|
35
|
+
- The current `Makefile` uses `tab_cli/` for `lint`, `format`, and `typecheck`.
|
|
36
|
+
- The actual package lives under `src/tab_cli`, so prefer direct `uv run ... src/tab_cli` commands unless the Makefile is updated.
|
|
37
|
+
|
|
38
|
+
## Test Guidance
|
|
39
|
+
|
|
40
|
+
- Prefer targeted pytest node IDs while iterating.
|
|
41
|
+
- Use `-q` for concise output when running a single test.
|
|
42
|
+
- Use `-k <expr>` when the exact node ID is inconvenient.
|
|
43
|
+
- The CLI tests rely on `typer.testing.CliRunner`.
|
|
44
|
+
- Test data is stored under `tests/assets`.
|
|
45
|
+
- Existing tests emphasize user-visible CLI output, not internal implementation details.
|
|
46
|
+
- When adding CLI behavior, extend `tests/test_cli.py` unless the change clearly deserves a new file.
|
|
47
|
+
- Assert both `exit_code` and key output fragments.
|
|
48
|
+
- For stdin support, pass `"-"` as the path and provide `input=` to `runner.invoke(...)`.
|
|
49
|
+
|
|
50
|
+
## Repository Structure
|
|
51
|
+
|
|
52
|
+
- `src/tab_cli/cli.py`: Typer entrypoint and command definitions.
|
|
53
|
+
- `src/tab_cli/handlers/`: reader/writer composition and CLI table output.
|
|
54
|
+
- `src/tab_cli/formats/`: per-format adapters for CSV, TSV, JSONL, Avro, and Parquet.
|
|
55
|
+
- `src/tab_cli/storage/`: local, cloud, and fsspec-backed storage backends.
|
|
56
|
+
- `src/tab_cli/url_parser.py`: parsing for local and cloud URLs.
|
|
57
|
+
- `src/tab_cli/config.py`: mutable global config for CLI flags.
|
|
58
|
+
- `tests/test_cli.py`: current CLI test suite.
|
|
59
|
+
|
|
60
|
+
## Architecture Conventions
|
|
61
|
+
|
|
62
|
+
- Keep the CLI layer thin.
|
|
63
|
+
- Put command-line option parsing in `cli.py`.
|
|
64
|
+
- Put reusable IO behavior in handlers, format adapters, or storage backends.
|
|
65
|
+
- Use `TableReader` to combine a storage backend with a format handler.
|
|
66
|
+
- Use `TableWriter` or `FormatWriter` for output behavior.
|
|
67
|
+
- Keep format-specific logic inside `src/tab_cli/formats/`.
|
|
68
|
+
- Keep backend-specific auth and path normalization inside `src/tab_cli/storage/`.
|
|
69
|
+
- Use `polars.LazyFrame` as the default data pipeline type.
|
|
70
|
+
- Only collect eagerly when necessary for schema inspection, batch writing, counts, or summary output.
|
|
71
|
+
|
|
72
|
+
## Imports
|
|
73
|
+
|
|
74
|
+
- Follow the repo’s existing import style: standard library, third-party, then local imports.
|
|
75
|
+
- Avoid unused imports; Ruff is already catching several in the repo.
|
|
76
|
+
- Prefer explicit imports from sibling modules over wildcard imports.
|
|
77
|
+
- `__init__.py` files may re-export public types via `__all__`.
|
|
78
|
+
- Keep imports at module scope unless a local import is needed to avoid optional dependency failures or circular imports.
|
|
79
|
+
- Local imports are already used when backend selection depends on optional cloud packages.
|
|
80
|
+
|
|
81
|
+
## Formatting
|
|
82
|
+
|
|
83
|
+
- Use `ruff format` for code formatting.
|
|
84
|
+
- Match the existing style: double quotes, compact functions, minimal vertical whitespace.
|
|
85
|
+
- Keep lines readable rather than aggressively compressed.
|
|
86
|
+
- Prefer small helper functions when a command body becomes dense.
|
|
87
|
+
- Do not introduce decorative comments or banner blocks.
|
|
88
|
+
- Keep docstrings short and factual.
|
|
89
|
+
|
|
90
|
+
## Types
|
|
91
|
+
|
|
92
|
+
- Type hints are used widely and should be preserved.
|
|
93
|
+
- Prefer modern built-in generics like `list[str]` and `dict[str, Any]`.
|
|
94
|
+
- Use `X | None` instead of `Optional[X]` in new code unless matching nearby style requires otherwise.
|
|
95
|
+
- Use `TypeAlias` and `Annotated` where CLI option reuse materially improves readability.
|
|
96
|
+
- Keep abstract method signatures precise in base classes.
|
|
97
|
+
- Return `pl.LazyFrame` for lazy operations and `pl.DataFrame` for eager stream reads.
|
|
98
|
+
- Be careful with optional third-party imports; they currently create type-check noise.
|
|
99
|
+
- When adding types around cloud storage options, prefer signatures broad enough for mixed value types if the implementation returns bools or nested dicts.
|
|
100
|
+
|
|
101
|
+
## Naming
|
|
102
|
+
|
|
103
|
+
- Use `snake_case` for functions, variables, and module names.
|
|
104
|
+
- Use `CamelCase` for classes and dataclasses.
|
|
105
|
+
- Use clear suffixes like `Format`, `Backend`, `Reader`, `Writer`, `Summary`, and `Schema`.
|
|
106
|
+
- For CLI option aliases in `cli.py`, the repo uses `PathArg`, `InputOpt`, `SqlOpt`, and similar names.
|
|
107
|
+
- Keep names explicit about data shape or role, for example `storage_options`, `table_summary`, or `parsed`.
|
|
108
|
+
|
|
109
|
+
## Error Handling
|
|
110
|
+
|
|
111
|
+
- Raise `ValueError` for invalid user input, unknown formats, unsupported schemes, or inconsistent data layout.
|
|
112
|
+
- Raise `ImportError` when an optional backend dependency is required but missing.
|
|
113
|
+
- Prefer helpful, user-actionable error messages.
|
|
114
|
+
- Preserve current behavior where backend auth methods fail over to the next strategy.
|
|
115
|
+
- Log fallback behavior with `logger.debug(...)` or `logger.warning(...)` when it aids diagnosis.
|
|
116
|
+
- Do not silently swallow errors unless the code is intentionally probing multiple auth mechanisms.
|
|
117
|
+
|
|
118
|
+
## Logging And Output
|
|
119
|
+
|
|
120
|
+
- The CLI configures Loguru with `RichHandler` in the Typer callback.
|
|
121
|
+
- User-facing table and summary output is rendered with Rich.
|
|
122
|
+
- Streaming command output usually writes bytes to `sys.stdout.buffer`.
|
|
123
|
+
- Keep stderr/stdout behavior consistent with the existing command design.
|
|
124
|
+
- Avoid printing directly unless a component is explicitly designed for it.
|
|
125
|
+
|
|
126
|
+
## Data And Polars Usage
|
|
127
|
+
|
|
128
|
+
- Prefer lazy scans (`pl.scan_csv`, `pl.scan_parquet`, `pl.scan_ndjson`) for file input.
|
|
129
|
+
- Use eager reads only for streams or when a library requires it.
|
|
130
|
+
- For row counts, the repo commonly uses `.select(pl.len()).collect().item()`.
|
|
131
|
+
- For directory reads, preserve the existing split between native glob support and manual concatenation.
|
|
132
|
+
- When reading directories, keep metadata and hidden-file filtering behavior intact.
|
|
133
|
+
- If adding a new format, implement the `FormatHandler` contract fully.
|
|
134
|
+
|
|
135
|
+
## CLI and UX Expectations
|
|
136
|
+
|
|
137
|
+
- Keep Typer command help concise.
|
|
138
|
+
- Reuse the existing type aliases for command arguments and options when practical.
|
|
139
|
+
- Maintain stdin support via `"-"` consistently across commands.
|
|
140
|
+
- When input comes from stdin, require explicit format selection if extension inference is impossible.
|
|
141
|
+
- Preserve output format inference rules unless intentionally changing UX.
|
|
142
|
+
|
|
143
|
+
## Documentation
|
|
144
|
+
|
|
145
|
+
- Update `docs/` and CLI help text when changing user-facing behavior.
|
|
146
|
+
- Update `CHANGELOG.md` with a clear description of user-facing changes and bug fixes.
|
|
147
|
+
- Keep examples aligned with the actual command names and flags.
|
|
148
|
+
- If you change build, test, or auth flows, reflect that in this file too.
|
|
149
|
+
|
|
150
|
+
## Agent Workflow Recommendations
|
|
151
|
+
|
|
152
|
+
- Start with targeted tests for the touched command or module.
|
|
153
|
+
- Run `uv run ruff check src tests` on touched files before finishing.
|
|
154
|
+
- Run `uv run ty check src/tab_cli` when changing signatures or backend option types.
|
|
155
|
+
- Run `uv run pytest` for broader validation before finalizing cross-cutting changes.
|
|
156
|
+
- Mention pre-existing lint or type-check failures separately from regressions you introduce.
|
|
157
|
+
- Update CHANGELOG.md when necessary.
|
|
158
|
+
-
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
- 0.1.6:
|
|
2
|
+
- Fixed bug in pyarrow loading of Parquet files.
|
|
3
|
+
- Added global config file support: settings can be persisted in `~/.config/tab/config.json`. Config file values serve as defaults that CLI flags override.
|
|
4
|
+
- 0.1.5:
|
|
5
|
+
- Added stdin support: use `-` as the file path to read from stdin (e.g. `cat data.csv | tab view -i csv -`). Requires `-i`/`--input-format` since format cannot be inferred. Works with `view`, `schema`, `summary`, `convert`, and `cat`.
|
|
6
|
+
- Added row-wise JMESPath queries via `--jmespath` / `--jp` on `view`, `convert`, and `cat`. Object results become columns; non-object results go into a `value` column. `--sql` and `--jp` are mutually exclusive.
|
|
7
|
+
- Implemented `--jp` with `LazyFrame.map_batches(...)` so row reshaping stays batch-oriented instead of materializing the full transformed dataset up front.
|
|
8
|
+
- 0.1.4:
|
|
9
|
+
- Removed `tab sql` subcommand; SQL is now a `--sql` option on `tab view`, `tab convert`, and `tab cat`.
|
|
10
|
+
- Automatic PyArrow fallback for Parquet files that fail to read with Polars' native reader.
|
|
11
|
+
- 0.1.3:
|
|
12
|
+
- Separate `tab view` from `tab cat`: `tab view` does not convert formats, `tab cat` does.
|
|
13
|
+
- Added `--max-cell-len` option to `tab view` to truncate long cell contents.
|
|
14
|
+
- 0.1.2:
|
|
15
|
+
- Bugfix on reading directories.
|
|
16
|
+
- 0.1.1:
|
|
17
|
+
- Better credential handling for Azure Blob Storage and Google Cloud Storage.
|
|
18
|
+
- 0.1.0: Initial release
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tab-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: A CLI tool for tabular data
|
|
5
5
|
Author-email: Tongfei Chen <tongfei@pm.me>
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
Requires-Python: >=3.10
|
|
8
8
|
Requires-Dist: blobfile>=3.0
|
|
9
9
|
Requires-Dist: fsspec>=2025.1.0
|
|
10
|
+
Requires-Dist: jmespath>=1.0
|
|
10
11
|
Requires-Dist: loguru>=0.7.3
|
|
11
12
|
Requires-Dist: polars-fastavro>=0.5.1
|
|
12
13
|
Requires-Dist: polars>=1.0
|
|
@@ -13,7 +13,8 @@ Options:
|
|
|
13
13
|
| Option | Description |
|
|
14
14
|
|-------------------------|-----------------------------------------------------------------------------------------------------------|
|
|
15
15
|
| `-i` / `--input-format` | Input format (`parquet`, `csv`, `tsv`, `jsonl`, `avro`). Auto-detected from extension if omitted. |
|
|
16
|
-
| `--sql` | SQL query to apply before displaying. The table is available as `t`.
|
|
16
|
+
| `--sql` | SQL query to apply before displaying. The table is available as `t`. Mutually exclusive with `--jmespath`. |
|
|
17
|
+
| `--jmespath` / `--jp` | JMESPath expression to apply to each row as JSON. Object outputs become columns; non-object outputs go to a `value` column. The result shape must stay consistent across rows. |
|
|
17
18
|
| `--limit` | Maximum number of rows to display. |
|
|
18
19
|
| `--skip` | Number of rows to skip from the beginning. |
|
|
19
20
|
| `--max-cell-len` | Truncate cell contents longer than this. |
|
|
@@ -62,7 +63,8 @@ Options:
|
|
|
62
63
|
|-------------------------|---------------------------------------------------------------------------------------------------------|
|
|
63
64
|
| `-i` / `--input-format` | Input format (`parquet`, `csv`, `tsv`, `jsonl`, `avro`). Auto-detected from extension if omitted. |
|
|
64
65
|
| `-o` / `--output-format` | Output format (`parquet`, `csv`, `tsv`, `jsonl`, `avro`). If not specified, inherits from input format. |
|
|
65
|
-
| `--sql` | SQL query to apply before writing. The table is available as `t`.
|
|
66
|
+
| `--sql` | SQL query to apply before writing. The table is available as `t`. Mutually exclusive with `--jmespath`. |
|
|
67
|
+
| `--jmespath` / `--jp` | JMESPath expression to apply to each row as JSON. Object outputs become columns; non-object outputs go to a `value` column. The result shape must stay consistent across rows. |
|
|
66
68
|
| `-n` / `--num-partitions` | Number of output partitions. Creates a directory with partition files. |
|
|
67
69
|
|
|
68
70
|
|
|
@@ -80,7 +82,8 @@ Options:
|
|
|
80
82
|
|-------------------------|-----------------------------------------------------------------------------------------------------------|
|
|
81
83
|
| `-i` / `--input-format` | Input format (`parquet`, `csv`, `tsv`, `jsonl`, `avro`). Auto-detected from extension if omitted. |
|
|
82
84
|
| `-o` / `--output-format` | Output format (`parquet`, `csv`, `tsv`, `jsonl`, `avro`). If not specified, print Rich table in terminal. |
|
|
83
|
-
| `--sql` | SQL query to apply after concatenation. The table is available as `t`.
|
|
85
|
+
| `--sql` | SQL query to apply after concatenation. The table is available as `t`. Mutually exclusive with `--jmespath`. |
|
|
86
|
+
| `--jmespath` / `--jp` | JMESPath expression to apply to each row as JSON. Object outputs become columns; non-object outputs go to a `value` column. The result shape must stay consistent across rows. |
|
|
84
87
|
|
|
85
88
|
|
|
86
89
|
## Global options
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
`tab` supports a global configuration file at `~/.config/tab/config.json`. Settings in this file serve as defaults and are overridden by CLI flags.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
Create the config file:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
mkdir -p ~/.config/tab
|
|
11
|
+
cat > ~/.config/tab/config.json << 'EOF'
|
|
12
|
+
{
|
|
13
|
+
"az_url_authority_is_account": false,
|
|
14
|
+
"sampling_size_for_schema_inference": 32
|
|
15
|
+
}
|
|
16
|
+
EOF
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Available settings
|
|
20
|
+
|
|
21
|
+
| Key | Type | Default | Description |
|
|
22
|
+
|-----|------|---------|-------------|
|
|
23
|
+
| `az_url_authority_is_account` | `bool` | `false` | Interpret `az://` URL authority as storage account name instead of container name. |
|
|
24
|
+
| `sampling_size_for_schema_inference` | `int` | `32` | Number of rows sampled for schema inference (e.g. when using `--jp`). |
|
|
25
|
+
|
|
26
|
+
## Precedence
|
|
27
|
+
|
|
28
|
+
Settings are applied in this order (last wins):
|
|
29
|
+
|
|
30
|
+
1. Built-in defaults
|
|
31
|
+
2. Config file (`~/.config/tab/config.json`)
|
|
32
|
+
3. CLI flags (e.g. `--az-url-authority-is-account`)
|
|
33
|
+
|
|
34
|
+
If the config file does not exist, built-in defaults are used. Unknown keys in the file are ignored with a warning.
|
|
@@ -44,10 +44,25 @@ tab summary data.parquet
|
|
|
44
44
|
Run SQL queries on your data. The table is referenced as `t`:
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
|
-
tab sql 'SELECT * FROM t WHERE Metric_A_Value > 80' test.csv
|
|
47
|
+
tab view --sql 'SELECT * FROM t WHERE Metric_A_Value > 80' test.csv
|
|
48
48
|
```
|
|
49
49
|

|
|
50
50
|
|
|
51
|
+
### JMESPath row reshaping
|
|
52
|
+
|
|
53
|
+
Run a JMESPath expression against each row as a JSON object:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
tab view ugly.parquet --jp '{id: participant.id, city: profile.address.city}'
|
|
57
|
+
tab cat ugly.parquet --jp 'profile.address.city' -o jsonl
|
|
58
|
+
tab cat ugly.parquet --jp '[participant.id, profile.address.city]' -o jsonl
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
- Object results become output columns.
|
|
62
|
+
- Non-object results are written to a single `value` column.
|
|
63
|
+
- The expression should return a consistent shape across the dataset.
|
|
64
|
+
- Use either `--sql` or `--jp`, but not both on the same command.
|
|
65
|
+
|
|
51
66
|
### Convert
|
|
52
67
|
|
|
53
68
|
Convert between formats:
|
|
@@ -85,4 +100,3 @@ tab cat data1.csv data2.csv data3.csv -o jsonl > output.jsonl
|
|
|
85
100
|
| Option | Description |
|
|
86
101
|
|--------|-------------|
|
|
87
102
|
| `-n` | Number of output partitions. Creates a directory with part files. |
|
|
88
|
-
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tab-cli"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.6"
|
|
4
4
|
description = "A CLI tool for tabular data"
|
|
5
5
|
authors = [{name = "Tongfei Chen", email = "tongfei@pm.me"}]
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
repository = "https://github.com/tongfei/tab"
|
|
8
8
|
requires-python = ">=3.10"
|
|
9
9
|
dependencies = [
|
|
10
|
+
"jmespath>=1.0",
|
|
10
11
|
"typer>=0.21.1",
|
|
11
12
|
"rich>=13.0",
|
|
12
13
|
"polars>=1.0",
|