{ "info": { "author": "Rockallite Wulf", "author_email": "rockallite.wulf@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.11", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "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 :: Python Modules" ], "description": "django-smartstaticfiles\n=======================\n\n**django-smartstaticfiles** enhances the functionalities of |collectstatic|_\nmanagement command of Django **1.11.x**, allows for finer-grained control\nover serving static files in production.\n\nUnder the hood, it provides a file storage backend for use with\n|STATICFILES_STORAGE|_ setting, which inherits and improves Django's\n|ManifestStaticFilesStorage|_ storage backend.\n\nFeatures\n--------\n\n- Deletes unhashed files and intermediate files by default.\n- Optionally ignores hashing of specific files.\n- Optionally minifies JavaScript and CSS files.\n- Optionally replace JavaScript asset URLs with hashed versions using\n *loud comments* markup. *(New in v0.2.0)*\n- Optimizes hashing process with fewer I/O and less calculation.\n\nQuick Start\n-----------\n\n1. Install the stable version from PyPI:\n\n .. code:: bash\n\n pip install django-smartstaticfiles\n\n Or install the stable version with extras for JavaScript and CSS minification\n (will also install |rjsmin|_ and |rcssmin|_):\n\n .. code:: bash\n\n pip install django-smartstaticfiles[jsmin,cssmin]\n\n Or install the latest version from GitHub:\n\n .. code:: bash\n\n pip install git+https://github.com/rockallite/django-smartstaticfiles.git\n\n2. Add the following lines to the project's Django settings module:\n\n .. code:: python\n\n STATIC_ROOT = '/path/for/collecting/static/files'\n\n STATICFILES_STORAGE = 'django_smartstaticfiles.storage.SmartManifestStaticFilesStorage'\n\n # Remove this if you don't need to minify JavaScript and CSS\n SMARTSTATICFILES_CONFIG = {\n 'JS_MIN_ENABLED': True,\n 'CSS_MIN_ENABLED': True,\n }\n\n3. In the project directory, collect static files by running the following\n command:\n\n .. code:: bash\n\n python manage.py collectstatic --clear --no-input\n\nJavaScript Asset URLs Replacement\n---------------------------------\n\n*(New in v0.2.0)*\n\nBy default, URLs of referenced assets (images, fonts, etc) in CSS\nfiles will be replaced with hashed versions during processing.\n**django-smartstaticfiles** extends this feature to JavaScript files by\nutilizing special *loud comments* (``/*! ... */``) markup.\n\nSimple use case\n~~~~~~~~~~~~~~~\n\nThe JavaScript asset URLs replacement feature is disabled by default. To enable\nit, add the following setting to Django settings module:\n\n.. code:: python\n\n SMARTSTATICFILES_CONFIG = {\n # Enable JavaScript asset URLs replacement\n 'JS_ASSETS_REPL_ENABLED': True,\n }\n\nTo replace an asset URL with the hashed version, surround the URL string with\n``/*! rev */`` and ``/*! endrev */`` markup:\n\n.. code:: javascript\n\n var imageURL = /*! rev */ '../img/welcome.jpg' /*! endrev */;\n\nSupposed that the hashed filename is ``welcome.ac99c750806a.jpg``, the\nprocessing result will be:\n\n.. code:: javascript\n\n var imageURL = '../img/welcome.ac99c750806a.jpg';\n\nOnly a single- or double-quoted bare string should be put inside ``/*! rev */``\nand ``/*! endrev */`` markup. No comma or semicolon is allowed. Spaces around\nor inside loud comments are optional, though.\n\nUsing a different parent path\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nBy default, relative asset URLs are considered to be relative to the\nreferencing JavaScript file, just the same rule for a CSS file. However,\nsince JavaScript runs in global scope of a browser, the path of a\nJavaScript file is sometimes not useful for locating relative assets.\n\nTherefore, the markup accepts a parameter as *virtual parent path*, passing in\nbetween a pair of parentheses right behind the loud comment starting tag, like\nthis: ``/*! rev(path) */``. During processing, it will be considered as if it\nwere the parent path of the asset. For example:\n\n.. code:: javascript\n\n /*\n * Supposed there are following files:\n * STATIC_URL/helloworld/img/welcome.jpg\n * STATIC_URL/helloworld/js/main.js\n *\n * Then in the main.js:\n */\n\n var imageURLs = [\n // *** Absolute reference ***\n // (STATIC_URL as the root path)\n\n // Leading and trailing slashes in a virtual parent path are optional\n /*! rev(helloworld/img) */ 'welcome.jpg' /*! endrev */,\n /*! rev(/helloworld/img/) */ 'welcome.jpg' /*! endrev */,\n /*! rev(/helloworld/img) */ 'welcome.jpg' /*! endrev */,\n /*! rev(helloworld/img/) */ 'welcome.jpg' /*! endrev */,\n\n // A leading dot slash (./) or dot-dot slash (../) in an asset URL is OK\n /*! rev(helloworld/img) */ './welcome.jpg' /*! endrev */,\n /*! rev(helloworld/img) */ '../img/welcome.jpg' /*! endrev */,\n\n // Use different path portion in a virtual parent path. A single slash means root (STATIC_URL).\n /*! rev(helloworld) */ 'img/welcome.jpg' /*! endrev */,\n /*! rev(/) */ 'helloworld/img/welcome.jpg' /*! endrev */,\n\n // *** Relative reference ***\n // (Relative to the JavaScript file)\n\n // A leading dot (.) or dot-dot (..) path part in a virtual parent path indicates a relative reference\n /*! rev(../img) */ 'welcome.jpg' /*! endrev */,\n /*! rev(..) */ 'img/welcome.jpg' /*! endrev */,\n /*! rev(../..) */ 'helloworld/img/welcome.jpg' /*! endrev */\n ];\n\nAfter processing, the above code becomes:\n\n.. code:: javascript\n\n /*\n * Supposed there are following files:\n * STATIC_URL/helloworld/img/welcome.jpg\n * STATIC_URL/helloworld/js/main.js\n *\n * Then in the main.js:\n */\n\n var imageURLs = [\n // *** Absolute reference ***\n // (STATIC_URL as the root path)\n\n // Leading and trailing slashes in a virtual parent path are optional\n 'welcome.ac99c750806a.jpg',\n 'welcome.ac99c750806a.jpg',\n 'welcome.ac99c750806a.jpg',\n 'welcome.ac99c750806a.jpg',\n\n // A leading dot slash (./) or dot-dot slash (../) in an asset URL is OK\n './welcome.ac99c750806a.jpg',\n '../img/welcome.ac99c750806a.jpg',\n\n // Use different path portion in a virtual parent path. A single slash means root (STATIC_URL).\n 'img/welcome.ac99c750806a.jpg',\n 'helloworld/img/welcome.ac99c750806a.jpg',\n\n // *** Relative reference ***\n // (Relative to the JavaScript file)\n\n // A leading dot (.) or dot-dot (..) path part in a virtual parent path indicates a relative reference\n 'welcome.ac99c750806a.jpg',\n 'img/welcome.ac99c750806a.jpg',\n 'helloworld/img/welcome.ac99c750806a.jpg'\n ];\n\nNotice that ``STATIC_URL`` **WILL NOT be prepended to the final URL**. You\nhave to pass the value of ``STATIC_URL`` to the browser, e.g. via Django\ntemplates in dynamic generated JavaScript code, and then manually concatenate the value and the URL path in JavaScript.\n\nCustomizing the tag name\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can also use a custom tag name in loud comments markup via the following\nsetting in Django settings module:\n\n.. code:: python\n\n SMARTSTATICFILES_CONFIG = {\n # ...\n # Tag name of loud comments used in JavaScript asset URLs replacement\n 'JS_ASSETS_REPL_TAG': 'hash-it',\n }\n\nThen the corresponding JavaScript code should be written as:\n\n.. code:: javascript\n\n var imageURL = /*! hash-it */ '../img/welcome.jpg' /*! endhash-it */;\n\nHints about minification\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf you use a customized JavaScript minification function, you should ensure\nthat loud comments (``/*! ... */``) are preserved after processing.\nOtherwise, JavaScript asset URLs replacement won't work. The default ``jsmin``\nlibrary takes care of that.\n\nSome JavaScript minification libraries (e.g. ``jsmin``) will deliberately\ninsert a newline at the end of each loud comment after minification. For\nexample, supposed that there is following code:\n\n.. code:: javascript\n\n var imageURL = /*! rev */ '../img/welcome.jpg' /*! endrev */;\n var mehFace = 'mehFace';\n\nIt would be minified as:\n\n.. code:: javascript\n\n var imageURL=/*! rev */\n '../img/welcome.jpg'/*! endrev */\n ;var mehFace='mehFace';\n\nThis is totally acceptable in most cases. However, it is still possible that\nit causes unexpected results in `some edge cases`_ or drives perfectionists\nnuts. You can tell **django-smartstaticfiles** to remove one trailing newline\n(if presents) from each replaced URL in JavaScript by setting\n``\"JS_ASSETS_REPL_TRAILING_FIX\"`` to ``True``. The final result after URLs\nreplacement would be:\n\n.. code:: javascript\n\n var imageURL='../img/welcome.ac99c750806a.jpg';var mehFace='mehFace';\n\n*(New in v0.3.0: the* ``JS_ASSETS_REPL_TRAILING_FIX`` *setting was added and defaults to* ``True`` *.)*\n\n*(New in v0.3.1: the* ``JS_ASSETS_REPL_TRAILING_FIX`` *setting was set to*\n``False`` *by default.)*\n\nConfigurations\n--------------\nAll configurations of **django-smartstaticfiles** are in the ``SMARTSTATICFILES_CONFIG`` property of\nDjango settings module, a dict containing configuration keys. All\nkeys are optional, which means you don't even need a ``SMARTSTATICFILES_CONFIG``\nproperty at all if the default values meet your needs.\n\nPossible keys and default values are listed below:\n\n.. code:: python\n\n SMARTSTATICFILES_CONFIG = {\n # Whether to enable JavaScript minification.\n 'JS_MIN_ENABLED': False,\n\n # Whether to enable CSS minification.\n 'CSS_MIN_ENABLED': False,\n\n # File patterns for matching JavaScript assets (in relative URL without\n # STATIC_URL prefix)\n 'JS_FILE_PATTERNS': ['*.js'],\n\n # File patterns for matching CSS assets (in relative URL without\n # STATIC_URL prefix)\n 'CSS_FILE_PATTERNS': ['*.css'],\n\n # Dotted string of the module path and the callable for JavaScript\n # minification. The callable should accept a single argument of a string\n # of the content of original JavaScript, and return a string of minified\n # content. (Notice that loud comments such as /*! ... */ must be preserved\n # in the result so as to make JavaScript asset URLs replacement work.)\n # The result will be cached and reused when possible.\n 'JS_MIN_FUNC': 'rjsmin.jsmin',\n\n # Extra keyword arguments which are sent to the callable for JavaScript\n # minification. They are sent after the argument of a string of the\n # content of original JavaScript. If no keyword arguments are sent, set it\n # to an empty dict ({}) or None.\n 'JS_MIN_FUNC_KWARGS': {\n 'keep_bang_comments': True,\n },\n\n # Dotted string of the module path and the callable for CSS\n # minification. The callable should accept a single argument of\n # string which contains the content of original CSS, and return a\n # string of minified content. The result will be cached and\n # reused when possible.\n 'CSS_MIN_FUNC': 'rcssmin.cssmin',\n\n # Extra keyword arguments which are sent to the callable for CSS\n # minification. They are sent after the argument of a string of the\n # content of original CSS. If no keyword arguments are sent, set it\n # to an empty dict ({}) or None.\n 'CSS_MIN_FUNC_KWARGS': {\n 'keep_bang_comments': True,\n },\n\n # A regular expression (case-sensitive by default) which is used to\n # search against assets (in relative URL without STATIC_URL prefix). The\n # mathced assets won't be minified. Set it to None to ignore no assets.\n # (Assets with .min.js or .min.css extensions are always ignored.)\n 'RE_IGNORE_MIN': None,\n\n # Whether to enable deletion of unhashed files.\n 'DELETE_UNHASHED_ENABLED': True,\n\n # Whether to enable deletion of intermediate hashed files.\n 'DELETE_INTERMEDIATE_ENABLED': True,\n\n # A regular expression (case-sensitive by default) which is used to\n # search against assets (in relative URL without STATIC_URL prefix). The\n # matched assets won't be hashed. Set it to None to ignore no assets.\n 'RE_IGNORE_HASHING': None,\n\n # Whether to enable JavaScript asset URLs replacement.\n 'JS_ASSETS_REPL_ENABLED': False,\n\n # Tag name of loud comments used in JavaScript asset URLs replacement.\n 'JS_ASSETS_REPL_TAG': 'rev',\n\n # Whether to remove one trailing newline (if presents) after each\n # replaced URL in JavaScript. This is effective only if \"JS_MIN_ENABLED\"\n # is set to True. This fixes the problems and annoyances caused by a\n # deliberately added newline at the end of each loud comment by certain\n # minification libraries (e.g. jsmin).\n 'JS_ASSETS_REPL_TRAILING_FIX': False,\n }\n\n\nExtensibility\n-------------\n\nThe ``SmartManifestStaticFilesStorage`` storage backend provided by **django-smartstaticfiles** inherits two parent\nclasses:\n\n.. code:: python\n\n class SmartManifestStaticFilesStorage(SmartManifestFilesMixin, StaticFilesStorage):\n pass\n\nThe main logic is implemented in ``SmartManifestFilesMixin``,\nwhich is similar to Django's ``ManifestStaticFilesStorage``:\n\n.. code:: python\n\n class ManifestStaticFilesStorage(ManifestFilesMixin, StaticFilesStorage):\n pass\n\nThe goal of this project is to make ``SmartManifestFilesMixin``\na drop-in replacement for ``ManifestFilesMixin``, without sacrificing\nfunctionalities or performance. So you can combine\n``SmartManifestFilesMixin`` with other storage class that is compatible with\n``ManifestFilesMixin``.\n\nFor example, django-s3-storage_ provides a storage backend which utilizes\nDjango's ``ManifestFilesMixin``:\n\n.. code:: python\n\n # django_s3_storage/storage.py\n from django.contrib.staticfiles.storage import ManifestFilesMixin\n\n # ...\n\n class ManifestStaticS3Storage(ManifestFilesMixin, StaticS3Storage):\n pass\n\nYou can make a similar but enhanced storage backend by replacing it with\n``SmartManifestFilesMixin``:\n\n.. code:: python\n\n from django_s3_storage.storage import StaticS3Storage\n from django_smartstaticfiles.storage import SmartManifestFilesMixin\n\n\n class SmartManifestStaticS3Storage(SmartManifestFilesMixin, StaticS3Storage):\n pass\n\nWhy Django 1.11.x only?\n-----------------------\n\nUntil version 1.11, Django shipped with a ``ManifestStaticFilesStorage`` storage\nbackend that had `a broken implementation`_. In other words, content changes in\nreferenced files (images, fonts, etc) aren't represented in hashes of\nreferencing files (CSS files, specifically). This breaks the foundation of\ncache-busting mechanism.\n\nThen, there are significant code changes in Django 1.11.x in order to fix the\nbehavior of the ``ManifestStaticFilesStorage`` storage backend. And it becomes\nimpractical to maintain compatibility of **django-smartstaticfiles** with older\nDjango code. Therefore, only Django 1.11.x is supported (the latest version at\nthe time of writing).\n\n\n.. |collectstatic| replace:: ``collectstatic``\n.. _collectstatic: https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#django-admin-collectstatic\n\n.. |STATICFILES_STORAGE| replace:: ``STATICFILES_STORAGE``\n.. _STATICFILES_STORAGE: https://docs.djangoproject.com/en/1.11/ref/settings/#std:setting-STATICFILES_STORAGE\n\n.. |ManifestStaticFilesStorage| replace:: ``ManifestStaticFilesStorage``\n.. _ManifestStaticFilesStorage: https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#manifeststaticfilesstorage\n\n.. |rjsmin| replace:: ``rjsmin``\n.. _rjsmin: https://github.com/ndparker/rjsmin\n\n.. |rcssmin| replace:: ``rcssmin``\n.. _rcssmin: https://github.com/ndparker/rcssmin\n\n.. _`some edge cases`: http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion-asi\n\n.. _django-s3-storage: https://github.com/etianen/django-s3-storage\n\n.. _a broken implementation: https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.max_post_process_passes\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://github.com/rockallite/django-smartstaticfiles", "keywords": "", "license": "BSD License", "maintainer": "", "maintainer_email": "", "name": "django-smartstaticfiles", "package_url": "https://pypi.org/project/django-smartstaticfiles/", "platform": "", "project_url": "https://pypi.org/project/django-smartstaticfiles/", "project_urls": { "Homepage": "https://github.com/rockallite/django-smartstaticfiles" }, "release_url": "https://pypi.org/project/django-smartstaticfiles/0.3.2/", "requires_dist": [ "Django (<1.12,>=1.11)", "rcssmin; extra == 'cssmin'", "rjsmin; extra == 'jsmin'" ], "requires_python": "", "summary": "Provides enhanced static files storage backend for Django 1.11", "version": "0.3.2" }, "last_serial": 3368575, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "5115be5de673b262548543b835fc680e", "sha256": "ad3bbc2b332a5a1be5820f1ad64c4d87d389a53b5f9ce77471e15ff5c45fddea" }, "downloads": -1, "filename": "django_smartstaticfiles-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5115be5de673b262548543b835fc680e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12767, "upload_time": "2017-05-10T17:14:01", "url": "https://files.pythonhosted.org/packages/cf/e0/0c295e3808ae72be668479d669824eaaa2b973c6b544a40d8899bb1808e2/django_smartstaticfiles-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "252de31a894e529ca9ccca9994f26fe3", "sha256": "421257c6255f040695e3f1ac4a8ea09986d93151ad697dbbefc7f55e1801343c" }, "downloads": -1, "filename": "django-smartstaticfiles-0.1.0.tar.gz", "has_sig": false, "md5_digest": "252de31a894e529ca9ccca9994f26fe3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9576, "upload_time": "2017-05-10T17:07:01", "url": "https://files.pythonhosted.org/packages/58/5a/2cf44053fffd2970c0fec455823356ad2b73be5b484040cec19246e4c4ec/django-smartstaticfiles-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "71df2f22193397f70342f3805b580434", "sha256": "2d9d68307ab30717f9768073bf154262137401c4941dd7134a000736295d7efd" }, "downloads": -1, "filename": "django_smartstaticfiles-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "71df2f22193397f70342f3805b580434", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16471, "upload_time": "2017-05-11T15:00:16", "url": "https://files.pythonhosted.org/packages/d5/ab/a4f25c90132b6c81b262ec393d2462115dc042d7c344c9bcdd86990df4ab/django_smartstaticfiles-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "795a54758527a53d43794f8ec704c68c", "sha256": "1ff62a8881c36c6012de447c099ef8e2a2c776272dc1db7111e11e3e81608785" }, "downloads": -1, "filename": "django-smartstaticfiles-0.2.0.tar.gz", "has_sig": false, "md5_digest": "795a54758527a53d43794f8ec704c68c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12980, "upload_time": "2017-05-11T15:00:18", "url": "https://files.pythonhosted.org/packages/00/55/dfd4a7172b13c167968756232e0209d29c0ff450e1059d30abebb7d7498b/django-smartstaticfiles-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "7926dd53f0ab5e8e687b7861fa08a441", "sha256": "509ade9c237ee2456d80f90459a2b0381a0c3d6ec6eceb2385f34e61464a99f5" }, "downloads": -1, "filename": "django_smartstaticfiles-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7926dd53f0ab5e8e687b7861fa08a441", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16650, "upload_time": "2017-08-25T15:17:59", "url": "https://files.pythonhosted.org/packages/06/ce/1547496f4e9ab6a31aad7837c817054f2ddfc78c822839d26ebfde90a799/django_smartstaticfiles-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "097af7361f5be23899c63b332ad9407f", "sha256": "032f46d8a9fba8f075ec5e04e5c7d6933b912c895e5d7372e11b17c357949df6" }, "downloads": -1, "filename": "django-smartstaticfiles-0.2.1.tar.gz", "has_sig": false, "md5_digest": "097af7361f5be23899c63b332ad9407f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13250, "upload_time": "2017-08-25T15:18:06", "url": "https://files.pythonhosted.org/packages/af/de/8e7e2e094d128138387381aa0a783b9a356e3f392ec51fda35bbb515f975/django-smartstaticfiles-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "70531d0540e43d746357bb5840b6c894", "sha256": "7fdfe0ec29d1b677f0b53e302889e52bac43ccf26213c2b2f2da22992e57b2e0" }, "downloads": -1, "filename": "django_smartstaticfiles-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "70531d0540e43d746357bb5840b6c894", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18142, "upload_time": "2017-05-12T11:13:25", "url": "https://files.pythonhosted.org/packages/ac/92/4dba20b769fd1cb8b983cddf35c31b7a54a36f1f1e9503ee503876fc4f1b/django_smartstaticfiles-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9002c499ec9b3c116154b5235c914cce", "sha256": "5dd9a5d9bd80c04cedfc87051638dbab76b88e4c5ff290fcbf06b6707e75ceb7" }, "downloads": -1, "filename": "django-smartstaticfiles-0.3.0.tar.gz", "has_sig": false, "md5_digest": "9002c499ec9b3c116154b5235c914cce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14436, "upload_time": "2017-05-12T11:13:29", "url": "https://files.pythonhosted.org/packages/dd/1c/073aa38a014f3e2c4da3a15e32b4bf538b2cfa79909d8a247dbe3d8bb190/django-smartstaticfiles-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "5b8cb496ca573d3399896ec7f38a668c", "sha256": "a3d6cef20763d736d4608a2297a464b9e0c66bf4ec68a46aacdfc647efa64b5a" }, "downloads": -1, "filename": "django_smartstaticfiles-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5b8cb496ca573d3399896ec7f38a668c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18452, "upload_time": "2017-08-25T14:48:48", "url": "https://files.pythonhosted.org/packages/46/13/fe4b8199cd3ad5104cd82faf90a51be32198c2862a47efd53d252d25c6c4/django_smartstaticfiles-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "623577bf535d8d7e2e7489ed7aaef564", "sha256": "90e6a86f88e63c7abcf6aba4d50b6aa15bae27c74f4d441dd625484fdd1acf9b" }, "downloads": -1, "filename": "django-smartstaticfiles-0.3.1.tar.gz", "has_sig": false, "md5_digest": "623577bf535d8d7e2e7489ed7aaef564", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14872, "upload_time": "2017-08-25T15:18:10", "url": "https://files.pythonhosted.org/packages/ea/67/1cf9e230604e1ca6c292c344bb911072607bde318424008080c909d0d933/django-smartstaticfiles-0.3.1.tar.gz" } ], "0.3.1.post1": [ { "comment_text": "", "digests": { "md5": "8fdeb8a311584f45192a28d999f41554", "sha256": "a2f4b33a4c91ab28fe57c3fb73a8565cbd52cde387518049ec4c1a7c32517f49" }, "downloads": -1, "filename": "django_smartstaticfiles-0.3.1.post1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8fdeb8a311584f45192a28d999f41554", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18520, "upload_time": "2017-08-25T15:18:04", "url": "https://files.pythonhosted.org/packages/29/21/bdd33f631d268960e244915e8c3949e6ea7b8c61edb928d4139828cd150e/django_smartstaticfiles-0.3.1.post1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc7f04e93f0aabae92ceb3559f878953", "sha256": "6d35c3b251bfdbb1fb0523f9750c37af76c54d848f4e6f586692b73200aa06e9" }, "downloads": -1, "filename": "django-smartstaticfiles-0.3.1.post1.tar.gz", "has_sig": false, "md5_digest": "fc7f04e93f0aabae92ceb3559f878953", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14881, "upload_time": "2017-08-25T15:18:07", "url": "https://files.pythonhosted.org/packages/33/61/3a2dc3ec25cfa50f3fa4d028b736cbabfb014cfb3f5c9fd39e5e148c063d/django-smartstaticfiles-0.3.1.post1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "2d7315023dcb185407946b1432d6aa42", "sha256": "d8146f62b485f8eb505691f21d160d7ecb7e5040a5d485eed4d4c89207818a41" }, "downloads": -1, "filename": "django_smartstaticfiles-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2d7315023dcb185407946b1432d6aa42", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18446, "upload_time": "2017-11-27T17:19:54", "url": "https://files.pythonhosted.org/packages/59/91/9f5c24eb596c332d44ac1758d15515c545a32dc1137443460dbae7a3acb9/django_smartstaticfiles-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a33ff486e64675507942ae386a54b3d4", "sha256": "5a537c4521d08351b396395f6cb6b2c1dfce61ca6132a02b203984d50a18f914" }, "downloads": -1, "filename": "django-smartstaticfiles-0.3.2.tar.gz", "has_sig": false, "md5_digest": "a33ff486e64675507942ae386a54b3d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14930, "upload_time": "2017-11-27T17:19:56", "url": "https://files.pythonhosted.org/packages/e2/a9/41bc40903f50d156afe24aa09d2e5dff9c803afb2e64a48cc55b3cd4e269/django-smartstaticfiles-0.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2d7315023dcb185407946b1432d6aa42", "sha256": "d8146f62b485f8eb505691f21d160d7ecb7e5040a5d485eed4d4c89207818a41" }, "downloads": -1, "filename": "django_smartstaticfiles-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2d7315023dcb185407946b1432d6aa42", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18446, "upload_time": "2017-11-27T17:19:54", "url": "https://files.pythonhosted.org/packages/59/91/9f5c24eb596c332d44ac1758d15515c545a32dc1137443460dbae7a3acb9/django_smartstaticfiles-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a33ff486e64675507942ae386a54b3d4", "sha256": "5a537c4521d08351b396395f6cb6b2c1dfce61ca6132a02b203984d50a18f914" }, "downloads": -1, "filename": "django-smartstaticfiles-0.3.2.tar.gz", "has_sig": false, "md5_digest": "a33ff486e64675507942ae386a54b3d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14930, "upload_time": "2017-11-27T17:19:56", "url": "https://files.pythonhosted.org/packages/e2/a9/41bc40903f50d156afe24aa09d2e5dff9c803afb2e64a48cc55b3cd4e269/django-smartstaticfiles-0.3.2.tar.gz" } ] }