summaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2012-03-23 19:29:40 -0500
committerDan McGee <dan@archlinux.org>2012-03-23 19:54:40 -0500
commit90e08b4863dfaecafee5b151478bda4513b12e85 (patch)
treed25065edd39e1357ea0fd8b24ea86ce5630a8fb6 /main
parentbc1ba4e95a3e572779eb8ba8a947e8d3ce165845 (diff)
downloadarchweb-90e08b4863dfaecafee5b151478bda4513b12e85.tar.gz
archweb-90e08b4863dfaecafee5b151478bda4513b12e85.zip
Make all datetime objects fully timezone aware
This is most of the transition to Django 1.4 `USE_TZ = True`. We need to ensure we don't mix aware and non-aware datetime objects when dealing with datetimes in the code. Add a utc_now() helper method that we can use most places, and ensure there is always a timezone attached when necessary. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'main')
-rw-r--r--main/migrations/0050_auto__chg_field_package_compressed_size__chg_field_package_installed_s.py5
-rw-r--r--main/migrations/0054_auto__add_field_donor_created.py5
-rw-r--r--main/models.py4
-rw-r--r--main/utils.py12
4 files changed, 19 insertions, 7 deletions
diff --git a/main/migrations/0050_auto__chg_field_package_compressed_size__chg_field_package_installed_s.py b/main/migrations/0050_auto__chg_field_package_compressed_size__chg_field_package_installed_s.py
index 7aa09596..8368ae2e 100644
--- a/main/migrations/0050_auto__chg_field_package_compressed_size__chg_field_package_installed_s.py
+++ b/main/migrations/0050_auto__chg_field_package_compressed_size__chg_field_package_installed_s.py
@@ -1,5 +1,6 @@
# encoding: utf-8
import datetime
+from pytz import utc
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
@@ -9,7 +10,9 @@ class Migration(SchemaMigration):
def forwards(self, orm):
db.alter_column('packages', 'compressed_size', self.gf('main.models.PositiveBigIntegerField')(default=0))
db.alter_column('packages', 'installed_size', self.gf('main.models.PositiveBigIntegerField')(default=0))
- db.alter_column('packages', 'last_update', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2000, 1, 1)))
+ old_date = datetime.datetime(2000, 1, 1)
+ old_date = old_date.replace(tzinfo=utc)
+ db.alter_column('packages', 'last_update', self.gf('django.db.models.fields.DateTimeField')(default=old_date))
def backwards(self, orm):
db.alter_column('packages', 'compressed_size', self.gf('django.db.models.fields.BigIntegerField')(null=True))
diff --git a/main/migrations/0054_auto__add_field_donor_created.py b/main/migrations/0054_auto__add_field_donor_created.py
index f4d5b157..c96c0f5d 100644
--- a/main/migrations/0054_auto__add_field_donor_created.py
+++ b/main/migrations/0054_auto__add_field_donor_created.py
@@ -1,5 +1,6 @@
# encoding: utf-8
import datetime
+from pytz import utc
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
@@ -8,7 +9,9 @@ class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Donor.created'
- db.add_column('donors', 'created', self.gf('django.db.models.fields.DateTimeField')(default=datetime.date(2000, 1, 1)), keep_default=False)
+ old_date = datetime.datetime(2000, 1, 1)
+ old_date = old_date.replace(tzinfo=utc)
+ db.add_column('donors', 'created', self.gf('django.db.models.fields.DateTimeField')(default=old_date), keep_default=False)
def backwards(self, orm):
diff --git a/main/models.py b/main/models.py
index 4f2d64ea..7d017242 100644
--- a/main/models.py
+++ b/main/models.py
@@ -9,7 +9,7 @@ from django.contrib.auth.models import User
from django.contrib.sites.models import Site
from .fields import PositiveBigIntegerField, PGPKeyField
-from .utils import cache_function, make_choice, set_created_field
+from .utils import cache_function, make_choice, set_created_field, utc_now
class UserProfile(models.Model):
@@ -515,7 +515,7 @@ class TodolistPkg(models.Model):
def set_todolist_fields(sender, **kwargs):
todolist = kwargs['instance']
if not todolist.date_added:
- todolist.date_added = datetime.utcnow()
+ todolist.date_added = utc_now()
# connect signals needed to keep cache in line with reality
from main.utils import refresh_latest
diff --git a/main/utils.py b/main/utils.py
index 8143ea6a..e7e47c53 100644
--- a/main/utils.py
+++ b/main/utils.py
@@ -5,6 +5,7 @@ except ImportError:
from datetime import datetime
import hashlib
+from pytz import utc
from django.core.cache import cache
@@ -91,12 +92,17 @@ def retrieve_latest(sender):
return None
+def utc_now():
+ '''Returns a timezone-aware UTC date representing now.'''
+ return datetime.utcnow().replace(tzinfo=utc)
+
+
def set_created_field(sender, **kwargs):
- '''This will set the 'created' field on any object to datetime.utcnow() if
- it is unset. For use as a pre_save signal handler.'''
+ '''This will set the 'created' field on any object to the current UTC time
+ if it is unset. For use as a pre_save signal handler.'''
obj = kwargs['instance']
if hasattr(obj, 'created') and not obj.created:
- obj.created = datetime.utcnow()
+ obj.created = utc_now()
def groupby_preserve_order(iterable, keyfunc):