aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework/compat.py
diff options
context:
space:
mode:
authorMjumbe Wawatu Poe2012-09-07 17:05:21 -0400
committerMjumbe Wawatu Poe2012-09-07 17:05:21 -0400
commit7d9125bcb69950e54bb9c2ca61f59403c1018178 (patch)
treebb020483d1eeffdbbfa3fa0ab2682c99142c2e3e /djangorestframework/compat.py
parent72bdd0fcec7faa32d7f24e0698736f9433b56f3f (diff)
downloaddjango-rest-framework-7d9125bcb69950e54bb9c2ca61f59403c1018178.tar.bz2
Fix Django 1.3 compatibility
Diffstat (limited to 'djangorestframework/compat.py')
-rw-r--r--djangorestframework/compat.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/djangorestframework/compat.py b/djangorestframework/compat.py
index 7ced70c5..f21dc4ef 100644
--- a/djangorestframework/compat.py
+++ b/djangorestframework/compat.py
@@ -366,6 +366,59 @@ else:
return self._accept(request)
+# timezone support is new in Django 1.4
+try:
+ from django.utils import timezone
+except ImportError:
+ timezone = None
+
+# dateparse is ALSO new in Django 1.4
+try:
+ from django.utils.dateparse import parse_date, parse_datetime
+except ImportError:
+ import datetime
+ import re
+
+ date_re = re.compile(
+ r'(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})$'
+ )
+
+ datetime_re = re.compile(
+ r'(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})'
+ r'[T ](?P<hour>\d{1,2}):(?P<minute>\d{1,2})'
+ r'(?::(?P<second>\d{1,2})(?:\.(?P<microsecond>\d{1,6})\d{0,6})?)?'
+ r'(?P<tzinfo>Z|[+-]\d{1,2}:\d{1,2})?$'
+ )
+
+ time_re = re.compile(
+ r'(?P<hour>\d{1,2}):(?P<minute>\d{1,2})'
+ r'(?::(?P<second>\d{1,2})(?:\.(?P<microsecond>\d{1,6})\d{0,6})?)?'
+ )
+
+ def parse_date(value):
+ match = date_re.match(value)
+ if match:
+ kw = dict((k, int(v)) for k, v in match.groupdict().iteritems())
+ return datetime.date(**kw)
+
+ def parse_time(value):
+ match = time_re.match(value)
+ if match:
+ kw = match.groupdict()
+ if kw['microsecond']:
+ kw['microsecond'] = kw['microsecond'].ljust(6, '0')
+ kw = dict((k, int(v)) for k, v in kw.iteritems() if v is not None)
+ return datetime.time(**kw)
+
+ def parse_datetime(value):
+ """Parse datetime, but w/o the timezone awareness in 1.4"""
+ match = datetime_re.match(value)
+ if match:
+ kw = match.groupdict()
+ if kw['microsecond']:
+ kw['microsecond'] = kw['microsecond'].ljust(6, '0')
+ kw = dict((k, int(v)) for k, v in kw.iteritems() if v is not None)
+ return datetime.datetime(**kw)
# Markdown is optional
try: