1 | import datetime
|
---|
2 |
|
---|
3 | from django.contrib.sessions.models import Session
|
---|
4 | from django.core.paginator import ObjectPaginator
|
---|
5 |
|
---|
6 | #using paginator to work around QS._get_data sucking in whole result set: self._result_cache = list(self.iterator())
|
---|
7 | SESSION_GROUP_SIZE = 1000
|
---|
8 |
|
---|
9 | paginator = ObjectPaginator(Session.objects.filter(expire_date__gte=datetime.datetime.now()).order_by('session_key'),
|
---|
10 | SESSION_GROUP_SIZE)
|
---|
11 |
|
---|
12 |
|
---|
13 | j = 0
|
---|
14 | page_count = paginator.pages
|
---|
15 | for page in (paginator.get_page(i) for i in range(paginator.pages)): #generator over page qs to avoid holding onto more than one group of sessions at a time.
|
---|
16 | print "page %s of %s" % (j, page_count)
|
---|
17 | j+=1
|
---|
18 | for s in page:
|
---|
19 | mutated = False
|
---|
20 | bag = s.get_decoded()
|
---|
21 | try:
|
---|
22 | if not '_language' in bag: #skip existing usage of _language-- possibly from another version of django, or from a prior partial upgrade.
|
---|
23 | bag['_language'] = bag['django_language']
|
---|
24 | mutated = True
|
---|
25 | except KeyError: #no old django_language to port over.
|
---|
26 | continue
|
---|
27 | if 'django_language' in bag: #remove old key, making way for app usage.
|
---|
28 | del bag['django_language']
|
---|
29 | mutated = True
|
---|
30 | if mutated:
|
---|
31 | Session.objects.save(s.session_key, bag, s.expire_date)
|
---|