diff --git a/pylons_app/model/repo_model.py b/pylons_app/model/repo_model.py --- a/pylons_app/model/repo_model.py +++ b/pylons_app/model/repo_model.py @@ -23,12 +23,13 @@ model for handling repositories actions @author: marcink """ from pylons_app.model.meta import Session -from pylons_app.model.db import Repository +from pylons_app.model.db import Repository, Repo2Perm, User, Permission import shutil import os from datetime import datetime from pylons_app.lib.utils import check_repo from pylons import app_globals as g +import traceback import logging log = logging.getLogger(__name__) @@ -41,36 +42,73 @@ class RepoModel(object): return self.sa.query(Repository).get(id) - def update(self, id, form_data): + def update(self, repo_id, form_data): try: - if id != form_data['repo_name']: - self.__rename_repo(id, form_data['repo_name']) - cur_repo = self.sa.query(Repository).get(id) + if repo_id != form_data['repo_name']: + self.__rename_repo(repo_id, form_data['repo_name']) + cur_repo = self.sa.query(Repository).get(repo_id) for k, v in form_data.items(): if k == 'user': cur_repo.user_id = v else: setattr(cur_repo, k, v) + + #update permissions + for username, perm in form_data['perms_updates']: + r2p = self.sa.query(Repo2Perm)\ + .filter(Repo2Perm.user == self.sa.query(User)\ + .filter(User.username == username).one())\ + .filter(Repo2Perm.repository == repo_id).one() + r2p.permission_id = self.sa.query(Permission).filter( + Permission.permission_name == + perm).one().permission_id + self.sa.add(r2p) + + for username, perm in form_data['perms_new']: + r2p = Repo2Perm() + r2p.repository = repo_id + r2p.user = self.sa.query(User)\ + .filter(User.username == username).one() + + r2p.permission_id = self.sa.query(Permission).filter( + Permission.permission_name == + perm).one().permission_id + self.sa.add(r2p) + self.sa.add(cur_repo) self.sa.commit() - except Exception as e: - log.error(e) + except: + log.error(traceback.format_exc()) self.sa.rollback() raise - def create(self, form_data, cur_user): + def create(self, form_data, cur_user, just_db=False): try: + repo_name = form_data['repo_name'] new_repo = Repository() for k, v in form_data.items(): setattr(new_repo, k, v) new_repo.user_id = cur_user.user_id self.sa.add(new_repo) + + #create default permission + repo2perm = Repo2Perm() + repo2perm.permission_id = self.sa.query(Permission)\ + .filter(Permission.permission_name == 'repository.read')\ + .one().permission_id + + repo2perm.repository = repo_name + repo2perm.user_id = self.sa.query(User)\ + .filter(User.username == 'default').one().user_id + + self.sa.add(repo2perm) self.sa.commit() - self.__create_repo(form_data['repo_name']) - except Exception as e: - log.error(e) + if not just_db: + self.__create_repo(repo_name) + except: + log.error(traceback.format_exc()) self.sa.rollback() raise @@ -79,8 +117,8 @@ class RepoModel(object): self.sa.delete(repo) self.sa.commit() self.__delete_repo(repo.repo_name) - except Exception as e: - log.error(e) + except: + log.error(traceback.format_exc()) self.sa.rollback() raise @@ -103,4 +141,5 @@ class RepoModel(object): #disable hg shutil.move(os.path.join(rm_path, '.hg'), os.path.join(rm_path, 'rm__.hg')) #disable repo - shutil.move(rm_path, os.path.join(g.base_path, 'rm__%s-%s' % (datetime.today(), id))) + shutil.move(rm_path, os.path.join(g.base_path, 'rm__%s__%s' \ + % (datetime.today(), name)))