user: speed up data propagatation for auth users by pre-filling only selected variables
skipping some not-required and using faster update method (not setattr())
This commit is contained in:
parent
898c62f70d
commit
e350c718ba
2 changed files with 44 additions and 8 deletions
|
|
@ -696,6 +696,17 @@ class User(Base, BaseModel):
|
|||
.all()
|
||||
return [self.email] + [x.email for x in other]
|
||||
|
||||
def emails_cached(self):
|
||||
emails = UserEmailMap.query()\
|
||||
.filter(UserEmailMap.user == self) \
|
||||
.order_by(UserEmailMap.email_id.asc())
|
||||
|
||||
emails = emails.options(
|
||||
FromCache("sql_cache_short", "get_user_{}_emails".format(self.user_id))
|
||||
)
|
||||
|
||||
return [self.email] + [x.email for x in emails]
|
||||
|
||||
@property
|
||||
def auth_tokens(self):
|
||||
auth_tokens = self.get_auth_tokens()
|
||||
|
|
@ -854,6 +865,10 @@ class User(Base, BaseModel):
|
|||
def is_admin(self):
|
||||
return self.admin
|
||||
|
||||
@property
|
||||
def language(self):
|
||||
return self.user_data.get('language')
|
||||
|
||||
def AuthUser(self, **kwargs):
|
||||
"""
|
||||
Returns instance of AuthUser for this user
|
||||
|
|
|
|||
|
|
@ -734,19 +734,40 @@ class UserModel(BaseModel):
|
|||
return False
|
||||
|
||||
log.debug('AuthUser: filling found user:%s data', dbuser)
|
||||
user_data = dbuser.get_dict()
|
||||
|
||||
user_data.update({
|
||||
# set explicit the safe escaped values
|
||||
attrs = {
|
||||
'user_id': dbuser.user_id,
|
||||
'username': dbuser.username,
|
||||
'name': dbuser.name,
|
||||
'first_name': dbuser.first_name,
|
||||
'firstname': dbuser.firstname,
|
||||
'last_name': dbuser.last_name,
|
||||
})
|
||||
'lastname': dbuser.lastname,
|
||||
'admin': dbuser.admin,
|
||||
'active': dbuser.active,
|
||||
|
||||
for k, v in user_data.items():
|
||||
# properties of auth user we dont update
|
||||
if k not in ['auth_tokens', 'permissions']:
|
||||
setattr(auth_user, k, v)
|
||||
'email': dbuser.email,
|
||||
'emails': dbuser.emails_cached(),
|
||||
'short_contact': dbuser.short_contact,
|
||||
'full_contact': dbuser.full_contact,
|
||||
'full_name': dbuser.full_name,
|
||||
'full_name_or_username': dbuser.full_name_or_username,
|
||||
|
||||
'_api_key': dbuser._api_key,
|
||||
'_user_data': dbuser._user_data,
|
||||
|
||||
'created_on': dbuser.created_on,
|
||||
'extern_name': dbuser.extern_name,
|
||||
'extern_type': dbuser.extern_type,
|
||||
|
||||
'inherit_default_permissions': dbuser.inherit_default_permissions,
|
||||
|
||||
'language': dbuser.language,
|
||||
'last_activity': dbuser.last_activity,
|
||||
'last_login': dbuser.last_login,
|
||||
'password': dbuser.password,
|
||||
}
|
||||
auth_user.__dict__.update(attrs)
|
||||
except Exception:
|
||||
log.error(traceback.format_exc())
|
||||
auth_user.is_authenticated = False
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue