Changeset - d3ac7491a5c8
[Not reviewed]
codereview
0 8 0
Marcin Kuzminski - 13 years ago 2012-06-09 20:23:48
marcin@python-works.com
Share common getter functions in base model, and remove duplicated functions from other models
8 files changed with 77 insertions and 104 deletions:
0 comments (0 inline, 0 general)
rhodecode/model/__init__.py
Show inline comments
 
@@ -42,7 +42,7 @@
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import logging
 

	
 
from rhodecode.model.db import User, Repository, Permission
 
from rhodecode.model import meta
 

	
 
log = logging.getLogger(__name__)
 
@@ -96,3 +96,33 @@ class BaseModel(object):
 
                    )
 
                else:
 
                    return callback(instance)
 

	
 
    def _get_user(self, user):
 
        """
 
        Helper method to get user by ID, or username fallback
 

	
 
        :param user:
 
        :type user: UserID, username, or User instance
 
        """
 
        return self._get_instance(User, user,
 
                                  callback=User.get_by_username)
 

	
 
    def _get_repo(self, repository):
 
        """
 
        Helper method to get repository by ID, or repository name
 

	
 
        :param repository:
 
        :type repository: RepoID, repository name or Repository Instance
 
        """
 
        return self._get_instance(Repository, repository,
 
                                  callback=Repository.get_by_repo_name)
 

	
 
    def _get_perm(self, permission):
 
        """
 
        Helper method to get permission by ID, or permission name
 

	
 
        :param permission:
 
        :type permission: PermissionID, permission_name or Permission instance
 
        """
 
        return self._get_instance(Permission, permission,
 
                                  callback=Permission.get_by_key)
rhodecode/model/changeset_status.py
Show inline comments
 
@@ -24,13 +24,9 @@
 

	
 

	
 
import logging
 
import traceback
 

	
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib.utils2 import safe_unicode
 
from rhodecode.model import BaseModel
 
from rhodecode.model.db import ChangesetStatus, Repository, User
 
from rhodecode.model.db import ChangesetStatus
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -40,13 +36,6 @@ class ChangesetStatusModel(BaseModel):
 
    def __get_changeset_status(self, changeset_status):
 
        return self._get_instance(ChangesetStatus, changeset_status)
 

	
 
    def __get_repo(self, repository):
 
        return self._get_instance(Repository, repository,
 
                                  callback=Repository.get_by_repo_name)
 

	
 
    def __get_user(self, user):
 
        return self._get_instance(User, user, callback=User.get_by_username)
 

	
 
    def get_status(self, repo, revision):
 
        """
 
        Returns status of changeset for given revision and version 0
 
@@ -58,7 +47,7 @@ class ChangesetStatusModel(BaseModel):
 
        :param revision: 40char hash
 
        :type revision: str
 
        """
 
        repo = self.__get_repo(repo)
 
        repo = self._get_repo(repo)
 

	
 
        status = ChangesetStatus.query()\
 
            .filter(ChangesetStatus.repo == repo)\
 
@@ -84,7 +73,7 @@ class ChangesetStatusModel(BaseModel):
 
        :param comment:
 
        :type comment:
 
        """
 
        repo = self.__get_repo(repo)
 
        repo = self._get_repo(repo)
 

	
 
        cur_statuses = ChangesetStatus.query()\
 
            .filter(ChangesetStatus.repo == repo)\
 
@@ -95,8 +84,8 @@ class ChangesetStatusModel(BaseModel):
 
                st.version += 1
 
                self.sa.add(st)
 
        new_status = ChangesetStatus()
 
        new_status.author = self.__get_user(user)
 
        new_status.repo = self.__get_repo(repo)
 
        new_status.author = self._get_user(user)
 
        new_status.repo = self._get_repo(repo)
 
        new_status.status = status
 
        new_status.revision = revision
 
        new_status.comment = comment
rhodecode/model/notification.py
Show inline comments
 
@@ -42,9 +42,6 @@ log = logging.getLogger(__name__)
 

	
 
class NotificationModel(BaseModel):
 

	
 
    def __get_user(self, user):
 
        return self._get_instance(User, user, callback=User.get_by_username)
 

	
 
    def __get_notification(self, notification):
 
        if isinstance(notification, Notification):
 
            return notification
 
@@ -77,12 +74,12 @@ class NotificationModel(BaseModel):
 
        if recipients and not getattr(recipients, '__iter__', False):
 
            raise Exception('recipients must be a list of iterable')
 

	
 
        created_by_obj = self.__get_user(created_by)
 
        created_by_obj = self._get_user(created_by)
 

	
 
        if recipients:
 
            recipients_objs = []
 
            for u in recipients:
 
                obj = self.__get_user(u)
 
                obj = self._get_user(u)
 
                if obj:
 
                    recipients_objs.append(obj)
 
            recipients_objs = set(recipients_objs)
 
@@ -126,7 +123,7 @@ class NotificationModel(BaseModel):
 
        # we don't want to remove actual notification just the assignment
 
        try:
 
            notification = self.__get_notification(notification)
 
            user = self.__get_user(user)
 
            user = self._get_user(user)
 
            if notification and user:
 
                obj = UserNotification.query()\
 
                        .filter(UserNotification.user == user)\
 
@@ -140,29 +137,29 @@ class NotificationModel(BaseModel):
 
            raise
 

	
 
    def get_for_user(self, user):
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 
        return user.notifications
 

	
 
    def mark_all_read_for_user(self, user):
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 
        UserNotification.query()\
 
            .filter(UserNotification.read == False)\
 
            .update({'read': True})
 

	
 
    def get_unread_cnt_for_user(self, user):
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 
        return UserNotification.query()\
 
                .filter(UserNotification.read == False)\
 
                .filter(UserNotification.user == user).count()
 

	
 
    def get_unread_for_user(self, user):
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 
        return [x.notification for x in UserNotification.query()\
 
                .filter(UserNotification.read == False)\
 
                .filter(UserNotification.user == user).all()]
 

	
 
    def get_user_notification(self, user, notification):
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 
        notification = self.__get_notification(notification)
 

	
 
        return UserNotification.query()\
rhodecode/model/repo.py
Show inline comments
 
@@ -48,9 +48,6 @@ log = logging.getLogger(__name__)
 

	
 
class RepoModel(BaseModel):
 

	
 
    def __get_user(self, user):
 
        return self._get_instance(User, user, callback=User.get_by_username)
 

	
 
    def __get_users_group(self, users_group):
 
        return self._get_instance(UsersGroup, users_group,
 
                                  callback=UsersGroup.get_by_group_name)
 
@@ -59,14 +56,6 @@ class RepoModel(BaseModel):
 
        return self._get_instance(RepoGroup, repos_group,
 
                                  callback=RepoGroup.get_by_group_name)
 

	
 
    def __get_repo(self, repository):
 
        return self._get_instance(Repository, repository,
 
                                  callback=Repository.get_by_repo_name)
 

	
 
    def __get_perm(self, permission):
 
        return self._get_instance(Permission, permission,
 
                                  callback=Permission.get_by_key)
 

	
 
    @LazyProperty
 
    def repos_path(self):
 
        """
 
@@ -86,7 +75,7 @@ class RepoModel(BaseModel):
 
        return repo.scalar()
 

	
 
    def get_repo(self, repository):
 
        return self.__get_repo(repository)
 
        return self._get_repo(repository)
 

	
 
    def get_by_repo_name(self, repo_name, cache=False):
 
        repo = self.sa.query(Repository)\
 
@@ -311,7 +300,7 @@ class RepoModel(BaseModel):
 
        run_task(tasks.create_repo_fork, form_data, cur_user)
 

	
 
    def delete(self, repo):
 
        repo = self.__get_repo(repo)
 
        repo = self._get_repo(repo)
 
        try:
 
            self.sa.delete(repo)
 
            self.__delete_repo(repo)
 
@@ -328,9 +317,9 @@ class RepoModel(BaseModel):
 
        :param user: Instance of User, user_id or username
 
        :param perm: Instance of Permission, or permission_name
 
        """
 
        user = self.__get_user(user)
 
        repo = self.__get_repo(repo)
 
        permission = self.__get_perm(perm)
 
        user = self._get_user(user)
 
        repo = self._get_repo(repo)
 
        permission = self._get_perm(perm)
 

	
 
        # check if we have that permission already
 
        obj = self.sa.query(UserRepoToPerm)\
 
@@ -353,8 +342,8 @@ class RepoModel(BaseModel):
 
        :param user: Instance of User, user_id or username
 
        """
 

	
 
        user = self.__get_user(user)
 
        repo = self.__get_repo(repo)
 
        user = self._get_user(user)
 
        repo = self._get_repo(repo)
 

	
 
        obj = self.sa.query(UserRepoToPerm)\
 
            .filter(UserRepoToPerm.repository == repo)\
 
@@ -372,9 +361,9 @@ class RepoModel(BaseModel):
 
            or users group name
 
        :param perm: Instance of Permission, or permission_name
 
        """
 
        repo = self.__get_repo(repo)
 
        repo = self._get_repo(repo)
 
        group_name = self.__get_users_group(group_name)
 
        permission = self.__get_perm(perm)
 
        permission = self._get_perm(perm)
 

	
 
        # check if we have that permission already
 
        obj = self.sa.query(UsersGroupRepoToPerm)\
 
@@ -399,7 +388,7 @@ class RepoModel(BaseModel):
 
        :param group_name: Instance of UserGroup, users_group_id,
 
            or users group name
 
        """
 
        repo = self.__get_repo(repo)
 
        repo = self._get_repo(repo)
 
        group_name = self.__get_users_group(group_name)
 

	
 
        obj = self.sa.query(UsersGroupRepoToPerm)\
rhodecode/model/repo_permission.py
Show inline comments
 
@@ -26,28 +26,17 @@
 

	
 
import logging
 
from rhodecode.model import BaseModel
 
from rhodecode.model.db import UserRepoToPerm, UsersGroupRepoToPerm, Permission,\
 
    User, Repository
 
from rhodecode.model.db import UserRepoToPerm, UsersGroupRepoToPerm, \
 
    Permission
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class RepositoryPermissionModel(BaseModel):
 

	
 
    def __get_user(self, user):
 
        return self._get_instance(User, user, callback=User.get_by_username)
 

	
 
    def __get_repo(self, repository):
 
        return self._get_instance(Repository, repository,
 
                                  callback=Repository.get_by_repo_name)
 

	
 
    def __get_perm(self, permission):
 
        return self._get_instance(Permission, permission,
 
                                  callback=Permission.get_by_key)
 

	
 
    def get_user_permission(self, repository, user):
 
        repository = self.__get_repo(repository)
 
        user = self.__get_user(user)
 
        repository = self._get_repo(repository)
 
        user = self._get_user(user)
 

	
 
        return UserRepoToPerm.query() \
 
                .filter(UserRepoToPerm.user == user) \
rhodecode/model/repos_group.py
Show inline comments
 
@@ -39,9 +39,6 @@ log = logging.getLogger(__name__)
 

	
 
class ReposGroupModel(BaseModel):
 

	
 
    def __get_user(self, user):
 
        return self._get_instance(User, user, callback=User.get_by_username)
 

	
 
    def __get_users_group(self, users_group):
 
        return self._get_instance(UsersGroup, users_group,
 
                                  callback=UsersGroup.get_by_group_name)
 
@@ -50,10 +47,6 @@ class ReposGroupModel(BaseModel):
 
        return self._get_instance(RepoGroup, repos_group,
 
                                  callback=RepoGroup.get_by_group_name)
 

	
 
    def __get_perm(self, permission):
 
        return self._get_instance(Permission, permission,
 
                                  callback=Permission.get_by_key)
 

	
 
    @LazyProperty
 
    def repos_path(self):
 
        """
 
@@ -227,8 +220,8 @@ class ReposGroupModel(BaseModel):
 
        """
 

	
 
        repos_group = self.__get_repos_group(repos_group)
 
        user = self.__get_user(user)
 
        permission = self.__get_perm(perm)
 
        user = self._get_user(user)
 
        permission = self._get_perm(perm)
 

	
 
        # check if we have that permission already
 
        obj = self.sa.query(UserRepoGroupToPerm)\
 
@@ -253,7 +246,7 @@ class ReposGroupModel(BaseModel):
 
        """
 

	
 
        repos_group = self.__get_repos_group(repos_group)
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 

	
 
        obj = self.sa.query(UserRepoGroupToPerm)\
 
            .filter(UserRepoGroupToPerm.user == user)\
 
@@ -274,7 +267,7 @@ class ReposGroupModel(BaseModel):
 
        """
 
        repos_group = self.__get_repos_group(repos_group)
 
        group_name = self.__get_users_group(group_name)
 
        permission = self.__get_perm(perm)
 
        permission = self._get_perm(perm)
 

	
 
        # check if we have that permission already
 
        obj = self.sa.query(UsersGroupRepoGroupToPerm)\
rhodecode/model/user.py
Show inline comments
 
@@ -35,8 +35,8 @@ from rhodecode.lib.caching_query import 
 
from rhodecode.model import BaseModel
 
from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \
 
    UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \
 
    Notification, RepoGroup, UserRepoGroupToPerm, UsersGroup,\
 
    UsersGroupRepoGroupToPerm, UserEmailMap
 
    Notification, RepoGroup, UserRepoGroupToPerm, UsersGroupRepoGroupToPerm, \
 
    UserEmailMap
 
from rhodecode.lib.exceptions import DefaultUserException, \
 
    UserOwnsReposException
 

	
 
@@ -61,13 +61,6 @@ PERM_WEIGHTS = {
 

	
 
class UserModel(BaseModel):
 

	
 
    def __get_user(self, user):
 
        return self._get_instance(User, user, callback=User.get_by_username)
 

	
 
    def __get_perm(self, permission):
 
        return self._get_instance(Permission, permission,
 
                                  callback=Permission.get_by_key)
 

	
 
    def get(self, user_id, cache=False):
 
        user = self.sa.query(User)
 
        if cache:
 
@@ -76,7 +69,7 @@ class UserModel(BaseModel):
 
        return user.get(user_id)
 

	
 
    def get_user(self, user):
 
        return self.__get_user(user)
 
        return self._get_user(user)
 

	
 
    def get_by_username(self, username, cache=False, case_insensitive=False):
 

	
 
@@ -292,7 +285,7 @@ class UserModel(BaseModel):
 
            raise
 

	
 
    def delete(self, user):
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 

	
 
        try:
 
            if user.username == 'default':
 
@@ -545,7 +538,7 @@ class UserModel(BaseModel):
 
            raise Exception('perm needs to be an instance of Permission class '
 
                            'got %s instead' % type(perm))
 

	
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 

	
 
        return UserToPerm.query().filter(UserToPerm.user == user)\
 
            .filter(UserToPerm.permission == perm).scalar() is not None
 
@@ -557,8 +550,8 @@ class UserModel(BaseModel):
 
        :param user:
 
        :param perm:
 
        """
 
        user = self.__get_user(user)
 
        perm = self.__get_perm(perm)
 
        user = self._get_user(user)
 
        perm = self._get_perm(perm)
 
        # if this permission is already granted skip it
 
        _perm = UserToPerm.query()\
 
            .filter(UserToPerm.user == user)\
 
@@ -578,8 +571,8 @@ class UserModel(BaseModel):
 
        :param user:
 
        :param perm:
 
        """
 
        user = self.__get_user(user)
 
        perm = self.__get_perm(perm)
 
        user = self._get_user(user)
 
        perm = self._get_perm(perm)
 

	
 
        obj = UserToPerm.query()\
 
                .filter(UserToPerm.user == user)\
 
@@ -595,7 +588,7 @@ class UserModel(BaseModel):
 
        :param user:
 
        :param email:
 
        """
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 
        obj = UserEmailMap()
 
        obj.user = user
 
        obj.email = email
 
@@ -609,7 +602,7 @@ class UserModel(BaseModel):
 
        :param user:
 
        :param email_id:
 
        """
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 
        obj = UserEmailMap.query().get(email_id)
 
        if obj:
 
            self.sa.delete(obj)
 
\ No newline at end of file
rhodecode/model/users_group.py
Show inline comments
 
@@ -37,17 +37,10 @@ log = logging.getLogger(__name__)
 

	
 
class UsersGroupModel(BaseModel):
 

	
 
    def __get_user(self, user):
 
        return self._get_instance(User, user, callback=User.get_by_username)
 

	
 
    def __get_users_group(self, users_group):
 
        return self._get_instance(UsersGroup, users_group,
 
                                  callback=UsersGroup.get_by_group_name)
 

	
 
    def __get_perm(self, permission):
 
        return self._get_instance(Permission, permission,
 
                                  callback=Permission.get_by_key)
 

	
 
    def get(self, users_group_id, cache=False):
 
        return UsersGroup.get(users_group_id)
 

	
 
@@ -115,7 +108,7 @@ class UsersGroupModel(BaseModel):
 

	
 
    def add_user_to_group(self, users_group, user):
 
        users_group = self.__get_users_group(users_group)
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 

	
 
        for m in users_group.members:
 
            u = m.user
 
@@ -138,7 +131,7 @@ class UsersGroupModel(BaseModel):
 

	
 
    def remove_user_from_group(self, users_group, user):
 
        users_group = self.__get_users_group(users_group)
 
        user = self.__get_user(user)
 
        user = self._get_user(user)
 

	
 
        users_group_member = None
 
        for m in users_group.members:
 
@@ -160,7 +153,7 @@ class UsersGroupModel(BaseModel):
 

	
 
    def has_perm(self, users_group, perm):
 
        users_group = self.__get_users_group(users_group)
 
        perm = self.__get_perm(perm)
 
        perm = self._get_perm(perm)
 

	
 
        return UsersGroupToPerm.query()\
 
            .filter(UsersGroupToPerm.users_group == users_group)\
 
@@ -187,7 +180,7 @@ class UsersGroupModel(BaseModel):
 

	
 
    def revoke_perm(self, users_group, perm):
 
        users_group = self.__get_users_group(users_group)
 
        perm = self.__get_perm(perm)
 
        perm = self._get_perm(perm)
 

	
 
        obj = UsersGroupToPerm.query()\
 
            .filter(UsersGroupToPerm.users_group == users_group)\
0 comments (0 inline, 0 general)