{ "info": { "author": "Mikhail Porokhovnichenko", "author_email": "marazmiki@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4" ], "description": "============\ndj-upload-to\n============\n\n.. image:: https://badge.fury.io/py/dj-upload-to.png\n :target: http://badge.fury.io/py/dj-upload-to\n :alt:\n\n.. image:: https://travis-ci.org/marazmiki/dj-upload-to.png?branch=master\n :target: https://travis-ci.org/marazmiki/dj-upload-to\n :alt: Travis CI build status\n\n.. image:: https://coveralls.io/repos/marazmiki/dj-upload-to/badge.png?branch=master\n :target: https://coveralls.io/r/marazmiki/dj-upload-to?branch=master\n :alt: Code coverage percentage\n\n.. image:: https://pypip.in/d/dj-upload-to/badge.png\n :target: https://pypi.python.org/pypi/dj-upload-to\n :alt: Latest version on PyPI\n\n.. image:: https://pypip.in/wheel/dj-upload-to/badge.svg\n :target: https://pypi.python.org/pypi/dj-upload-to/\n :alt: Wheel Status\n\n.. image:: https://pypip.in/py_versions/dj-upload-to/badge.png\n :target: https://pypi.python.org/pypi/dj-upload-to/\n :alt: Supported Python versions\n\n\nSynopsis\n--------\n\nSmall application that simplifies naming of uploaded files.\nLicense is MIT.\n\n\nInstallation\n------------\n\nYou can get `dj-upload-to` release version from pypi with `pip`:\n\n.. code:: bash\n\n $ pip install dj-upload-to\n\nor development one from github:\n\n.. code:: bash\n\n $ pip install -e git+https://github.com/marazmiki/dj-upload-to#egg=dj-upload-url\n\nYou're not need include it into your `INSTALLED_APPS`\n\n\nUsage\n-----\n\nAssumes you have model:\n\n.. code:: python\n\n from django.db import models\n from dj_upload_to import UploadTo\n\n upload_to = UploadTo()\n\n class Model(models.Model):\n file = models.ImageField(upload_to=upload_to)\n\n\nAs you see, `UploadTo` generates callable object (with `__call__` methodfor passing into `upload_to` attribute of FileField (see `django upload_to docs `_ for details)\n\nWhen you save model with image originally named `myphoto.JPG`, file\n\nwill be saved with name such as:\n\n.. code:: bash\n\n model/ab/cd/abcdabcd-0123-4567-8901-234567890ab.jpg\n\nwhere:\n\n* `model` is prefix automatically generated from model class. You can override it\n* `ab` is the first 2 char segment of filename\n* `cd` is the second 2 char segment of filename\n* `abcdabcd-0123-4567-8901-234567890ab` autogenerated with `uuid` filename\n* `.jpg` is a lower cased extension taken from original file\n\nCustomize\n---------\n\nYou can customize behavior of `UploadTo` with options in constructor:\n\n\n* `prefix`: prefix of filename. Default is `dj_upload_to.not_provided`. If `None`, prefix will be missed. If not explicitly set, will be generated automatically based on model class name\n* `num_seg`: number of parts of segmentation. Default is `2`\n* `seg_size`: length of segment in chars. Default is `2`\n* `save_name`: use original name without autogeneration. Default is `False`\n\nThere are some examples:\n\n.. code:: python\n\n\n >>> model_instance = Model()\n\n >>> # Disable prefix\n >>> UploadTo(prefix=None)(model_instance, 'file.jpg')\n u'c0/17/c01745b4-e70b-4dd8-a5f7-76fec32fcb83.jpg'\n\n >>> # Explicitly given prefix\n >>> UploadTo(prefix='my_files')(model_instance, 'file.jpg')\n u'my_files/d9/a4/d9a4ef25-11b0-41bb-a543-baaac6553024.jpg'\n\n >>> # Four segment and automatically generated prefix\n >>> UploadTo(num_seg=4)(model_instance, 'file.jpg')\n u'model/36/52/99/f6/365299f6-8dc5-4ca2-848d-965f002a9b72.jpg'\n\n >>> # Segment length is 4 chars\n >>> UploadTo(seg_size=4)(model_instance, 'file.jpg')\n u'model/3142/f2ef/3142f2ef-2680-4a99-82fc-3c8d9d3179dc.jpg'\n\n >>> # Save original filename\n >>> UploadTo(save_name=True)(model_instance, 'file.jpg')\n u'model/file.jpg'\n\n >>> # Save original filename without prefix\n >>> UploadTo(save_name=True, prefix=None)(model_instance, 'file.jpg')\n u'file.jpg'\n\n\n\nContributing\n------------\n\nIdeas, bugfixes, pull requests are welcome on `GitHub `_\n\n\n\n=========\nCHANGELOG\n=========\n\n1.1\n---\n\n* Add **deconstruct()** support\n\n1.0.2\n-----\n\n* Fix sad setup.py bug\n\n\n1.0.1\n-----\n\n* Add prefix disabling\n* Add changelog\n* Updated docs\n\n1.0.0\n-----\n\nInitial release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/marazmiki/dj-upload-to", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "dj-upload-to", "package_url": "https://pypi.org/project/dj-upload-to/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/dj-upload-to/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/marazmiki/dj-upload-to" }, "release_url": "https://pypi.org/project/dj-upload-to/1.1/", "requires_dist": null, "requires_python": null, "summary": "Small application that simplifies naming of uploaded files", "version": "1.1" }, "last_serial": 1568799, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "24a04141ce7c8cf6c08c8a7c1dd9b3a9", "sha256": "1fc041822aaa82bced06fa1ead480df2957ee4962f5dd9b5d596e3bcc80309f4" }, "downloads": -1, "filename": "dj_upload_to-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "24a04141ce7c8cf6c08c8a7c1dd9b3a9", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5374, "upload_time": "2015-04-07T04:58:14", "url": "https://files.pythonhosted.org/packages/28/03/3dd9a832d5f8d3c2292ed5c7c8b6a878f55d53eef6fbfdb50719b2188c19/dj_upload_to-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a102cab68b3d081197e8335adca2deab", "sha256": "bd813798001510bbb5837faf7b9d4047a29f23c7f32d6ceedc035b062117a17b" }, "downloads": -1, "filename": "dj-upload-to-1.0.0.tar.bz2", "has_sig": false, "md5_digest": "a102cab68b3d081197e8335adca2deab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3871, "upload_time": "2015-04-07T04:58:02", "url": "https://files.pythonhosted.org/packages/0f/30/e413a2e1f835273a86d2c0fd4921d32aa43f153be2f5705f6f2acdba7592/dj-upload-to-1.0.0.tar.bz2" }, { "comment_text": "", "digests": { "md5": "b79072ca18f5a06dc42bb5822fef6bed", "sha256": "36d7c1af4a04a1ea3c2847248204c0cccb030dc4d1e817e3b41b0f3785ef46dd" }, "downloads": -1, "filename": "dj-upload-to-1.0.0.tar.gz", "has_sig": false, "md5_digest": "b79072ca18f5a06dc42bb5822fef6bed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3456, "upload_time": "2015-04-07T04:58:06", "url": "https://files.pythonhosted.org/packages/c1/c5/57adc08e339224d06d1677bf5696494a39b58814afa536a441409c37d500/dj-upload-to-1.0.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "d974daba7b601da1785a0927e79734e1", "sha256": "bc876f0b7736c4eec950107c179c4494e4566c68d52bddf10222642fa8303593" }, "downloads": -1, "filename": "dj-upload-to-1.0.0.zip", "has_sig": false, "md5_digest": "d974daba7b601da1785a0927e79734e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7600, "upload_time": "2015-04-07T04:57:58", "url": "https://files.pythonhosted.org/packages/46/38/1c7e79e322bcecf798092c88bf2aabb7d953114e106854189135310668e0/dj-upload-to-1.0.0.zip" } ], "1.0.1": [], "1.0.2": [ { "comment_text": "", "digests": { "md5": "7788c0121a38210f34960ff603682551", "sha256": "8c97ee4b99e8e9375d4282dab71d19f64e0ab9578b75b60d096124e1912e3a6d" }, "downloads": -1, "filename": "dj_upload_to-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "7788c0121a38210f34960ff603682551", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 5903, "upload_time": "2015-04-07T09:30:32", "url": "https://files.pythonhosted.org/packages/db/fd/108c183bd80876b1c4a447f3334c4c422352ea04f9d5444f2abd0d16613a/dj_upload_to-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36421aa13680a274336c4fce3feb0f26", "sha256": "f388dc000b3bd408da0db3595db5171b299f0b492e6c1fa6422e86d1f6efc66f" }, "downloads": -1, "filename": "dj-upload-to-1.0.2.tar.bz2", "has_sig": false, "md5_digest": "36421aa13680a274336c4fce3feb0f26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4323, "upload_time": "2015-04-07T09:30:19", "url": "https://files.pythonhosted.org/packages/44/ad/1d84c90afcf11370a56499e631f71ced0668a1fb56e1a79216190ccf44eb/dj-upload-to-1.0.2.tar.bz2" }, { "comment_text": "", "digests": { "md5": "ea26a53504ad2be110cf1806f39dc9a6", "sha256": "fe4e70b3148ac94ad91bb45790d5de7d354431413faa70653a04981e9620e61b" }, "downloads": -1, "filename": "dj-upload-to-1.0.2.tar.gz", "has_sig": false, "md5_digest": "ea26a53504ad2be110cf1806f39dc9a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3970, "upload_time": "2015-04-07T09:30:23", "url": "https://files.pythonhosted.org/packages/7c/d3/9b741749b15552953a5c671618d71c559eed74890c54de040a121335abce/dj-upload-to-1.0.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "e1156139294ffa65b612e1ec487f2d6c", "sha256": "17d5943cfb01a68f72295d8222c165ed96ac3f394a8e157d391200f6b8938f04" }, "downloads": -1, "filename": "dj-upload-to-1.0.2.zip", "has_sig": false, "md5_digest": "e1156139294ffa65b612e1ec487f2d6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8795, "upload_time": "2015-04-07T09:30:15", "url": "https://files.pythonhosted.org/packages/ef/17/61908e186005ea50c49834b840ff02d8b047792f0d6e7c88f59aea5d9896/dj-upload-to-1.0.2.zip" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "33cb9dadd93670cb4c11a33fd2999632", "sha256": "85c4c599b06b3ba2b23d22748a759286a8aa10c230aa35cecf90aea0a237043f" }, "downloads": -1, "filename": "dj_upload_to-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "33cb9dadd93670cb4c11a33fd2999632", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 5983, "upload_time": "2015-05-30T07:30:25", "url": "https://files.pythonhosted.org/packages/50/55/82ebae108388c4356072de944a39d43bbfb7eb9a378092e6c7a9f17f3cd7/dj_upload_to-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38f46af1e480da675b8a502256a1570d", "sha256": "fe6321220e8822ad03c70027a8c83f7ee4bd3076642b6b5b8c1c30c370131e2f" }, "downloads": -1, "filename": "dj-upload-to-1.1.tar.bz2", "has_sig": false, "md5_digest": "38f46af1e480da675b8a502256a1570d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4436, "upload_time": "2015-05-30T07:30:12", "url": "https://files.pythonhosted.org/packages/14/91/3c3034695404eddce61ff1935574e060bd248562b6935d8c417d01096f86/dj-upload-to-1.1.tar.bz2" }, { "comment_text": "", "digests": { "md5": "f91be5c20b8431a6ea2f200e3c4f1b70", "sha256": "ef9794c9022d6b3f0499a0cbce6f680427180a1ee95e05da0bde636c8fa309a3" }, "downloads": -1, "filename": "dj-upload-to-1.1.tar.gz", "has_sig": false, "md5_digest": "f91be5c20b8431a6ea2f200e3c4f1b70", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4075, "upload_time": "2015-05-30T07:30:15", "url": "https://files.pythonhosted.org/packages/25/96/8f2e029d4706e0b09321da52cad014fb8d0d1b631ed761e0f64e988bd5b8/dj-upload-to-1.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "1ae3658e940559e3f65af82a2189e525", "sha256": "005275f0321af7146371fded4039857fca4b1b6a67c5f8c0e3fed8bf3677dba2" }, "downloads": -1, "filename": "dj-upload-to-1.1.zip", "has_sig": false, "md5_digest": "1ae3658e940559e3f65af82a2189e525", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8871, "upload_time": "2015-05-30T07:30:08", "url": "https://files.pythonhosted.org/packages/38/da/13722de752289fb38fdadd6e7fea0d0799a2eaef692782a8d4765011e6a0/dj-upload-to-1.1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "33cb9dadd93670cb4c11a33fd2999632", "sha256": "85c4c599b06b3ba2b23d22748a759286a8aa10c230aa35cecf90aea0a237043f" }, "downloads": -1, "filename": "dj_upload_to-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "33cb9dadd93670cb4c11a33fd2999632", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 5983, "upload_time": "2015-05-30T07:30:25", "url": "https://files.pythonhosted.org/packages/50/55/82ebae108388c4356072de944a39d43bbfb7eb9a378092e6c7a9f17f3cd7/dj_upload_to-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38f46af1e480da675b8a502256a1570d", "sha256": "fe6321220e8822ad03c70027a8c83f7ee4bd3076642b6b5b8c1c30c370131e2f" }, "downloads": -1, "filename": "dj-upload-to-1.1.tar.bz2", "has_sig": false, "md5_digest": "38f46af1e480da675b8a502256a1570d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4436, "upload_time": "2015-05-30T07:30:12", "url": "https://files.pythonhosted.org/packages/14/91/3c3034695404eddce61ff1935574e060bd248562b6935d8c417d01096f86/dj-upload-to-1.1.tar.bz2" }, { "comment_text": "", "digests": { "md5": "f91be5c20b8431a6ea2f200e3c4f1b70", "sha256": "ef9794c9022d6b3f0499a0cbce6f680427180a1ee95e05da0bde636c8fa309a3" }, "downloads": -1, "filename": "dj-upload-to-1.1.tar.gz", "has_sig": false, "md5_digest": "f91be5c20b8431a6ea2f200e3c4f1b70", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4075, "upload_time": "2015-05-30T07:30:15", "url": "https://files.pythonhosted.org/packages/25/96/8f2e029d4706e0b09321da52cad014fb8d0d1b631ed761e0f64e988bd5b8/dj-upload-to-1.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "1ae3658e940559e3f65af82a2189e525", "sha256": "005275f0321af7146371fded4039857fca4b1b6a67c5f8c0e3fed8bf3677dba2" }, "downloads": -1, "filename": "dj-upload-to-1.1.zip", "has_sig": false, "md5_digest": "1ae3658e940559e3f65af82a2189e525", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8871, "upload_time": "2015-05-30T07:30:08", "url": "https://files.pythonhosted.org/packages/38/da/13722de752289fb38fdadd6e7fea0d0799a2eaef692782a8d4765011e6a0/dj-upload-to-1.1.zip" } ] }