From 6218ccc570c674bfaaf1c636382ac6f9adbf212b Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 23 Mar 2012 17:48:43 -0500 Subject: Use python hashlib directly Django hashcompat is now deprecated. Signed-off-by: Dan McGee --- main/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'main/utils.py') diff --git a/main/utils.py b/main/utils.py index 81f689e7..03441c15 100644 --- a/main/utils.py +++ b/main/utils.py @@ -4,9 +4,9 @@ except ImportError: import pickle from datetime import datetime +import hashlib from django.core.cache import cache -from django.utils.hashcompat import md5_constructor CACHE_TIMEOUT = 1800 INVALIDATE_TIMEOUT = 10 @@ -15,7 +15,7 @@ CACHE_LATEST_PREFIX = 'cache_latest_' def cache_function_key(func, args, kwargs): raw = [func.__name__, func.__module__, args, kwargs] pickled = pickle.dumps(raw, protocol=pickle.HIGHEST_PROTOCOL) - key = md5_constructor(pickled).hexdigest() + key = hashlib.md5(pickled).hexdigest() return 'cache_function.' + func.__name__ + '.' + key def cache_function(length): -- cgit v1.2.3-2-g168b From bc1ba4e95a3e572779eb8ba8a947e8d3ce165845 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 23 Mar 2012 18:45:01 -0500 Subject: PEP8 cleanup with blank lines Signed-off-by: Dan McGee --- main/utils.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'main/utils.py') diff --git a/main/utils.py b/main/utils.py index 03441c15..8143ea6a 100644 --- a/main/utils.py +++ b/main/utils.py @@ -8,16 +8,19 @@ import hashlib from django.core.cache import cache + CACHE_TIMEOUT = 1800 INVALIDATE_TIMEOUT = 10 CACHE_LATEST_PREFIX = 'cache_latest_' + def cache_function_key(func, args, kwargs): raw = [func.__name__, func.__module__, args, kwargs] pickled = pickle.dumps(raw, protocol=pickle.HIGHEST_PROTOCOL) key = hashlib.md5(pickled).hexdigest() return 'cache_function.' + func.__name__ + '.' + key + def cache_function(length): """ A variant of the snippet posted by Jeff Wheeler at @@ -43,6 +46,7 @@ def cache_function(length): return inner_func return decorator + def clear_cache_function(func, args, kwargs): key = cache_function_key(func, args, kwargs) cache.delete(key) @@ -50,6 +54,7 @@ def clear_cache_function(func, args, kwargs): # utility to make a pair of django choices make_choice = lambda l: [(str(m), str(m)) for m in l] + # These are in here because we would be jumping around in some import circles # and hoops otherwise. The only thing currently using these keys is the feed # caching stuff. @@ -65,6 +70,7 @@ def refresh_latest(**kwargs): # will be valid again. See "Scaling Django" by Mike Malone, slide 30. cache.set(cache_key, None, INVALIDATE_TIMEOUT) + def retrieve_latest(sender): # we could break this down based on the request url, but it would probably # cost us more in query time to do so. @@ -84,6 +90,7 @@ def retrieve_latest(sender): pass return None + 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.''' @@ -91,6 +98,7 @@ def set_created_field(sender, **kwargs): if hasattr(obj, 'created') and not obj.created: obj.created = datetime.utcnow() + def groupby_preserve_order(iterable, keyfunc): '''Take an iterable and regroup using keyfunc to determine whether items belong to the same group. The order of the iterable is preserved and @@ -112,6 +120,7 @@ def groupby_preserve_order(iterable, keyfunc): return result + class PackageStandin(object): '''Resembles a Package object, and has a few of the same fields, but is really a link to a pkgbase that has no package with matching pkgname.''' -- cgit v1.2.3-2-g168b From 90e08b4863dfaecafee5b151478bda4513b12e85 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 23 Mar 2012 19:29:40 -0500 Subject: 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 --- main/utils.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'main/utils.py') 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): -- cgit v1.2.3-2-g168b