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