-Copyright (c) 2009-2011, iThink Software.
+Copyright (c) 2009-2012, iThink Software.
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
4. Optionally add a root node to your current Site.
5. (philo.contrib.gilbert) Add 'django.core.context_processors.request' to settings.TEMPLATE_CONTEXT_PROCESSORS.
-Philo should be ready to go! All that's left is to learn more <http://docs.philocms.org/> and contribute <http://docs.philocms.org/en/latest/contribute.html>.
+Philo should be ready to go! All that's left is to learn more <http://docs.philocms.org/> and contribute <http://docs.philocms.org/en/latest/contributing.html>.
4. Optionally add a root node to your current Site.
5. (philo.contrib.gilbert) Add 'django.core.context_processors.request' to settings.TEMPLATE_CONTEXT_PROCESSORS.
-Philo should be ready to go! All that's left is to [learn more](http://docs.philocms.org/) and [contribute](http://docs.philocms.org/en/latest/contribute.html).
+Philo should be ready to go! All that's left is to [learn more](http://docs.philocms.org/) and [contribute](http://docs.philocms.org/en/latest/contributing.html).
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
+sys.path.append(os.path.abspath(os.path.dirname(__file__)))
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "_ext")))
sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
# General information about the project.
project = u'Philo'
-copyright = u'2009-2011, iThink Software'
+copyright = u'2009-2012, iThink Software'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
So you want to contribute to Philo? That's great! Here's some ways you can get started:
* **Report bugs and request features** using the issue tracker at the `project site <http://project.philocms.org/>`_.
-* **Contribute code** using `git <http://git-scm.com/>`_. You can fork philo's repository either on `GitHub <http://github.com/ithinksw/philo/>`_ or `Gitorious <http://gitorious.org/ithinksw/philo/>`_. If you are contributing to Philo, you will need to submit a :ref:`Contributor License Agreement <cla>`.
+* **Contribute code** using `git <http://git-scm.com/>`_. You can fork philo's repository on `GitHub <http://github.com/ithinksw/philo/>`_, `Gitorious <http://gitorious.org/ithinksw/philo/>`_, or `Bitbucket <http://bitbucket.org/ithinksw/philo/>`_. If you are contributing to Philo, you will need to submit a :ref:`Contributor License Agreement <cla>`.
* **Join the discussion** on IRC at `irc://irc.oftc.net/#philo <irc://irc.oftc.net/#philo>`_ if you have any questions or suggestions or just want to chat about the project. You can also keep in touch using the project mailing lists: `philo@ithinksw.org <mailto:philo@ithinksw.org>`_ and `philo-devel@ithinksw.org <mailto:philo-devel@ithinksw.org>`_.
Welcome to Philo's documentation!
=================================
-Philo is a foundation for developing web content management systems. Please, read the :doc:`notes for our latest release <releases/0.9.1>`.
+Philo is a foundation for developing web content management systems. Please, read the :doc:`notes for our latest release <releases/0.9.2>`.
Prerequisites:
--- /dev/null
+Philo version 0.9.2 release notes
+=================================
+
+The primary focus of the 0.9.2 release was repairing the setuptools configuration so that Philo can be installed and updated reliably. In addition, a bug involving the use of :class:`DateTimeField` or :class:`DateField` as the field template for a :class:`JSONAttribute` has been fixed.
\ No newline at end of file
-VERSION = (0, 9, 1)
+VERSION = (0, 9, 2)
from itertools import tee
from django import forms
-from django.core.exceptions import FieldError
+from django.core.exceptions import FieldError, ValidationError
from django.db import models
from django.db.models.fields import NOT_PROVIDED
from django.utils.text import capfirst
"""If the field template is a :class:`DateField` or a :class:`DateTimeField`, this will convert the default return value to a datetime instance."""
value = super(JSONAttribute, self).value_from_object(obj)
if isinstance(self.field_template, (models.DateField, models.DateTimeField)):
- value = self.field_template.to_python(value)
+ try:
+ value = self.field_template.to_python(value)
+ except ValidationError:
+ value = None
return value
def get_storage_value(self, value):