core: no longer rely on webob exception inside get_or_404 function.

- relly on pyramid exc only
- helps reduce number of appenlight problems with 404 handling via webob
This commit is contained in:
Marcin Kuzminski 2017-07-25 15:26:38 +02:00
parent 0c1f7e3306
commit 4de255d013
7 changed files with 26 additions and 34 deletions

View file

@ -221,6 +221,7 @@ class RepoAppView(BaseAppView):
return default
class DataGridAppView(object):
"""
Common class to have re-usable grid rendering components

View file

@ -55,7 +55,7 @@ class AdminMainView(BaseAppView):
"""
pull_request_id = self.request.matchdict.get('pull_request_id')
pull_request = PullRequest.get_or_404(pull_request_id, pyramid_exc=True)
pull_request = PullRequest.get_or_404(pull_request_id)
repo_name = pull_request.target_repo.repo_name
raise HTTPFound(

View file

@ -159,7 +159,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
self._redirect_for_default_user(c.user.username)
c.active = 'auth_tokens'
@ -194,7 +194,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
self._redirect_for_default_user(c.user.username)
@ -227,14 +227,14 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
self._redirect_for_default_user(c.user.username)
user_data = c.user.get_api_data()
del_auth_token = self.request.POST.get('del_auth_token')
if del_auth_token:
token = UserApiKeys.get_or_404(del_auth_token, pyramid_exc=True)
token = UserApiKeys.get_or_404(del_auth_token)
token_data = token.get_api_data()
AuthTokenModel().delete(del_auth_token, c.user.user_id)
@ -257,7 +257,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
self._redirect_for_default_user(c.user.username)
c.active = 'emails'
@ -276,7 +276,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
self._redirect_for_default_user(c.user.username)
email = self.request.POST.get('new_email')
@ -307,7 +307,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
self._redirect_for_default_user(c.user.username)
email_id = self.request.POST.get('del_email_id')
@ -334,7 +334,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
self._redirect_for_default_user(c.user.username)
c.active = 'ips'
@ -357,7 +357,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
# NOTE(marcink): this view is allowed for default users, as we can
# edit their IP white list
@ -407,7 +407,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
# NOTE(marcink): this view is allowed for default users, as we can
# edit their IP white list
@ -436,7 +436,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
c.data = c.user.group_member
self._redirect_for_default_user(c.user.username)
groups = [UserGroupModel.get_user_groups_as_dict(group.users_group)
@ -456,7 +456,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
self._redirect_for_default_user(c.user.username)
users_groups = set(self.request.POST.getall('users_group_id'))
@ -484,7 +484,7 @@ class AdminUsersView(BaseAppView, DataGridAppView):
c = self.load_default_context()
user_id = self.request.matchdict.get('user_id')
c.user = User.get_or_404(user_id, pyramid_exc=True)
c.user = User.get_or_404(user_id)
self._redirect_for_default_user(c.user.username)
c.active = 'audit'

View file

@ -211,7 +211,7 @@ class MyAccountView(BaseAppView, DataGridAppView):
del_auth_token = self.request.POST.get('del_auth_token')
if del_auth_token:
token = UserApiKeys.get_or_404(del_auth_token, pyramid_exc=True)
token = UserApiKeys.get_or_404(del_auth_token)
token_data = token.get_api_data()
AuthTokenModel().delete(del_auth_token, c.user.user_id)
@ -279,7 +279,7 @@ class MyAccountView(BaseAppView, DataGridAppView):
del_email_id = self.request.POST.get('del_email_id')
if del_email_id:
email = UserEmailMap.get_or_404(del_email_id, pyramid_exc=True).email
email = UserEmailMap.get_or_404(del_email_id).email
UserModel().delete_extra_email(c.user.user_id, del_email_id)
audit_logger.store_web(
'user.edit.email.delete', action_data={

View file

@ -492,7 +492,7 @@ class RepoCommitsView(RepoAppView):
commit_id = self.request.matchdict['commit_id']
comment_id = self.request.matchdict['comment_id']
comment = ChangesetComment.get_or_404(safe_int(comment_id))
comment = ChangesetComment.get_or_404(comment_id)
if not comment:
log.debug('Comment with id:%s not found, skipping', comment_id)
# comment already deleted in another call probably

View file

@ -987,7 +987,7 @@ class PullrequestsController(BaseRepoController):
@auth.CSRFRequired()
@jsonify
def delete_comment(self, repo_name, comment_id):
comment = ChangesetComment.get_or_404(safe_int(comment_id))
comment = ChangesetComment.get_or_404(comment_id)
if not comment:
log.debug('Comment with id:%s not found, skipping', comment_id)
# comment already deleted in another call probably

View file

@ -206,22 +206,17 @@ class BaseModel(object):
return cls.query().get(id_)
@classmethod
def get_or_404(cls, id_, pyramid_exc=False):
if pyramid_exc:
# NOTE(marcink): backward compat, once migration to pyramid
# this should only use pyramid exceptions
from pyramid.httpexceptions import HTTPNotFound
else:
from webob.exc import HTTPNotFound
def get_or_404(cls, id_):
from pyramid.httpexceptions import HTTPNotFound
try:
id_ = int(id_)
except (TypeError, ValueError):
raise HTTPNotFound
raise HTTPNotFound()
res = cls.query().get(id_)
if not res:
raise HTTPNotFound
raise HTTPNotFound()
return res
@classmethod
@ -3776,16 +3771,12 @@ class Gist(Base, BaseModel):
return h.escape(self.gist_description)
@classmethod
def get_or_404(cls, id_, pyramid_exc=False):
if pyramid_exc:
from pyramid.httpexceptions import HTTPNotFound
else:
from webob.exc import HTTPNotFound
def get_or_404(cls, id_):
from pyramid.httpexceptions import HTTPNotFound
res = cls.query().filter(cls.gist_access_id == id_).scalar()
if not res:
raise HTTPNotFound
raise HTTPNotFound()
return res
@classmethod