{ "info": { "author": "Diederik van der Boor", "author_email": "opensource@edoburu.nl", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.10", "Framework :: Django :: 1.11", "Framework :: Django :: 1.8", "Framework :: Django :: 1.9", "Framework :: Django :: 2.0", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. image:: https://img.shields.io/travis/edoburu/django-private-storage/master.svg?branch=master\n :target: http://travis-ci.org/edoburu/django-private-storage\n.. image:: https://img.shields.io/pypi/v/django-private-storage.svg\n :target: https://pypi.python.org/pypi/django-private-storage/\n.. image:: https://img.shields.io/pypi/l/django-private-storage.svg\n :target: https://pypi.python.org/pypi/django-private-storage/\n.. image:: https://img.shields.io/codecov/c/github/edoburu/django-private-storage/master.svg\n :target: https://codecov.io/github/edoburu/django-private-storage?branch=master\n\ndjango-private-storage\n======================\n\nThis module offers a private media file storage,\nso user uploads can be protected behind a login.\n\nIt uses the Django storage API's internally,\nso all form rendering and admin integration work out of the box.\n\nInstallation\n============\n\n::\n\n pip install django-private-storage\n\nConfiguration\n-------------\n\nAdd to the settings:\n\n.. code-block:: python\n\n INSTALLED_APPS += (\n 'private_storage',\n )\n\n PRIVATE_STORAGE_ROOT = '/path/to/private-media/'\n PRIVATE_STORAGE_AUTH_FUNCTION = 'private_storage.permissions.allow_staff'\n\nAdd to ``urls.py``:\n\n.. code-block:: python\n\n import private_storage.urls\n\n urlpatterns += [\n url('^private-media/', include(private_storage.urls)),\n ]\n\nUsage\n-----\n\nIn a Django model, add the ``PrivateFileField``:\n\n.. code-block:: python\n\n from django.db import models\n from private_storage.fields import PrivateFileField\n\n class MyModel(models.Model):\n title = models.CharField(\"Title\", max_length=200)\n file = PrivateFileField(\"File\")\n\nThe ``PrivateFileField`` also accepts the following kwargs:\n\n* ``upload_to``: the optional subfolder in the ``PRIVATE_STORAGE_ROOT``.\n* ``upload_subfolder``: a function that defines the folder, it receives the current model ``instance``.\n* ``content_types``: allowed content types\n* ``max_file_size``: maximum file size in bytes. (1MB is 1024 * 1024)\n* ``storage``: the storage object to use, defaults to ``private_storage.storage.private_storage``\n\nOther topics\n============\n\nStoring files on Amazon S3\n--------------------------\n\nThe ``PRIVATE_STORAGE_CLASS`` setting can be redefined to point to a different storage class.\nThe default is ``private_storage.storage.files.PrivateFileSystemStorage``, which uses\na private media folder that ``PRIVATE_STORAGE_ROOT`` points to.\n\nDefine one of these settings instead:\n\n.. code-block:: python\n\n PRIVATE_STORAGE_CLASS = 'private_storage.storage.s3boto3.PrivateS3BotoStorage'\n\n AWS_PRIVATE_STORAGE_BUCKET_NAME = 'private-files' # bucket name\n\nThis uses django-storages_ settings. Replace the prefix ``AWS_`` with ``AWS_PRIVATE_``.\nThe following settings are reused when they don't have an corresponding ``AWS_PRIVATE_...`` setting:\n\n* ``AWS_ACCESS_KEY_ID``\n* ``AWS_SECRET_ACCESS_KEY``\n* ``AWS_S3_URL_PROTOCOL``\n* ``AWS_S3_REGION_NAME``\n* ``AWS_IS_GZIPPED``\n\nAll other settings should be explicitly defined with ``AWS_PRIVATE_...`` settings.\n\nBy default, all URLs in the admin return the direct S3 bucket URls, with the `query parameter authentication`_ enabled.\nWhen ``AWS_PRIVATE_QUERYSTRING_AUTH = False``, all file downloads are proxied through our ``PrivateFileView`` URL.\nThis behavior can be enabled explicitly using ``PRIVATE_STORAGE_S3_REVERSE_PROXY = True``.\n\nTo have encryption either configure ``AWS_PRIVATE_S3_ENCRYPTION``\nand ``AWS_PRIVATE_S3_SIGNATURE_VERSION`` or use:\n\n.. code-block:: python\n\n PRIVATE_STORAGE_CLASS = 'private_storage.storage.s3boto3.PrivateEncryptedS3BotoStorage'\n\nMake sure an encryption key is generated on Amazon.\n\nDefining access rules\n---------------------\n\nThe ``PRIVATE_STORAGE_AUTH_FUNCTION`` defines which user may access the files.\nBy default, this only includes superusers.\n\nThe following options are available out of the box:\n\n* ``private_storage.permissions.allow_authenticated``\n* ``private_storage.permissions.allow_staff``\n* ``private_storage.permissions.allow_superuser``\n\nYou can create a custom function, and use that instead.\nThe function receives a ``private_storate.models.PrivateFile`` object,\nwhich has the following fields:\n\n* ``request``: the Django request.\n* ``storage``: the storage engine used to retrieve the file.\n* ``relative_name``: the file name in the storage.\n* ``full_path``: the full file system path.\n* ``exists()``: whether the file exists.\n* ``content_type``: the HTTP content type.\n* ``parent_object``: only set when ``PrivateStorageDetailView`` was used.\n\n\nRetrieving files by object ID\n-----------------------------\n\nTo implement more object-based access permissions,\ncreate a custom view that provides the download.\n\n.. code-block:: python\n\n from private_storage.views import PrivateStorageDetailView\n\n class MyDocumentDownloadView(PrivateStorageDetailView):\n model = MyModel\n model_file_field = 'file'\n\n def get_queryset(self):\n # Make sure only certain objects can be accessed.\n return super().get_queryset().filter(...)\n\n def can_access_file(self, private_file):\n # When the object can be accessed, the file may be downloaded.\n # This overrides PRIVATE_STORAGE_AUTH_FUNCTION\n return True\n\nThe following class-level attributes can be overwritten:\n\n* ``model``: The model to fetch (including every other attribute of ``SingleObjectMixin``).\n* ``model_file_field``: This should point to the field used to store the file.\n* ``storage`` / ``get_storage()``: The storage class to read the file from.\n* ``server_class``: The Python class used to generate the ``HttpResponse`` / ``FileResponse``.\n* ``content_disposition``: Can be \"inline\" (show inside the browser) or \"attachment\" (saved as download).\n* ``content_disposition_filename`` / ``get_content_disposition_filename()``: Overrides the filename for downloading.\n\n\nOptimizing large file transfers\n-------------------------------\n\nSending large files can be inefficient in some configurations.\n\nIn the worst case scenario, the whole file needs to be read in chunks\nand passed as a whole through the WSGI buffers, OS kernel, webserver and proxy server.\nIn effect, the complete file is copied several times through memory buffers.\n\nThere are more efficient ways to transfer files, such as the ``sendfile()`` system call on UNIX.\nDjango uses such feature when the WSGI server provides ``wsgi.file_handler`` support.\n\nIn some situations, this effect is nullified,\nfor example by by a local HTTP server sitting in front of the WSGI container.\nA typical case would be running Gunicorn behind an Nginx or Apache webserver.\n\nFor such situation, the native support of the\nwebserver can be enabled with the following settings:\n\nFor apache\n~~~~~~~~~~\n\n.. code-block:: python\n\n PRIVATE_STORAGE_SERVER = 'apache'\n\nFor Nginx\n~~~~~~~~~\n\n.. code-block:: python\n\n PRIVATE_STORAGE_SERVER = 'nginx'\n PRIVATE_STORAGE_INTERNAL_URL = '/private-x-accel-redirect/'\n\nAdd the following location block in the server config:\n\n.. code-block:: nginx\n\n location /private-x-accel-redirect/ {\n internal;\n alias /path/to/private-media/;\n }\n\nFor very old Nginx versions, you'll have to configure ``PRIVATE_STORAGE_NGINX_VERSION``,\nbecause Nginx versions before 1.5.9 (released in 2014) handle non-ASCII filenames differently.\n\nOther webservers\n~~~~~~~~~~~~~~~~\n\nThe ``PRIVATE_STORAGE_SERVER`` may also point to a dotted Python class path.\nImplement a class with a static ``serve(private_file)`` method.\n\nUsing multiple storages\n-----------------------\n\nThe ``PrivateFileField`` accepts a ``storage`` kwarg,\nhence you can initialize multiple ``private_storage.storage.PrivateStorage`` objects,\neach providing files from a different ``location`` and ``base_url``.\n\nFor example:\n\n.. code-block:: python\n\n\n from django.db import models\n from private_storage.fields import PrivateFileField\n from private_storage.storage.files import PrivateFileSystemStorage\n\n my_storage = PrivateFileSystemStorage(\n location='/path/to/storage2/',\n base_url='/private-documents2/'\n )\n\n class MyModel(models.Model):\n file = PrivateFileField(storage=my_storage)\n\n\nThen create a view to serve those files:\n\n.. code-block:: python\n\n from private_storage.views import PrivateStorageView\n from .models import my_storage\n\n class MyStorageView(PrivateStorageView):\n storage = my_storage\n\n def can_access_file(self, private_file):\n # This overrides PRIVATE_STORAGE_AUTH_FUNCTION\n return self.request.is_superuser\n\nAnd expose that URL:\n\n.. code-block:: python\n\n urlpatterns += [\n url('^private-documents2/(?P.*)$', views.MyStorageView.as_view()),\n ]\n\n\nContributing\n------------\n\nThis module is designed to be generic. In case there is anything you didn't like about it,\nor think it's not flexible enough, please let us know. We'd love to improve it!\n\n\n.. _django-storages: https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html\n.. _query parameter authentication: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/edoburu/django-private-storage/zipball/master", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/edoburu/django-private-storage", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "django-private-storage", "package_url": "https://pypi.org/project/django-private-storage/", "platform": "", "project_url": "https://pypi.org/project/django-private-storage/", "project_urls": { "Download": "https://github.com/edoburu/django-private-storage/zipball/master", "Homepage": "https://github.com/edoburu/django-private-storage" }, "release_url": "https://pypi.org/project/django-private-storage/2.2/", "requires_dist": null, "requires_python": "", "summary": "Private media file storage for Django projects", "version": "2.2" }, "last_serial": 5113573, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "c07723d568047eb2fbbf78333f8ac11f", "sha256": "6f4a90bc575cb36b2aa1fad93c675d79569f7f8b150665d11457d3795aa0e19c" }, "downloads": -1, "filename": "django-private-storage-1.0.tar.gz", "has_sig": false, "md5_digest": "c07723d568047eb2fbbf78333f8ac11f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11734, "upload_time": "2016-10-10T09:37:13", "url": "https://files.pythonhosted.org/packages/5d/2b/2728a1481ba17abe0cff817988aa9a80cd884057e35f8391ffb4e9fe4258/django-private-storage-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "cd6e258c293ca29f3a7e558622a4a004", "sha256": "317f2ff9e939306c6d16baf883a01056a6dbbf10c8f1ac37e3e2fccd20f73554" }, "downloads": -1, "filename": "django_private_storage-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cd6e258c293ca29f3a7e558622a4a004", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15010, "upload_time": "2016-10-10T10:25:27", "url": "https://files.pythonhosted.org/packages/4e/93/e56c71f830998fcb5f24be1bf008e319c4220d321b43cea10bfc9f496fcf/django_private_storage-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56cc26c17092f6fdd94399d3f1f6c1c8", "sha256": "2d169d77634288287d1a0d40b6900e13bb5f657a2a541a6f62a0775475c80819" }, "downloads": -1, "filename": "django-private-storage-1.0.1.tar.gz", "has_sig": false, "md5_digest": "56cc26c17092f6fdd94399d3f1f6c1c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13868, "upload_time": "2016-10-10T10:25:30", "url": "https://files.pythonhosted.org/packages/27/c5/930b0ca9d426950ca9ad9624c25265d5ca2af9148d65dee4672bd8256e73/django-private-storage-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "6155979ee99f5f75594abbce8f8a42b0", "sha256": "db86b6a140dcad442299f310e501187f0e2405e22afccb69225964d15b1be966" }, "downloads": -1, "filename": "django_private_storage-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6155979ee99f5f75594abbce8f8a42b0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15085, "upload_time": "2017-01-11T10:49:23", "url": "https://files.pythonhosted.org/packages/d7/11/aeaf4c369ebf21c3b8ce565595caee58bf149725e79d9a09f87f61d8f525/django_private_storage-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf9a2456696a1eb1e42a37b33b3bb311", "sha256": "884cd94d2acaff3928c8dea84feaf09a400486351716715ef68d2f87bbbde8d4" }, "downloads": -1, "filename": "django-private-storage-1.0.2.tar.gz", "has_sig": false, "md5_digest": "bf9a2456696a1eb1e42a37b33b3bb311", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13916, "upload_time": "2017-01-11T10:49:25", "url": "https://files.pythonhosted.org/packages/c1/d1/69d23c33b6ba08028bd730e2435c2183d121725a9fd100004c7fd7203d61/django-private-storage-1.0.2.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "ab840d0c0cb28571d5c8f82da8b2d795", "sha256": "3017e98b41d1ad25fb18176c01834988542bed74767de333c8dd638f11376023" }, "downloads": -1, "filename": "django_private_storage-1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ab840d0c0cb28571d5c8f82da8b2d795", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18013, "upload_time": "2017-02-07T16:18:26", "url": "https://files.pythonhosted.org/packages/c8/d1/c8ab0ae14e4adf9eec3211c987edd2e734b4791837bdf655d7043dbf42a4/django_private_storage-1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe6446c73ba5c6ae0c42185c74520f81", "sha256": "ebe8f0122af73a4428a595f166a27740343262d5f7dfef7d3ec629f6399dc940" }, "downloads": -1, "filename": "django-private-storage-1.1.tar.gz", "has_sig": false, "md5_digest": "fe6446c73ba5c6ae0c42185c74520f81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16346, "upload_time": "2017-02-07T16:18:28", "url": "https://files.pythonhosted.org/packages/d3/bc/01bfc5dce7b588325a171395681ae48d8cdd3eb87f9ddd5b5cf21aaee8d4/django-private-storage-1.1.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "36455592010222056f108a97bb530645", "sha256": "2373737964cc46146d3bc00aba040efdac16aa78aab86177ee5058975031aa03" }, "downloads": -1, "filename": "django_private_storage-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "36455592010222056f108a97bb530645", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18646, "upload_time": "2017-02-07T16:54:12", "url": "https://files.pythonhosted.org/packages/25/9e/a6f01f3cf6f2078862d8018a9039f3ff45609de0791e68d8479e040f91ff/django_private_storage-1.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "230429e3c02e52dc56747e211e8b5e78", "sha256": "7bc8bb21c25f672d13d29e3285cef637aa7d4bd58dd45df2826b48c61e051433" }, "downloads": -1, "filename": "django-private-storage-1.1.1.tar.gz", "has_sig": false, "md5_digest": "230429e3c02e52dc56747e211e8b5e78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16827, "upload_time": "2017-02-07T16:54:14", "url": "https://files.pythonhosted.org/packages/61/78/488457cce6c149c74e3fb3e02583c94c00fb94a3875eb9a0789a0a42e82f/django-private-storage-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "b72b95adccdf63a52d4e2b3c0c385d18", "sha256": "70d1020d3fbe568abbe777653947447ac9813f37364c175003307d723cb15dbf" }, "downloads": -1, "filename": "django_private_storage-1.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b72b95adccdf63a52d4e2b3c0c385d18", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19368, "upload_time": "2017-04-05T13:35:18", "url": "https://files.pythonhosted.org/packages/81/89/0bbb980f190659681783ab585409adb34467640048486081e231c1d3d89d/django_private_storage-1.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9d5bd0399426e8b5552513d1a3ee7fc9", "sha256": "f8e6280bf6a095623c888ebbedbc42ee9988264c23470ec7d1626679dee30088" }, "downloads": -1, "filename": "django-private-storage-1.1.2.tar.gz", "has_sig": false, "md5_digest": "9d5bd0399426e8b5552513d1a3ee7fc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17495, "upload_time": "2017-04-05T13:35:20", "url": "https://files.pythonhosted.org/packages/a6/6e/49accf42168262e4f5bcfc8198386e885f60482e38a74e2c04ebe8aa835b/django-private-storage-1.1.2.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "e5b5dea8af842eca80d197f3121c6570", "sha256": "e49c0d4d108efbc1e283c7bee73d713b8741c975354942eb2142cae90ffaeaf5" }, "downloads": -1, "filename": "django_private_storage-1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e5b5dea8af842eca80d197f3121c6570", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19949, "upload_time": "2017-04-05T14:13:47", "url": "https://files.pythonhosted.org/packages/bc/c1/1048470ead91bb470880350ac882e2bc27e7df0c6e0d5eff602782a2f56f/django_private_storage-1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ed7d9f5180fc9ead3bc7293f0e9d548", "sha256": "fbbd2a4769b2da8788f4be2010bd04fb5369667782f13686df5a110efae19f1f" }, "downloads": -1, "filename": "django-private-storage-1.2.tar.gz", "has_sig": false, "md5_digest": "0ed7d9f5180fc9ead3bc7293f0e9d548", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18007, "upload_time": "2017-04-05T14:13:50", "url": "https://files.pythonhosted.org/packages/db/4e/f7cd1a36c991ae77393b96f2722cc5a381210616ad8abfd7cf294154cf27/django-private-storage-1.2.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "555cc47d6aacda5bcb3510641bb05445", "sha256": "5e236a0bff54ff27d0261ad14993013bbbf25af3a099fa0425880c9be8499aac" }, "downloads": -1, "filename": "django_private_storage-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "555cc47d6aacda5bcb3510641bb05445", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20004, "upload_time": "2017-05-08T16:15:23", "url": "https://files.pythonhosted.org/packages/94/75/0a26c5f6bfa1281ea797130c32df2e2ce0aff5a8755523420c28f954f66e/django_private_storage-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "15f1dd394783cbe0543a7ffa7948f2e9", "sha256": "9ff5c63abc119b0f47c9abeda73b8a74809862c9700335e570b37c5bdf44ca1e" }, "downloads": -1, "filename": "django-private-storage-1.2.1.tar.gz", "has_sig": false, "md5_digest": "15f1dd394783cbe0543a7ffa7948f2e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18012, "upload_time": "2017-05-08T16:15:25", "url": "https://files.pythonhosted.org/packages/14/ae/dd40105b0801d49063c6fa47fa0de7facef56d0017778aaaf740194edc26/django-private-storage-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "095721802ea07c19d31188ce1645798c", "sha256": "db7c434b1592abe0b73085dff018ec7bc52385d1989792efae9a815c1c6f9dd3" }, "downloads": -1, "filename": "django_private_storage-1.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "095721802ea07c19d31188ce1645798c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21266, "upload_time": "2017-10-01T10:26:32", "url": "https://files.pythonhosted.org/packages/c2/72/c737e5c6b27289da4eb66dfc90a7ba682b3b4cf972bf1974a741228e55bf/django_private_storage-1.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "109573da23fbf6d1f060b3eabecf997a", "sha256": "b6f2091da18c077cef4b04d278a1c9f333e907b6425bac03afc87ea2290c3c1e" }, "downloads": -1, "filename": "django-private-storage-1.2.2.tar.gz", "has_sig": false, "md5_digest": "109573da23fbf6d1f060b3eabecf997a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18885, "upload_time": "2017-10-01T10:26:34", "url": "https://files.pythonhosted.org/packages/cb/f9/83a2bc50bd104038d7e6bf0d087b2a3e0da3ce091b56ae3de14a9dc5e337/django-private-storage-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "5eab43903816def08f6b42adc8261eac", "sha256": "d475d8bbbf45b0d9c4e27b4f4236ecf9cd91dd0b26f51158de5b051d6ea40169" }, "downloads": -1, "filename": "django_private_storage-1.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5eab43903816def08f6b42adc8261eac", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21266, "upload_time": "2017-12-04T10:10:54", "url": "https://files.pythonhosted.org/packages/74/48/d1589971876fd5a5607b20fde4fb3e3fb984558ff767ff1c199f8b327291/django_private_storage-1.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "948ca0c996adabafcb3278d3e170ebc2", "sha256": "c856e0b73e6888123217ba3d62f4762118a28903dec979408754ef1d1671f59f" }, "downloads": -1, "filename": "django-private-storage-1.2.3.tar.gz", "has_sig": false, "md5_digest": "948ca0c996adabafcb3278d3e170ebc2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19123, "upload_time": "2017-12-04T10:10:55", "url": "https://files.pythonhosted.org/packages/55/63/4594bf3bb6f40ecce5ccf38a587c0a00bc1fd5919a18d26d70b2df873604/django-private-storage-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "214e7400f44365ef4394dad90def2db6", "sha256": "f55c765bd8b74da5f0e2b261282bdcced93ac464996405daa17b9a0ecb8032c4" }, "downloads": -1, "filename": "django_private_storage-1.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "214e7400f44365ef4394dad90def2db6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21344, "upload_time": "2018-01-31T15:06:22", "url": "https://files.pythonhosted.org/packages/36/60/9f21b3ecb83220eff646ff9b072185405cb7976a8a2079e0b51822f79d4b/django_private_storage-1.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7ef5f20f8a17dfe3bb9d24fa65d9e824", "sha256": "ebb99f38f6f9383acb1f2d9f8ea278834580a17732de3ba5a1e1666a51d417b5" }, "downloads": -1, "filename": "django-private-storage-1.2.4.tar.gz", "has_sig": false, "md5_digest": "7ef5f20f8a17dfe3bb9d24fa65d9e824", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19227, "upload_time": "2018-01-31T15:06:28", "url": "https://files.pythonhosted.org/packages/ee/1a/003d9a7bd5f5e11b551580166fa76d76e9a066da31872b7369cf9a1dd486/django-private-storage-1.2.4.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "221a46a17c3bdce782ac8ce30b8f9ea2", "sha256": "06339fde6a82b19b562e3746c42adc66e9e3c44c216da47dccf928dd50d676b5" }, "downloads": -1, "filename": "django_private_storage-2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "221a46a17c3bdce782ac8ce30b8f9ea2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24449, "upload_time": "2018-02-06T11:41:03", "url": "https://files.pythonhosted.org/packages/55/fc/720cf521537edb7422b2f624775958ef5fe0852ad0eff10a1be9f2136b8a/django_private_storage-2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d2b2c908c2254e641573296f7bcd45f", "sha256": "07dff71f9f33f2ce48bf8a43f48c55aa115789f6b233eb5ffb077a274c1b52be" }, "downloads": -1, "filename": "django-private-storage-2.0.tar.gz", "has_sig": false, "md5_digest": "2d2b2c908c2254e641573296f7bcd45f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21106, "upload_time": "2018-02-06T11:41:05", "url": "https://files.pythonhosted.org/packages/2f/1e/83fbffddc830bdac71434206b2436d63221d73e20d7a1985c7f97e824c93/django-private-storage-2.0.tar.gz" } ], "2.1": [ { "comment_text": "", "digests": { "md5": "26ede56c511963245dbf16b1678ce6ae", "sha256": "92ac31b38735a7aef741e9bba2fab337cdf459cfedbf97f0b7622bb8d15f1461" }, "downloads": -1, "filename": "django_private_storage-2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "26ede56c511963245dbf16b1678ce6ae", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21553, "upload_time": "2018-05-08T10:13:17", "url": "https://files.pythonhosted.org/packages/04/4a/37852c24080acd1d55dd212da6d0284c993ad782ab5ca8279e47183cf1b1/django_private_storage-2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f98da32d8db9e703cf8b74085952b9d0", "sha256": "5647439a68b10816dd73739f0acd13d74da22f56946fb7f6ea41286d83c5af2b" }, "downloads": -1, "filename": "django-private-storage-2.1.tar.gz", "has_sig": false, "md5_digest": "f98da32d8db9e703cf8b74085952b9d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22456, "upload_time": "2018-05-08T10:13:19", "url": "https://files.pythonhosted.org/packages/fa/80/b67c82a5044e1481521fb86ec826195010075b89ccc2bb68fdd1086a9872/django-private-storage-2.1.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "9aa98c0550e27533964aa46ed45dac73", "sha256": "ee7b9a787936b75274b174906e9d0d0dda08abc7a55dd7e0788fd52968d65b83" }, "downloads": -1, "filename": "django_private_storage-2.1.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "9aa98c0550e27533964aa46ed45dac73", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22118, "upload_time": "2018-05-16T08:19:33", "url": "https://files.pythonhosted.org/packages/89/17/48525dda32b61950635940c8363232dde4fa5ec56f2d5669e84a49de9efb/django_private_storage-2.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f33a7076586001f0b42d8b9576a768c8", "sha256": "659f797818cbeccd2b3c49b7e32230708e69e18052d62c63602e5c69140c942a" }, "downloads": -1, "filename": "django-private-storage-2.1.1.tar.gz", "has_sig": true, "md5_digest": "f33a7076586001f0b42d8b9576a768c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23027, "upload_time": "2018-05-16T08:19:35", "url": "https://files.pythonhosted.org/packages/16/ae/7b4b6a02222474bac6a24b9f661f65b439bd6d34ff308ab54204b7000745/django-private-storage-2.1.1.tar.gz" } ], "2.1.2": [ { "comment_text": "", "digests": { "md5": "51da71dcbc20b4287711e6c093ddf712", "sha256": "079a7b71be38abc05f907a6994190b16b97e5693b23fe905c55beee855708cde" }, "downloads": -1, "filename": "django_private_storage-2.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "51da71dcbc20b4287711e6c093ddf712", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22288, "upload_time": "2018-05-23T13:30:28", "url": "https://files.pythonhosted.org/packages/9b/e0/c9e2169782f4a8a7f83a07464490282aee29276636432457885e0e991588/django_private_storage-2.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "118a7e0bc085354b3e793720db934ed7", "sha256": "50064e71a8df433d5782d81ee7e3a03a4f4466de4b63ee4bebfd2ad26c0944a2" }, "downloads": -1, "filename": "django-private-storage-2.1.2.tar.gz", "has_sig": false, "md5_digest": "118a7e0bc085354b3e793720db934ed7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23159, "upload_time": "2018-05-23T13:30:30", "url": "https://files.pythonhosted.org/packages/6f/c1/287a58d93809bffa9dc1255e81e7165df1050462d7ad01cae78e9eafb6b0/django-private-storage-2.1.2.tar.gz" } ], "2.1.3": [ { "comment_text": "", "digests": { "md5": "244621638758931d0552dea4945f5485", "sha256": "9e3caba86edba4b77db8d32b5eb14007923f577e48174de908cb5638632c3fb4" }, "downloads": -1, "filename": "django_private_storage-2.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "244621638758931d0552dea4945f5485", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22278, "upload_time": "2018-09-10T08:52:59", "url": "https://files.pythonhosted.org/packages/14/10/f30ef6aa0c1956a86b0e9993a59806ea3a39ecdec62c99853ba7d31f37b8/django_private_storage-2.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2c3c009191aeb8d32e4a284e829f5681", "sha256": "e81a9c5a281c55a263fee479b6d03d7b920e186609cd5a710295c733773cdb00" }, "downloads": -1, "filename": "django-private-storage-2.1.3.tar.gz", "has_sig": false, "md5_digest": "2c3c009191aeb8d32e4a284e829f5681", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23156, "upload_time": "2018-09-10T08:53:01", "url": "https://files.pythonhosted.org/packages/10/9b/f67e177192459c46a2677ea875d7a4192f7317a346cbed04365ef244b24e/django-private-storage-2.1.3.tar.gz" } ], "2.2": [ { "comment_text": "", "digests": { "md5": "f5eacf0bd9da4db22c391dfc406d7f44", "sha256": "db4989e33808d753eef15896a3c613e1a6f400f81b78409a047b59b63932fef2" }, "downloads": -1, "filename": "django_private_storage-2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f5eacf0bd9da4db22c391dfc406d7f44", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23924, "upload_time": "2019-04-08T12:33:24", "url": "https://files.pythonhosted.org/packages/cf/1e/434868611a9111ddaa92ddaf3ad6479a0bbb5ab9ed8260691e4648d000de/django_private_storage-2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ec3b523dd516a3be55fddb35441c4640", "sha256": "7742ff94349fd5766e16b81095ba781605d9a6ec15915f96ad72bc33183ced04" }, "downloads": -1, "filename": "django-private-storage-2.2.tar.gz", "has_sig": false, "md5_digest": "ec3b523dd516a3be55fddb35441c4640", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23751, "upload_time": "2019-04-08T12:33:25", "url": "https://files.pythonhosted.org/packages/2a/40/cdde161c829d68d4147e42de617124fd3448ae8ea6fbb528f46a74cb8630/django-private-storage-2.2.tar.gz" } ], "2.2a1": [ { "comment_text": "", "digests": { "md5": "02168afb49a68fdab14c392d2c41a5e0", "sha256": "06368dcb533080314e0b5c7c54f8ea1547be5236c4a092484a700196f6bbafb9" }, "downloads": -1, "filename": "django_private_storage-2.2a1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "02168afb49a68fdab14c392d2c41a5e0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22543, "upload_time": "2018-11-22T15:46:35", "url": "https://files.pythonhosted.org/packages/a6/9f/ce3af0c539f03a09a2ddf64698bd8f0a94a50ed79e6581c05569c8902426/django_private_storage-2.2a1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ecc8a2746bd22eb02fe6cf3864b023b", "sha256": "3e5777cb2a5cff99b27ba3b694b3223adf4b69e1cabb55a7dfd9f294cbbc2f0a" }, "downloads": -1, "filename": "django-private-storage-2.2a1.tar.gz", "has_sig": false, "md5_digest": "2ecc8a2746bd22eb02fe6cf3864b023b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23401, "upload_time": "2018-11-22T15:46:37", "url": "https://files.pythonhosted.org/packages/e9/36/959b01a9a09e5bbd9f7f538389b4d8965f75ba901328f1d7b779da1d81d2/django-private-storage-2.2a1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f5eacf0bd9da4db22c391dfc406d7f44", "sha256": "db4989e33808d753eef15896a3c613e1a6f400f81b78409a047b59b63932fef2" }, "downloads": -1, "filename": "django_private_storage-2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f5eacf0bd9da4db22c391dfc406d7f44", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23924, "upload_time": "2019-04-08T12:33:24", "url": "https://files.pythonhosted.org/packages/cf/1e/434868611a9111ddaa92ddaf3ad6479a0bbb5ab9ed8260691e4648d000de/django_private_storage-2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ec3b523dd516a3be55fddb35441c4640", "sha256": "7742ff94349fd5766e16b81095ba781605d9a6ec15915f96ad72bc33183ced04" }, "downloads": -1, "filename": "django-private-storage-2.2.tar.gz", "has_sig": false, "md5_digest": "ec3b523dd516a3be55fddb35441c4640", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23751, "upload_time": "2019-04-08T12:33:25", "url": "https://files.pythonhosted.org/packages/2a/40/cdde161c829d68d4147e42de617124fd3448ae8ea6fbb528f46a74cb8630/django-private-storage-2.2.tar.gz" } ] }