app/soc/logic/models/user.py
author Sverre Rabbelier <srabbelier@gmail.com>
Sat, 10 Jan 2009 18:17:44 +0000
changeset 801 06a84103ed8b
parent 744 cd9bf163473c
child 862 fac7cb803aaf
permissions -rw-r--r--
Invite (backup-)admin when creating a club Patch by: Sverre Rabbelier
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     2
#
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     3
# Copyright 2008 the Melange authors.
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     4
#
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     8
#
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    10
#
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    16
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    17
"""User (Model) query functions.
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    18
"""
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    19
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    20
__authors__ = [
429
e50e18936f06 Fixed typo in e-mail address
Sverre Rabbelier <srabbelier@gmail.com>
parents: 316
diff changeset
    21
  '"Sverre Rabbelier" <sverre@rabbelier.nl>',
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    22
  ]
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    23
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    24
722
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    25
from google.appengine.api import users
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    26
640
a62a78fe4e43 Added User welcome message.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 533
diff changeset
    27
from soc.logic.helper import notifications
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    28
from soc.logic.models import base
316
9efdc7bc3565 Add missing blank lines between imports and sort all of the imports.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 308
diff changeset
    29
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    30
import soc.models.user
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    31
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    32
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    33
class Logic(base.Logic):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 496
diff changeset
    34
  """Logic methods for the User model.
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    35
  """
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    36
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    37
  def __init__(self):
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    38
    """Defines the name, key_name and model for this entity.
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    39
    """
655
9635cbaa2dcd Cleanups to the logic module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 640
diff changeset
    40
9635cbaa2dcd Cleanups to the logic module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 640
diff changeset
    41
    super(Logic, self).__init__(soc.models.user.User,
481
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
    42
                        skip_properties=['former_accounts'])
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    43
481
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
    44
  def isFormerAccount(self, account):
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
    45
    """Returns true if account is a former account of some User.
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
    46
    """
655
9635cbaa2dcd Cleanups to the logic module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 640
diff changeset
    47
533
ba3309b2fd30 Move LINK_ID and SCOPE_PATH regular expressions to soc/models/linkable.py.
Todd Larsen <tlarsen@google.com>
parents: 512
diff changeset
    48
    # TODO(pawel.solyga): replace 1000 with solution that works for any
ba3309b2fd30 Move LINK_ID and SCOPE_PATH regular expressions to soc/models/linkable.py.
Todd Larsen <tlarsen@google.com>
parents: 512
diff changeset
    49
    #   number of queries
481
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
    50
    users_with_former_accounts = soc.models.user.User.gql(
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
    51
        'WHERE former_accounts != :1', None).fetch(1000)
655
9635cbaa2dcd Cleanups to the logic module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 640
diff changeset
    52
481
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
    53
    for former_account_user in users_with_former_accounts: 
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
    54
      if account in former_account_user.former_accounts:
448
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 434
diff changeset
    55
        return True
655
9635cbaa2dcd Cleanups to the logic module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 640
diff changeset
    56
448
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 434
diff changeset
    57
    return False
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 434
diff changeset
    58
722
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    59
  def getForCurrentAccount(self):
744
cd9bf163473c Add missing dots, fix imports sorting and too long lines in different modules. Add TODO in soc.views.models.host module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 722
diff changeset
    60
    """Retrieves the user entity for the currently logged in account.
722
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    61
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    62
    If there is no user logged in, or they have no associated User
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    63
    entity, None is returend.
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    64
    """
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    65
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    66
    account = users.get_current_user()
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    67
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    68
    if not account:
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    69
      return None
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    70
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    71
    user = self.getForFields({'account': account}, unique=True)
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    72
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    73
    return user
a59eaa177562 Added getForCurrentAccount to user.Logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 655
diff changeset
    74
434
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    75
  def getKeyValues(self, entity):
448
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 434
diff changeset
    76
    """See base.Logic.getKeyValues.
434
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    77
    """
459
2cfcedaf7c16 Preparation for generic user views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 448
diff changeset
    78
512
aae25d2b4464 Rename link_name to link_id everywhere, regardless of case (so LINK_NAME
Todd Larsen <tlarsen@google.com>
parents: 505
diff changeset
    79
    return [entity.link_id]
434
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    80
459
2cfcedaf7c16 Preparation for generic user views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 448
diff changeset
    81
  def getSuffixValues(self, entity):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 496
diff changeset
    82
    """See base.Logic.getSuffixValues.
459
2cfcedaf7c16 Preparation for generic user views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 448
diff changeset
    83
    """
2cfcedaf7c16 Preparation for generic user views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 448
diff changeset
    84
512
aae25d2b4464 Rename link_name to link_id everywhere, regardless of case (so LINK_NAME
Todd Larsen <tlarsen@google.com>
parents: 505
diff changeset
    85
    return [entity.link_id]
459
2cfcedaf7c16 Preparation for generic user views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 448
diff changeset
    86
434
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    87
  def getKeyValuesFromFields(self, fields):
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    88
    """See base.Logic.getKeyValuesFromFields.
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    89
    """
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    90
512
aae25d2b4464 Rename link_name to link_id everywhere, regardless of case (so LINK_NAME
Todd Larsen <tlarsen@google.com>
parents: 505
diff changeset
    91
    return [fields['link_id']]
434
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    92
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    93
  def getKeyFieldNames(self):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 496
diff changeset
    94
    """See base.Logic.getKeyFieldNames.
434
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    95
    """
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    96
512
aae25d2b4464 Rename link_name to link_id everywhere, regardless of case (so LINK_NAME
Todd Larsen <tlarsen@google.com>
parents: 505
diff changeset
    97
    return ['link_id']
434
a4fc430fefac Added key field definitions to the User logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 432
diff changeset
    98
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    99
  def _updateField(self, model, name, value):
481
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
   100
    """Special case logic for account.
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   101
481
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
   102
    When the account is changed, the former_accounts field should be appended
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
   103
    with the old account.
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   104
    """
533
ba3309b2fd30 Move LINK_ID and SCOPE_PATH regular expressions to soc/models/linkable.py.
Todd Larsen <tlarsen@google.com>
parents: 512
diff changeset
   105
    if (name == 'account') and (model.account != value):
481
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 459
diff changeset
   106
      model.former_accounts.append(model.account)
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   107
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   108
    return True
640
a62a78fe4e43 Added User welcome message.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 533
diff changeset
   109
  
a62a78fe4e43 Added User welcome message.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 533
diff changeset
   110
  def _onCreate(self, entity):
a62a78fe4e43 Added User welcome message.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 533
diff changeset
   111
    """Send out a message to welcome the new user.
a62a78fe4e43 Added User welcome message.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 533
diff changeset
   112
    """
a62a78fe4e43 Added User welcome message.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 533
diff changeset
   113
    notifications.sendWelcomeMessage(entity)
308
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   114
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   115
740090cd17c9 Added invididual model logic files
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   116
logic = Logic()