From d737002ca50706310c05c99cf3812141d8fbf66d Mon Sep 17 00:00:00 2001 From: Philip Krauss <35487337+philkra@users.noreply.github.com> Date: Tue, 29 Aug 2023 15:32:23 +0200 Subject: [PATCH] Backport: Transformation (#166) * Backport: Transform * set next release tag * update dependencies * missing PIL lib --- poetry.lock | 134 ++++++++++++++---- pyproject.toml | 3 +- tests/data/attachments/images/03.png | Bin 0 -> 117184 bytes .../files_transormations_test.py | 134 ++++++++++++++++++ xata/client.py | 2 +- xata/namespaces/files.py | 42 +++++- 6 files changed, 286 insertions(+), 29 deletions(-) create mode 100644 tests/data/attachments/images/03.png create mode 100644 tests/integration-tests/files_transormations_test.py diff --git a/poetry.lock b/poetry.lock index 6ff33d6..b38fa49 100644 --- a/poetry.lock +++ b/poetry.lock @@ -342,18 +342,21 @@ python-dateutil = ">=2.4" [[package]] name = "filelock" -version = "3.12.2" +version = "3.12.3" description = "A platform independent file lock." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.12.3-py3-none-any.whl", hash = "sha256:f067e40ccc40f2b48395a80fcbd4728262fab54e232e090a4063ab804179efeb"}, + {file = "filelock-3.12.3.tar.gz", hash = "sha256:0ecc1dd2ec4672a10c8550a8182f1bd0c0a5088470ecd5a125e45f49472fac3d"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.11\""} + [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] [[package]] name = "flake8" @@ -406,13 +409,13 @@ dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit", "tox"] [[package]] name = "identify" -version = "2.5.26" +version = "2.5.27" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, - {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, + {file = "identify-2.5.27-py2.py3-none-any.whl", hash = "sha256:fdb527b2dfe24602809b2201e033c2a113d7bdf716db3ca8e3243f735dcecaba"}, + {file = "identify-2.5.27.tar.gz", hash = "sha256:287b75b04a0e22d727bc9a41f0d4f3c1bcada97490fa6eabb5b28f0e9097e733"}, ] [package.extras] @@ -742,6 +745,85 @@ files = [ mako = "*" markdown = ">=3.0" +[[package]] +name = "pillow" +version = "9.5.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, + {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"}, + {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"}, + {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"}, + {file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"}, + {file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"}, + {file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"}, + {file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"}, + {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"}, + {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"}, + {file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"}, + {file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"}, + {file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"}, + {file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"}, + {file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"}, + {file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"}, + {file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"}, + {file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"}, + {file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"}, + {file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"}, + {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"}, + {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"}, + {file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"}, + {file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"}, + {file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"}, + {file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"}, + {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"}, + {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"}, + {file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"}, + {file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, + {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + [[package]] name = "platformdirs" version = "3.10.0" @@ -759,13 +841,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "pluggy" -version = "1.2.0" +version = "1.3.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, ] [package.extras] @@ -988,17 +1070,17 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "68.1.0" +version = "68.1.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.1.0-py3-none-any.whl", hash = "sha256:e13e1b0bc760e9b0127eda042845999b2f913e12437046e663b833aa96d89715"}, - {file = "setuptools-68.1.0.tar.gz", hash = "sha256:d59c97e7b774979a5ccb96388efc9eb65518004537e85d52e81eaee89ab6dd91"}, + {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, + {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] @@ -1026,20 +1108,20 @@ files = [ [[package]] name = "sphinx" -version = "6.2.1" +version = "7.1.2" description = "Python documentation generator" optional = false python-versions = ">=3.8" files = [ - {file = "Sphinx-6.2.1.tar.gz", hash = "sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b"}, - {file = "sphinx-6.2.1-py3-none-any.whl", hash = "sha256:97787ff1fa3256a3eef9eda523a63dbf299f7b47e053cfcf684a1c2a8380c912"}, + {file = "sphinx-7.1.2-py3-none-any.whl", hash = "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"}, + {file = "sphinx-7.1.2.tar.gz", hash = "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f"}, ] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18.1,<0.20" +docutils = ">=0.18.1,<0.21" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" @@ -1061,18 +1143,18 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-rtd-theme" -version = "1.2.2" +version = "1.3.0" description = "Read the Docs theme for Sphinx" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "sphinx_rtd_theme-1.2.2-py2.py3-none-any.whl", hash = "sha256:6a7e7d8af34eb8fc57d52a09c6b6b9c46ff44aea5951bc831eeb9245378f3689"}, - {file = "sphinx_rtd_theme-1.2.2.tar.gz", hash = "sha256:01c5c5a72e2d025bd23d1f06c59a4831b06e6ce6c01fdd5ebfe9986c0a880fc7"}, + {file = "sphinx_rtd_theme-1.3.0-py2.py3-none-any.whl", hash = "sha256:46ddef89cc2416a81ecfbeaceab1881948c014b1b6e4450b815311a89fb977b0"}, + {file = "sphinx_rtd_theme-1.3.0.tar.gz", hash = "sha256:590b030c7abb9cf038ec053b95e5380b5c70d61591eb0b552063fbe7c41f0931"}, ] [package.dependencies] docutils = "<0.19" -sphinx = ">=1.6,<7" +sphinx = ">=1.6,<8" sphinxcontrib-jquery = ">=4,<5" [package.extras] @@ -1258,4 +1340,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "0f1a6e4ca0c857eec2b676e198fdcef35e3c0a4f585de2f45e8568025965823c" +content-hash = "eb878011c34666a1e238837f3a16f9df540b440c3d096e47746a33d7413c54ab" diff --git a/pyproject.toml b/pyproject.toml index c822221..12132fe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "xata" -version = "0.12.0" +version = "0.13.0" description = "Python client for Xata.io" authors = ["Xata "] license = "Apache-2.0" @@ -28,6 +28,7 @@ Faker = "^17.0.0" sphinx-rtd-theme = "^1.2.0" mako = "^1.2.4" pytz = "^2022.7.1" +Pillow = "^9.5.0" python-magic = "^0.4.22" [build-system] diff --git a/tests/data/attachments/images/03.png b/tests/data/attachments/images/03.png new file mode 100644 index 0000000000000000000000000000000000000000..fe9e8ea98dab06fc12c25747df1500d2242c4c9f GIT binary patch literal 117184 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 O|9t=dpS^+qnfPx>HZx`b literal 0 HcmV?d00001 diff --git a/tests/integration-tests/files_transormations_test.py b/tests/integration-tests/files_transormations_test.py new file mode 100644 index 0000000..5fe5f24 --- /dev/null +++ b/tests/integration-tests/files_transormations_test.py @@ -0,0 +1,134 @@ +# +# Licensed to Xatabase, Inc under one or more contributor +# license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright +# ownership. Xatabase, Inc licenses this file to you under the +# Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You +# may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +import io + +import pytest +import utils +from faker import Faker +from PIL import Image, ImageChops + +from xata.client import XataClient + + +class TestFilesTransformations(object): + def setup_class(self): + self.db_name = utils.get_db_name() + self.branch_name = "main" + self.client = XataClient(db_name=self.db_name, branch_name=self.branch_name) + self.client.set_header("X-Xata-Files", "true") + self.fake = Faker() + + r = self.client.databases().createDatabase( + self.db_name, + { + "region": self.client.get_config()["region"], + "branchName": self.client.get_config()["branchName"], + }, + ) + assert r.status_code == 201 + + r = self.client.table().createTable("Attachments") + assert r.status_code == 201 + r = self.client.table().setTableSchema( + "Attachments", + utils.get_attachments_schema(), + db_name=self.db_name, + branch_name=self.branch_name, + ) + assert r.status_code == 200 + + def teardown_class(self): + r = self.client.databases().deleteDatabase(self.db_name) + assert r.status_code == 200 + + def test_rotate_public_file(self): + payload = { + "title": self.fake.catch_phrase(), + "one_file": utils.get_file("images/03.png", public_url=True), + } + upload = self.client.records().insertRecord("Attachments", payload, columns=["one_file.url"]) + assert upload.status_code == 201 + + img = utils.get_file_content(utils.get_file_name("images/03.png")) + rot_180 = self.client.files().transform(upload.json()["one_file"]["url"], {"rotate": 180}) + assert img != rot_180 + + # proof_rot_180 = Image.open(utils.get_file_name("images/03.png")).rotate(180) + # rot_180_pil = Image.open(io.BytesIO(rot_180)) + # diff = ImageChops.difference(proof_rot_180, rot_180_pil) + # assert diff.getbbox() + + def test_rotate_file_with_signed_url(self): + payload = { + "title": self.fake.catch_phrase(), + "one_file": utils.get_file("images/03.png", public_url=False), + } + upload = self.client.records().insertRecord("Attachments", payload, columns=["one_file.signedUrl"]) + assert upload.status_code == 201 + + img = utils.get_file_content(utils.get_file_name("images/03.png")) + rot_180 = self.client.files().transform(upload.json()["one_file"]["signedUrl"], {"rotate": 180}) + assert img != rot_180 + + # rot_180_pil = Image.open(io.BytesIO(rot_180)) + # proof_rot_180 = Image.open(utils.get_file_name("images/03.png")).rotate(180) + # assert rot_180_pil == proof_rot_180 + + def test_with_nested_operations(self): + payload = { + "title": self.fake.catch_phrase(), + "one_file": utils.get_file("images/03.png", public_url=True, signed_url_timeout=120), + } + upload = self.client.records().insertRecord("Attachments", payload, columns=["one_file.url"]) + assert upload.status_code == 201 + + img = utils.get_file_content(utils.get_file_name("images/03.png")) + self.client.files().transform( + upload.json()["one_file"]["url"], + {"rotate": 180, "blur": 50, "trim": {"top": 20, "right": 30, "bottom": 20, "left": 0}}, + ) + + # rot_180_pil = Image.open(io.BytesIO(rot_180)) + # proof_rot_180 = Image.open(utils.get_file_name("images/03.png")).rotate(180) + # assert rot_180_pil == proof_rot_180 + + def test_unknown_operations(self): + payload = { + "title": self.fake.catch_phrase(), + "one_file": utils.get_file("images/03.png", public_url=True), + } + upload = self.client.records().insertRecord("Attachments", payload, columns=["one_file.url"]) + assert upload.status_code == 201 + + with pytest.raises(Exception) as e: + self.client.files().transform(upload.json()["one_file"]["url"], {}) + + with pytest.raises(Exception) as e: + self.client.files().transform(upload.json()["one_file"]["url"], {"donkey": "kong"}) + + def test_unknown_image_id(self): + # must fail with a 403 + with pytest.raises(Exception) as e: + self.client.files().transform("https://us-east-1.storage.xata.sh/lalala", {"rotate": 90}) + + def test_invalid_url(self): + # must fail with a 403 + with pytest.raises(Exception) as e: + self.client.files().transform("https:/xata.sh/oh-hello", {"rotate": 90}) diff --git a/xata/client.py b/xata/client.py index e3dff69..113ce94 100644 --- a/xata/client.py +++ b/xata/client.py @@ -49,7 +49,7 @@ # TODO this is a manual task, to keep in sync with pyproject.toml # could/should be automated to keep in sync -__version__ = "0.12.0" +__version__ = "0.13.0" PERSONAL_API_KEY_LOCATION = "~/.config/xata/key" DEFAULT_DATA_PLANE_DOMAIN = "xata.sh" diff --git a/xata/namespaces/files.py b/xata/namespaces/files.py index 6b158bd..b6de258 100644 --- a/xata/namespaces/files.py +++ b/xata/namespaces/files.py @@ -23,8 +23,9 @@ # Specification: core:v1.0 # ------------------------------------------------------- # -from requests import Response +from requests import Response, request +from xata.errors import ServerErrorException from xata.namespace import Namespace @@ -234,3 +235,42 @@ def delete( db_branch_name = self.client.get_db_branch_name(db_name, branch_name) url_path = f"/db/{db_branch_name}/tables/{table_name}/data/{record_id}/column/{column_name}/file" return self.request("DELETE", url_path) + + def transform(self, url: str, operations: dict[str, any]) -> bytes: + """ + Image transformations + All possible combinations: https://xata.io/docs/concepts/file-storage#image-transformations + + :param url: str Public or signed URL of the image + :param operations: dict Image operations + + :return Response + """ + # valid url ? + url_parts = url.split("/") + if 4 < len(url_parts) < 5: + raise Exception("invalid image url") + + # build operations - turn objects into lists + ops = [] + for k, v in operations.items(): + if type(v) is dict: + v = ";".join([str(x) for x in v.values()]) + ops.append(f"{k}={v}") + # ops = ",".join(["%s=%s" % (k, ";".join(list(v.values()))) if type(v) is dict else f"{k}={v}" for k, v in operations.items()]) + if len(ops) == 0: + raise Exception("missing image operations") + + region = url_parts[2].split(".")[0] + file_id = url_parts[-1] + # signed url + if len(url_parts) == 5: + endpoint = "https://%s.xata.sh/transform/%s/file/%s" % (region, ",".join(ops), file_id) + # public url + else: + endpoint = "https://%s.storage.xata.sh/transform/%s/%s" % (region, ",".join(ops), file_id) + + resp = request("GET", endpoint) + if resp.status_code != 200: + raise ServerErrorException(f"code: {resp.status_code}, server error: {resp.text}") + return resp.content