{ "info": { "author": "Trong-Nghia Nguyen", "author_email": "nghia@viisix.space", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Environment :: Console", "Environment :: Web Environment", "Framework :: Flask", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: Unix", "Programming Language :: Python :: 3.6" ], "description": "ImageButler\n===========\n\nSimple image server built on Flask.\n\nDeveloped Python version: Python 3.6.\n\n.. image:: https://travis-ci.org/ViiSiX/ImageButler.svg?branch=R%2F0.0\n :target: https://travis-ci.org/ViiSiX/ImageButler\n\nInstallation\n------------\n\nUsing pip\n\n.. code-block:: bash\n\n pip install ImageButler\n\nConfiguration & Environment Variables\n-------------------------------------\n\nCreate *image_butler.conf* referring following example:\n\n.. code-block:: text\n\n SQLALCHEMY_DATABASE_URI = 'sqlite://///ImageButler.db'\n SERVER_NAME = 'image.local-domain:5000'\n REDISLITE_PATH = '/ImageButler.rdb'\n REDISLITE_WORKER_PID = '/workers.pid'\n\n IMAGEBUTLER_MAX_THUMBNAIL = 150, 150\n IMAGEBUTLER_API_IMAGES_LIMIT = 5\n IMAGEBUTLER_MAX_IMAGE_SIZE = '1M'\n\nExport environment variables:\n\n.. code-block:: bash\n\n export FLASK_APP=imagebutler\n export IMAGEBUTLER_CONFIGS=path/to/your/image_butler.conf\n\nFor others configuration please referring to documents of *Flask*,\n*Flask-Login*, *Flask-SQLAlchemy*... (please check *requirements.txt*).\n\nDatabase Init\n-------------\n\n.. code-block:: bash\n\n flask db init\n flask db migrate\n flask db upgrade\n\n**Note:**\n- For MySQL and MariaDB please don't create your database in\n*utf8_bin* collate since it will break the application.\n- Also for MySQL and MariaDB, after run the *migrate* command,\ngo and edit your migrations/versions/_.py\n\n.. code-block:: python\n\n from sqlalchemy.dialects.mysql import LONGBLOB\n # ...\n # ... replace the old fileContent line with\n sa.Column('fileContent', LONGBLOB(), nullable=False),\n # ...\n\nRun\n---\n\n.. code-block:: bash\n\n flask run\n\nUser management\n---------------\n\n.. code-block:: bash\n\n flask user create your@email.address\n flask user get your@email.address\n flask user change_pass your@email.address\n\nUpload image\n------------\n\nFor example we use cURL to upload the image.\n\n.. code-block:: bash\n\n curl -X PUT \\\n http://image.local-domain:5000/api/v0/image \\\n -H 'content-type: multipart/form-data' \\\n -F 'file=@/path/to/your/image.png;type=image/png' \\\n -F username=1a339c02-404a-4b66-9fbb-cb30fb417c14 \\\n -F 'password=knwAAOfLBcnkWzGxo0G/ZUzq9ukLb+gf5H/1nmPr7BE+im03qZarW4TvwVepYmi/cg9dEw+N4HDfLqQRfXBSdNawy7YkOQgwOYiRRq3t2PSjYd+Pme4SrMWUE1BYW5rt' \\\n -F 'description=Image #1'\n\nWe got the result:\n\n.. code-block:: text\n\n {\n \"return\": {\n \"success\": {\n \"file_name\": \"ca4ffe9f192f4f358e4981ceaafd8068.jpg\",\n \"path\": \"/serve/image/1/ca4ffe9f192f4f358e4981ceaafd8068.jpg\",\n \"thumbnail\": \"/serve/thumbnail/1/ca4ffe9f192f4f358e4981ceaafd8068.jpg\",\n \"description\": \"Dog's Image\"\n }\n }\n }\n\nYou can go to http://image.local-domain:5000/serve/image/1/ca4ffe9f192f4f358e4981ceaafd8068.jpg\nto see your image.\n\nUpdate your image's description\n-------------------------------\n\n.. code-block:: bash\n\n curl -X POST \\\n http://image.local-domain:5000/api/v0/image \\\n -H 'content-type: application/json' \\\n -d '{\n \"username\": \"1a339c02-404a-4b66-9fbb-cb30fb417c14\",\n \"password\": \"knwAAOfLBcnkWzGxo0G/ZUzq9ukLb+gf5H/1nmPr7BE+im03qZarW4TvwVepYmi/cg9dEw+N4HDfLqQRfXBSdNawy7YkOQgwOYiRRq3t2PSjYd+Pme4SrMWUE1BYW5rt\",\n \"filename\": \"ca4ffe9f192f4f358e4981ceaafd8068.jpg\",\n \"description\": \"Cat's image\"\n }'\n\nThen we got the similar result of create new image:\n\n.. code-block:: text\n\n {\n \"return\": {\n \"success\": {\n \"file_name\": \"ca4ffe9f192f4f358e4981ceaafd8068.jpg\",\n \"path\": \"/serve/image/1/ca4ffe9f192f4f358e4981ceaafd8068.jpg\",\n \"thumbnail\": \"/serve/thumbnail/1/ca4ffe9f192f4f358e4981ceaafd8068.jpg\",\n \"description\": \"Cat's Image\"\n }\n }\n }\n\nDelete an image\n---------------\n\n.. code-block:: bash\n\n curl -X DELETE \\\n http://image.local-domain:5000/api/v0/image \\\n -H 'content-type: application/json' \\\n -d '{\n \"username\": \"1a339c02-404a-4b66-9fbb-cb30fb417c14\",\n \"password\": \"knwAAOfLBcnkWzGxo0G/ZUzq9ukLb+gf5H/1nmPr7BE+im03qZarW4TvwVepYmi/cg9dEw+N4HDfLqQRfXBSdNawy7YkOQgwOYiRRq3t2PSjYd+Pme4SrMWUE1BYW5rt\",\n \"filename\": \"ca4ffe9f192f4f358e4981ceaafd8068.jpg\",\n }'\n\nGet your images\n---------------\n\n.. code-block:: bash\n\n curl -X POST \\\n http://image.local-domain:5000/api/v0/images \\\n -H 'content-type: application/json' \\\n -d {\n \"username\": \"1a339c02-404a-4b66-9fbb-cb30fb417c14\",\n \"password\": \"knwAAOfLBcnkWzGxo0G/ZUzq9ukLb+gf5H/1nmPr7BE+im03qZarW4TvwVepYmi/cg9dEw+N4HDfLqQRfXBSdNawy7YkOQgwOYiRRq3t2PSjYd+Pme4SrMWUE1BYW5rt\",\n \"page\": 1\n }\n\n\nHistory\n=======\n\n0.0.4 (Dec 13th, 2017)\n----------------------\n\n- Hot fix #26 and #28\n- Added option to config max image file size\n\n0.0.3 (Dec 10th, 2017)\n----------------------\n\n- Integrating with tox and travis\n- Add unit tests for imagebutler.utils module\n- API for add, modify, delete image\n- API for listing all the user's images\n- Add thumbnail column to Image table\n\n0.0.2 (Nov 13th, 2017)\n----------------------\n\n- Support for problem with MySQL/MariaDB and utf8_bin collation\n- Update API for adding image description\n- Update document\n- Add Flask-Cors\n- Include init.d script for Debian\n\n0.0.1 (Nov 11th, 2017)\n----------------------\n\n- 0.0.1b1: Update document to display in pypi\n- 0.0.1b0: Include document to the package\n- Create, select, update user via command\n- REST API to upload files\n- Serving image via URLs\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://viisix.space/projects/image-butler/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "ImageButler", "package_url": "https://pypi.org/project/ImageButler/", "platform": "", "project_url": "https://pypi.org/project/ImageButler/", "project_urls": { "Homepage": "https://viisix.space/projects/image-butler/" }, "release_url": "https://pypi.org/project/ImageButler/0.0.4/", "requires_dist": [ "Flask", "Flask-Cors", "Flask-Restful", "Flask-SQLAlchemy", "Flask-Migrate", "Flask-Redislite", "Flask-Login", "pycrypto", "Pillow", "progressbar2", "piexif" ], "requires_python": "", "summary": "Simple images serving service,", "version": "0.0.4" }, "last_serial": 3412675, "releases": { "0.0.1b0": [ { "comment_text": "", "digests": { "md5": "2e5de6be50e4dd329f12bce9f6243a78", "sha256": "6d2497fd0b8a3702de468e1057cf453888a495cf23bda6902ded425c35da4e2d" }, "downloads": -1, "filename": "ImageButler-0.0.1b0-py3-none-any.whl", "has_sig": false, "md5_digest": "2e5de6be50e4dd329f12bce9f6243a78", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 11378, "upload_time": "2017-11-10T14:22:33", "url": "https://files.pythonhosted.org/packages/36/47/b9ac9847f586d9d2759d71b65e16b2e4104e8c5742cf99641ce4a0d8e651/ImageButler-0.0.1b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f89228873f735b26ba1754495fb815f4", "sha256": "0750aacf20c5db0f010f1bf0d909081b56f8c629b50f10013b18ff50603c9a71" }, "downloads": -1, "filename": "ImageButler-0.0.1b0.tar.gz", "has_sig": false, "md5_digest": "f89228873f735b26ba1754495fb815f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8051, "upload_time": "2017-11-10T14:22:30", "url": "https://files.pythonhosted.org/packages/91/57/eb05ab5b13bd564795a0edc2971533f03d056bfd51a6aeaaf20ad0b0cb72/ImageButler-0.0.1b0.tar.gz" } ], "0.0.1b1": [ { "comment_text": "", "digests": { "md5": "ea0483b374c8381de70b251189bcc4ab", "sha256": "2b35d1511ff77ab53b34c5d25ff3ea7f3ef5c16e0e41c9d00bdb99e4d421c94b" }, "downloads": -1, "filename": "ImageButler-0.0.1b1-py3-none-any.whl", "has_sig": false, "md5_digest": "ea0483b374c8381de70b251189bcc4ab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12638, "upload_time": "2017-11-10T17:35:28", "url": "https://files.pythonhosted.org/packages/94/30/2fe9cc11ba1873482483294e3135bc25bd2f961a6bd9b916a941c3921622/ImageButler-0.0.1b1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a167a3e58d5a9c9250f7c39fb083add3", "sha256": "d826ee4e1f38aad8db1fe80bd70db5b4bb9f9e0afc5d7f34db531dd392d41cee" }, "downloads": -1, "filename": "ImageButler-0.0.1b1.tar.gz", "has_sig": false, "md5_digest": "a167a3e58d5a9c9250f7c39fb083add3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9156, "upload_time": "2017-11-10T17:35:30", "url": "https://files.pythonhosted.org/packages/ab/25/4fc436025b90d0b53c193b3825720241c57a4a82fb10889ddcc4d7981324/ImageButler-0.0.1b1.tar.gz" } ], "0.0.1b2": [ { "comment_text": "", "digests": { "md5": "436841a25885b1fc24be52f100c6187a", "sha256": "78efcb8660dc44715ade8955bde70a883183e1961da24933d112ee01bdd71d3d" }, "downloads": -1, "filename": "ImageButler-0.0.1b2-py3-none-any.whl", "has_sig": false, "md5_digest": "436841a25885b1fc24be52f100c6187a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12644, "upload_time": "2017-11-12T04:33:22", "url": "https://files.pythonhosted.org/packages/e9/4c/86bcc41414c924dabf65d16f26bfa6c4ed3eba54ce0389b9fce06c811492/ImageButler-0.0.1b2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bb3aeaa31ef1342e3deb3856007d6aa6", "sha256": "1474123229a7fd9616159da7635a8990546a696f72f956c6e2c2606864578fbe" }, "downloads": -1, "filename": "ImageButler-0.0.1b2.tar.gz", "has_sig": false, "md5_digest": "bb3aeaa31ef1342e3deb3856007d6aa6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9140, "upload_time": "2017-11-12T04:33:23", "url": "https://files.pythonhosted.org/packages/9f/db/c8e606702e1b40506151d040e889497e3dfb1992fd348208fc8c40fdbb27/ImageButler-0.0.1b2.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "a5dfd4841e762cdc647b8644882897dd", "sha256": "3214c5a8a785ccc7de793064daf8ae5e6dc4acd3871ffb264df819694f749815" }, "downloads": -1, "filename": "ImageButler-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a5dfd4841e762cdc647b8644882897dd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13450, "upload_time": "2017-11-12T19:18:12", "url": "https://files.pythonhosted.org/packages/4b/ee/a81fa65435f660c346b0f2910614289b2b8de19d43a59cfdba85e971ca2f/ImageButler-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "34f8c5bf7f8683a68c96c8d75b604ce9", "sha256": "fff0474c3676aac53f2ce4d08dd9e69c182dde65985f51186ffd4dfff4dff413" }, "downloads": -1, "filename": "ImageButler-0.0.2.tar.gz", "has_sig": false, "md5_digest": "34f8c5bf7f8683a68c96c8d75b604ce9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10828, "upload_time": "2017-11-12T19:18:14", "url": "https://files.pythonhosted.org/packages/7c/58/1ffbdb254c3de5ff14b020ca4eea748f395eaaa9439470a9e6d10759a901/ImageButler-0.0.2.tar.gz" } ], "0.0.2rc0": [ { "comment_text": "", "digests": { "md5": "592b44bcc8159bde89d3542e0ee492ef", "sha256": "789a5f523fe1ec980f289d3671090b9b81ac8828b40a7e8bb0a8a8e4bb113601" }, "downloads": -1, "filename": "ImageButler-0.0.2rc0-py3-none-any.whl", "has_sig": false, "md5_digest": "592b44bcc8159bde89d3542e0ee492ef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13465, "upload_time": "2017-11-12T18:21:25", "url": "https://files.pythonhosted.org/packages/ec/2a/b9f916cc85d8163ae82bc1888b96e28c0be721f25945e3f98c833dc9a23a/ImageButler-0.0.2rc0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "02c0cf1958a90ee3e83d9415cda5c6c8", "sha256": "395e9f154f4a36a4d86e119acaed896d5e48d8d299eccce6486dbb57bb823deb" }, "downloads": -1, "filename": "ImageButler-0.0.2rc0.tar.gz", "has_sig": false, "md5_digest": "02c0cf1958a90ee3e83d9415cda5c6c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9771, "upload_time": "2017-11-12T18:21:26", "url": "https://files.pythonhosted.org/packages/8b/2e/9c1f61906fd80b12dc1fcd7ff6282e5f5e420a50ae198d38e1e432172076/ImageButler-0.0.2rc0.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "5bd08ec4249ec9ff1014bba1b99e8f2f", "sha256": "0f0080037280a9779c0b38278d49066a48ad287808a007ef8f68937dce45ae70" }, "downloads": -1, "filename": "ImageButler-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5bd08ec4249ec9ff1014bba1b99e8f2f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16966, "upload_time": "2017-12-10T10:29:43", "url": "https://files.pythonhosted.org/packages/b5/11/6f4fe67fbd020c85aa683424b7eb9e353217f16b479e2c38208071dd93d0/ImageButler-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e3a8ba1aeb57631367ee136b704bacb", "sha256": "9d53e687f1dc097bc267305f8e08c0c2866b7f7da4ab528e3a4298da14315554" }, "downloads": -1, "filename": "ImageButler-0.0.3.tar.gz", "has_sig": false, "md5_digest": "9e3a8ba1aeb57631367ee136b704bacb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1436416, "upload_time": "2017-12-10T10:29:47", "url": "https://files.pythonhosted.org/packages/2c/0e/cb7814954efbe1bb07a4df47a9cfcd81efb50f2c386de86b75aac1dbbe58/ImageButler-0.0.3.tar.gz" } ], "0.0.3rc0": [ { "comment_text": "", "digests": { "md5": "3fa46671463b1bd6afcf7dfe836253a8", "sha256": "0ca3dce31738f0e9e32af952f835146ee03d71e1d2f78838c290532482f67b0f" }, "downloads": -1, "filename": "ImageButler-0.0.3rc0-py3-none-any.whl", "has_sig": false, "md5_digest": "3fa46671463b1bd6afcf7dfe836253a8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16914, "upload_time": "2017-11-24T03:48:39", "url": "https://files.pythonhosted.org/packages/a3/71/0f7d91f42b914b27dd708ca6c6c0212932eb8d7b20afe1920f0014c4d5b8/ImageButler-0.0.3rc0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "360b79d86a200a4ff8215f856ce8906a", "sha256": "5c90079eba6518f03352ae7b299c80f0dc60801aed752bc4b193b30dc84e0341" }, "downloads": -1, "filename": "ImageButler-0.0.3rc0.tar.gz", "has_sig": false, "md5_digest": "360b79d86a200a4ff8215f856ce8906a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15009, "upload_time": "2017-11-24T03:48:41", "url": "https://files.pythonhosted.org/packages/c7/19/1bdfa1bef4501c6c8769ecb5ca7c831f77fcefedb152333a06b0527431f7/ImageButler-0.0.3rc0.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "a2b009f53c5fd291338c8e1e60d5bb15", "sha256": "e4bd7d32cf779c33bf061e738cc545b3d45f2bd6810c9fd74ea18cae376e02de" }, "downloads": -1, "filename": "ImageButler-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a2b009f53c5fd291338c8e1e60d5bb15", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19755, "upload_time": "2017-12-13T09:28:31", "url": "https://files.pythonhosted.org/packages/b9/0a/fd2512674e29f1cf2436bbf8a43a512bae04cced126c6e43067f2a2dee0d/ImageButler-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b585b7f505b007489981ca3e3686af3", "sha256": "e0c98c678893ba78cae05cd16a55ae9b5b4ba0859d646d18b201f3d00908dfa3" }, "downloads": -1, "filename": "ImageButler-0.0.4.tar.gz", "has_sig": false, "md5_digest": "3b585b7f505b007489981ca3e3686af3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1441310, "upload_time": "2017-12-13T09:28:35", "url": "https://files.pythonhosted.org/packages/29/c7/9e4702ae7dc62f19bf25f4d61b5783b22f54bc4efec86fd4ff54e4d21984/ImageButler-0.0.4.tar.gz" } ], "0.0.4rc0": [ { "comment_text": "", "digests": { "md5": "c5e8f9277eeadf688ef68bb4a013bba8", "sha256": "3c2c69c8808f4377d72314a3d24821028f123fb563e36d3a8fc96cfea56f1894" }, "downloads": -1, "filename": "ImageButler-0.0.4rc0-py3-none-any.whl", "has_sig": false, "md5_digest": "c5e8f9277eeadf688ef68bb4a013bba8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18916, "upload_time": "2017-12-12T09:43:41", "url": "https://files.pythonhosted.org/packages/70/b1/705a32a5a1d797b55656f6ef4e15a52de52433b1070cd8eb11140cc5171b/ImageButler-0.0.4rc0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "33bef30de22bd3ab4e5a918f6ea1342d", "sha256": "446b3c1952a5281b3c757591e29ad3939dd3d52682b3007b24fe277212285235" }, "downloads": -1, "filename": "ImageButler-0.0.4rc0.tar.gz", "has_sig": false, "md5_digest": "33bef30de22bd3ab4e5a918f6ea1342d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1437557, "upload_time": "2017-12-12T09:43:49", "url": "https://files.pythonhosted.org/packages/c8/5a/b45890c02df5381bc5900a876f276bb294f6989ee3769d2ab35185a0047f/ImageButler-0.0.4rc0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a2b009f53c5fd291338c8e1e60d5bb15", "sha256": "e4bd7d32cf779c33bf061e738cc545b3d45f2bd6810c9fd74ea18cae376e02de" }, "downloads": -1, "filename": "ImageButler-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a2b009f53c5fd291338c8e1e60d5bb15", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19755, "upload_time": "2017-12-13T09:28:31", "url": "https://files.pythonhosted.org/packages/b9/0a/fd2512674e29f1cf2436bbf8a43a512bae04cced126c6e43067f2a2dee0d/ImageButler-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b585b7f505b007489981ca3e3686af3", "sha256": "e0c98c678893ba78cae05cd16a55ae9b5b4ba0859d646d18b201f3d00908dfa3" }, "downloads": -1, "filename": "ImageButler-0.0.4.tar.gz", "has_sig": false, "md5_digest": "3b585b7f505b007489981ca3e3686af3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1441310, "upload_time": "2017-12-13T09:28:35", "url": "https://files.pythonhosted.org/packages/29/c7/9e4702ae7dc62f19bf25f4d61b5783b22f54bc4efec86fd4ff54e4d21984/ImageButler-0.0.4.tar.gz" } ] }