comparison pylons_app/model/repo_model.py @ 367:a26f48ad7a8a

fixes issue #16 reimplementation of database repository, for using generic pk instead of repo naming as pk. Which caused to many problems. Fixed issue when redirecting after repo name change to 404. Removed update hook from basic app setup
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 27 Jul 2010 14:53:22 +0200
parents b0715a788432
children f5c1eec9f376
comparison
equal deleted inserted replaced
366:0f35fa0f4eb8 367:a26f48ad7a8a
14 # 14 #
15 # You should have received a copy of the GNU General Public License 15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software 16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18 # MA 02110-1301, USA. 18 # MA 02110-1301, USA.
19
20 """ 19 """
21 Created on Jun 5, 2010 20 Created on Jun 5, 2010
22 model for handling repositories actions 21 model for handling repositories actions
23 @author: marcink 22 @author: marcink
24 """ 23 """
24 from datetime import datetime
25 from pylons import app_globals as g
26 from pylons_app.lib.utils import check_repo
27 from pylons_app.model.db import Repository, Repo2Perm, User, Permission
25 from pylons_app.model.meta import Session 28 from pylons_app.model.meta import Session
26 from pylons_app.model.db import Repository, Repo2Perm, User, Permission 29 import logging
30 import os
27 import shutil 31 import shutil
28 import os
29 from datetime import datetime
30 from pylons_app.lib.utils import check_repo
31 from pylons import app_globals as g
32 import traceback 32 import traceback
33 import logging
34 log = logging.getLogger(__name__) 33 log = logging.getLogger(__name__)
35 34
36 class RepoModel(object): 35 class RepoModel(object):
37 36
38 def __init__(self): 37 def __init__(self):
39 self.sa = Session() 38 self.sa = Session()
40 39
41 def get(self, id): 40 def get(self, id):
42 return self.sa.query(Repository).get(id) 41 return self.sa.query(Repository).filter(Repository.repo_name == id).scalar()
43 42
44 def get_users_js(self): 43 def get_users_js(self):
45 44
46 users = self.sa.query(User).filter(User.active == True).all() 45 users = self.sa.query(User).filter(User.active == True).all()
47 u_tmpl = '''{id:%s, fname:"%s", lname:"%s", nname:"%s"},''' 46 u_tmpl = '''{id:%s, fname:"%s", lname:"%s", nname:"%s"},'''
49 u.lastname, u.username) 48 u.lastname, u.username)
50 for u in users]) 49 for u in users])
51 return users_array 50 return users_array
52 51
53 52
54 def update(self, repo_id, form_data): 53 def update(self, repo_name, form_data):
55 try: 54 try:
56 if repo_id != form_data['repo_name']: 55
57 #rename our data
58 self.__rename_repo(repo_id, form_data['repo_name'])
59 cur_repo = self.sa.query(Repository).get(repo_id)
60 for k, v in form_data.items():
61 if k == 'user':
62 cur_repo.user_id = v
63 else:
64 setattr(cur_repo, k, v)
65
66 #update permissions 56 #update permissions
67 for username, perm in form_data['perms_updates']: 57 for username, perm in form_data['perms_updates']:
68 r2p = self.sa.query(Repo2Perm)\ 58 r2p = self.sa.query(Repo2Perm)\
69 .filter(Repo2Perm.user == self.sa.query(User)\ 59 .filter(Repo2Perm.user == self.sa.query(User)\
70 .filter(User.username == username).one())\ 60 .filter(User.username == username).one())\
71 .filter(Repo2Perm.repository == repo_id).one() 61 .filter(Repo2Perm.repository == self.get(repo_name))\
62 .one()
72 63
73 r2p.permission_id = self.sa.query(Permission).filter( 64 r2p.permission_id = self.sa.query(Permission).filter(
74 Permission.permission_name == 65 Permission.permission_name ==
75 perm).one().permission_id 66 perm).one().permission_id
76 self.sa.add(r2p) 67 self.sa.add(r2p)
77 68
69 #set new permissions
78 for username, perm in form_data['perms_new']: 70 for username, perm in form_data['perms_new']:
79 r2p = Repo2Perm() 71 r2p = Repo2Perm()
80 r2p.repository = repo_id 72 r2p.repository = self.get(repo_name)
81 r2p.user = self.sa.query(User)\ 73 r2p.user = self.sa.query(User)\
82 .filter(User.username == username).one() 74 .filter(User.username == username).one()
83 75
84 r2p.permission_id = self.sa.query(Permission).filter( 76 r2p.permission_id = self.sa.query(Permission).filter(
85 Permission.permission_name == 77 Permission.permission_name == perm)\
86 perm).one().permission_id 78 .one().permission_id
87 self.sa.add(r2p) 79 self.sa.add(r2p)
88 80
81 #update current repo
82 cur_repo = self.get(repo_name)
83
84 for k, v in form_data.items():
85 if k == 'user':
86 cur_repo.user_id = v
87 else:
88 setattr(cur_repo, k, v)
89
89 self.sa.add(cur_repo) 90 self.sa.add(cur_repo)
91
92 if repo_name != form_data['repo_name']:
93 #rename our data
94 self.__rename_repo(repo_name, form_data['repo_name'])
95
90 self.sa.commit() 96 self.sa.commit()
91 except: 97 except:
92 log.error(traceback.format_exc()) 98 log.error(traceback.format_exc())
93 self.sa.rollback() 99 self.sa.rollback()
94 raise 100 raise
100 for k, v in form_data.items(): 106 for k, v in form_data.items():
101 setattr(new_repo, k, v) 107 setattr(new_repo, k, v)
102 108
103 new_repo.user_id = cur_user.user_id 109 new_repo.user_id = cur_user.user_id
104 self.sa.add(new_repo) 110 self.sa.add(new_repo)
105 111
106 #create default permission 112 #create default permission
107 repo2perm = Repo2Perm() 113 repo2perm = Repo2Perm()
108 default_perm = 'repository.none' if form_data['private'] \ 114 default_perm = 'repository.none' if form_data['private'] \
109 else 'repository.read' 115 else 'repository.read'
110 repo2perm.permission_id = self.sa.query(Permission)\ 116 repo2perm.permission_id = self.sa.query(Permission)\
111 .filter(Permission.permission_name == default_perm)\ 117 .filter(Permission.permission_name == default_perm)\
112 .one().permission_id 118 .one().permission_id
113 119
114 repo2perm.repository = repo_name 120 repo2perm.repository_id = new_repo.repo_id
115 repo2perm.user_id = self.sa.query(User)\ 121 repo2perm.user_id = self.sa.query(User)\
116 .filter(User.username == 'default').one().user_id 122 .filter(User.username == 'default').one().user_id
117 123
118 self.sa.add(repo2perm) 124 self.sa.add(repo2perm)
119 self.sa.commit() 125 self.sa.commit()
131 self.__delete_repo(repo.repo_name) 137 self.__delete_repo(repo.repo_name)
132 except: 138 except:
133 log.error(traceback.format_exc()) 139 log.error(traceback.format_exc())
134 self.sa.rollback() 140 self.sa.rollback()
135 raise 141 raise
142
136 def delete_perm_user(self, form_data, repo_name): 143 def delete_perm_user(self, form_data, repo_name):
137 try: 144 try:
138 r2p = self.sa.query(Repo2Perm).filter(Repo2Perm.repository == repo_name)\ 145 self.sa.query(Repo2Perm)\
139 .filter(Repo2Perm.user_id == form_data['user_id']).delete() 146 .filter(Repo2Perm.repository == self.get(repo_name))\
147 .filter(Repo2Perm.user_id == form_data['user_id']).delete()
140 self.sa.commit() 148 self.sa.commit()
141 except: 149 except:
142 log.error(traceback.format_exc()) 150 log.error(traceback.format_exc())
143 self.sa.rollback() 151 self.sa.rollback()
144 raise 152 raise