Mercurial > kallithea
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 |