diff pylons_app/model/repo_model.py @ 309: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
line wrap: on
line diff
--- a/pylons_app/model/repo_model.py	Fri Jun 25 02:06:45 2010 +0200
+++ b/pylons_app/model/repo_model.py	Fri Jun 25 02:09:33 2010 +0200
@@ -23,12 +23,13 @@
 @author: marcink
 """
 from pylons_app.model.meta import Session
-from pylons_app.model.db import Repository
+from pylons_app.model.db import Repository, Repo2Perm, User, Permission
 import shutil
 import os
 from datetime import datetime
 from pylons_app.lib.utils import check_repo
 from pylons import app_globals as g
+import traceback
 import logging
 log = logging.getLogger(__name__)
 
@@ -41,36 +42,73 @@
         return self.sa.query(Repository).get(id)
         
     
-    def update(self, id, form_data):
+    def update(self, repo_id, form_data):
         try:
-            if id != form_data['repo_name']:
-                self.__rename_repo(id, form_data['repo_name'])
-            cur_repo = self.sa.query(Repository).get(id)
+            if repo_id != form_data['repo_name']:
+                self.__rename_repo(repo_id, form_data['repo_name'])
+            cur_repo = self.sa.query(Repository).get(repo_id)
             for k, v in form_data.items():
                 if k == 'user':
                     cur_repo.user_id = v
                 else:
                     setattr(cur_repo, k, v)
+            
+            #update permissions
+            for username, perm in form_data['perms_updates']:
+                r2p = self.sa.query(Repo2Perm)\
+                        .filter(Repo2Perm.user == self.sa.query(User)\
+                                .filter(User.username == username).one())\
+                        .filter(Repo2Perm.repository == repo_id).one()
                 
+                r2p.permission_id = self.sa.query(Permission).filter(
+                                                Permission.permission_name == 
+                                                perm).one().permission_id
+                self.sa.add(r2p)
+            
+            for username, perm in form_data['perms_new']:
+                r2p = Repo2Perm()
+                r2p.repository = repo_id
+                r2p.user = self.sa.query(User)\
+                                .filter(User.username == username).one()
+                
+                r2p.permission_id = self.sa.query(Permission).filter(
+                                                Permission.permission_name == 
+                                                perm).one().permission_id
+                self.sa.add(r2p)
+                                    
             self.sa.add(cur_repo)
             self.sa.commit()
-        except Exception as e:
-            log.error(e)
+        except:
+            log.error(traceback.format_exc())
             self.sa.rollback()
             raise    
     
-    def create(self, form_data, cur_user):
+    def create(self, form_data, cur_user, just_db=False):
         try:
+            repo_name = form_data['repo_name']
             new_repo = Repository()
             for k, v in form_data.items():
                 setattr(new_repo, k, v)
                 
             new_repo.user_id = cur_user.user_id
             self.sa.add(new_repo)
+
+            #create default permission
+            repo2perm = Repo2Perm()
+            repo2perm.permission_id = self.sa.query(Permission)\
+                    .filter(Permission.permission_name == 'repository.read')\
+                    .one().permission_id
+                        
+            repo2perm.repository = repo_name
+            repo2perm.user_id = self.sa.query(User)\
+                    .filter(User.username == 'default').one().user_id 
+            
+            self.sa.add(repo2perm)
             self.sa.commit()
-            self.__create_repo(form_data['repo_name'])
-        except Exception as e:
-            log.error(e)
+            if not just_db:
+                self.__create_repo(repo_name)
+        except:
+            log.error(traceback.format_exc())
             self.sa.rollback()
             raise    
                      
@@ -79,8 +117,8 @@
             self.sa.delete(repo)
             self.sa.commit()
             self.__delete_repo(repo.repo_name)
-        except Exception as e:
-            log.error(e)
+        except:
+            log.error(traceback.format_exc())
             self.sa.rollback()
             raise
        
@@ -103,4 +141,5 @@
         #disable hg 
         shutil.move(os.path.join(rm_path, '.hg'), os.path.join(rm_path, 'rm__.hg'))
         #disable repo
-        shutil.move(rm_path, os.path.join(g.base_path, 'rm__%s-%s' % (datetime.today(), id)))
+        shutil.move(rm_path, os.path.join(g.base_path, 'rm__%s__%s' \
+                                          % (datetime.today(), name)))