changeset 6221:7c0b55fb3a85

controllers: remove redundant Repository database lookups BaseRepoController already provides the repository object in c.db_repo (may be None) and BaseController already provides the repository name in c.repo_name (as given in the URL). (Arguably, that's a bad design, and we should revisit that decision in the future. For now, the code just performs slightly better.)
author Søren Løvborg <sorenl@unity3d.com>
date Mon, 05 Sep 2016 18:08:14 +0200
parents 7bffccee3a49
children 8ad40ef0ea80
files kallithea/controllers/admin/repos.py kallithea/controllers/files.py kallithea/controllers/forks.py kallithea/controllers/pullrequests.py
diffstat 4 files changed, 24 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/admin/repos.py	Fri Sep 23 14:05:42 2016 +0200
+++ b/kallithea/controllers/admin/repos.py	Mon Sep 05 18:08:14 2016 +0200
@@ -65,11 +65,11 @@
     def __before__(self):
         super(ReposController, self).__before__()
 
-    def _load_repo(self, repo_name):
-        repo_obj = Repository.get_by_repo_name(repo_name)
+    def _load_repo(self):
+        repo_obj = c.db_repo
 
         if repo_obj is None:
-            h.not_mapped_error(repo_name)
+            h.not_mapped_error(c.repo_name)
             raise HTTPFound(location=url('repos'))
 
         return repo_obj
@@ -85,16 +85,14 @@
 
         c.landing_revs_choices, c.landing_revs = ScmModel().get_repo_landing_revs(repo)
 
-    def __load_data(self, repo_name=None):
+    def __load_data(self):
         """
         Load defaults settings for edit, and update
-
-        :param repo_name:
         """
-        c.repo_info = self._load_repo(repo_name)
+        c.repo_info = self._load_repo()
         self.__load_defaults(c.repo_info)
 
-        defaults = RepoModel()._get_defaults(repo_name)
+        defaults = RepoModel()._get_defaults(c.repo_name)
         defaults['clone_uri'] = c.repo_info.clone_uri_hidden # don't show password
 
         return defaults
@@ -218,7 +216,7 @@
 
     @HasRepoPermissionAnyDecorator('repository.admin')
     def update(self, repo_name):
-        c.repo_info = self._load_repo(repo_name)
+        c.repo_info = self._load_repo()
         self.__load_defaults(c.repo_info)
         c.active = 'settings'
         c.repo_fields = RepositoryField.query() \
@@ -248,7 +246,7 @@
             Session().commit()
         except formencode.Invalid as errors:
             log.info(errors)
-            defaults = self.__load_data(repo_name)
+            defaults = self.__load_data()
             defaults.update(errors.value)
             c.users_array = repo_model.get_users_js()
             return htmlfill.render(
@@ -304,7 +302,7 @@
 
     @HasRepoPermissionAnyDecorator('repository.admin')
     def edit(self, repo_name):
-        defaults = self.__load_data(repo_name)
+        defaults = self.__load_data()
         c.repo_fields = RepositoryField.query() \
             .filter(RepositoryField.repository == c.repo_info).all()
         repo_model = RepoModel()
@@ -318,7 +316,7 @@
 
     @HasRepoPermissionAnyDecorator('repository.admin')
     def edit_permissions(self, repo_name):
-        c.repo_info = self._load_repo(repo_name)
+        c.repo_info = self._load_repo()
         repo_model = RepoModel()
         c.users_array = repo_model.get_users_js()
         c.user_groups_array = repo_model.get_user_groups_js()
@@ -369,7 +367,7 @@
 
     @HasRepoPermissionAnyDecorator('repository.admin')
     def edit_fields(self, repo_name):
-        c.repo_info = self._load_repo(repo_name)
+        c.repo_info = self._load_repo()
         c.repo_fields = RepositoryField.query() \
             .filter(RepositoryField.repository == c.repo_info).all()
         c.active = 'fields'
@@ -413,7 +411,7 @@
 
     @HasRepoPermissionAnyDecorator('repository.admin')
     def edit_advanced(self, repo_name):
-        c.repo_info = self._load_repo(repo_name)
+        c.repo_info = self._load_repo()
         c.default_user_id = User.get_default_user().user_id
         c.in_public_journal = UserFollowing.query() \
             .filter(UserFollowing.user_id == c.default_user_id) \
@@ -529,7 +527,7 @@
 
     @HasRepoPermissionAnyDecorator('repository.admin')
     def edit_caches(self, repo_name):
-        c.repo_info = self._load_repo(repo_name)
+        c.repo_info = self._load_repo()
         c.active = 'caches'
         if request.POST:
             try:
@@ -547,7 +545,7 @@
 
     @HasRepoPermissionAnyDecorator('repository.admin')
     def edit_remote(self, repo_name):
-        c.repo_info = self._load_repo(repo_name)
+        c.repo_info = self._load_repo()
         c.active = 'remote'
         if request.POST:
             try:
@@ -562,7 +560,7 @@
 
     @HasRepoPermissionAnyDecorator('repository.admin')
     def edit_statistics(self, repo_name):
-        c.repo_info = self._load_repo(repo_name)
+        c.repo_info = self._load_repo()
         repo = c.repo_info.scm_instance
 
         if c.repo_info.stats:
--- a/kallithea/controllers/files.py	Fri Sep 23 14:05:42 2016 +0200
+++ b/kallithea/controllers/files.py	Mon Sep 05 18:08:14 2016 +0200
@@ -426,7 +426,7 @@
     @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
     def add(self, repo_name, revision, f_path):
 
-        repo = Repository.get_by_repo_name(repo_name)
+        repo = c.db_repo
         if repo.enable_locking and repo.locked[0]:
             h.flash(_('This repository has been locked by %s on %s')
                 % (h.person_by_id(repo.locked[0]),
--- a/kallithea/controllers/forks.py	Fri Sep 23 14:05:42 2016 +0200
+++ b/kallithea/controllers/forks.py	Mon Sep 05 18:08:14 2016 +0200
@@ -65,19 +65,17 @@
 
         c.can_update = Ui.get_by_key('hooks', Ui.HOOK_UPDATE).ui_active
 
-    def __load_data(self, repo_name=None):
+    def __load_data(self):
         """
         Load defaults settings for edit, and update
-
-        :param repo_name:
         """
         self.__load_defaults()
 
-        c.repo_info = db_repo = Repository.get_by_repo_name(repo_name)
-        repo = db_repo.scm_instance
+        c.repo_info = c.db_repo
+        repo = c.db_repo.scm_instance
 
         if c.repo_info is None:
-            h.not_mapped_error(repo_name)
+            h.not_mapped_error(c.repo_name)
             raise HTTPFound(location=url('repos'))
 
         c.default_user_id = User.get_default_user().user_id
@@ -99,7 +97,7 @@
             c.stats_percentage = '%.2f' % ((float((last_rev)) /
                                             c.repo_last_rev) * 100)
 
-        defaults = RepoModel()._get_defaults(repo_name)
+        defaults = RepoModel()._get_defaults(c.repo_name)
         # alter the description to indicate a fork
         defaults['description'] = ('fork of repository: %s \n%s'
                                    % (defaults['repo_name'],
@@ -140,7 +138,7 @@
             h.not_mapped_error(repo_name)
             raise HTTPFound(location=url('home'))
 
-        defaults = self.__load_data(repo_name)
+        defaults = self.__load_data()
 
         return htmlfill.render(
             render('forks/fork.html'),
--- a/kallithea/controllers/pullrequests.py	Fri Sep 23 14:05:42 2016 +0200
+++ b/kallithea/controllers/pullrequests.py	Mon Sep 05 18:08:14 2016 +0200
@@ -196,7 +196,6 @@
         c.from_ = request.GET.get('from_') or ''
         c.closed = request.GET.get('closed') or ''
         c.pull_requests = PullRequestModel().get_all(repo_name, from_=c.from_, closed=c.closed)
-        c.repo_name = repo_name
         p = safe_int(request.GET.get('page'), 1)
 
         c.pullrequests_pager = Page(c.pull_requests, page=p, items_per_page=100)
@@ -298,7 +297,7 @@
                                    'repository.admin')
     @jsonify
     def repo_info(self, repo_name):
-        repo = RepoModel()._get_repo(repo_name)
+        repo = c.db_repo
         refs, selected_ref = self._get_repo_refs(repo.scm_instance)
         return {
             'description': repo.description.split('\n', 1)[0],
@@ -311,7 +310,7 @@
     @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
                                    'repository.admin')
     def create(self, repo_name):
-        repo = RepoModel()._get_repo(repo_name)
+        repo = c.db_repo
         try:
             _form = PullRequestForm(repo.repo_id)().to_python(request.POST)
         except formencode.Invalid as errors: