app/soc/logic/models/user.py
changeset 481 94834a1e6c01
parent 459 2cfcedaf7c16
child 494 5e9c656a1b68
equal deleted inserted replaced
480:9b07ddeb1412 481:94834a1e6c01
    32   """
    32   """
    33 
    33 
    34   def __init__(self):
    34   def __init__(self):
    35     """Defines the name, key_name and model for this entity.
    35     """Defines the name, key_name and model for this entity.
    36     """
    36     """
       
    37     base.Logic.__init__(self, soc.models.user.User,
       
    38                         skip_properties=['former_accounts'])
    37 
    39 
    38     self._name = "User"
    40   def isFormerAccount(self, account):
    39     self._model = soc.models.user.User
    41     """Returns true if account is a former account of some User.
    40     self._skip_properties = ['former_ids']
    42     """
    41 
       
    42   def isFormerId(self, id):
       
    43     """Returns true if id is in former ids"""
       
    44     # TODO(pawel.solyga): replace 1000 with solution that works for any number of queries
    43     # TODO(pawel.solyga): replace 1000 with solution that works for any number of queries
    45     users_with_former_ids = soc.models.user.User.gql('WHERE former_ids != :1', None).fetch(1000)
    44     users_with_former_accounts = soc.models.user.User.gql(
       
    45         'WHERE former_accounts != :1', None).fetch(1000)
    46     
    46     
    47     for former_id_user in users_with_former_ids: 
    47     for former_account_user in users_with_former_accounts: 
    48       if id in former_id_user.former_ids:
    48       if account in former_account_user.former_accounts:
    49         return True
    49         return True
    50     
    50     
    51     return False
    51     return False
    52 
    52 
    53   def getKeyValues(self, entity):
    53   def getKeyValues(self, entity):
    54     """See base.Logic.getKeyValues.
    54     """See base.Logic.getKeyValues.
    55     """
    55     """
    56 
    56 
    57     return [entity.id.email()]
    57     return [entity.account.email()]
    58 
    58 
    59   def getSuffixValues(self, entity):
    59   def getSuffixValues(self, entity):
    60     """See base.Logic.getSuffixValues
    60     """See base.Logic.getSuffixValues
    61     """
    61     """
    62 
    62 
    72     properties = {
    72     properties = {
    73         'link_name': fields['link_name']
    73         'link_name': fields['link_name']
    74         }
    74         }
    75 
    75 
    76     entity = self.getForFields(properties, unique=True)
    76     entity = self.getForFields(properties, unique=True)
    77     return [entity.id.email()]
    77     return [entity.account.email()]
    78 
    78 
    79   def getKeyFieldNames(self):
    79   def getKeyFieldNames(self):
    80     """See base.Logic.getKeyFieldNames
    80     """See base.Logic.getKeyFieldNames
    81     """
    81     """
    82 
    82 
    83     return ['email']
    83     return ['email']
    84 
    84 
    85   def updateOrCreateFromId(self, properties, id):
    85   def updateOrCreateFromAccount(self, properties, account):
    86     """Like updateOrCreateFromKeyName, but resolves id to a key_name first.
    86     """Like updateOrCreateFromKeyName, but resolves account to key_name first.
    87     """
    87     """
    88 
    88 
    89     # attempt to retrieve the existing entity
    89     # attempt to retrieve the existing entity
    90     user = soc.models.user.User.gql('WHERE id = :1', id).get()
    90     user = soc.models.user.User.gql('WHERE account = :1', account).get()
    91     
    91     
    92     if user:
    92     if user:
    93       key_name = user.key().name()
    93       key_name = user.key().name()
    94     else:
    94     else:
    95       key_name  = self.getKeyNameForFields({'email': id.email()})
    95       key_name  = self.getKeyNameForFields({'email': account.email()})
    96 
    96 
    97     return self.updateOrCreateFromKeyName(properties, key_name)
    97     return self.updateOrCreateFromKeyName(properties, key_name)
    98 
    98 
    99   def _updateField(self, model, name, value):
    99   def _updateField(self, model, name, value):
   100     """Special case logic for id.
   100     """Special case logic for account.
   101 
   101 
   102     When the id is changed, the former_ids field should be appended
   102     When the account is changed, the former_accounts field should be appended
   103     with the old id.
   103     with the old account.
   104     """
   104     """
   105     if name == 'id' and model.id != value:
   105     if name == 'account' and model.account != value:
   106       model.former_ids.append(model.id)
   106       model.former_accounts.append(model.account)
   107 
   107 
   108     return True
   108     return True
   109 
   109 
   110 
   110 
   111 logic = Logic()
   111 logic = Logic()