{ "info": { "author": "Gilles Fabio", "author_email": "gilles.fabio@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT 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", "Topic :: Utilities" ], "description": "django-badgify\n==============\n\nThis Django application will help you to create your own badge system on your website.\n\nIt has been used on `Ulule `_ to create our own `badge mechanism `_.\n\n.. image:: https://secure.travis-ci.org/ulule/django-badgify.png?branch=master\n :alt: Build Status\n :target: http://travis-ci.org/ulule/django-badgify\n\nInstallation\n------------\n\n.. code-block:: bash\n\n $ pip install django-badgify\n\nUsage\n-----\n\nAdd ``badgify`` to your ``INSTALLED_APPS`` in ``settings.py``:\n\n.. code-block:: python\n\n INSTALLED_APPS = (\n # ...\n 'badgify',\n )\n\nSynchronize the database:\n\n.. code-block:: bash\n\n $ python manage.py migrate badgify\n\nCreate a ``badgify_recipes.py`` file in your Django application:\n\n.. code-block:: bash\n\n $ cd path/to/your/django/app\n $ touch badgify_recipes.py\n\nOpen this file and import `badgify.recipe.BaseRecipe` class and `badgify` module:\n\n.. code-block:: python\n\n from badgify.recipe import BaseRecipe\n import badgify\n\nCreate and register your recipe classes:\n\n.. code-block:: python\n\n class PythonLoverRecipe(BaseRecipe):\n pass\n\n\n class JSLoverRecipe(BaseRecipe):\n pass\n\n\n # Per class\n badgify.register(PythonLoverRecipe)\n badgify.register(JSLoverRecipe)\n\n # All at once in a list\n badgify.register([PythonLoverRecipe, JSLoverRecipe])\n\nA recipe class must implement:\n\n* ``name`` class attribute\n The badge name (humanized).\n\n* ``image`` property\n The badge image/logo as a file object.\n\nA recipe class may implement:\n\n* ``slug`` class attribute\n The badge slug (used internally and in URLs).\n If not provided, it will be auto-generated based on the badge name.\n\n* ``description`` class attribute\n The badge description (short).\n It not provided, value will be blank.\n\n* ``user_ids`` property\n ``QuerySet`` returning User IDs likely to be awarded. You must return a\n ``QuerySet`` and not just a Python list or tuple. You can use\n ``values_list('id', flat=True)``.\n\n* ``db_read`` class attribute\n The database alias on which to perform read queries.\n Defaults to ``django.db.DEFAULT_DB_ALIAS``.\n\n* ``batch_size`` class attribute\n How many ``Award`` objects to create at once.\n Defaults to ``BADGIFY_BATCH_SIZE`` (``500``).\n\nExample:\n\n.. code-block:: python\n\n from django.contrib.staticfiles.storage import staticfiles_storage\n\n from badgify.recipe import BaseRecipe\n import badgify\n\n from .models import MyCustomUser\n\n\n class PythonLoverRecipe(BaseRecipe):\n \"\"\"\n People loving Python.\n \"\"\"\n name = 'Python Lover'\n slug = 'python-lover'\n description = 'People loving Python programming language'\n\n @property\n def image(self):\n return staticfiles_storage.open('python-lover.png')\n\n @property\n def user_ids(self):\n return (MyCustomUser.objects.filter(love_python=True)\n .values_list('id', flat=True))\n\n\n class JSLoverRecipe(BaseRecipe):\n \"\"\"\n People loving JS.\n \"\"\"\n name = 'JS Lover'\n slug = 'js-lover'\n description = 'People loving JS programming language'\n\n @property\n def image(self):\n return staticfiles_storage.open('js-lover.png')\n\n @property\n def user_ids(self):\n return (MyCustomUser.objects.filter(love_js=True)\n .values_list('id', flat=True))\n\n\n class JavaLoverRecipe(BaseRecipe):\n \"\"\"\n People loving Java.\n \"\"\"\n name = 'Java Lover'\n slug = 'java-lover'\n description = 'People loving Java programming language'\n\n @property\n def image(self):\n return staticfiles_storage.open('java-lover.png')\n\n\n badgify.register([\n PythonLoverRecipe,\n JSLoverRecipe,\n JavaLoverRecipe,\n ])\n\nOnce you have implemented and registered your recipe classes, you can invoke\navailable commands bellow:\n\n.. code-block:: bash\n\n # Create badges from recipes\n $ python manage.py badgify_sync badges\n\n # Update badges from recipes\n $ python manage.py badgify_sync badges --update\n\n # Create awards\n $ python manage.py badgify_sync awards\n\n # Create awards bypassing signals (improve performances)\n $ python manage.py badgify_sync awards --disable-signals\n\n # Only create awards for \"python\" badge\n $ python manage.py badgify_sync awards --badges python\n\n # Only create awards for \"python\" and \"go\" badges\n $ python manage.py badgify_sync awards --badges \"python go\"\n\n # Create awards for all badges, except \"php\"\n $ python manage.py badgify_sync awards --exclude-badges php\n\n # Create awards for all badges, except \"php\" and \"java\"\n $ python manage.py badgify_sync awards --exclude-badges \"php java\"\n\n # Denormalize Badge.users.count() into Badge.users_count field\n $ python manage.py badgify_sync counts\n\n # Only denormalize counts for \"python\" badge\n $ python manage.py badgify_sync counts --badges python\n\n # Denormalize counts for all badges, except \"php\"\n $ python manage.py badgify_sync counts --exclude-badges php\n\n # Denormalize counts for all badges, except \"php\" and \"java\"\n $ python manage.py badgify_sync counts --exclude-badges \"php java\"\n\n # Typical workflow for best performances\n $ python manage.py badgify_sync badges\n $ python manage.py badgify_sync awards --disable-signals\n $ python manage.py badgify_sync counts\n\n # WARNING: if you delete awards to start again with a fresh table\n # don't forget to update Badge.users_count field. Or use this command:\n $ python manage.py badgify_reset\n\n # Typical workflow for best performances if you want to recompute awards\n $ python manage.py badgify_reset\n $ python manage.py badgify_sync awards --disable-signals\n $ python manage.py badgify_sync counts\n\nTemplatetags\n------------\n\nbadgify_badges\n..............\n\nTakes two optional arguments:\n\n* ``user``: a ``User`` object\n* ``username``: a ``User`` username\n\nWithout any argument, displays all badges. Otherwise, badges awarded by the given user.\n\n.. code-block:: html+django\n\n {% load badgify_tags %}\n\n {% badgify_badges as badges %}\n {% badgify_badges username=\"johndoe\" as badges %}\n {% badgify_badges user=user as badges %}\n\n {% for badge in badges %}\n {{ badge.name }}\n {% endfor %}\n\nViews\n-----\n\n**django-badgify** provides two views:\n\n* ``badgify.views.BadgifyListView``: displays all badges as paginated list\n* ``badgify.views.BadgifyDetailView``: displays awarded users as paginated list for a given badge\n\nThis application does not include templates. It lets you implement\ntemplates as you like (see example project).\n\nTo include these two views, include the provided ``badgify.urls``:\n\n.. code-block:: python\n\n # -*- coding: utf-8 -*-\n from django.conf.urls import include, url\n\n urlpatterns = [\n # Your other includes\n url(r'^badges/', include('badgify.urls')),\n ]\n\nSee example project for more details.\n\nCustom Models\n-------------\n\n**django-badgify** lets you define your own model classes for ``Badge`` and ``Award``\nmodels. That can be pretty useful for i18n stuff\n(example: `django-transmetta `_ support),\nadding custom fields, methods or properties.\n\nYour models must inherit from ``badgify.models.base`` model classes:\n\n.. code-block:: python\n\n # yourapp.models\n\n from badgify.models import base\n\n\n class Badge(base.Badge):\n # you own fields / logic here\n class Meta(base.Badge.Meta):\n abstract = False\n\n\n class Award(base.Award):\n # you own fields / logic here\n class Meta(base.Award.Meta):\n abstract = False\n\n\nThen tell the application to use them in place of default ones in your ``settings.py`` module:\n\n.. code-block:: python\n\n # yourapp.settings\n\n BADGIFY_BADGE_MODEL = 'yourapp.models.Badge'\n BADGIFY_AWARD_MODEL = 'yourapp.models.Award'\n\nSettings\n--------\n\nYou can altere the application behavior by defining settings in your ``settings.py``\nmodule.\n\nAll application settings are prefixed with ``BADGIFY_``.\n\n``BADGIFY_BADGE_IMAGE_UPLOAD_ROOT``\n...................................\n\nThe root path for ``Badge`` model ``ImageField``.\n\n``BADGIFY_BADGE_IMAGE_UPLOAD_URL``\n..................................\n\nThe URL ``Badge`` model ``ImageField``.\n\n``BADGIFY_BADGE_IMAGE_UPLOAD_STORAGE``\n......................................\n\nYour own ``django.core.files.storage`` storage instance.\n\n``BADGIFY_BADGE_LIST_VIEW_PAGINATE_BY``\n.......................................\n\nNumber of badges to display on the badge list page.\n\n``BADGIFY_BADGE_DETAIL_VIEW_PAGINATE_BY``\n.........................................\n\nNumber of awarded users to display on the badge detail page.\n\n``BADGIFY_BADGE_MODEL``\n.......................\n\nYour own concrete ``Badge`` model class as module path.\n\nExample: ``yourapp.models.Badge``.\n\n``BADGIFY_AWARD_MODEL``\n.......................\n\nYour own concrete ``Award`` model class as module path.\n\nExample: ``yourapp.models.Award``.\n\n``BADGIFY_BATCH_SIZE``\n......................\n\nMaximum number of ``Award`` objects to create at once.\n\nDefaults to ``500``.\n\nContribute\n----------\n\n.. code-block:: bash\n\n # Don't have pip?\n $ sudo easy_install pip\n\n # Don't already have virtualenv?\n $ sudo pip install virtualenv\n\n # Clone and install dependencies\n $ git clone https://github.com/ulule/django-badgify.git\n $ cd django-badgify\n $ make install\n\n # Launch tests\n $ make test\n\n # Launch example project\n $ make create_fixtures\n $ make serve\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/ulule/django-badgify", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "django-badgify", "package_url": "https://pypi.org/project/django-badgify/", "platform": "", "project_url": "https://pypi.org/project/django-badgify/", "project_urls": { "Homepage": "http://github.com/ulule/django-badgify" }, "release_url": "https://pypi.org/project/django-badgify/0.3.0/", "requires_dist": null, "requires_python": "", "summary": "A reusable application to create your own badge engine using Django", "version": "0.3.0" }, "last_serial": 5444592, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "0d6ccb06a3b162b6abb4996f72099eed", "sha256": "bd267662b637e1db1ac50caf8553d8f2168037f36d402b445f0839fbab9de87a" }, "downloads": -1, "filename": "django-badgify-0.1.0.tar.gz", "has_sig": true, "md5_digest": "0d6ccb06a3b162b6abb4996f72099eed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24861, "upload_time": "2014-12-10T09:48:12", "url": "https://files.pythonhosted.org/packages/d5/ec/123e5a88da27310dcb14ed0fbf5f06d94cd8f6d93ee1f7a5abfa09b20a8b/django-badgify-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "095ec6582cc3c84c9cf0f098a2e0d94b", "sha256": "476a354c96396b5123355abfd636bd80324bd468c8cf46c85adfe8a2932abcd0" }, "downloads": -1, "filename": "django-badgify-0.1.1.tar.gz", "has_sig": true, "md5_digest": "095ec6582cc3c84c9cf0f098a2e0d94b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24379, "upload_time": "2014-12-10T13:47:19", "url": "https://files.pythonhosted.org/packages/6c/9c/e3297e418f18f3686e1f263dba8b0fbf14ae2b332d9f7d17d7659cbbd7fd/django-badgify-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "e16b64bfb28081f153e1b65dfa3eb1f9", "sha256": "35fbfe5942e9d002a3229ca4d740ca176ad7dd0c39c7d749d8f3d0c917b74c86" }, "downloads": -1, "filename": "django-badgify-0.1.2.tar.gz", "has_sig": true, "md5_digest": "e16b64bfb28081f153e1b65dfa3eb1f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24555, "upload_time": "2014-12-10T15:57:13", "url": "https://files.pythonhosted.org/packages/ce/a9/4af59f6e28a136c345484347b1700d51ff25e6a6959eb28ad8235cfbc495/django-badgify-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "d9b2eaf96bcc4586648bedc4dc02fdf1", "sha256": "b6d45d3a2afce9c9c287aa6fbff32c82ccf7dc5aeec40e2619628b4e9e470d54" }, "downloads": -1, "filename": "django-badgify-0.1.3.tar.gz", "has_sig": true, "md5_digest": "d9b2eaf96bcc4586648bedc4dc02fdf1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24662, "upload_time": "2014-12-15T08:42:32", "url": "https://files.pythonhosted.org/packages/f0/04/754cb09ec5f5d4a35ca81c1132793437e64fcb2dc79202e58c1ffd90713d/django-badgify-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "90453021286ce73ed66b673cc5056234", "sha256": "d19f8b7b0aa19cd39d7d0b7ac885b74cfac0cd512cad04dafa45acd6b69d9334" }, "downloads": -1, "filename": "django-badgify-0.1.4.tar.gz", "has_sig": true, "md5_digest": "90453021286ce73ed66b673cc5056234", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23567, "upload_time": "2015-02-10T15:30:29", "url": "https://files.pythonhosted.org/packages/7f/61/b5ade68072b778bc4dc6d9167661a9c500ad999a405725af084fcf958e76/django-badgify-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "950208954bd376d40be197bd5dcbc796", "sha256": "9c03d7e731d9f58c40f8ddd5a790ef095dd26d0175dd76e9053cbb78fd32136e" }, "downloads": -1, "filename": "django-badgify-0.1.5.tar.gz", "has_sig": true, "md5_digest": "950208954bd376d40be197bd5dcbc796", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24859, "upload_time": "2015-04-02T15:34:17", "url": "https://files.pythonhosted.org/packages/2c/c5/3b4437a7d27b6388965a9a856a2e541bf0b7cc236bb92d97b97971eb3693/django-badgify-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "4695b9024f712c4cfb72e394afec1958", "sha256": "2e46cdc49f148bbdf943d98fa8b39b469c782d24e5c9c54d9200355f6842d3f7" }, "downloads": -1, "filename": "django-badgify-0.1.6.tar.gz", "has_sig": true, "md5_digest": "4695b9024f712c4cfb72e394afec1958", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25644, "upload_time": "2015-08-31T10:04:21", "url": "https://files.pythonhosted.org/packages/05/5e/76811d8c4ebd2d80d18b80f05ff12b7294487bf4ccf64cb1f3ed9e8b847c/django-badgify-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "957a0450184634143e8b1ad9dbb3e531", "sha256": "68e00e8f8fde6cfb9b6627c803bf12ef1c0fd605c9ea3bf96c8baa4b3f9a7983" }, "downloads": -1, "filename": "django-badgify-0.1.7.tar.gz", "has_sig": true, "md5_digest": "957a0450184634143e8b1ad9dbb3e531", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25582, "upload_time": "2016-10-03T08:12:28", "url": "https://files.pythonhosted.org/packages/1c/ba/6ef548c4bea94331967357e2799dc7321c40a6bdad062171d7db7e15be3e/django-badgify-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "9ce865df934a944caebc6f8eaf45ab35", "sha256": "11ca315c78684519842895e786622217bf9fdab7c3b7e9db897b5d18438540c6" }, "downloads": -1, "filename": "django-badgify-0.1.8.tar.gz", "has_sig": true, "md5_digest": "9ce865df934a944caebc6f8eaf45ab35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24978, "upload_time": "2016-10-27T13:23:40", "url": "https://files.pythonhosted.org/packages/cf/62/bf27877b774adb556789b5942c533f90e92ef8dff6f679b2008374a362b9/django-badgify-0.1.8.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "99962ed2dc4d35161a9cc62e29c57e55", "sha256": "bf9140a67ef4a1cc78d2161632edd07df6be590eb39b24419fb6e7bcd33f2687" }, "downloads": -1, "filename": "django-badgify-0.2.0.tar.gz", "has_sig": true, "md5_digest": "99962ed2dc4d35161a9cc62e29c57e55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25016, "upload_time": "2016-11-14T13:54:34", "url": "https://files.pythonhosted.org/packages/f9/41/a2ae9956b9cd07b8ad74feef2127b2758cfd8f9652415926bab253d54ba1/django-badgify-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "85c4551ac18a9e7404500e1dd34bc1cd", "sha256": "07d5c80c8590ba2377500e3f32b7e122aadbd3f253acab4b6867f3100143c975" }, "downloads": -1, "filename": "django-badgify-0.3.0.tar.gz", "has_sig": true, "md5_digest": "85c4551ac18a9e7404500e1dd34bc1cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24685, "upload_time": "2018-07-13T14:42:32", "url": "https://files.pythonhosted.org/packages/ca/8a/3f90578a0179dd462fee2236ce1b143bf109f018a333ed03c2856157a24d/django-badgify-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "85c4551ac18a9e7404500e1dd34bc1cd", "sha256": "07d5c80c8590ba2377500e3f32b7e122aadbd3f253acab4b6867f3100143c975" }, "downloads": -1, "filename": "django-badgify-0.3.0.tar.gz", "has_sig": true, "md5_digest": "85c4551ac18a9e7404500e1dd34bc1cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24685, "upload_time": "2018-07-13T14:42:32", "url": "https://files.pythonhosted.org/packages/ca/8a/3f90578a0179dd462fee2236ce1b143bf109f018a333ed03c2856157a24d/django-badgify-0.3.0.tar.gz" } ] }