]> git.openstreetmap.org Git - osqa.git/blob - forum_modules/updater/startup.py
moving the update block to a separate function in the base package, creating the...
[osqa.git] / forum_modules / updater / startup.py
1 import datetime
2 import views
3 import logging
4 import settings
5
6 from xml.dom.minidom import parse, parseString
7 from forum.modules import ui, decorate
8 from forum.settings import SVN_REVISION
9 from django.contrib.auth.middleware import AuthenticationMiddleware
10 from django.core.exceptions import ObjectDoesNotExist
11 from django.utils.encoding import smart_str
12
13 from base import update_trigger
14
15 # Update the user messages
16 @decorate.result(AuthenticationMiddleware.process_request, needs_params=True)
17 def process_request(result, self, request):
18     # Call the update trigger on every request
19     update_trigger()
20
21     messages_dom = parseString(smart_str(settings.UPDATE_MESSAGES_XML.value))
22     messages = messages_dom.getElementsByTagName('message')
23
24     for message in messages:
25         # Get the SVN Revision
26         try:
27             svn_revision = int(SVN_REVISION.replace('SVN-', ''))
28         except ValueError:
29             # Here we'll have to find another way of getting the SVN revision
30             svn_revision = 0
31
32         message_body = message.getElementsByTagName('body')[0].firstChild.nodeValue
33         message_revision = int(message.getElementsByTagName('revision')[0].firstChild.nodeValue)
34
35         # Add the message to the user messages set only if the Message Revision number is greater than the
36         # current installation SVN Revision number and only if the current user is a super user.
37         if message_revision >= svn_revision and request.user.is_superuser:
38             # We do not want to repeat ourselves. If the message already exists in the message list, we're not going to
39             # add it. That's why first of all we're going the check if it is there.
40             try:
41                 # If the message doesn't exist in the RelatedManager ObjectsDoesNotExist is going to be raised.
42                 request.user.message_set.all().get(message=message_body)
43             except ObjectDoesNotExist:
44                 # Let's create the message.
45                 request.user.message_set.create(message=message_body)
46             except:
47                 pass
48     return result