app/soc/cache/home.py
author Lennard de Rijk <ljvderijk@gmail.com>
Mon, 24 Aug 2009 18:44:41 +0200
changeset 2793 8c88226b27e7
parent 2409 5ffa2372f1d6
child 2869 1ac6a1e1e429
permissions -rw-r--r--
Set default taking access for GradingProjectSurvey to org. This will allow Mentors and Org Admins to take GradingProjectSurveys in case that an Org Admin has no Mentor roles.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     2
#
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     3
# Copyright 2009 the Melange authors.
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     4
#
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     8
#
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    10
#
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    16
2409
5ffa2372f1d6 fix copy/paste fail in homepage caching
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 2365
diff changeset
    17
"""Module contains homepage memcaching functions.
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    18
"""
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    19
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    20
__authors__ = [
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    21
    '"Sverre Rabbelier" <sverre@rabbelier.nl>',
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    22
  ]
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    23
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    24
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    25
import logging
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    26
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    27
from google.appengine.api import memcache
1600
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1419
diff changeset
    28
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1419
diff changeset
    29
from soc.logic import accounts
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    30
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    31
import soc.cache.base
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    32
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    33
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    34
def key(entity):
2409
5ffa2372f1d6 fix copy/paste fail in homepage caching
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 2365
diff changeset
    35
  """Returns the memcache key for an entities homepage.
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    36
  """
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    37
2160
3f9dd37d98a8 Use key().id_or_name() instead of key().name()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1600
diff changeset
    38
  return 'homepage_for_%s_%s' % (entity.kind(), entity.key().id_or_name())
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    39
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    40
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    41
def get(self, *args, **kwargs):
2409
5ffa2372f1d6 fix copy/paste fail in homepage caching
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 2365
diff changeset
    42
  """Retrieves the homepage for the specified entity from the memcache.
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    43
  """
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    44
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    45
  # only cache the page for non-logged-in users
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    46
  # TODO: figure out how to cache everything but the sidebar
1600
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1419
diff changeset
    47
  # also, no need to normalize as we don't use it anyway
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1419
diff changeset
    48
  if accounts.getCurrentAccount(normalize=False):
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    49
    return (None, None)
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    50
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    51
  entity = self._logic.getFromKeyFields(kwargs)
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    52
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    53
  # if we can't retrieve the entity, leave it to the actual method
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    54
  if not entity:
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    55
    return (None, None)
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    56
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    57
  memcache_key = key(entity)
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    58
  logging.info("Retrieving %s" % memcache_key)
2365
a66e1dd8ced7 Add pylint: disable-msg= where needed in Melange modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 2160
diff changeset
    59
  # pylint: disable-msg=E1101
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    60
  return memcache.get(memcache_key), memcache_key
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    61
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    62
def put(result, memcache_key, *args, **kwargs):
2409
5ffa2372f1d6 fix copy/paste fail in homepage caching
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 2365
diff changeset
    63
  """Sets the homepage for the specified entity in the memcache.
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    64
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    65
  Args:
2409
5ffa2372f1d6 fix copy/paste fail in homepage caching
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 2365
diff changeset
    66
    result: the homepage to be cached
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    67
  """
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    68
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    69
  # no sense in storing anything if we won't query it later on
1600
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1419
diff changeset
    70
  # also, no need to normalize as we don't use it anyway
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1419
diff changeset
    71
  if accounts.getCurrentAccount(normalize=False):
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    72
    return
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    73
2409
5ffa2372f1d6 fix copy/paste fail in homepage caching
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 2365
diff changeset
    74
  # Store homepage for just ten minutes to force a refresh every so often
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    75
  retention = 10*60
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    76
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    77
  logging.info("Setting %s" % memcache_key)
2365
a66e1dd8ced7 Add pylint: disable-msg= where needed in Melange modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 2160
diff changeset
    78
  # pylint: disable-msg=E1101
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    79
  memcache.add(memcache_key, result, retention)
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    80
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    81
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    82
def flush(entity):
2409
5ffa2372f1d6 fix copy/paste fail in homepage caching
Sverre Rabbelier <sverre@rabbelier.nl>
parents: 2365
diff changeset
    83
  """Removes the homepage for the current entity from the memcache.
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    84
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    85
  Also calls soc.cache.rights.flush for the specified user.
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    86
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    87
  Args:
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    88
    id: defaults to the current account if not set
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    89
  """
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    90
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    91
  memcache_key = key(entity)
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    92
  logging.info("Flushing %s" % memcache_key)
2365
a66e1dd8ced7 Add pylint: disable-msg= where needed in Melange modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 2160
diff changeset
    93
  # pylint: disable-msg=E1101
1419
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    94
  memcache.delete(memcache_key)
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    95
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    96
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    97
# define the cache function
5d0f80ad7b9f Add caching to the homepage
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    98
cache = soc.cache.base.getCacher(get, put)