diff 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
line wrap: on
line diff
--- a/pylons_app/model/repo_model.py	Thu Sep 30 18:35:03 2010 +0200
+++ b/pylons_app/model/repo_model.py	Fri Oct 01 00:16:09 2010 +0200
@@ -27,6 +27,7 @@
 from pylons_app.model.db import Repository, RepoToPerm, User, Permission
 from pylons_app.model.meta import Session
 from pylons_app.model.user_model import UserModel
+from pylons_app.lib.celerylib.tasks import create_repo_fork, run_task
 import logging
 import os
 import shutil
@@ -35,11 +36,15 @@
 
 class RepoModel(object):
     
-    def __init__(self):
-        self.sa = Session()
+    def __init__(self, sa=None):
+        if not sa:
+            self.sa = Session()
+        else:
+            self.sa = sa
     
     def get(self, id):
-        return self.sa.query(Repository).filter(Repository.repo_name == id).scalar()
+        return self.sa.query(Repository)\
+            .filter(Repository.repo_name == id).scalar()
         
     def get_users_js(self):
         
@@ -100,20 +105,32 @@
             self.sa.rollback()
             raise    
     
-    def create(self, form_data, cur_user, just_db=False):
+    def create(self, form_data, cur_user, just_db=False, fork=False):
         try:
-            repo_name = form_data['repo_name']
+            if fork:
+                repo_name = str(form_data['fork_name'])
+                org_name = str(form_data['repo_name'])
+                
+            else:
+                org_name = repo_name = str(form_data['repo_name'])
             new_repo = Repository()
             for k, v in form_data.items():
+                if k == 'repo_name':
+                    v = repo_name
                 setattr(new_repo, k, v)
                 
+            if fork:
+                parent_repo = self.sa.query(Repository)\
+                        .filter(Repository.repo_name == org_name).scalar()
+                new_repo.fork = parent_repo
+                            
             new_repo.user_id = cur_user.user_id
             self.sa.add(new_repo)
             
             #create default permission
             repo_to_perm = RepoToPerm()
             default = 'repository.read'
-            for p in UserModel().get_default().user_perms:
+            for p in UserModel(self.sa).get_default().user_perms:
                 if p.permission.permission_name.startswith('repository.'):
                     default = p.permission.permission_name
                     break
@@ -136,7 +153,10 @@
             log.error(traceback.format_exc())
             self.sa.rollback()
             raise    
-                     
+    
+    def create_fork(self, form_data, cur_user):
+        run_task(create_repo_fork, form_data, cur_user)
+                         
     def delete(self, repo):
         try:
             self.sa.delete(repo)