feed-token, user, performance: lazy load the feed_token. We only need it for

scope of web requests. For vcs operations, we don't need it.

- 20ms to load this can save up much time for SVN requests.
This commit is contained in:
Marcin Kuzminski 2017-12-04 12:14:01 +01:00
parent dd9db40bb2
commit f9f80e3ff9
3 changed files with 12 additions and 7 deletions

View file

@ -918,7 +918,6 @@ class AuthUser(object):
self._api_key = api_key
self.api_key = None
self.feed_token = ''
self.username = username
self.ip_addr = ip_addr
self.name = ''
@ -1219,6 +1218,10 @@ class AuthUser(object):
def personal_repo_group(self):
return RepoGroup.get_user_personal_repo_group(self.user_id)
@LazyProperty
def feed_token(self):
return self.get_instance().feed_token
@classmethod
def check_ip_allowed(cls, user_id, ip_addr, inherit_from_default):
allowed_ips = AuthUser.get_allowed_ips(

View file

@ -676,15 +676,19 @@ class User(Base, BaseModel):
.order_by(UserApiKeys.user_api_key_id.asc())\
.all()
@property
@LazyProperty
def feed_token(self):
return self.get_feed_token()
def get_feed_token(self):
def get_feed_token(self, cache=True):
feed_tokens = UserApiKeys.query()\
.filter(UserApiKeys.user == self)\
.filter(UserApiKeys.role == UserApiKeys.ROLE_FEED)\
.all()
.filter(UserApiKeys.role == UserApiKeys.ROLE_FEED)
if cache:
feed_tokens = feed_tokens.options(
FromCache("long_term", "get_user_feed_token_%s" % self.user_id))
feed_tokens = feed_tokens.all()
if feed_tokens:
return feed_tokens[0].api_key
return 'NO_FEED_TOKEN_AVAILABLE'

View file

@ -697,8 +697,6 @@ class UserModel(BaseModel):
if k not in ['auth_tokens', 'permissions']:
setattr(auth_user, k, v)
# few extras
setattr(auth_user, 'feed_token', dbuser.feed_token)
except Exception:
log.error(traceback.format_exc())
auth_user.is_authenticated = False