diff pylons_app/model/repo_model.py @ 393: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
line wrap: on
line diff
--- a/pylons_app/model/repo_model.py	Tue Jul 27 14:48:13 2010 +0200
+++ b/pylons_app/model/repo_model.py	Tue Jul 27 14:53:22 2010 +0200
@@ -16,21 +16,20 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 # MA  02110-1301, USA.
-
 """
 Created on Jun 5, 2010
 model for handling repositories actions
 @author: marcink
 """
-from pylons_app.model.meta import Session
+from datetime import datetime
+from pylons import app_globals as g
+from pylons_app.lib.utils import check_repo
 from pylons_app.model.db import Repository, Repo2Perm, User, Permission
-import shutil
+from pylons_app.model.meta import Session
+import logging
 import os
-from datetime import datetime
-from pylons_app.lib.utils import check_repo
-from pylons import app_globals as g
+import shutil
 import traceback
-import logging
 log = logging.getLogger(__name__)
 
 class RepoModel(object):
@@ -39,7 +38,7 @@
         self.sa = Session()
     
     def get(self, id):
-        return self.sa.query(Repository).get(id)
+        return self.sa.query(Repository).filter(Repository.repo_name == id).scalar()
         
     def get_users_js(self):
         
@@ -51,42 +50,49 @@
         return users_array        
         
     
-    def update(self, repo_id, form_data):
+    def update(self, repo_name, form_data):
         try:
-            if repo_id != form_data['repo_name']:
-                #rename our data
-                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()
+                        .filter(Repo2Perm.repository == self.get(repo_name))\
+                        .one()
                 
                 r2p.permission_id = self.sa.query(Permission).filter(
                                                 Permission.permission_name == 
                                                 perm).one().permission_id
                 self.sa.add(r2p)
             
+            #set new permissions
             for username, perm in form_data['perms_new']:
                 r2p = Repo2Perm()
-                r2p.repository = repo_id
+                r2p.repository = self.get(repo_name)
                 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
+                                        Permission.permission_name == perm)\
+                                        .one().permission_id
                 self.sa.add(r2p)
-                                    
+            
+            #update current repo
+            cur_repo = self.get(repo_name)
+             
+            for k, v in form_data.items():
+                if k == 'user':
+                    cur_repo.user_id = v
+                else:
+                    setattr(cur_repo, k, v)
+                                                        
             self.sa.add(cur_repo)
+            
+            if repo_name != form_data['repo_name']:
+                #rename our data
+                self.__rename_repo(repo_name, form_data['repo_name'])            
+            
             self.sa.commit()
         except:
             log.error(traceback.format_exc())
@@ -102,7 +108,7 @@
                 
             new_repo.user_id = cur_user.user_id
             self.sa.add(new_repo)
-
+            
             #create default permission
             repo2perm = Repo2Perm()
             default_perm = 'repository.none' if form_data['private'] \
@@ -111,7 +117,7 @@
                     .filter(Permission.permission_name == default_perm)\
                     .one().permission_id
                         
-            repo2perm.repository = repo_name
+            repo2perm.repository_id = new_repo.repo_id
             repo2perm.user_id = self.sa.query(User)\
                     .filter(User.username == 'default').one().user_id 
             
@@ -133,10 +139,12 @@
             log.error(traceback.format_exc())
             self.sa.rollback()
             raise
+        
     def delete_perm_user(self, form_data, repo_name):
         try:
-            r2p = self.sa.query(Repo2Perm).filter(Repo2Perm.repository == repo_name)\
-            .filter(Repo2Perm.user_id == form_data['user_id']).delete()
+            self.sa.query(Repo2Perm)\
+                .filter(Repo2Perm.repository == self.get(repo_name))\
+                .filter(Repo2Perm.user_id == form_data['user_id']).delete()
             self.sa.commit()
         except:
             log.error(traceback.format_exc())