Mercurial > kallithea
comparison pylons_app/model/repo_model.py @ 530:a08f610e545e
Implemented server side forks
added ability to pass session to user/repo models
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 01 Oct 2010 00:16:09 +0200 |
parents | 3ed2d46a2ca7 |
children |
comparison
equal
deleted
inserted
replaced
529:3a567e329fb6 | 530:a08f610e545e |
---|---|
25 from pylons import app_globals as g | 25 from pylons import app_globals as g |
26 from pylons_app.lib.utils import check_repo | 26 from pylons_app.lib.utils import check_repo |
27 from pylons_app.model.db import Repository, RepoToPerm, User, Permission | 27 from pylons_app.model.db import Repository, RepoToPerm, User, Permission |
28 from pylons_app.model.meta import Session | 28 from pylons_app.model.meta import Session |
29 from pylons_app.model.user_model import UserModel | 29 from pylons_app.model.user_model import UserModel |
30 from pylons_app.lib.celerylib.tasks import create_repo_fork, run_task | |
30 import logging | 31 import logging |
31 import os | 32 import os |
32 import shutil | 33 import shutil |
33 import traceback | 34 import traceback |
34 log = logging.getLogger(__name__) | 35 log = logging.getLogger(__name__) |
35 | 36 |
36 class RepoModel(object): | 37 class RepoModel(object): |
37 | 38 |
38 def __init__(self): | 39 def __init__(self, sa=None): |
39 self.sa = Session() | 40 if not sa: |
41 self.sa = Session() | |
42 else: | |
43 self.sa = sa | |
40 | 44 |
41 def get(self, id): | 45 def get(self, id): |
42 return self.sa.query(Repository).filter(Repository.repo_name == id).scalar() | 46 return self.sa.query(Repository)\ |
47 .filter(Repository.repo_name == id).scalar() | |
43 | 48 |
44 def get_users_js(self): | 49 def get_users_js(self): |
45 | 50 |
46 users = self.sa.query(User).filter(User.active == True).all() | 51 users = self.sa.query(User).filter(User.active == True).all() |
47 u_tmpl = '''{id:%s, fname:"%s", lname:"%s", nname:"%s"},''' | 52 u_tmpl = '''{id:%s, fname:"%s", lname:"%s", nname:"%s"},''' |
98 except: | 103 except: |
99 log.error(traceback.format_exc()) | 104 log.error(traceback.format_exc()) |
100 self.sa.rollback() | 105 self.sa.rollback() |
101 raise | 106 raise |
102 | 107 |
103 def create(self, form_data, cur_user, just_db=False): | 108 def create(self, form_data, cur_user, just_db=False, fork=False): |
104 try: | 109 try: |
105 repo_name = form_data['repo_name'] | 110 if fork: |
111 repo_name = str(form_data['fork_name']) | |
112 org_name = str(form_data['repo_name']) | |
113 | |
114 else: | |
115 org_name = repo_name = str(form_data['repo_name']) | |
106 new_repo = Repository() | 116 new_repo = Repository() |
107 for k, v in form_data.items(): | 117 for k, v in form_data.items(): |
118 if k == 'repo_name': | |
119 v = repo_name | |
108 setattr(new_repo, k, v) | 120 setattr(new_repo, k, v) |
109 | 121 |
122 if fork: | |
123 parent_repo = self.sa.query(Repository)\ | |
124 .filter(Repository.repo_name == org_name).scalar() | |
125 new_repo.fork = parent_repo | |
126 | |
110 new_repo.user_id = cur_user.user_id | 127 new_repo.user_id = cur_user.user_id |
111 self.sa.add(new_repo) | 128 self.sa.add(new_repo) |
112 | 129 |
113 #create default permission | 130 #create default permission |
114 repo_to_perm = RepoToPerm() | 131 repo_to_perm = RepoToPerm() |
115 default = 'repository.read' | 132 default = 'repository.read' |
116 for p in UserModel().get_default().user_perms: | 133 for p in UserModel(self.sa).get_default().user_perms: |
117 if p.permission.permission_name.startswith('repository.'): | 134 if p.permission.permission_name.startswith('repository.'): |
118 default = p.permission.permission_name | 135 default = p.permission.permission_name |
119 break | 136 break |
120 | 137 |
121 default_perm = 'repository.none' if form_data['private'] else default | 138 default_perm = 'repository.none' if form_data['private'] else default |
134 self.__create_repo(repo_name) | 151 self.__create_repo(repo_name) |
135 except: | 152 except: |
136 log.error(traceback.format_exc()) | 153 log.error(traceback.format_exc()) |
137 self.sa.rollback() | 154 self.sa.rollback() |
138 raise | 155 raise |
139 | 156 |
157 def create_fork(self, form_data, cur_user): | |
158 run_task(create_repo_fork, form_data, cur_user) | |
159 | |
140 def delete(self, repo): | 160 def delete(self, repo): |
141 try: | 161 try: |
142 self.sa.delete(repo) | 162 self.sa.delete(repo) |
143 self.sa.commit() | 163 self.sa.commit() |
144 self.__delete_repo(repo.repo_name) | 164 self.__delete_repo(repo.repo_name) |