{ "info": { "author": "Thorgate", "author_email": "code@thorgate.eu", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: ISC License (ISCL)", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "===============================\ntg-utils\n===============================\n\n.. image:: https://img.shields.io/pypi/v/tg-utils.svg\n :target: https://pypi.python.org/pypi/tg-utils\n\n.. image:: https://travis-ci.org/thorgate/tg-utils.svg?branch=master\n :target: https://travis-ci.org/thorgate/tg-utils\n\n.. image:: https://readthedocs.org/projects/tg-utils/badge/?version=latest\n :target: https://readthedocs.org/projects/tg-utils/?badge=latest\n :alt: Documentation Status\n\n\nCollection of various utils for Django-based projects.\n\nThis is code that we're using in our projects at Thorgate and we're hoping you'll find some of it useful as well.\n\n* Free software: ISC license\n* Documentation: https://tg-utils.readthedocs.org.\n\n\nFeatures\n--------\n\n* Model utils, e.g. timestamped and closable models, QuerySets that send out a signal when objects are modified.\n* Templated email sending.\n* Profiling utilities.\n* Unique filename generation for uploads.\n* Using hashids for models (instead of exposing primary keys).\n* System checks for email and Sentry configuration.\n* Mixin for easier implementation of ordering in Django's generic ListView.\n* JS/CSS compressors for `Django Compressor `_.\n* Health-check endpoints (with and without token authentication)\n\n\nCredits\n---------\n\nThis package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.\n\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage\n\n\n=======\nHistory\n=======\n\n0.7.3 (2019-09-10)\n------------------\n\n* Make celery beat health-check error message more comprehensive\n\n\n0.7.2 (2019-07-25)\n------------------\n\n* Bugfix: Prevent celery beat health-check from false-failing initially. Thanks @iharthi\n\n\n0.7.1 (2019-06-03)\n------------------\n\n* Add extra require for `hashids`.\n* Fix usage of deprecated from `hashids`.\n\n\n0.7.0 (2019-05-13)\n------------------\n\n* Updated dependencies to support Django LTS correctly.\n\n\n0.6.1 (2019-03-17)\n------------------\n\n* Added health-check for celery and celery beat. Thanks @iharthi\n\n0.6.0 (2019-03-21)\n------------------\n\n* Added health-check helpers. Thanks @iharthi\n\n0.5.0 (2019-02-07)\n------------------\n\n* Added locking decorator. Thanks @iharthi\n\n0.4.0 (2019-02-07)\n------------------\n\n* Supported Django and Python versions are listed below\n\n=============== ==================\nDjango version Python versions\n--------------- ------------------\nDjango 1.8 3.4, 3.5, 3.6\nDjango 1.11 3.4, 3.5, 3.6\nDjango 2.0 3.4, 3.5, 3.6, 3.7\nDjango 2.1 3.5, 3.6, 3.7\n=============== ==================\n\n\n0.3.0 (2018-03-12)\n------------------\n\n* Supported Django versions are now 1.8, 1.11, and 2.0.\n `ClosableModel.created_by` and `closed_by` now have `on_delete=models.SET_NULL` attribute.\n* Supported Python versions are now 3.4, 3.5, and 3.6.\n\n\n0.2.0 (2016-01-27)\n------------------\n\n* Rename `tg_utils.yuglify` module to `tg_utils.compressor_filters` and\n added new filters for using UglifyJS 2 and clean-css.\n* Added docs for `tg_utils.compressor_filters` module.\n\n\n0.1.1 (2016-01-11)\n------------------\n\n* First release on PyPI.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/thorgate/tg-utils", "keywords": "tg-utils tg_utils", "license": "ISCL", "maintainer": "", "maintainer_email": "", "name": "tg-utils", "package_url": "https://pypi.org/project/tg-utils/", "platform": "", "project_url": "https://pypi.org/project/tg-utils/", "project_urls": { "Homepage": "https://github.com/thorgate/tg-utils" }, "release_url": "https://pypi.org/project/tg-utils/0.7.3/", "requires_dist": [ "django (!=2.1.0,!=2.1.1,!=2.1.2,!=2.1.3,!=2.1.4,!=2.1.5,<3.0,>=1.8)", "django-health-check (<4.0.0,>=3.9.0) ; extra == 'health_check'", "psutil (<6.0.0,>=5.6.0) ; extra == 'health_check'", "requests (<3.0.0,>=2.18.4) ; extra == 'health_check'", "redis (>=2.10.0) ; extra == 'lock'", "python-redis-lock (<4.0.0,>=3.2.0) ; extra == 'lock'", "hashids (>=1.2<2) ; extra == 'model-hash'" ], "requires_python": "", "summary": "Common utils for Django-based projects.", "version": "0.7.3" }, "last_serial": 5808276, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "8cada9d255984d3f402b1c3605e3a56b", "sha256": "7df908550d2a6205735a6ffa39ebb5b2c03e050ae658cc9a1d0cdd1825fdb4a8" }, "downloads": -1, "filename": "tg_utils-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8cada9d255984d3f402b1c3605e3a56b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9719, "upload_time": "2016-01-11T16:39:33", "url": "https://files.pythonhosted.org/packages/8b/0b/bd49898031418d9edc99843028b048186292670755fd39997204e8637871/tg_utils-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "39327448c5c75ace2aabf7f61945aad0", "sha256": "f806064ecb5b281eee50c26b9f29a6182b377851264438bc1cafe2d3dd4db296" }, "downloads": -1, "filename": "tg-utils-0.1.1.tar.gz", "has_sig": false, "md5_digest": "39327448c5c75ace2aabf7f61945aad0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15531, "upload_time": "2016-01-11T16:39:38", "url": "https://files.pythonhosted.org/packages/84/dd/cfe6e15b013c6f9a37ccc2af7d563de103835334663e37a1a1e846b56ab1/tg-utils-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ac0366eefbedf392c795b021ce21fc75", "sha256": "802db6d2cefe307dc7f76d87662b7ad18792f9f695d5cb61ae08f73ce080c7b8" }, "downloads": -1, "filename": "tg_utils-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ac0366eefbedf392c795b021ce21fc75", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10418, "upload_time": "2016-01-27T08:54:28", "url": "https://files.pythonhosted.org/packages/72/c4/fb1a65a6083602e3810f6b1d9e7379b68d51ad2c8d9a67ce4e60db92d701/tg_utils-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b7df0f71aa727fb340299aa4008e803", "sha256": "6d019896a484d77b15d85295ea5cf6fef3c806c2177d846188a0d48a304ddf14" }, "downloads": -1, "filename": "tg-utils-0.2.0.tar.gz", "has_sig": false, "md5_digest": "2b7df0f71aa727fb340299aa4008e803", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16489, "upload_time": "2016-01-27T08:54:37", "url": "https://files.pythonhosted.org/packages/58/27/f89e61a361406c61e0f09f75f71d47ada5a6cfe7a6ac35b35ec7f6ca4b41/tg-utils-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "855c2a3c1024099173c53815ced8ecee", "sha256": "f9cb98472012099c6d4fbb9d2defc2621150c9033dd140b64205eaacbdd2cd40" }, "downloads": -1, "filename": "tg_utils-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "855c2a3c1024099173c53815ced8ecee", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10702, "upload_time": "2018-03-12T11:03:19", "url": "https://files.pythonhosted.org/packages/36/12/fdfbb1348b7580bd94ff8544c18bfce86a0310e2ff4c024e4f83038ecf8f/tg_utils-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b230c49b3dcfdcf91a48ce9849ac023b", "sha256": "20314ffaee735f5eac1fbdf4f1c13ae74c2a93a936aa5dd0a145ef9972ebcb0a" }, "downloads": -1, "filename": "tg-utils-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b230c49b3dcfdcf91a48ce9849ac023b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15760, "upload_time": "2018-03-12T11:03:20", "url": "https://files.pythonhosted.org/packages/62/f4/f0bf1651f4033a1cd3cc4a54fdc739be799daa734ed57eecf01a42232013/tg-utils-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "5ce1a4a8f8fb3242ba4f87af6f2d4e95", "sha256": "af6faa2e3a8934920df5bd46e2ff3ffabb5ccae1cea30ac2b129df3421f88354" }, "downloads": -1, "filename": "tg_utils-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ce1a4a8f8fb3242ba4f87af6f2d4e95", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12400, "upload_time": "2019-02-07T15:24:12", "url": "https://files.pythonhosted.org/packages/06/b5/273fd06cfa634be63dab9152cf484489221d6f07a01c31fee5688ee0f505/tg_utils-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6e2bae64480d31d1c71c260545116587", "sha256": "8d3e1e7e0f5defe78d500594d08dd61f47805e0f71c7a0848738753ef23d4c08" }, "downloads": -1, "filename": "tg-utils-0.4.0.tar.gz", "has_sig": false, "md5_digest": "6e2bae64480d31d1c71c260545116587", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18107, "upload_time": "2019-02-07T15:24:14", "url": "https://files.pythonhosted.org/packages/23/ed/f034bd2a081851d50bbe4dc4b66a145efc9bc24ab68f12a8cd10fdbcdd1a/tg-utils-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "4c50d98f441772289c7fdcbe6e4061ff", "sha256": "da74ebd681015b4ef37759264dffe0c5f69821edc3fc0211426ce2aeba162ed4" }, "downloads": -1, "filename": "tg_utils-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4c50d98f441772289c7fdcbe6e4061ff", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14080, "upload_time": "2019-03-18T14:31:33", "url": "https://files.pythonhosted.org/packages/85/36/651d0cba837fa65142736e21c1f57ba67a18aa8bc6dff36d0c778cc6a5a2/tg_utils-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "98c7ffe97447bce7f8848ff6fa374b93", "sha256": "3a1f18059e33bcb70b5e2ab1c0dd963ec9ef2684ccc22bd4332c7f014f2d12ae" }, "downloads": -1, "filename": "tg-utils-0.5.0.tar.gz", "has_sig": false, "md5_digest": "98c7ffe97447bce7f8848ff6fa374b93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19565, "upload_time": "2019-03-18T14:31:34", "url": "https://files.pythonhosted.org/packages/5c/35/1d1a795c99d07792eb8ed69e161e16e217e80fe1d8f948bb74bb3a9f386d/tg-utils-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "c02222659d0a8c5d44015d5be42f267f", "sha256": "42490f805177aa6bda22af9580c0595428701795227efd555bfe89cb68e1ce14" }, "downloads": -1, "filename": "tg_utils-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c02222659d0a8c5d44015d5be42f267f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19381, "upload_time": "2019-03-21T12:57:44", "url": "https://files.pythonhosted.org/packages/16/cd/83880fd2d3cb01578b7daacf1f900387c4687d219bdb419e672402336dab/tg_utils-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f8348b5f094db274afb1b93004839e66", "sha256": "d0b8e1c65bfe09f17c4dbdc58734d85b3c491e549b5d501a13620024005f11da" }, "downloads": -1, "filename": "tg-utils-0.6.0.tar.gz", "has_sig": false, "md5_digest": "f8348b5f094db274afb1b93004839e66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22755, "upload_time": "2019-03-21T12:57:46", "url": "https://files.pythonhosted.org/packages/51/b8/7f4099e74b0a3beed65d7b68620ca5786e53efc56d44e96b4f7fb6670d62/tg-utils-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "4ffb79cc706d565d232885cfa01af8e6", "sha256": "f21c10c0c8e9cf1ac1dfae5b61f42822de58f60eb28587dbb1b2dc89a18685e9" }, "downloads": -1, "filename": "tg_utils-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4ffb79cc706d565d232885cfa01af8e6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21500, "upload_time": "2019-04-17T08:54:13", "url": "https://files.pythonhosted.org/packages/a6/a3/4aa8eb939a035afcbba3f65c9a8ff1a221d8cf0c06a50d73db7528f30686/tg_utils-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9ba2ebc3f716f94cb41b47a8f28568b2", "sha256": "b83d133de0b97cce79dd81be2b3cb5a2dc45a0c7b2ed0c3ff2145673f255ea73" }, "downloads": -1, "filename": "tg-utils-0.6.1.tar.gz", "has_sig": false, "md5_digest": "9ba2ebc3f716f94cb41b47a8f28568b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23751, "upload_time": "2019-04-17T08:54:15", "url": "https://files.pythonhosted.org/packages/a5/f1/363e2066dee4d26c5190017a2f7a515431af01abd6bcf6c6867faea83b18/tg-utils-0.6.1.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "e7cdf4631ceee2044efc15dba833b2bc", "sha256": "112e0447d4af25cb6d55ce1d9d11db9b994bd15c1d9d3cb49b83325720587ce4" }, "downloads": -1, "filename": "tg_utils-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e7cdf4631ceee2044efc15dba833b2bc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21599, "upload_time": "2019-05-13T10:27:33", "url": "https://files.pythonhosted.org/packages/b3/5d/e50bef61d0d6c85dfee9610de2f7eba4863585d5c6522867e3262f46b991/tg_utils-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "44b142b5d6e0fc48188867abcd856290", "sha256": "64b75b4d6a89fcea90401070ccdd74ba71c62f1f212fcf60fb30201cf86358b1" }, "downloads": -1, "filename": "tg-utils-0.7.0.tar.gz", "has_sig": false, "md5_digest": "44b142b5d6e0fc48188867abcd856290", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23870, "upload_time": "2019-05-13T10:27:34", "url": "https://files.pythonhosted.org/packages/64/ba/0bcdb2aa8df6761e01aee612f49822fd47e4ece7c36ae5cc8b45401ed282/tg-utils-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "2320fc8d23f7df25246847e78478fbee", "sha256": "9b7748d3ed80b382905aa31fe3ce033b116ba3126ee3969c9daf0f791c35b0dc" }, "downloads": -1, "filename": "tg_utils-0.7.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2320fc8d23f7df25246847e78478fbee", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21709, "upload_time": "2019-06-03T10:04:12", "url": "https://files.pythonhosted.org/packages/92/2b/846a4f48a67931b985d171e3db177a61ae88e490e313204012579dca1c14/tg_utils-0.7.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "131afa21f98b9a1daeb82b7969d067bd", "sha256": "f1331bb21d66fe523f91a1e4b22bec1d80938eca5f35c48e8665a7a73cd27873" }, "downloads": -1, "filename": "tg-utils-0.7.1.tar.gz", "has_sig": false, "md5_digest": "131afa21f98b9a1daeb82b7969d067bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24016, "upload_time": "2019-06-03T10:04:14", "url": "https://files.pythonhosted.org/packages/e4/4b/768ef64fda7bf81ed4969144c5c1efbe39573dee99b38db963336eae8210/tg-utils-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "782c004dbbd7a4ee04a69085dbf60364", "sha256": "b3f97668c023449f71cb7dc0f1c74c488bacc2002b36cbef2f427e3de6259d25" }, "downloads": -1, "filename": "tg_utils-0.7.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "782c004dbbd7a4ee04a69085dbf60364", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21819, "upload_time": "2019-07-25T13:25:43", "url": "https://files.pythonhosted.org/packages/25/a5/605d64a5b78ce99db1482bb43d98c9e0312b3d1c7fa66b2be7e3714222ea/tg_utils-0.7.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "81bc91b3385053ed7be65e4a5f4a34cc", "sha256": "2accb34fa669e95c24e967e5499bae856fe20d9da99e1653f2dc55166c83f119" }, "downloads": -1, "filename": "tg-utils-0.7.2.tar.gz", "has_sig": false, "md5_digest": "81bc91b3385053ed7be65e4a5f4a34cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24135, "upload_time": "2019-07-25T13:25:44", "url": "https://files.pythonhosted.org/packages/b0/76/d1eee8dedb39978dc0b2e54a8ba6d453c5c1200a6b6c059e682f733f082c/tg-utils-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "1e3c3e0294f9f3f81f17efe9b4ec1d36", "sha256": "2a96e1fb50c35e1f79a7f5e2665723d2aedd8ff44c30f35e84ab7822cd7cc4f0" }, "downloads": -1, "filename": "tg_utils-0.7.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e3c3e0294f9f3f81f17efe9b4ec1d36", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21891, "upload_time": "2019-09-10T10:52:03", "url": "https://files.pythonhosted.org/packages/a8/04/cd5cd1fa9cf3c4f9aa99ea655d0e2c57f870e81e73ee396b185b4ab06d1e/tg_utils-0.7.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f799a22306ac2d84b10a9638b50364a", "sha256": "e5798efb776677fe23ec86cd80d2f4436c1316ab68001ffc1d984d9c71611752" }, "downloads": -1, "filename": "tg-utils-0.7.3.tar.gz", "has_sig": false, "md5_digest": "9f799a22306ac2d84b10a9638b50364a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24202, "upload_time": "2019-09-10T10:52:04", "url": "https://files.pythonhosted.org/packages/f1/56/f398ab59ae366abcd5e04f70371665628a75c2dc941d83309fcfd7024b39/tg-utils-0.7.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1e3c3e0294f9f3f81f17efe9b4ec1d36", "sha256": "2a96e1fb50c35e1f79a7f5e2665723d2aedd8ff44c30f35e84ab7822cd7cc4f0" }, "downloads": -1, "filename": "tg_utils-0.7.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e3c3e0294f9f3f81f17efe9b4ec1d36", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21891, "upload_time": "2019-09-10T10:52:03", "url": "https://files.pythonhosted.org/packages/a8/04/cd5cd1fa9cf3c4f9aa99ea655d0e2c57f870e81e73ee396b185b4ab06d1e/tg_utils-0.7.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f799a22306ac2d84b10a9638b50364a", "sha256": "e5798efb776677fe23ec86cd80d2f4436c1316ab68001ffc1d984d9c71611752" }, "downloads": -1, "filename": "tg-utils-0.7.3.tar.gz", "has_sig": false, "md5_digest": "9f799a22306ac2d84b10a9638b50364a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24202, "upload_time": "2019-09-10T10:52:04", "url": "https://files.pythonhosted.org/packages/f1/56/f398ab59ae366abcd5e04f70371665628a75c2dc941d83309fcfd7024b39/tg-utils-0.7.3.tar.gz" } ] }