{ "info": { "author": "Nando Florestan", "author_email": "nandoflorestan@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Pyramid", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Database", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: WSGI", "Topic :: Multimedia :: Graphics :: Graphics Conversion", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "=======================================\nkeepluggable, the reusable file storage\n=======================================\n\n\nScope\n=====\n\n`keepluggable `_ is an open source,\n`(MIT licensed) `_,\nhighly configurable Python library to **manage storage of images and\nother documents** (any kind of file, really), with metadata.\n\nThe documentation is at http://docs.nando.audio/keepluggable/latest/\n\nThe file **metadata** can be stored in a different place than the file payload.\nThis is recommended because many operations, such as listing files,\ndo not involve actual file content, so you should avoid loading it.\nAlso, payloads should be optimized for serving and metadata should be\noptimized for querying.\n\nFor file payloads, we currently have implemented one backend that stores\nthem in Amazon S3. There is also a very simple backend that stores\nfiles in the local filesystem (useful during development).\n\nFor (optionally) storing the metadata we currently provide a base SQLAlchemy\nbackend for you to subclass.\n\nIn both cases, you can easily write other storage backends.\n\nUsing this library you can more easily have your user upload images\n(or any kind of file) and enter metadata about them, such as name,\ndescription, date, place, alt text, title attribute etc.\n\nSome of the metadata is automatically found, such as file size, mime type,\nimage size, aspect ratio, MD5 checksum etc.\n\nThe code is highly decoupled so you can tweak the behaviour easily.\n\nThe business rules are implemented in a separate layer\n(isolated from any of the storage strategies and any UI),\ncalled an \"action\" layer. (This is commonly known as a \"service\" layer,\nbut we call it \"action\".) This makes it possible for us to have any\nstorage backends and use any web frameworks or other UI frameworks.\n\nEach application has its own business rules, therefore it is likely that\nyou will subclass the provided action layer to tweak the workflow for\nyour purposes.\n\nOne such \"action\" is the pluggable policy for uploaded image treatment.\nFor instance, the default policy converts the original uploaded image\nto the JPEG format (so it will never store an unecessarily large BMP),\noptionally stores the original image in whatever size it is, then\ncreates configurable smaller versions of it.\n\nSome cameras do not rotate the photo, they just add orientation metadata to the\nimage file, so keepluggable rotates it for you, before creating the thumbnails.\n\n`Get started with keepluggable! `_\n\n\nCollaboration\n=============\n\nWe want your help. We are open to feature requests, suggestions,\n`bug reports `_\nand\n`pull requests `_,\nin reverse order of openness.\n\n\nMigration to keepluggable 0.8\n=============================\n\nkeepluggable 0.8 changes the way files are stored. How?\n\n- It separates namespaces using the \"/\" character rather than \"-\". This\n creates a better user experience in the S3 Management console.\n- Now you can use only one bucket per environment if you wish to.\n Multiple keepluggable integrations (in a single app) can use the\n same bucket, because each keepluggable integration can use its\n own directories.\n- Between the bucket name and the file name you can create your own\n directory scheme (e. g. \"/users/42/avatars/angry_mode/\"). I am calling\n this a \"middle path\". See the function ``get_middle_path()`` in the\n *orchestrator.py* file.\n\nA migration function is provided so you can update your old storages\nto keepluggable 0.8. See the method ``migrate_bucket()`` in the file\n*amazon_s3.py*.\n\nThe names of the configuration settings also changed in 0.8.\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/nandoflorestan/keepluggable", "keywords": "web pylons pyramid images store thumbnails", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "keepluggable", "package_url": "https://pypi.org/project/keepluggable/", "platform": "", "project_url": "https://pypi.org/project/keepluggable/", "project_urls": { "Homepage": "https://github.com/nandoflorestan/keepluggable" }, "release_url": "https://pypi.org/project/keepluggable/0.8.0/", "requires_dist": null, "requires_python": "", "summary": "Manages storage of images and other files, with metadata. Also offers an HTTP API done on Pyramid.", "version": "0.8.0" }, "last_serial": 4265136, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a2440fdad2d5253f632155ff7a547558", "sha256": "c4f5e0008e9876a35feae427953aec4d37850eacceb9f5a0189f87778ed1fcd5" }, "downloads": -1, "filename": "keepluggable-0.1.0.tar.gz", "has_sig": false, "md5_digest": "a2440fdad2d5253f632155ff7a547558", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15308, "upload_time": "2015-02-26T21:14:32", "url": "https://files.pythonhosted.org/packages/c4/34/b703b98838cee12d7e1189de93bcf4705480f626e292ea920376dc690114/keepluggable-0.1.0.tar.gz" } ], "0.1.0a0": [], "0.2.0": [ { "comment_text": "", "digests": { "md5": "8f082802d219e8aaf14828d40c899f51", "sha256": "d0bc644d1d025c6aa93ecfae85ea92a465eb8f217f69f32451c16bfb9a9d835b" }, "downloads": -1, "filename": "keepluggable-0.2.0.tar.gz", "has_sig": false, "md5_digest": "8f082802d219e8aaf14828d40c899f51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15714, "upload_time": "2015-03-27T22:38:29", "url": "https://files.pythonhosted.org/packages/22/2e/5933e412663ffcb8de72604b3e48c72c2d743301a5b09e27bfee65975f2a/keepluggable-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "3de7570fbd0c5a856efc9d180d27cbf6", "sha256": "c102c7360e8639ebf350189273f2dbff12139d32fba80293509c9098e4d16f88" }, "downloads": -1, "filename": "keepluggable-0.3.0.tar.gz", "has_sig": false, "md5_digest": "3de7570fbd0c5a856efc9d180d27cbf6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20838, "upload_time": "2016-03-25T10:50:19", "url": "https://files.pythonhosted.org/packages/19/f1/5c285b09696888972036f7e23aa659d990ff90907660b6c7ccc3c79cb512/keepluggable-0.3.0.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "75f4b652647795a76c25a69f3f1b6973", "sha256": "0f72119eb8ee0f0156f0c41b30c7f3639b1de78a9f48e2f1577a6e86a7d3bdaa" }, "downloads": -1, "filename": "keepluggable-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "75f4b652647795a76c25a69f3f1b6973", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 24084, "upload_time": "2017-02-08T22:24:42", "url": "https://files.pythonhosted.org/packages/44/71/6abcf27f80349546d0c2675cf957d31a4ce0f33e259d4146fbf73a9290bc/keepluggable-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a435aae430d6ec1bd3b798117066f007", "sha256": "317dadd3fe1cb4a86f9869741262f85cac9012ab76d3d2672d4fa3bb6bbaf4f9" }, "downloads": -1, "filename": "keepluggable-0.3.2.tar.gz", "has_sig": false, "md5_digest": "a435aae430d6ec1bd3b798117066f007", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24928, "upload_time": "2017-02-08T22:24:39", "url": "https://files.pythonhosted.org/packages/a1/25/1f8362d1d38a974a7bb7fb115a76995142facfe422b093899a28e495ddb5/keepluggable-0.3.2.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "328018aca3a1105d6c8763fc38ec4a5e", "sha256": "f306b5956dc5edce307e134807fa9825bb3a57a1d9cb400eec5f6dfd6b1f1635" }, "downloads": -1, "filename": "keepluggable-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "328018aca3a1105d6c8763fc38ec4a5e", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 26012, "upload_time": "2017-02-19T03:22:56", "url": "https://files.pythonhosted.org/packages/45/d6/791f37188e73732760bc2d5a8496ba480a92e299a2f15a5d18d83f4113ce/keepluggable-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "47470eca43b9ed1cc2129153df17c217", "sha256": "2530c7a13cfb8a33de3c67c9765a3693acdff97fd0f15403a926bc78c1af810e" }, "downloads": -1, "filename": "keepluggable-0.5.0.tar.gz", "has_sig": false, "md5_digest": "47470eca43b9ed1cc2129153df17c217", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18749, "upload_time": "2017-02-19T03:22:53", "url": "https://files.pythonhosted.org/packages/e0/9e/5e065b6dc9e2188014b84285e652922fa49e3ec4c3988bb6c27c1c5dd5c9/keepluggable-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "da14df684ef9047afdfb7eeb4a89feba", "sha256": "90ae26b799e656cdf9b4c5dda66c4637aa2e86f8f6eab3c45b2e96768cf15e6a" }, "downloads": -1, "filename": "keepluggable-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "da14df684ef9047afdfb7eeb4a89feba", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 26604, "upload_time": "2017-10-19T19:02:10", "url": "https://files.pythonhosted.org/packages/c4/81/6b61d6c64ea72747dbf9a0a2a81b29e9cf3cc5d10a51c113bd22cc28c477/keepluggable-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8145895bf1e296040e55b2329deca096", "sha256": "eebae2851101909c84dcc7ca909d762d565c6be8b8a3ebea8219e335aa7fd843" }, "downloads": -1, "filename": "keepluggable-0.6.0.tar.gz", "has_sig": false, "md5_digest": "8145895bf1e296040e55b2329deca096", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19257, "upload_time": "2017-10-19T19:02:07", "url": "https://files.pythonhosted.org/packages/c8/b5/33562e01b146ab08a3b433c26540c4fcefa79dcc0a40362a7713d8e41715/keepluggable-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "aff15de964ed135639a1ffc97845e0d3", "sha256": "e04d67ab3669219589086e63fe56571356ee8a43b59cbca5a1611ad51469568c" }, "downloads": -1, "filename": "keepluggable-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "aff15de964ed135639a1ffc97845e0d3", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 26773, "upload_time": "2018-02-07T17:33:45", "url": "https://files.pythonhosted.org/packages/b5/99/b47f0ff068f864bad7f85cc93bacb58434d1f042ad51934808d6085c7e93/keepluggable-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1de91a69ac1c06ffe73e1b09621f7537", "sha256": "f825c8a2a694750249516cef49a78767ffa91d571168f3b14caf7afeef4b8b28" }, "downloads": -1, "filename": "keepluggable-0.7.0.tar.gz", "has_sig": false, "md5_digest": "1de91a69ac1c06ffe73e1b09621f7537", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19432, "upload_time": "2018-02-07T17:33:40", "url": "https://files.pythonhosted.org/packages/79/96/9c817ae77378bdfd40eab8f4ad8cf0f1f832ff9e7b8fac6601d15fa3d215/keepluggable-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "7c540c508b2fd70d92a02566c837e6d7", "sha256": "ab88f78e4b69ef10918bc9159f25775ad3cc70d779c6d3ed7a425b933635efc2" }, "downloads": -1, "filename": "keepluggable-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7c540c508b2fd70d92a02566c837e6d7", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 31616, "upload_time": "2018-09-12T14:10:00", "url": "https://files.pythonhosted.org/packages/f7/15/f3d78626b43fa91598823ce2568959b79e0017e9b3819969472ae7946e68/keepluggable-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1af7509057d2eea7aec159f0391867e0", "sha256": "be63ce6a210edbf33bd143dfba6cfde33eb902f55d9191258b4e0d5b3062caee" }, "downloads": -1, "filename": "keepluggable-0.8.0.tar.gz", "has_sig": false, "md5_digest": "1af7509057d2eea7aec159f0391867e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22513, "upload_time": "2018-09-12T14:09:58", "url": "https://files.pythonhosted.org/packages/02/9f/698de61a9a4ffb03e99f6c2cc54d50132eb2ead628efb8945dd811b93e98/keepluggable-0.8.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7c540c508b2fd70d92a02566c837e6d7", "sha256": "ab88f78e4b69ef10918bc9159f25775ad3cc70d779c6d3ed7a425b933635efc2" }, "downloads": -1, "filename": "keepluggable-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7c540c508b2fd70d92a02566c837e6d7", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 31616, "upload_time": "2018-09-12T14:10:00", "url": "https://files.pythonhosted.org/packages/f7/15/f3d78626b43fa91598823ce2568959b79e0017e9b3819969472ae7946e68/keepluggable-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1af7509057d2eea7aec159f0391867e0", "sha256": "be63ce6a210edbf33bd143dfba6cfde33eb902f55d9191258b4e0d5b3062caee" }, "downloads": -1, "filename": "keepluggable-0.8.0.tar.gz", "has_sig": false, "md5_digest": "1af7509057d2eea7aec159f0391867e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22513, "upload_time": "2018-09-12T14:09:58", "url": "https://files.pythonhosted.org/packages/02/9f/698de61a9a4ffb03e99f6c2cc54d50132eb2ead628efb8945dd811b93e98/keepluggable-0.8.0.tar.gz" } ] }