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)