Changeset - 307ec693bdf2
[Not reviewed]
beta
0 5 0
Nicolas VINOT - 14 years ago 2011-10-07 21:49:28
aeris@imirhil.fr
[API] Create groups needed when creating repo
5 files changed with 52 insertions and 28 deletions:
0 comments (0 inline, 0 general)
.hgignore
Show inline comments
 
syntax: glob
 
*.pyc
 
*.swp
 
*.ini
 
Paste*
 

	
 
syntax: regexp
 
^build
 
^docs/build/
 
^docs/_build/
 
^data$
 
@@ -13,7 +11,6 @@ syntax: regexp
 
^\.project$
 
^\.pydevproject$
 
^rhodecode\.db$
 
^test\.db$
 
^repositories\.config$
 
^RhodeCode\.egg-info$
 
^env$
rhodecode/controllers/api/api.py
Show inline comments
 
@@ -8,12 +8,14 @@ from rhodecode.model.scm import ScmModel
 
from rhodecode.model.db import User, UsersGroup, Group, Repository
 
from rhodecode.model.repo import RepoModel
 
from rhodecode.model.user import UserModel
 
from rhodecode.model.repo_permission import RepositoryPermissionModel
 
from rhodecode.model.users_group import UsersGroupModel
 
from rhodecode.model import users_group
 
from rhodecode.model.repos_group import ReposGroupModel
 
from sqlalchemy.orm.exc import NoResultFound
 

	
 
log = logging.getLogger( __name__ )
 

	
 

	
 
class ApiController( JSONRPCController ):
 
    """
 
@@ -56,14 +58,15 @@ class ApiController( JSONRPCController )
 
        Get a user by username
 

	
 
        :param apiuser
 
        :param username
 
        """
 

	
 
        try:
 
        user = User.by_username( username )
 
        if not user:
 
        except NoResultFound:
 
            return None
 

	
 
        return dict( id = user.user_id,
 
                        username = user.username,
 
                        firstname = user.name,
 
                        lastname = user.lastname,
 
@@ -106,12 +109,15 @@ class ApiController( JSONRPCController )
 
        :param email:
 
        :param active:
 
        :param admin:
 
        :param ldap_dn:
 
        """
 

	
 
        if self.get_user( apiuser, username ):
 
            raise JSONRPCError( "user %s already exist" % username )
 

	
 
        try:
 
            form_data = dict( username = username,
 
                             password = password,
 
                             active = active,
 
                             admin = admin,
 
                             name = firstname,
 
@@ -188,12 +194,15 @@ class ApiController( JSONRPCController )
 
        Creates an new usergroup
 

	
 
        :param name:
 
        :param active:
 
        """
 

	
 
        if self.get_users_group( apiuser, name ):
 
            raise JSONRPCError( "users group %s already exist" % name )
 

	
 
        try:
 
            form_data = dict( users_group_name = name,
 
                             users_group_active = active )
 
            ug = UsersGroup.create( form_data )
 
            return dict( id = ug.users_group_id,
 
                        msg = 'created new users group %s' % name )
 
@@ -213,14 +222,15 @@ class ApiController( JSONRPCController )
 

	
 
        try:
 
            users_group = UsersGroup.get_by_group_name( group_name )
 
            if not users_group:
 
                raise JSONRPCError( 'unknown users group %s' % group_name )
 

	
 
            try:
 
            user = User.by_username( user_name )
 
            if not user:
 
            except NoResultFound:
 
                raise JSONRPCError( 'unknown user %s' % user_name )
 

	
 
            ugm = UsersGroupModel().add_user_to_group( users_group, user )
 

	
 
            return dict( id = ugm.users_group_member_id,
 
                        msg = 'created new users group member' )
 
@@ -234,14 +244,15 @@ class ApiController( JSONRPCController )
 
        Get repository by name
 

	
 
        :param apiuser
 
        :param repo_name
 
        """
 

	
 
        try:
 
        repo = Repository.by_repo_name( repo_name )
 
        if not repo:
 
        except NoResultFound:
 
            return None
 

	
 
        members = []
 
        for user in repo.repo_to_perm:
 
            perm = user.permission.permission_name
 
            user = user.user
 
@@ -284,46 +295,53 @@ class ApiController( JSONRPCController )
 
                                name = repository.repo_name,
 
                                type = repository.repo_type,
 
                                description = repository.description ) )
 
        return result
 

	
 
    @HasPermissionAnyDecorator( 'hg.admin', 'hg.create.repository' )
 
    def create_repo( self, apiuser, name, owner_name, description = None, repo_type = 'hg', \
 
                    private = False, group_name = None ):
 
    def create_repo( self, apiuser, name, owner_name, description = '', repo_type = 'hg', \
 
                    private = False ):
 
        """
 
        Create a repository
 

	
 
        :param apiuser
 
        :param name
 
        :param description
 
        :param type
 
        :param private
 
        :param owner_name
 
        :param group_name
 
        :param clone
 
        """
 

	
 
        try:
 
            if group_name:
 
                group = Group.get_by_group_name( group_name )
 
                if group is None:
 
                    raise JSONRPCError( 'unknown group %s' % group_name )
 
            else:
 
                group = None
 

	
 
            try:
 
            owner = User.by_username( owner_name )
 
            if owner is None:
 
            except NoResultFound:
 
                raise JSONRPCError( 'unknown user %s' % owner )
 

	
 
            RepoModel().create( { "repo_name" : name,
 
                                 "repo_name_full" : name,
 
                                 "description" : description,
 
                                 "private" : private,
 
                                 "repo_type" : repo_type,
 
                                 "repo_group" : group,
 
                                 "clone_uri" : None }, owner )
 
            if self.get_repo( apiuser, name ):
 
                raise JSONRPCError( "repo %s already exist" % name )
 

	
 
            groups = name.split( '/' )
 
            real_name = groups[-1]
 
            groups = groups[:-1]
 
            parent_id = None
 
            for g in groups:
 
                group = Group.get_by_group_name( g )
 
                if not group:
 
                    group = ReposGroupModel().create( dict( group_name = g,
 
                                                  group_description = '',
 
                                                  group_parent_id = parent_id ) )
 
                parent_id = group.group_id
 

	
 
            RepoModel().create( dict( repo_name = real_name,
 
                                     repo_name_full = name,
 
                                     description = description,
 
                                     private = private,
 
                                     repo_type = repo_type,
 
                                     repo_group = parent_id,
 
                                     clone_uri = None ), owner )
 
        except Exception:
 
            log.error( traceback.format_exc() )
 
            raise JSONRPCError( 'failed to create repository %s' % name )
 

	
 
    @HasPermissionAnyDecorator( 'hg.admin' )
 
    def add_user_to_repo( self, apiuser, repo_name, user_name, perm ):
 
@@ -334,18 +352,20 @@ class ApiController( JSONRPCController )
 
        :param repo_name
 
        :param user_name
 
        :param perm
 
        """
 

	
 
        try:
 
            try:
 
            repo = Repository.by_repo_name( repo_name )
 
            if not repo:
 
            except NoResultFound:
 
                raise JSONRPCError( 'unknown repository %s' % repo )
 

	
 
            try:
 
            user = User.by_username( user_name )
 
            if not user:
 
            except NoResultFound:
 
                raise JSONRPCError( 'unknown user %s' % user )
 

	
 
            RepositoryPermissionModel().updateOrDeleteUserPermission( repo, user, perm )
 
        except Exception:
 
            log.error( traceback.format_exc() )
 
            raise JSONRPCError( 'failed to edit permission %(repo)s for %(user)s'
rhodecode/model/repo_permission.py
Show inline comments
 
@@ -49,14 +49,15 @@ class RepositoryPermissionModel(BaseMode
 
            p.permission = permission
 
            Session.add(p)
 
        Session.commit()
 

	
 
    def deleteUserPermission(self, repository, user):
 
        current = self.getUserPermission(repository, user)
 
        if current:
 
        Session.delete(current)
 
        Session.commit()
 

	
 
    def updateOrDeleteUserPermission(self, repository, user, permission):
 
        if permission:
 
            self.updateUserPermission(repository, user, permission)
 
        else:
 
            self.deleteUserPermission(repository, user)
 
\ No newline at end of file
 
            self.deleteUserPermission( repository, user )
rhodecode/model/repos_group.py
Show inline comments
 
@@ -127,12 +127,13 @@ class ReposGroupModel(BaseModel):
 
            self.sa.add(new_repos_group)
 

	
 
            self.__create_group(form_data['group_name'],
 
                                form_data['group_parent_id'])
 

	
 
            self.sa.commit()
 
            return new_repos_group
 
        except:
 
            log.error(traceback.format_exc())
 
            self.sa.rollback()
 
            raise
 

	
 
    def update(self, repos_group_id, form_data):
rhodecode/model/users_group.py
Show inline comments
 
@@ -64,12 +64,17 @@ class UsersGroupModel( BaseModel ):
 
        except:
 
            log.error( traceback.format_exc() )
 
            self.sa.rollback()
 
            raise
 

	
 
    def add_user_to_group( self, users_group, user ):
 
        for m in users_group.members:
 
            u = m.user
 
            if u.user_id == user.user_id:
 
                return m
 

	
 
        try:
 
            users_group_member = UsersGroupMember()
 
            users_group_member.user = user
 
            users_group_member.users_group = users_group
 

	
 
            users_group.members.append( users_group_member )
0 comments (0 inline, 0 general)