{ "info": { "author": "Joost Cassee", "author_email": "joost@cassee.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "=================\ndjango-geckoboard\n=================\n\nGeckoboard_ is a hosted, real-time status board serving up indicators\nfrom web analytics, CRM, support, infrastructure, project management,\nsales, etc. It can be connected to virtually any source of quantitative\ndata. This Django_ application provides view decorators to help create\ncustom widgets.\n\n.. _Geckoboard: http://www.geckoboard.com/\n.. _Django: http://www.djangoproject.com/\n\n\nInstallation\n============\n\nTo install django-geckoboard, simply place the ``django_geckoboard``\npackage somewhere on the Python path. You do not need to add it to the\n``INSTALLED_APPS`` list, unless you want to run the tests.\n\n\nLimiting access\n===============\n\nIf you want to protect the data you send to Geckoboard from access by\nothers, you can use an API key shared by Geckoboard and your widget\nviews. Set ``GECKOBOARD_API_KEY`` in the project ``settings.py`` file::\n\n GECKOBOARD_API_KEY = 'XXXXXXXXX'\n\nIf you do not set an API key, anyone will be able to view the data by\nvisiting the widget URL.\n\n\nEncryption\n==========\n\nGeckoboard encryption allows encrypting data before it is sent to Geckoboard's\nservers. After entering the password used to encrypt the data when the Geckoboard\nis loaded, the data will be decrypted in the browser.\n\nTo use encryption, first set a password in the project ``settings.py`` file::\n\n GECKOBOARD_PASSWORD = 'XXXXXXXXX'\n\nNext, enable encryption for each widget using the decorator arguments::\n\n @number_widget(encrypted=True)\n def user_count(request):\n return User.objects.count()\n\n\nCreating custom widgets\n=======================\n\nThe available custom widgets are described in the Geckoboard support\nsection, under `Geckoboard API`_. From the perspective of a Django\nproject, a custom widget is just a view. The django-geckoboard\napplication provides view decorators that render the correct response\nfor the different widgets.\n\nLet's say you want to add a widget to your dashboard that shows the\nnumber of number of comments posted today. First create a view, using a\ndjango-geckoboard decorator::\n\n from datetime import date, time, datetime\n from django.contrib.comments.models import Comment\n from django_geckoboard.decorators import number_widget\n\n @number_widget\n def comment_count(request):\n midnight = datetime.combine(date.today(), time.min)\n return Comment.objects.filter(submit_date__gte=midnight).count()\n\nYou can also specify the output format of the widget as either JSON or XML::\n\n @number_widget(format='json')\n def comment_count(request):\n midnight = datatime.combine(date.today(), time.min)\n return Comment.objects.filter(submit_data__get=midnight).count()\n\n\nIf your widget has optional settings, you can pass them in the decorator\ndefinition::\n\n @number_widget(absolute='true')\n def comment_count(request):\n midnight = datetime.combine(date.today(), time.min)\n return Comment.objects.filter(submit_date__gte=midnight).count()\n\n\nThen use a URLconf module to map a URL to the view::\n\n from django.conf.urls.defaults import *\n\n urlpatterns = patterns('YOUR_VIEW_MODULE',\n ...\n (r'^geckoboard/comment_count/$', 'comment_count'),\n )\n\nThis is all the Django code you need to display the comment count on\nyour dashboard. When you create a custom widget in Geckoboard, enter the\nfollowing information:\n\nEncryption\n Enable if the field is encrypted (see instructions above).\n\nURL data feed\n The view URL. In the example above this would be something like\n ``http://HOSTNAME/geckoboard/comment_count/``.\n\nAPI key\n The content of the ``GECKOBOARD_API_KEY`` setting, if you have set\n it.\n\nWidget type\n *Custom*\n\nFeed format\n Either *XML* or *JSON*. If you don't specify a format the decorators will\n automatically detect and output the correct format or default to XML\n if this is not enabled (by default the format isn't appended by\n Geckoboard as a parameter any more)\n\nRequest type\n Either *GET* or *POST*. The view decorators accept both.\n\n\nThe following decorators are available from the\n``django_geckoboard.decorators`` module:\n\n\n``number_widget``\n-----------------\n\nRender a *Number & Secondary Stat* widget.\n\nThe decorated view must return a tuple *(current, [previous],\n[prefix])* where the *current* parameter is the current value, optional\n*previous* parameter is the previous value of the measured quantity and\nthe optional parameter *prefix* is the prefix used in Geckoboard widget.\nIf there is only one parameter you do not need to return it in a tuple.\nFor example, to render a widget that shows the number of users and the\ndifference from last week::\n\n from django_geckoboard.decorators import number_widget\n from datetime import datetime, timedelta\n from django.contrib.auth.models import User\n\n @number_widget\n def user_count(request):\n last_week = datetime.now() - timedelta(weeks=1)\n users = User.objects\n last_week_users = users.filter(date_joined__lt=last_week)\n return (users.count(), last_week_users.count())\n\n @number_widget\n def users_count_with_prefix(request):\n last_week = datetime.now() - timedelta(weeks=1)\n users = User.objects\n last_week_users = users.filter(date_joined__lt=last_week)\n return (users.count(), last_week_users.count(), '$')\n\n\n``rag_widget``\n--------------\n\nRender a *RAG Column & Numbers* or *RAG Numbers* widget.\n\nThe decorated view must return a tuple with three tuples *(value,\n[text])*. The *value* parameters are the numbers shown in red, amber\nand green (in that order). The optional *text* parameters will be\ndisplayed next to the respective values in the dashboard.\n\nFor example, to render a widget that shows the number of comments that\nwere approved or deleted by moderators in the last 24 hours::\n\n from django_geckoboard.decorators import rag_widget\n from datetime import datetime, timedelta\n from django.contrib.comments.models import Comment, CommentFlag\n\n @rag_widget\n def comments(request):\n start_time = datetime.now() - timedelta(hours=24)\n comments = Comment.objects.filter(submit_date__gt=start_time)\n total_count = comments.count()\n approved_count = comments.filter(\n flags__flag=CommentFlag.MODERATOR_APPROVAL).count()\n deleted_count = Comment.objects.filter(\n flags__flag=CommentFlag.MODERATOR_DELETION).count()\n pending_count = total_count - approved_count - deleted_count\n return (\n (deleted_count, \"Deleted comments\"),\n (pending_count, \"Pending comments\"),\n (approved_count, \"Approved comments\"),\n )\n\n\n``text_widget``\n---------------\n\nRender a *Text* widget.\n\nThe decorated view must return a list of tuples *(message, [type])*.\nThe *message* parameters are strings that will be shown in the widget.\nThe *type* parameters are optional and tell Geckoboard how to annotate\nthe messages. Use ``TEXT_INFO`` for informational messages,\n``TEXT_WARN`` for for warnings and ``TEXT_NONE`` for plain text (the\ndefault). If there is only one plain message, you can just return it\nwithout enclosing it in a list and tuple.\n\nFor example, to render a widget showing the latest Geckoboard twitter\nupdates, using Mike Verdone's `Twitter library`_::\n\n from django_geckoboard.decorators import text_widget, TEXT_NONE\n import twitter\n\n @text_widget\n def twitter_status(request):\n twitter = twitter.Api()\n updates = twitter.GetUserTimeline('geckoboard')\n return [(u.text, TEXT_NONE) for u in updates]\n\n.. _`Twitter library`: http://pypi.python.org/pypi/twitter\n\n\n``pie_chart``\n-------------\n\nRender a *Pie chart* widget.\n\nThe decorated view must return an iterable over tuples *(value, label,\n[color])*. The optional *color* parameter is a string ``'RRGGBB[TT]'``\nrepresenting red, green, blue and optionally transparency.\n\nFor example, to render a widget showing the number of normal, staff and\nsuperusers::\n\n from django_geckoboard.decorators import pie_chart\n from django.contrib.auth.models import User\n\n @pie_chart\n def user_types(request):\n users = User.objects.filter(is_active=True)\n total_count = users.count()\n superuser_count = users.filter(is_superuser=True).count()\n staff_count = users.filter(is_staff=True,\n is_superuser=False).count()\n normal_count = total_count = superuser_count - staff_count\n return [\n (normal_count, \"Normal users\", \"ff8800\"),\n (staff_count, \"Staff\", \"00ff88\"),\n (superuser_count, \"Superusers\", \"8800ff\"),\n ]\n\n\n``line_chart``\n--------------\n\nRender a *Line chart* widget.\n\nThe decorated view must return a tuple *(values, x_axis, y_axis,\n[color])*. The *values* parameter is a list of data points. The\n*x-axis* parameter is a label string or a list of strings, that will be\nplaced on the X-axis. The *y-axis* parameter works similarly for the\nY-axis. If there are more than one axis label, they are placed evenly\nalong the axis. The optional *color* parameter is a string\n``'RRGGBB[TT]'`` representing red, green, blue and optionally\ntransparency.\n\nFor example, to render a widget showing the number of comments per day\nover the last four weeks (including today)::\n\n from django_geckoboard.decorators import line_chart\n from datetime import date, timedelta\n from django.contrib.comments.models import Comment\n\n @line_chart\n def comment_trend(request):\n since = date.today() - timedelta(days=29)\n days = dict((since + timedelta(days=d), 0)\n for d in range(0, 29))\n comments = Comment.objects.filter(submit_date__gte=since)\n for comment in comments:\n days[comment.submit_date.date()] += 1\n return (\n days.values(),\n [days[i] for i in range(0, 29, 7)],\n \"Comments\",\n )\n\n\n``geck_o_meter``\n----------------\n\nRender a *Geck-O-Meter* widget.\n\nThe decorated view must return a tuple *(value, min, max)*. The *value*\nparameter represents the current value. The *min* and *max* parameters\nrepresent the minimum and maximum value respectively. They are either a\nvalue, or a tuple *(value, text)*. If used, the *text* parameter will\nbe displayed next to the minimum or maximum value.\n\nFor example, to render a widget showing the number of users that have\nlogged in in the last 24 hours::\n\n from django_geckoboard.decorators import geck_o_meter\n from datetime import datetime, timedelta\n from django.contrib.auth.models import User\n\n @geck_o_meter\n def login_count(request):\n since = datetime.now() - timedelta(hours=24)\n users = User.objects.filter(is_active=True)\n total_count = users.count()\n logged_in_count = users.filter(last_login__gt=since).count()\n return (logged_in_count, 0, total_count)\n\n\n``funnel``\n----------\n\nRender a *Funnel* widget.\n\nThe decorated view must return a dictionary with at least an *items*\nkey. To render a funnel showing the breakdown of authenticated users\nvs. anonymous users::\n\n from django_geckoboard.decorators import funnel\n from django.contrib.auth.models import User\n\n @funnel\n def user_breakdown(request):\n all_users = User.objects\n active_users =all_users.filter(is_active=True)\n staff_users = all_users.filter(is_staff=True)\n super_users = all_users.filter(is_superuser=True)\n return {\n \"items\": [\n (all_users.count(), 'All users'),\n (active_users.count(), 'Active users'),\n (staff_users.count(), 'Staff users'),\n (super_users.count(), 'Super users'),\n ],\n \"type\": \"standard\", # default, 'reverse' changes direction\n # of the colors.\n \"percentage\": \"show\", # default, 'hide' hides the percentage\n # values.\n \"sort\": False, # default, `True` orders the values\n # descending.\n }\n\n``bullet``\n----------\n\nRender a *Bullet* widget.\n\nThe decorated view must return a dictionary with at least keys *label*,\n*axis_points*, *current* and *comparative*. To render Geckoboard's own example\nat\nhttp://support.geckoboard.com/entries/274940-custom-chart-widget-type-definitions::\n\n from django_geckoboard.decorators import bullet\n\n @bullet\n def geckoboard_bullet_example(request):\n return = {\n 'label': 'Revenue 2011 YTD',\n 'axis_points': [0, 200, 400, 600, 800, 1000],\n 'current': 500,\n 'comparative': 600,\n 'sublabel': 'U.S. $ in thousands',\n 'red': [0, 400],\n 'amber': [401, 700],\n 'green': [701, 1000],\n 'projected': [100, 900],\n 'auto_scale': False,\n }\n\n.. _`Geckoboard API`: http://geckoboard.zendesk.com/forums/207979-geckoboard-api\n\n\nChangelog\n=========\n\nVersion 2.0.0\n-------------\n\n* Add support for Python 3.4 and 4.5 and drop support for Python < 2.7;\n add support for Django 1.9 and drop support for Django < 1.8\n (Matt Terry)\n\nVersion 1.2.8\n-------------\n* Use json package directly (Max Lynch)\n\nVersion 1.2.7\n-------------\n* Add support for encryption (Jeremy A. Johnson)\n* Allow setting output format in widget decorator (Rob Hudson)\n\nVersion 1.2.6\n-------------\n* Allow number widget to return list of dicts (Arthur Furlan)\n\nVersion 1.2.5\n-------------\n* Add support for the \"prefix\" parameter (Arthur Furlan)\n\nVersion 1.2.4\n-------------\n* Add \"Content-Type\" header (Arthur Furlan)\n\nVersion 1.2.3\n-------------\n* Fix KeyError bug in auto-scaling code (Ben Belchak)\n\nVersion 1.2.2\n-------------\n* Fix comparative bar on bullet graphs (Rod Begbie)\n\nVersion 1.2.1\n-------------\n* Fix unicode handling (\u00c9ric St-Jean)\n\nVersion 1.2.0\n-------------\n* Add *bullet* widget decorator (Hedley Roos)\n\nVersion 1.1.0\n-------------\n* Add *funnel* widget decorator (Simon de Haan)\n\nVersion 1.0.0\n-------------\n* No changes from 0.2.1\n\nVersion 0.2.1\n-------------\n* Fix API key detection\n\nVersion 0.2.0\n-------------\n* Rename widget decorators\n\nVersion 0.1.0\n-------------\n* First release, split off from django-analytical_.\n\n.. _django-analytical: http://pypi.python.org/pypi/django-analytical", "description_content_type": null, "docs_url": null, "download_url": "http://github.com/jcassee/django-geckoboard/archives/master", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/jcassee/django-geckoboard", "keywords": "django,geckoboard", "license": "MIT License", "maintainer": null, "maintainer_email": null, "name": "django-geckoboard", "package_url": "https://pypi.org/project/django-geckoboard/", "platform": "any", "project_url": "https://pypi.org/project/django-geckoboard/", "project_urls": { "Download": "http://github.com/jcassee/django-geckoboard/archives/master", "Homepage": "http://github.com/jcassee/django-geckoboard" }, "release_url": "https://pypi.org/project/django-geckoboard/2.0.0/", "requires_dist": null, "requires_python": null, "summary": "Geckoboard custom widgets for Django projects", "version": "2.0.0" }, "last_serial": 1915170, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "909a25fdb73adc12808cdbd990ce1c5a", "sha256": "11284a538c21c944b41dec27b31a0887276487eeecf11b5155295f2d5da6313c" }, "downloads": -1, "filename": "django-geckoboard-0.1.0.tar.gz", "has_sig": false, "md5_digest": "909a25fdb73adc12808cdbd990ce1c5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10197, "upload_time": "2011-02-14T17:34:03", "url": "https://files.pythonhosted.org/packages/78/43/e4ee6e55564952caaac8a5c5911f82846ff90c8172da4672ec8edc9874b4/django-geckoboard-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "3a08749ae625f4dd6c6e541584e9f256", "sha256": "c03b95091410d46b8de9fa93fec72167f801bc12ca2b5dfefafa2362814a7848" }, "downloads": -1, "filename": "django-geckoboard-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3a08749ae625f4dd6c6e541584e9f256", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10438, "upload_time": "2011-02-15T15:06:10", "url": "https://files.pythonhosted.org/packages/92/a3/d0307e74be66226e28e6bb47d332724dd236ea75351c0689db5c2cc4dd7a/django-geckoboard-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "01cbb35fd1c592e1ef62fd31f4a2eaf0", "sha256": "ba05c01a96b751ba55704d22cdaa8ec0ff87bf385240941c5e7b0a3e8dfffc85" }, "downloads": -1, "filename": "django-geckoboard-0.2.1.tar.gz", "has_sig": false, "md5_digest": "01cbb35fd1c592e1ef62fd31f4a2eaf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10455, "upload_time": "2011-02-15T16:04:19", "url": "https://files.pythonhosted.org/packages/b7/34/a32e67aeec96d23b053380c50316219acf668e35bc56bfc42d4ba553e54f/django-geckoboard-0.2.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "78ac452e306fad75cddd85e4f4e7c178", "sha256": "6926cce8222add9849db61ef210ce2bbbec9320fbedc88b90e7410e4bd79f9e7" }, "downloads": -1, "filename": "django-geckoboard-1.0.0.tar.gz", "has_sig": false, "md5_digest": "78ac452e306fad75cddd85e4f4e7c178", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11001, "upload_time": "2011-02-24T17:06:02", "url": "https://files.pythonhosted.org/packages/26/9c/63ac65349a61a06f2acfa344ed4c2dcae939a3718e11fa4510acbc312683/django-geckoboard-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "3c8108fbbb42a8c7f694620052dc613d", "sha256": "2d50405187f3fd1a67f6c1533fa58f2f31f177a8f61708a004b7b6cbcf2ebadd" }, "downloads": -1, "filename": "django-geckoboard-1.1.0.tar.gz", "has_sig": false, "md5_digest": "3c8108fbbb42a8c7f694620052dc613d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11912, "upload_time": "2011-03-23T14:36:56", "url": "https://files.pythonhosted.org/packages/01/27/cda7df53cd39cbb0c12639de36d60715f338a86fc86f32d21d1f831cb3d4/django-geckoboard-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "ed3a812a0077513882cc44e6c3503e55", "sha256": "d99eec8c5a512e7a882db9d18b3d6fed6154578a820983c33759ef155091e2cf" }, "downloads": -1, "filename": "django-geckoboard-1.2.0.tar.gz", "has_sig": false, "md5_digest": "ed3a812a0077513882cc44e6c3503e55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14091, "upload_time": "2011-07-12T07:47:27", "url": "https://files.pythonhosted.org/packages/aa/9f/52a60aec362d720c1312ffbed5ba9e0c16e853ee34af9eb2970dade502ae/django-geckoboard-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "c99958a5b92d125d44b0ea4995f90c9d", "sha256": "ca9a2a5b01a92ba810b6a0ed63fd8090b07ef1781f79f00f301ff28c1bc86e98" }, "downloads": -1, "filename": "django-geckoboard-1.2.1.tar.gz", "has_sig": false, "md5_digest": "c99958a5b92d125d44b0ea4995f90c9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16494, "upload_time": "2011-11-05T21:24:42", "url": "https://files.pythonhosted.org/packages/3a/a6/cc1d3d709c766a6e2fdfdf9268e72ba74512dac2dbe2bbac79d1ba103e6f/django-geckoboard-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "f22e898e414c714723c17972827a2866", "sha256": "dfc4ae5fceb9f1c579fb5a8aeb033d1197ad5006a3263d3e0674096093f24593" }, "downloads": -1, "filename": "django-geckoboard-1.2.2.tar.gz", "has_sig": false, "md5_digest": "f22e898e414c714723c17972827a2866", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16564, "upload_time": "2012-04-13T10:10:52", "url": "https://files.pythonhosted.org/packages/db/bb/6846f380c69b08e0876d31438637817d4e679a5fce6dcc27f121af5c7aa5/django-geckoboard-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "4070b454da3cdb236b93281ace8a46ce", "sha256": "31b9b4a777b36242f9bc825985473e586b654cb0da644de84ef11d0e3d6f2e3a" }, "downloads": -1, "filename": "django-geckoboard-1.2.3.tar.gz", "has_sig": false, "md5_digest": "4070b454da3cdb236b93281ace8a46ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16795, "upload_time": "2013-01-29T08:34:11", "url": "https://files.pythonhosted.org/packages/88/91/07136b7e4ac0dfd895016082154fd62a3fe3a6d8ade5c4ea42be0b9383f6/django-geckoboard-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "db2b26dc06143f3cd7dd6379a6f1f362", "sha256": "37f3cf16c0114dd3d7e89f82f78bda1fb03eaa6ebcd87f2edefc6e83dea7f591" }, "downloads": -1, "filename": "django-geckoboard-1.2.4.tar.gz", "has_sig": false, "md5_digest": "db2b26dc06143f3cd7dd6379a6f1f362", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16974, "upload_time": "2013-07-25T08:43:32", "url": "https://files.pythonhosted.org/packages/04/a5/e08d0c93dba5e03361aba9279bd7ccf70bdcccc4b666479ef0a0520d9a42/django-geckoboard-1.2.4.tar.gz" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "820f9f9d5f4bb96f55ed31eb21905bd4", "sha256": "c5bfeeb77886356d2b04a3cbe702ef4e063d389ea2c40774a757484bba3d4a27" }, "downloads": -1, "filename": "django-geckoboard-1.2.5.tar.gz", "has_sig": false, "md5_digest": "820f9f9d5f4bb96f55ed31eb21905bd4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17502, "upload_time": "2013-08-07T08:08:57", "url": "https://files.pythonhosted.org/packages/4d/c1/7d78d674a0a6c5c2280fb6964f92c682dad5eced8e1014d71267a24670a3/django-geckoboard-1.2.5.tar.gz" } ], "1.2.6": [ { "comment_text": "", "digests": { "md5": "0f31b0f9d2b115602b267ab6bb0be9dd", "sha256": "7bac71fb3371ff26aab29ef08d2f70a4e533c5d4dc80b224f09375336f0a23b2" }, "downloads": -1, "filename": "django-geckoboard-1.2.6.tar.gz", "has_sig": false, "md5_digest": "0f31b0f9d2b115602b267ab6bb0be9dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17669, "upload_time": "2013-08-12T08:59:37", "url": "https://files.pythonhosted.org/packages/f4/1c/00c322bc7d08e4d70914e7b34a68a22f6b746a3c500b3826ef6ca81e84d8/django-geckoboard-1.2.6.tar.gz" } ], "1.2.7": [ { "comment_text": "", "digests": { "md5": "032ba6feffc84283c8ceee43e4c239ea", "sha256": "79dbfb0e16b67ae754ee29216f966c2081917bbc6ab2c03f523cb42bdf385cd3" }, "downloads": -1, "filename": "django-geckoboard-1.2.7.tar.gz", "has_sig": false, "md5_digest": "032ba6feffc84283c8ceee43e4c239ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23644, "upload_time": "2013-10-10T10:55:49", "url": "https://files.pythonhosted.org/packages/14/dd/01d8258ffe0798ceb8a6226309d898ca24a46666a3bc65f78188d5a4bd0a/django-geckoboard-1.2.7.tar.gz" } ], "1.2.8": [ { "comment_text": "", "digests": { "md5": "60248f0deb27362431fc90e330ccb730", "sha256": "c7494b5cd5d35f60815a7c59e61a2c8df7accb0cea7d7845a58dd908126bd335" }, "downloads": -1, "filename": "django-geckoboard-1.2.8.tar.gz", "has_sig": false, "md5_digest": "60248f0deb27362431fc90e330ccb730", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17168, "upload_time": "2015-03-09T19:25:51", "url": "https://files.pythonhosted.org/packages/1e/d2/bbb74061d0619c21f2b9c7ece2a228e67420add8a17a94a2ef63f6eaf2b3/django-geckoboard-1.2.8.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "b7bf8a35daeeaac5a7600767dc9c8ecb", "sha256": "449f1d2e134864b5cece983c5a3b053e3385cc7656f1f9bb8684deb0fd869107" }, "downloads": -1, "filename": "django-geckoboard-2.0.0.tar.gz", "has_sig": false, "md5_digest": "b7bf8a35daeeaac5a7600767dc9c8ecb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17412, "upload_time": "2016-01-21T13:45:40", "url": "https://files.pythonhosted.org/packages/ac/27/f65a549b7b795febc3173817550e58975c8230dc4b338e126527cc0b0fdd/django-geckoboard-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b7bf8a35daeeaac5a7600767dc9c8ecb", "sha256": "449f1d2e134864b5cece983c5a3b053e3385cc7656f1f9bb8684deb0fd869107" }, "downloads": -1, "filename": "django-geckoboard-2.0.0.tar.gz", "has_sig": false, "md5_digest": "b7bf8a35daeeaac5a7600767dc9c8ecb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17412, "upload_time": "2016-01-21T13:45:40", "url": "https://files.pythonhosted.org/packages/ac/27/f65a549b7b795febc3173817550e58975c8230dc4b338e126527cc0b0fdd/django-geckoboard-2.0.0.tar.gz" } ] }