comparison pylons_app/model/repo_model.py @ 296:29370bb76fa6

first permissions commit: added permission managment on repository edit. Changed db rmissions, validators.
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 25 Jun 2010 02:09:33 +0200
parents 0e5455fda8fd
children 15e96b5a2685
comparison
equal deleted inserted replaced
295:248642ed1912 296:29370bb76fa6
21 Created on Jun 5, 2010 21 Created on Jun 5, 2010
22 model for handling repositories actions 22 model for handling repositories actions
23 @author: marcink 23 @author: marcink
24 """ 24 """
25 from pylons_app.model.meta import Session 25 from pylons_app.model.meta import Session
26 from pylons_app.model.db import Repository 26 from pylons_app.model.db import Repository, Repo2Perm, User, Permission
27 import shutil 27 import shutil
28 import os 28 import os
29 from datetime import datetime 29 from datetime import datetime
30 from pylons_app.lib.utils import check_repo 30 from pylons_app.lib.utils import check_repo
31 from pylons import app_globals as g 31 from pylons import app_globals as g
32 import traceback
32 import logging 33 import logging
33 log = logging.getLogger(__name__) 34 log = logging.getLogger(__name__)
34 35
35 class RepoModel(object): 36 class RepoModel(object):
36 37
39 40
40 def get(self, id): 41 def get(self, id):
41 return self.sa.query(Repository).get(id) 42 return self.sa.query(Repository).get(id)
42 43
43 44
44 def update(self, id, form_data): 45 def update(self, repo_id, form_data):
45 try: 46 try:
46 if id != form_data['repo_name']: 47 if repo_id != form_data['repo_name']:
47 self.__rename_repo(id, form_data['repo_name']) 48 self.__rename_repo(repo_id, form_data['repo_name'])
48 cur_repo = self.sa.query(Repository).get(id) 49 cur_repo = self.sa.query(Repository).get(repo_id)
49 for k, v in form_data.items(): 50 for k, v in form_data.items():
50 if k == 'user': 51 if k == 'user':
51 cur_repo.user_id = v 52 cur_repo.user_id = v
52 else: 53 else:
53 setattr(cur_repo, k, v) 54 setattr(cur_repo, k, v)
55
56 #update permissions
57 for username, perm in form_data['perms_updates']:
58 r2p = self.sa.query(Repo2Perm)\
59 .filter(Repo2Perm.user == self.sa.query(User)\
60 .filter(User.username == username).one())\
61 .filter(Repo2Perm.repository == repo_id).one()
54 62
63 r2p.permission_id = self.sa.query(Permission).filter(
64 Permission.permission_name ==
65 perm).one().permission_id
66 self.sa.add(r2p)
67
68 for username, perm in form_data['perms_new']:
69 r2p = Repo2Perm()
70 r2p.repository = repo_id
71 r2p.user = self.sa.query(User)\
72 .filter(User.username == username).one()
73
74 r2p.permission_id = self.sa.query(Permission).filter(
75 Permission.permission_name ==
76 perm).one().permission_id
77 self.sa.add(r2p)
78
55 self.sa.add(cur_repo) 79 self.sa.add(cur_repo)
56 self.sa.commit() 80 self.sa.commit()
57 except Exception as e: 81 except:
58 log.error(e) 82 log.error(traceback.format_exc())
59 self.sa.rollback() 83 self.sa.rollback()
60 raise 84 raise
61 85
62 def create(self, form_data, cur_user): 86 def create(self, form_data, cur_user, just_db=False):
63 try: 87 try:
88 repo_name = form_data['repo_name']
64 new_repo = Repository() 89 new_repo = Repository()
65 for k, v in form_data.items(): 90 for k, v in form_data.items():
66 setattr(new_repo, k, v) 91 setattr(new_repo, k, v)
67 92
68 new_repo.user_id = cur_user.user_id 93 new_repo.user_id = cur_user.user_id
69 self.sa.add(new_repo) 94 self.sa.add(new_repo)
95
96 #create default permission
97 repo2perm = Repo2Perm()
98 repo2perm.permission_id = self.sa.query(Permission)\
99 .filter(Permission.permission_name == 'repository.read')\
100 .one().permission_id
101
102 repo2perm.repository = repo_name
103 repo2perm.user_id = self.sa.query(User)\
104 .filter(User.username == 'default').one().user_id
105
106 self.sa.add(repo2perm)
70 self.sa.commit() 107 self.sa.commit()
71 self.__create_repo(form_data['repo_name']) 108 if not just_db:
72 except Exception as e: 109 self.__create_repo(repo_name)
73 log.error(e) 110 except:
111 log.error(traceback.format_exc())
74 self.sa.rollback() 112 self.sa.rollback()
75 raise 113 raise
76 114
77 def delete(self, repo): 115 def delete(self, repo):
78 try: 116 try:
79 self.sa.delete(repo) 117 self.sa.delete(repo)
80 self.sa.commit() 118 self.sa.commit()
81 self.__delete_repo(repo.repo_name) 119 self.__delete_repo(repo.repo_name)
82 except Exception as e: 120 except:
83 log.error(e) 121 log.error(traceback.format_exc())
84 self.sa.rollback() 122 self.sa.rollback()
85 raise 123 raise
86 124
87 def __create_repo(self, repo_name): 125 def __create_repo(self, repo_name):
88 repo_path = os.path.join(g.base_path, repo_name) 126 repo_path = os.path.join(g.base_path, repo_name)
101 rm_path = os.path.join(g.base_path, name) 139 rm_path = os.path.join(g.base_path, name)
102 log.info("Removing %s", rm_path) 140 log.info("Removing %s", rm_path)
103 #disable hg 141 #disable hg
104 shutil.move(os.path.join(rm_path, '.hg'), os.path.join(rm_path, 'rm__.hg')) 142 shutil.move(os.path.join(rm_path, '.hg'), os.path.join(rm_path, 'rm__.hg'))
105 #disable repo 143 #disable repo
106 shutil.move(rm_path, os.path.join(g.base_path, 'rm__%s-%s' % (datetime.today(), id))) 144 shutil.move(rm_path, os.path.join(g.base_path, 'rm__%s__%s' \
145 % (datetime.today(), name)))