#
from __future__ import with_statement
+import hashlib
import random
import re
import time
from django.core.files.uploadedfile import UploadedFile
from django.core.files.storage import DefaultStorage
from django.utils.encoding import force_unicode
-from django.utils.hashcompat import sha_constructor
from django.conf import settings
from os import mkdir, path, unlink
from errno import EEXIST, ENOENT
def get_random_hash(seed):
- sha_digest = sha_constructor('%s%s%s%s' %
+ sha_digest = hashlib.sha1('%s%s%s%s' %
(randrange(0, MAX_SESSION_KEY), time.time(), unicode(seed).encode('utf-8', 'replace'),
settings.SECRET_KEY)).digest()
return urlsafe_b64encode(sha_digest).replace('=', '').replace('_', '-').lower()
"""
from waiter.utils import clear_cache
clear_cache('book/%s' % book.slug)
+
+
+class AppSettings(object):
+ """Allows specyfying custom settings for an app, with default values.
+
+ Just subclass, set some properties and instantiate with a prefix.
+ Getting a SETTING from an instance will check for prefix_SETTING
+ in project settings if set, else take the default. The value will be
+ then filtered through _more_SETTING method, if there is one.
+
+ """
+ def __init__(self, prefix):
+ self._prefix = prefix
+
+ def __getattribute__(self, name):
+ if name.startswith('_'):
+ return object.__getattribute__(self, name)
+ value = getattr(settings,
+ "%s_%s" % (self._prefix, name),
+ object.__getattribute__(self, name))
+ more = "_more_%s" % name
+ if hasattr(self, more):
+ value = getattr(self, more)(value)
+ return value
+
+
+def trim_query_log(trim_to=25):
+ """
+connection.queries includes all SQL statements -- INSERTs, UPDATES, SELECTs, etc. Each time your app hits the database, the query will be recorded.
+This can sometimes occupy lots of memory, so trim it here a bit.
+ """
+ if settings.DEBUG:
+ from django.db import connection
+ connection.queries = trim_to > 0 \
+ and connection.queries[-trim_to:] \
+ or []
+