changeset 6462:c8f34ad333a2

model: simplify guess_instance invocations The second argument to the guess_instance classmethod is in practice fixed for Gist, Permission, RepoGroup, Repository, User, UserGroup; so might as well move this logic into per-class specializations of guess_instance.
author Søren Løvborg <sorenl@unity3d.com>
date Wed, 18 Jan 2017 16:30:13 +0100
parents a918c4c5a841
children eb1a4c3cb76c
files kallithea/model/base.py kallithea/model/db.py kallithea/model/gist.py kallithea/model/repo.py kallithea/model/repo_group.py kallithea/model/user_group.py
diffstat 6 files changed, 33 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/model/base.py	Tue Jan 17 17:47:33 2017 +0100
+++ b/kallithea/model/base.py	Wed Jan 18 16:30:13 2017 +0100
@@ -67,8 +67,7 @@
         :param user: UserID, username, or User instance
         """
         from kallithea.model.db import User
-        return User.guess_instance(user,
-                                  callback=User.get_by_username)
+        return User.guess_instance(user)
 
     def _get_repo(self, repository):
         """
@@ -77,8 +76,7 @@
         :param repository: RepoID, repository name or Repository Instance
         """
         from kallithea.model.db import Repository
-        return Repository.guess_instance(repository,
-                                  callback=Repository.get_by_repo_name)
+        return Repository.guess_instance(repository)
 
     def _get_perm(self, permission):
         """
@@ -87,5 +85,4 @@
         :param permission: PermissionID, permission_name or Permission instance
         """
         from kallithea.model.db import Permission
-        return Permission.guess_instance(permission,
-                                  callback=Permission.get_by_key)
+        return Permission.guess_instance(permission)
--- a/kallithea/model/db.py	Tue Jan 17 17:47:33 2017 +0100
+++ b/kallithea/model/db.py	Wed Jan 18 16:30:13 2017 +0100
@@ -560,6 +560,10 @@
                                       self.user_id, self.username)
 
     @classmethod
+    def guess_instance(cls, value):
+        return super(User, cls).guess_instance(value, User.get_by_username)
+
+    @classmethod
     def get_or_404(cls, id_, allow_default=True):
         '''
         Overridden version of BaseDbModel.get_or_404, with an extra check on
@@ -880,6 +884,10 @@
                                       self.users_group_name)
 
     @classmethod
+    def guess_instance(cls, value):
+        return super(UserGroup, cls).guess_instance(value, UserGroup.get_by_group_name)
+
+    @classmethod
     def get_by_group_name(cls, group_name, cache=False,
                           case_insensitive=False):
         if case_insensitive:
@@ -1118,6 +1126,10 @@
         return cls.url_sep().join(repo_name.split(os.sep))
 
     @classmethod
+    def guess_instance(cls, value):
+        return super(Repository, cls).guess_instance(value, Repository.get_by_repo_name)
+
+    @classmethod
     def get_by_repo_name(cls, repo_name):
         q = Session().query(cls).filter(cls.repo_name == repo_name)
         q = q.options(joinedload(Repository.fork)) \
@@ -1562,6 +1574,10 @@
         return URL_SEP
 
     @classmethod
+    def guess_instance(cls, value):
+        return super(RepoGroup, cls).guess_instance(value, RepoGroup.get_by_group_name)
+
+    @classmethod
     def get_by_group_name(cls, group_name, cache=False, case_insensitive=False):
         group_name = group_name.rstrip('/')
         if case_insensitive:
@@ -1778,6 +1794,10 @@
         )
 
     @classmethod
+    def guess_instance(cls, value):
+        return super(Permission, cls).guess_instance(value, Permission.get_by_key)
+
+    @classmethod
     def get_by_key(cls, key):
         return cls.query().filter(cls.permission_name == key).scalar()
 
@@ -2538,6 +2558,10 @@
         return '<Gist:[%s]%s>' % (self.gist_type, self.gist_access_id)
 
     @classmethod
+    def guess_instance(cls, value):
+        return super(Gist, cls).guess_instance(value, Gist.get_by_access_id)
+
+    @classmethod
     def get_or_404(cls, id_):
         res = cls.query().filter(cls.gist_access_id == id_).scalar()
         if res is None:
--- a/kallithea/model/gist.py	Tue Jan 17 17:47:33 2017 +0100
+++ b/kallithea/model/gist.py	Wed Jan 18 16:30:13 2017 +0100
@@ -53,7 +53,7 @@
 
         :param gist: GistID, gist_access_id, or Gist instance
         """
-        return Gist.guess_instance(gist, callback=Gist.get_by_access_id)
+        return Gist.guess_instance(gist)
 
     def __delete_gist(self, gist):
         """
--- a/kallithea/model/repo.py	Tue Jan 17 17:47:33 2017 +0100
+++ b/kallithea/model/repo.py	Wed Jan 18 16:30:13 2017 +0100
@@ -59,12 +59,10 @@
     URL_SEPARATOR = Repository.url_sep()
 
     def _get_user_group(self, users_group):
-        return UserGroup.guess_instance(users_group,
-                                  callback=UserGroup.get_by_group_name)
+        return UserGroup.guess_instance(users_group)
 
     def _get_repo_group(self, repo_group):
-        return RepoGroup.guess_instance(repo_group,
-                                  callback=RepoGroup.get_by_group_name)
+        return RepoGroup.guess_instance(repo_group)
 
     def _create_default_perms(self, repository, private):
         # create default permission
--- a/kallithea/model/repo_group.py	Tue Jan 17 17:47:33 2017 +0100
+++ b/kallithea/model/repo_group.py	Wed Jan 18 16:30:13 2017 +0100
@@ -44,12 +44,10 @@
 class RepoGroupModel(BaseModel):
 
     def _get_user_group(self, users_group):
-        return UserGroup.guess_instance(users_group,
-                                  callback=UserGroup.get_by_group_name)
+        return UserGroup.guess_instance(users_group)
 
     def _get_repo_group(self, repo_group):
-        return RepoGroup.guess_instance(repo_group,
-                                  callback=RepoGroup.get_by_group_name)
+        return RepoGroup.guess_instance(repo_group)
 
     @LazyProperty
     def repos_path(self):
--- a/kallithea/model/user_group.py	Tue Jan 17 17:47:33 2017 +0100
+++ b/kallithea/model/user_group.py	Wed Jan 18 16:30:13 2017 +0100
@@ -40,8 +40,7 @@
 class UserGroupModel(BaseModel):
 
     def _get_user_group(self, user_group):
-        return UserGroup.guess_instance(user_group,
-                                  callback=UserGroup.get_by_group_name)
+        return UserGroup.guess_instance(user_group)
 
     def _create_default_perms(self, user_group):
         # create default permission