{ "info": { "author": "Bob Bowles", "author_email": "bobjohnbowles@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Django :: 1.8", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: News/Diary", "Topic :: Utilities" ], "description": "============\nDjango Diary\n============\n\n\nDescription\n-----------\n\nDjango-Diary is a project to create an easy-to-use desk diary and scheduling tool for use in a fast-paced retail environment. The aim is to be able to schedule and manage client bookings with available resources as quickly and easily as possible with no fuss.\n\nWhile the data model is very simple, some effort has been put into making the UI slick and intuitive, with ``ajax`` enabling drag-and-drop and updates of modal displays on the diary grid, and ``Bootstrap``-compatible widgets used on the forms.\n\nAn additional management command is included to permit routine administration of email reminders (see `Administration`_).\n\n\nThe Models\n----------\n\nThe diary model has deliberately been made very simple. It is built on the foundation of practical experience manning the front desk of a health clinic. It needs to be easy and fast to use.\n\nThe core concept is a diary ``Entry``, which records the date and time of an appointment with a ``Customer``, which may use a time-allocated ``Resource``. The ``Duration`` of each booking is determined by the type of ``Treatment`` to be administered.\n\nThere are no repeating entries; while it is expected that customers will make repeat bookings, it is assumed the repeat bookings will *not* follow any simple rule. So, to avoid complexity that will not actually be useful, all diary entries are considered as unique and unrelated occurrences. This is in stark contrast to popular (and very fine) calendar/scheduling apps like ``django-schedule`` and ``django-calendarium``.\n\nEntries are allowed to overlap in time, provided there are no resource conflicts. If a resource is assigned to an entry, no other entry can use the same resource at the same time. Entries that have been cancelled do not count when evaluating resource conflicts.\n\nThere are two categories of ``User``. The standard admin ``Users`` are retained for administrative functions, and typically have at least ``is_staff`` privilege.\n\nCustomers are also ``Users`` of the system (they are in fact a subclass of ``User``). While they have no administrative privileges, they have additional attributes. In keeping with the health clinic paradigm, they have demographic and health-related information associated with them, contact details, and of course their treatment history, which can be derived from their historical record of appointments.\n\nIn the interests of confidentiality, ``Customers`` may only see and alter their own details and appointments. Staff ``Users`` are able to see and alter the details of all entries.\n\n\nInstallation\n------------\n\nA complete sample project is available on `GitHub `_ for forking or clone/download, but for use as a standalone app install from `PyPi `_ using ``pip``.\n\n1. Install ``django-diary`` and its dependencies using ``pip``::\n\n pip install django-diary\n\n\n#. Add ``diary`` and ``datetimewidget`` to your ``INSTALLED_APPS`` in ``settings.py`` underneath your main project app:\n\n ::\n\n ...\n 'diary',\n 'datetimewidget',\n ...\n\n#. Run the migrations:\n\n ::\n\n ./manage.py migrate\n\n\n#. Change the authentication backend to enable the use of the ``Customer`` subclass of ``User``. Add the following to ``settings.py``:\n\n ::\n\n # User customisation\n # NOTE: use of InheritanceQuerySet in the backend dispenses with the need for \n # any other setting. (django-model-utils)\n # http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/\n AUTHENTICATION_BACKENDS = (\n 'diary.backends.CustomUserModelBackend',\n )\n\n#. Set up the ``diary`` app's urls, and (if you want to use the customer administration) the administration urls. In your root ``urls.py`` you need the following ``urlpatterns``:\n\n ::\n\n url(r'^admin/', include(admin.site.urls)),\n url(r'^accounts/login/$', 'django.contrib.auth.views.login'),\n url(r'^accounts/logout/$', \n 'django.contrib.auth.views.logout', \n {'next_page': '/'}),\n url(r'^accounts/password/reset/$', \n 'django.contrib.auth.views.password_reset', \n {'post_reset_redirect' : '/accounts/password/reset/done/'},\n name=\"password_reset\"),\n url(r'^accounts/password/reset/done/$',\n 'django.contrib.auth.views.password_reset_done'),\n url(r'^accounts/password/reset/(?P[0-9A-Za-z]+)-(?P.+)/$', \n 'django.contrib.auth.views.password_reset_confirm', \n {'post_reset_redirect' : '/accounts/password/done/'},\n name='password_reset_confirm'),\n url(r'^accounts/password/done/$', \n 'django.contrib.auth.views.password_reset_complete'),\n url(r'^diary/', include('diary.urls', namespace='diary')),\n\n#. For password administration and/or the email reminder service you need to set up an email service. It is sufficient to use Python's built-in dummy server for development and testing. This just prints out the result of email requests onto the console. From the command line:\n\n ::\n\n python -m smtpd -n -c DebuggingServer localhost:1025\n\n (or just use the bash script checked into the `GitHub project `_).\n\n In your ``settings.py`` add your email server's details. The following snippet links to the dummy email server described above:\n\n ::\n\n # test email server setup\n if DEBUG:\n EMAIL_HOST = 'localhost'\n EMAIL_PORT = 1025\n EMAIL_HOST_USER = ''\n EMAIL_HOST_PASSWORD = ''\n EMAIL_USE_TLS = False\n DEFAULT_FROM_EMAIL = 'testing@example.com'\n\n\nConfiguration\n-------------\n\nAfter installation you should have 'something-that-works' but it will look ugly round the edges and the behaviour will need fine-tuning to your business requirements.\n\n\n1. Override ``templates/diary/main_base.html`` to customise layout and styling for your site. ``main_base.html`` (and/or its parents) need to provide the following five blocks:\n\n =================== ========================================================\n Block Description\n =================== ========================================================\n ``head_extra`` for adding elements to the document head. Add Bootstrap\n css links here if they are not already in your template\n header.\n ``diary_nav`` for navigating between diary views. The nav-bar itself\n can be completely re-written to your tastes, subject\n only to providing link placeholders described in the\n example implementation provided.\n ``diary_content`` attachment point for the diary content.\n ``diary_title`` attachment point for the page title.\n ``diary_sidebar`` *(Optional)* attachment point for reminders / ticker\n information if required. This block should include the\n html snippet ``diary/reminders.html`` (which may also be\n overridden if required).\n =================== ========================================================\n\n#. For staging and production supply the parameters for your email service in your ``settings.py``. The test email service described in the Installation section above provides a ready-made template for the required parameters. Make sure you connect to your provider's SMTP service port. Below is an example for a Google account:\n\n ::\n\n EMAIL_HOST = 'smtp.gmail.com'\n EMAIL_PORT = 587\n EMAIL_USE_TLS = True\n DEFAULT_FROM_EMAIL = 'webmaster@mygoogledomain.com'\n EMAIL_HOST_USER = os.environ['EMAIL_HOST_USER']\n EMAIL_HOST_PASSWORD = os.environ['EMAIL_HOST_PASSWORD']\n\n (Note the use of environment variables to keep sensitive information out of your revision control system. There are other ways to do this but this is pretty cool and simple).\n\n#. Optionally configure the customisable diary parameters in ``settings.py``:\n\n =========================== =========== =========== ========================\n Parameter Default Type Description\n =========================== =========== =========== ========================\n ``DIARY_FIRST_DAY_OF_WEEK`` ``0`` int The first day of the\n week for month views and\n calendar widgets\n (``0='Monday'``.\n For Sunday as first day\n set to ``6``).\n ``DIARY_MULTI_DAY_NUMBER`` ``3`` int The number of days to\n show in the multi-day\n view. ``3`` is a \n minimum.\n The practical maximum is\n ``7``.\n ``DIARY_SHOW_MERIDIAN`` ``False`` bool Enable display of times\n in meridian format. \n **NB**: If ``True`` some\n additional configuration\n is needed to enable\n *input* of meridian\n times (see below).\n ``DIARY_MIN_TIME`` ``08:00`` time The earliest time to\n display in ``day`` and\n ``multi_day`` views.\n ``DIARY_MAX_TIME`` ``18:00`` time The latest time to\n display in ``day`` and\n ``multi_day`` views.\n ``DIARY_TIME_INC`` ``00:30`` duration The size of time slots\n for ``day`` and\n ``multi_day`` views.\n ``DIARY_OPENING_TIMES`` dict Dictionary of opening\n times keyed on weekday\n number. Default is 09:00\n all week.\n ``DIARY_CLOSING_TIMES`` dict Dictionary of closing\n times keyed on weekday\n number. Default is 17:00\n all week.\n ``DIARY_MIN_BOOKING`` ``0`` int Minimum advance booking\n time for customers in \n days. ``0`` means there\n is no minimum period.\n ``DIARY_SITE_NAME`` ``Django- str Name of site for use\n Diary`` in emails.\n ``DIARY_CONTACT_PHONE`` ``''`` str Contact phone number for\n use in emails.\n ``DIARY_XXXXX`` ``xx`` xx **TODO**: Template\n for ``DIARY_XXXXX``.\n =========================== =========== =========== ========================\n\n#. Also in ``settings.py`` configure meridian time displays if required (see above). The default Django ``TIME_INPUT_FORMATS`` do not include meridian formats:\n\n ::\n\n TIME_INPUT_FORMATS = (\n '%H:%M:%S',\n '%H:%M',\n '%I %p',\n '%I:%M %p',\n '%I:%M%p',\n '%H:%M:%S.%f',\n )\n\n\nAdministration\n--------------\n\nA custom command has been added to enable easy implementation of the routine task of sending out email reminders. At the moment configuration settings for this are kept to a minimum, requiring a name for the site, given as ``DIARY_SITE_NAME``, and an optional contact phone number ``DIARY_CONTACT_PHONE``, plus the correct configuration of the email facility itself. \n\nMost of the email configuration is covered in the `Installation`_ and `Configuration`_ sections. To make use of administration notifications, two further email settings are needed in ``settings.py``, for ``ADMINS`` and ``SERVER_EMAIL``, for example::\n\n # tuple of tuples of administrator names and emails\n ADMINS = (\n ('Boss 1', 'boss1@example.com),\n ('Boss 2', 'boss2@example.com),\n )\n \n # server email address\n SERVER_EMAIL = 'webmaster@example.com'\n\nAdditionally, make sure the ``DEFAULT_FROM_EMAIL`` refers to a mailbox that can be replied to.\n\nThe code assumes reminders are required only for those ``Customers`` with emails who have an ``Entry`` in the diary for the following day.\n\nTo run the email reminders from the command line, in the root project directory type::\n\n ./manage.py email_reminder\n\nThe simplest way to schedule reminders for regular use is via a daily ``cron`` job on your server.\n\n\nDependencies\n------------\n\nAt the fundamental level the dependencies of this app are recorded in the ``requirements.txt`` file.\n\nThe styling, layout, widgets, and javascript all utilize Twitter Bootstrap and jQuery. The Javascript dependencies are self-contained, but obviously it is more harmonious if your project as a whole is designed around Bootstrap. If the Bootstrap styling css is not already declared in your template's header you will need to add it.\n\nI have made no effort to write this for Python 2.7, targeting Python 3 from the outset, and specifically Python 3.4. I intend to look at that at a future date.\n\nThe Python/Django package dependencies are as follows::\n\n Django==1.8.3\n django-datetime-widget==0.9.3\n django-model-utils==2.3.1\n pytz==2015.4\n six==1.9.0\n\nAlthough they are listed here as strict requirements, they are probably more accurately *minimum* requirements. However, while I am continuing to develop the code I am opting for a simple life...\n\n``Django``\n is self-explanatory. At time of writing I am still actively developing, so I am focusing only on Django 1.8. At some point I intend to improve coverage, but the demand at present is to get something-that-works.\n\n``django-datetime-widget``\n is a project to provide some nice Bootstrap date and time widgets for Django. It needs to be added as an app in the settings file. To use meridian time, the time formats also need to be added to the settings, as the Django defaults ignore meridian (see the Configuration section). \n\n``django-model-utils``\n is a project that provides a number of useful tools for manipulating models. It is primarily used here for facilitating subclassing of User.\n\n``pytz``\n is needed for date and time manipulation.\n\n``six``\n was dragged in at some point by one of the above (I think).\n\n\nReusability\n-----------\n\nAt this early stage reusability is an aspiration rather than a reality. To achieve this the following considerations have been/need to be made:\n\n* Overriding of templates and styles. A main_base.html template has been constructed that forms the basis of a working example of the app, and at the same time provides a starting point for overriding. Attention also needs to be given to navigation hooks.\n* Configuration. While wanting the diary app to be configurable for different scenarios, it is also important to keep focused on core function and _not_ provide too many hooks. A ``settings.py`` file exists in the diary which provides default values for a few parameters that can be overridden in the project's settings file. For easy discrimination, all configurable parameters have names of the form ``DIARY_XXXXX``. The parameter names will be chosen to be reasonably self-explanatory, and (eventually) will be documented somewhere.\n* Dependencies. Kept to a minimum. They will be documented (promise!).\n* Debate about using a subclass of ``User`` for ``Customer``. This may adversely affect reusability, but may have been mitigated by using ``django-model-utils`` for subclass manipulation.\n\n\nDesign Considerations\n---------------------\n\nEase of use by end users is paramount, because it is intended the application will be used by people unversed in software. Use of the app needs to be simple and intuitive, even more so than ease of installation and deployment.\n\nWeb deployment was decided upon at an early stage, because this enables use of the app from more than one location. The web server may be local or on the internet. One use case I had in mind was being able to check/modify the diary when at home, as well as at work. Web deployment allows customers as well as staff to use the app.\n\nThe decision for web deployment, coupled with a preference for Python as the main language, led naturally to using Django as the framework. This also gives flexibility of choice for the database engine, as the Django settings automatically take care of that, provided appropriate Python drivers are installed.\n\n``Django-Calendarium`` was initially chosen as the calendar/diary engine after some consideration of the options available. However, although hooks are available, they were not located in what I regarded as convenient places to do what I wanted to do. I tentatively played with some other calendar/scheduling apps, and reluncantly decided I needed to brew my own to get what I wanted.\n\nI found a tutorial by ``LightBird``. Although the code was terrible and outdated, it gave me a model workflow to follow as I both developed a calendar app and learned Django, JavaScript, CSS, HTML5, and other necessary technologies.\n\nI eventually decided to subclass ``User`` to make a custom user class called ``Customer``. I did that to enable a tight relationship between customers as users and diary entries in the simplest possible way. Other options seemed to involve jumping through too many database join hoops. This may work against reusability of this app, but I think the tweaks I have put into the admin backend (thanks to ``django-model-utils``) may mitigate this. In principle the admin backend in this app should be able to accommodate other custom users, but I may not have given enough attention to that possibility in my own code. It will be interesting to get feedback about that from devs, so keep me posted! \n\nTo make the UI fast and intuitive to use, some effort has been put into applying drag-and-drop and modal displays of selected data using ``ajax``. However, most features that involve changes to database content continue to be displayed and updated via conventional ``GET`` and ``POST`` of forms. In this way, an ``Entry`` can be quickly updated with a new time or date by simply dragging it to an appropriate place on the diary grid. Where time is less critical the more robust approach of conventional Django forms takes over.\n\n\nTesting\n-------\n\nTo avoid complications with constantly changing dates and times during tests some of the tests of the ``Entry`` functionality make use of ``freezegun``, so that tests that depend on time of day, etc, can be performed reliably and repeatably. After struggling with the Python built-in ``unittest.mock`` suite I found ``freezegun`` super-easy to use (like, one-line-of-code easy) and I recommend it to anyone who needs to test any code that uses or manipulates time-dependent phenomena.\n\n``Freezegun`` introduces some additional dependencies above those needed to run ``django-diary``. These are recorded in ``dev-requirements.txt`` which should be used in place of ``requirements.txt`` for setting up testing and development environments from git clones.\n\n\nHistory And References\n----------------------\n\nThis started out as a series of experimental projects built on top of Django tutorials, and explorations of existing Django calendar apps, Django snippets and other Django projects on Github:\n\n1. `Django Project Tutorial `_\n\n#. `Django Girls `_\n\n#. `LightBird Calendar Tutorial `_\n\n#. `Django Scheduler `_\n\n#. `Django Calendarium `_\n\n#. `Django User Customisation `_\n\n#. `Freezegun `_\n\n#. `Django Model Utilities `_", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/diary/", "keywords": "Diary,Django", "license": "MIT License", "maintainer": null, "maintainer_email": null, "name": "django-diary", "package_url": "https://pypi.org/project/django-diary/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-diary/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pypi.python.org/pypi/diary/" }, "release_url": "https://pypi.org/project/django-diary/0.3.4/", "requires_dist": null, "requires_python": null, "summary": "A pluggable diary app for use in the Django framework.", "version": "0.3.4" }, "last_serial": 1824238, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "c69ecefd9845bffe51feca4f25d883f9", "sha256": "77922a36ef6001e8f6fc1cbc41e2dd7efea75d9ca7f6175e002994fc48300b2d" }, "downloads": -1, "filename": "django-diary-0.1.tar.gz", "has_sig": false, "md5_digest": "c69ecefd9845bffe51feca4f25d883f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35979, "upload_time": "2015-09-25T12:25:37", "url": "https://files.pythonhosted.org/packages/5b/9f/6600bb6f362cc9a7ee0836ceb26e851ccc181c9916ade0110aab5e86d131/django-diary-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "17aa4965c6cc51bfea9b392fc9f107d5", "sha256": "d40d246e388b5c92facb57d371b7e649bd33763943d0c3d290e7944973a9fe81" }, "downloads": -1, "filename": "django-diary-0.1.1.tar.gz", "has_sig": false, "md5_digest": "17aa4965c6cc51bfea9b392fc9f107d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40226, "upload_time": "2015-09-26T13:26:05", "url": "https://files.pythonhosted.org/packages/2f/2e/6469c32fefb0a4e599e1d381368ba7639ed67786b2e3fec7025698cf7b59/django-diary-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "71a92365c08338157089ce725160af3d", "sha256": "4f3a3fff026f6fc1511e4b9caddc3e1e4e2b4e72dabd2c7c4385616177568288" }, "downloads": -1, "filename": "django-diary-0.1.2.tar.gz", "has_sig": false, "md5_digest": "71a92365c08338157089ce725160af3d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40994, "upload_time": "2015-10-05T10:10:32", "url": "https://files.pythonhosted.org/packages/da/11/6f366d0bba1b5bfb970f2e520a560d6189d0fe5403fb231376895325e545/django-diary-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "f020b84ccf40699988625e7b670def16", "sha256": "ee833e95f6cb797b7f44f5f747cf51cf8f5b09e544294ff3c0102fa5bbdc06aa" }, "downloads": -1, "filename": "django-diary-0.1.3.tar.gz", "has_sig": false, "md5_digest": "f020b84ccf40699988625e7b670def16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41219, "upload_time": "2015-10-07T11:05:49", "url": "https://files.pythonhosted.org/packages/d6/c8/022725507ad65470f1e72bd3bae1816e871f02fdd175b2930cf4f832667b/django-diary-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "efefae6def96d16c17e0938cd479b57f", "sha256": "37597d51e12cc67df6a4412df1f947b0776184543585c25790588a36f65ace00" }, "downloads": -1, "filename": "django-diary-0.1.4.tar.gz", "has_sig": false, "md5_digest": "efefae6def96d16c17e0938cd479b57f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41314, "upload_time": "2015-10-07T13:32:35", "url": "https://files.pythonhosted.org/packages/d2/94/eeac6a01f052f9d28a070585c2059de0c0cd73690e5da187ccc0228798ec/django-diary-0.1.4.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "ac355c56132afbcbe7d1588cc14aec3b", "sha256": "fb85c3b3e9ade8d5f82da2010c2f78341086bce584876edb67f8459a8375ee87" }, "downloads": -1, "filename": "django-diary-0.2.tar.gz", "has_sig": false, "md5_digest": "ac355c56132afbcbe7d1588cc14aec3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44852, "upload_time": "2015-10-10T15:21:26", "url": "https://files.pythonhosted.org/packages/29/45/1e579737c15b8ca86dcf02d52c23607c57816a083cd985a94487c707f796/django-diary-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "3d5c3e46bcd7efcdfee77b17a3c93d53", "sha256": "6e727ae4060d77856ee3ec435c0e42c8fc762940873031e7ed9d068f130ff071" }, "downloads": -1, "filename": "django-diary-0.2.1.tar.gz", "has_sig": false, "md5_digest": "3d5c3e46bcd7efcdfee77b17a3c93d53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52318, "upload_time": "2015-10-16T13:09:20", "url": "https://files.pythonhosted.org/packages/e5/5a/5cf9a4cc62d524c371f1d6713a722d56fbe06fa84795dcee26794b173b78/django-diary-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "69378b9f1da86b670e751e993a9fe056", "sha256": "3ab6cfef40d1581e290390bb5490038839ca4e1152665c6613cc42611fac7111" }, "downloads": -1, "filename": "django-diary-0.2.2.tar.gz", "has_sig": false, "md5_digest": "69378b9f1da86b670e751e993a9fe056", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54620, "upload_time": "2015-10-19T13:14:51", "url": "https://files.pythonhosted.org/packages/61/73/2cbd9ae4e23fc5cd963ac3f452908eb7664cd69d7d35630a4a53c57db029/django-diary-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "1ef8d5b74da0e6d5e3825b5c6cd17910", "sha256": "ee78d654a643ae19d2b85cb7385365f5e090fffc77aae44e54e93e7df1c3fa65" }, "downloads": -1, "filename": "django-diary-0.2.3.tar.gz", "has_sig": false, "md5_digest": "1ef8d5b74da0e6d5e3825b5c6cd17910", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56179, "upload_time": "2015-10-20T15:58:11", "url": "https://files.pythonhosted.org/packages/d3/9e/98adae74ab7f0f49e0ff1c13152b47e6b94a82e7e60026dd7ab1e7056ad0/django-diary-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "057a029e4e6e94b4352134bdde704e2c", "sha256": "2a8d02bc45458bd59ec3ea426f89d0613977c808b52ac16f5d1d540adaaa3169" }, "downloads": -1, "filename": "django-diary-0.2.4.tar.gz", "has_sig": false, "md5_digest": "057a029e4e6e94b4352134bdde704e2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56059, "upload_time": "2015-10-21T11:35:44", "url": "https://files.pythonhosted.org/packages/5d/98/73c0a7dd7331c978de4b2def92599b171dfcb0b5bdefe38fe60ebf753318/django-diary-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "42b414892b019cdea7a2153eb2f7d09a", "sha256": "be97448d0fa766881f93a00b22cfa730b696a73302d4a4c669a3b007021a82c7" }, "downloads": -1, "filename": "django-diary-0.2.5.tar.gz", "has_sig": false, "md5_digest": "42b414892b019cdea7a2153eb2f7d09a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56130, "upload_time": "2015-10-22T10:15:44", "url": "https://files.pythonhosted.org/packages/50/cf/89435342664b6b67a23ee568b9849006bf5aaff87e162bf7ea81dfc2af29/django-diary-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "cf885d8e120170979b9340c64e317796", "sha256": "742b339f5c40df7c495479908c8b28c69196ee8fa2cf3ffe394321cec01d1bcc" }, "downloads": -1, "filename": "django-diary-0.2.6.tar.gz", "has_sig": false, "md5_digest": "cf885d8e120170979b9340c64e317796", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56952, "upload_time": "2015-10-25T12:00:04", "url": "https://files.pythonhosted.org/packages/b2/67/b186d0e3200f3008fc0021ace8bb8e4ec1080d29b639a9a1639a2835d257/django-diary-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "be96897111a0d98b20c6c93417568b76", "sha256": "25494b6bd829e69259ff2f3a3a981357d7dd00cf78dc0a809b7d3141249d621c" }, "downloads": -1, "filename": "django-diary-0.2.7.tar.gz", "has_sig": false, "md5_digest": "be96897111a0d98b20c6c93417568b76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57467, "upload_time": "2015-10-26T12:25:50", "url": "https://files.pythonhosted.org/packages/43/1c/3dac28c5973804e9a58308e758f478180a70bd434fad16070abb3598e70b/django-diary-0.2.7.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "a3541452ea1b575dd8e1a07a17fa289e", "sha256": "3086b9c537724f5daa94bb1622645231e67ce2c56ae0f8731cfc8b6ca17a428d" }, "downloads": -1, "filename": "django-diary-0.3.tar.gz", "has_sig": false, "md5_digest": "a3541452ea1b575dd8e1a07a17fa289e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59944, "upload_time": "2015-10-30T14:38:35", "url": "https://files.pythonhosted.org/packages/47/d5/42a1143cfd889073f0146a8442a3e2c218dbe7b28766b442e4c7ad34b1a0/django-diary-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "024af457127d2e308622f6bca7436462", "sha256": "72d0dc025a391aa79a8dbc4d84da2f471be4232aaf5b48ca5c8ae6c098856c45" }, "downloads": -1, "filename": "django-diary-0.3.1.tar.gz", "has_sig": false, "md5_digest": "024af457127d2e308622f6bca7436462", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60033, "upload_time": "2015-11-01T12:26:36", "url": "https://files.pythonhosted.org/packages/bd/4c/49dceea88d7a5ab51b08016b445c17605739d8762273455f8ea534dd91f9/django-diary-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "406932f682759d831b943d4b5dfbb335", "sha256": "2223a2a7f24c93b743f889a8f8c0e3288930212c970db92f55632875f173bdc6" }, "downloads": -1, "filename": "django-diary-0.3.2.tar.gz", "has_sig": false, "md5_digest": "406932f682759d831b943d4b5dfbb335", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60068, "upload_time": "2015-11-02T15:13:26", "url": "https://files.pythonhosted.org/packages/af/78/599c122c75cc5c95d29825b7a01f805f93720cfd62537a48ed6b5a5af308/django-diary-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "b57a5cfab05eebebcb6aa40b474cc4e1", "sha256": "cb5ea6bba95fef5404d9f97d144387d2a5b17b632c42a5e52ce8ab4711e429cf" }, "downloads": -1, "filename": "django-diary-0.3.3.tar.gz", "has_sig": false, "md5_digest": "b57a5cfab05eebebcb6aa40b474cc4e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60512, "upload_time": "2015-11-05T11:59:57", "url": "https://files.pythonhosted.org/packages/16/a4/db464aaabe784fe129e17af044ddfe2bfe7c064fd7b0ebee189a2224609e/django-diary-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "1744729afd2e5df183a1d60770adc15a", "sha256": "bd3aa6f477108d00baa5026ebb2e04ea4ed13521785c7f34562fa41292b5b349" }, "downloads": -1, "filename": "django-diary-0.3.4.tar.gz", "has_sig": false, "md5_digest": "1744729afd2e5df183a1d60770adc15a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60560, "upload_time": "2015-11-19T11:49:52", "url": "https://files.pythonhosted.org/packages/15/98/a08d60dccff1005c620f7abcb68e26b581c8baea17ccfdd4380554c4b3e2/django-diary-0.3.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1744729afd2e5df183a1d60770adc15a", "sha256": "bd3aa6f477108d00baa5026ebb2e04ea4ed13521785c7f34562fa41292b5b349" }, "downloads": -1, "filename": "django-diary-0.3.4.tar.gz", "has_sig": false, "md5_digest": "1744729afd2e5df183a1d60770adc15a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60560, "upload_time": "2015-11-19T11:49:52", "url": "https://files.pythonhosted.org/packages/15/98/a08d60dccff1005c620f7abcb68e26b581c8baea17ccfdd4380554c4b3e2/django-diary-0.3.4.tar.gz" } ] }