changeset 323:8026872a10ee

Moved admin controllers to separate module
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 30 Jun 2010 17:14:47 +0200
parents 46b7d108ea7a
children 9c390ca19deb
files pylons_app/config/routing.py pylons_app/controllers/admin.py pylons_app/controllers/admin/__init__.py pylons_app/controllers/admin/admin.py pylons_app/controllers/admin/permissions.py pylons_app/controllers/admin/repos.py pylons_app/controllers/admin/users.py pylons_app/controllers/permissions.py pylons_app/controllers/repos.py pylons_app/controllers/users.py
diffstat 9 files changed, 500 insertions(+), 498 deletions(-) [+]
line wrap: on
line diff
--- a/pylons_app/config/routing.py	Wed Jun 30 17:05:20 2010 +0200
+++ b/pylons_app/config/routing.py	Wed Jun 30 17:14:47 2010 +0200
@@ -32,7 +32,7 @@
         return not cr(repo_name, config['base_path'])
  
     #REST routes
-    with map.submapper(path_prefix='/_admin', controller='repos') as m:
+    with map.submapper(path_prefix='/_admin', controller='pylons_app.controllers.admin.repos:ReposController') as m:
         m.connect("repos", "/repos",
              action="create", conditions=dict(method=["POST"]))
         m.connect("repos", "/repos",
@@ -67,11 +67,11 @@
              action="delete_perm_user", conditions=dict(method=["DELETE"],
                                                         function=check_repo))
         
-    map.resource('user', 'users', path_prefix='/_admin')
-    map.resource('permission', 'permissions', path_prefix='/_admin')
+    map.resource('user', 'users', controller='pylons_app.controllers.admin.users:UsersController', path_prefix='/_admin')
+    map.resource('permission', 'permissions', controller='pylons_app.controllers.admin.permissions:PermissionsController', path_prefix='/_admin')
     
     #ADMIN
-    with map.submapper(path_prefix='/_admin', controller='admin') as m:
+    with map.submapper(path_prefix='/_admin', controller='pylons_app.controllers.admin.admin:AdminController') as m:
         m.connect('admin_home', '', action='index')#main page
         m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
                   action='add_repo')
@@ -84,9 +84,11 @@
                 controller='feed', action='atom',
                 conditions=dict(function=check_repo))
     
+    #LOGIN/LOGOUT
     map.connect('login_home', '/login', controller='login')
     map.connect('logout_home', '/logout', controller='login', action='logout')
     
+    #OTHERS
     map.connect('changeset_home', '/{repo_name:.*}/changeset/{revision}',
                 controller='changeset', revision='tip',
                 conditions=dict(function=check_repo))
--- a/pylons_app/controllers/admin.py	Wed Jun 30 17:05:20 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-#!/usr/bin/env python
-# encoding: utf-8
-# admin controller for pylons 
-# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
- 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; version 2
-# of the License or (at your opinion) any later version of the license.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# 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 April 7, 2010
-admin controller for pylons
-@author: marcink
-"""
-import logging
-from pylons import request, response, session, tmpl_context as c
-from pylons_app.lib.base import BaseController, render
-from pylons_app.model import meta
-from pylons_app.model.db import UserLog
-from webhelpers.paginate import Page
-from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator
-
-log = logging.getLogger(__name__)
-
-class AdminController(BaseController):
-    
-    @LoginRequired()
-    def __before__(self):
-        super(AdminController, self).__before__()
-    
-    @HasPermissionAllDecorator('hg.admin')        
-    def index(self):
-        sa = meta.Session
-                         
-        users_log = sa.query(UserLog).order_by(UserLog.action_date.desc())
-        p = int(request.params.get('page', 1))
-        c.users_log = Page(users_log, page=p, items_per_page=10)
-        c.log_data = render('admin/admin_log.html')
-        if request.params.get('partial'):
-            return c.log_data
-        return render('admin/admin.html')    
-                
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pylons_app/controllers/admin/admin.py	Wed Jun 30 17:14:47 2010 +0200
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+# encoding: utf-8
+# admin controller for pylons 
+# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
+ 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License or (at your opinion) any later version of the license.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# 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 April 7, 2010
+admin controller for pylons
+@author: marcink
+"""
+import logging
+from pylons import request, response, session, tmpl_context as c
+from pylons_app.lib.base import BaseController, render
+from pylons_app.model import meta
+from pylons_app.model.db import UserLog
+from webhelpers.paginate import Page
+from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator
+
+log = logging.getLogger(__name__)
+
+class AdminController(BaseController):
+    
+    @LoginRequired()
+    def __before__(self):
+        super(AdminController, self).__before__()
+    
+    @HasPermissionAllDecorator('hg.admin')        
+    def index(self):
+        sa = meta.Session
+                         
+        users_log = sa.query(UserLog).order_by(UserLog.action_date.desc())
+        p = int(request.params.get('page', 1))
+        c.users_log = Page(users_log, page=p, items_per_page=10)
+        c.log_data = render('admin/admin_log.html')
+        if request.params.get('partial'):
+            return c.log_data
+        return render('admin/admin.html')    
+                
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pylons_app/controllers/admin/permissions.py	Wed Jun 30 17:14:47 2010 +0200
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+# encoding: utf-8
+# permissions controller for pylons
+# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
+ 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License or (at your opinion) any later version of the license.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# 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 April 27, 2010
+permissions controller for pylons
+@author: marcink
+"""
+from formencode import htmlfill
+from pylons import request, session, tmpl_context as c, url
+from pylons.controllers.util import abort, redirect
+from pylons.i18n.translation import _
+from pylons_app.lib import helpers as h
+from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator
+from pylons_app.lib.base import BaseController, render
+from pylons_app.model.db import User, UserLog
+from pylons_app.model.forms import UserForm
+from pylons_app.model.user_model import UserModel
+import formencode
+import logging
+
+log = logging.getLogger(__name__)
+
+class PermissionsController(BaseController):
+    """REST Controller styled on the Atom Publishing Protocol"""
+    # To properly map this controller, ensure your config/routing.py
+    # file has a resource setup:
+    #     map.resource('permission', 'permissions')
+    
+    @LoginRequired()
+    #@HasPermissionAllDecorator('hg.admin')
+    def __before__(self):
+        c.admin_user = session.get('admin_user')
+        c.admin_username = session.get('admin_username')
+        super(PermissionsController, self).__before__()
+        
+    def index(self, format='html'):
+        """GET /permissions: All items in the collection"""
+        # url('permissions')
+        return render('admin/permissions/permissions.html')
+
+    def create(self):
+        """POST /permissions: Create a new item"""
+        # url('permissions')
+
+    def new(self, format='html'):
+        """GET /permissions/new: Form to create a new item"""
+        # url('new_permission')
+
+    def update(self, id):
+        """PUT /permissions/id: Update an existing item"""
+        # Forms posted to this method should contain a hidden field:
+        #    <input type="hidden" name="_method" value="PUT" />
+        # Or using helpers:
+        #    h.form(url('permission', id=ID),
+        #           method='put')
+        # url('permission', id=ID)
+
+    def delete(self, id):
+        """DELETE /permissions/id: Delete an existing item"""
+        # Forms posted to this method should contain a hidden field:
+        #    <input type="hidden" name="_method" value="DELETE" />
+        # Or using helpers:
+        #    h.form(url('permission', id=ID),
+        #           method='delete')
+        # url('permission', id=ID)
+
+    def show(self, id, format='html'):
+        """GET /permissions/id: Show a specific item"""
+        # url('permission', id=ID)
+
+    def edit(self, id, format='html'):
+        """GET /permissions/id/edit: Form to edit an existing item"""
+        # url('edit_permission', id=ID)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pylons_app/controllers/admin/repos.py	Wed Jun 30 17:14:47 2010 +0200
@@ -0,0 +1,197 @@
+#!/usr/bin/env python
+# encoding: utf-8
+# repos controller for pylons
+# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License or (at your opinion) any later version of the license.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# 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 April 7, 2010
+admin controller for pylons
+@author: marcink
+"""
+from formencode import htmlfill
+from operator import itemgetter
+from pylons import request, response, session, tmpl_context as c, url
+from pylons.controllers.util import abort, redirect
+from pylons.i18n.translation import _
+from pylons_app.lib import helpers as h
+from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator
+from pylons_app.lib.base import BaseController, render
+from pylons_app.lib.utils import invalidate_cache
+from pylons_app.model.forms import RepoForm
+from pylons_app.model.hg_model import HgModel
+from pylons_app.model.repo_model import RepoModel
+import formencode
+import logging
+log = logging.getLogger(__name__)
+
+class ReposController(BaseController):
+    """REST Controller styled on the Atom Publishing Protocol"""
+    # To properly map this controller, ensure your config/routing.py
+    # file has a resource setup:
+    #     map.resource('repo', 'repos')
+    
+    @LoginRequired()
+    @HasPermissionAllDecorator('hg.admin')
+    def __before__(self):
+        c.admin_user = session.get('admin_user')
+        c.admin_username = session.get('admin_username')
+        super(ReposController, self).__before__()
+                
+    def index(self, format='html'):
+        """GET /repos: All items in the collection"""
+        # url('repos')
+        cached_repo_list = HgModel().get_repos()
+        c.repos_list = sorted(cached_repo_list, key=itemgetter('name_sort'))
+        return render('admin/repos/repos.html')
+    
+    def create(self):
+        """POST /repos: Create a new item"""
+        # url('repos')
+        repo_model = RepoModel()
+        _form = RepoForm()()
+        try:
+            form_result = _form.to_python(dict(request.POST))
+            repo_model.create(form_result, c.hg_app_user)
+            invalidate_cache('cached_repo_list')
+            h.flash(_('created repository %s') % form_result['repo_name'],
+                    category='success')
+                                                             
+        except formencode.Invalid as errors:
+            c.form_errors = errors.error_dict
+            c.new_repo = errors.value['repo_name']
+            return htmlfill.render(
+                 render('admin/repos/repo_add.html'),
+                defaults=errors.value,
+                encoding="UTF-8")        
+
+        except Exception:
+            h.flash(_('error occured during creation of repository %s') \
+                    % form_result['repo_name'], category='error')
+            
+        return redirect('repos')
+
+    def new(self, format='html'):
+        """GET /repos/new: Form to create a new item"""
+        new_repo = request.GET.get('repo', '')
+        c.new_repo = h.repo_name_slug(new_repo)
+
+        return render('admin/repos/repo_add.html')
+
+    def update(self, repo_name):
+        """PUT /repos/repo_name: Update an existing item"""
+        # Forms posted to this method should contain a hidden field:
+        #    <input type="hidden" name="_method" value="PUT" />
+        # Or using helpers:
+        #    h.form(url('repo', repo_name=ID),
+        #           method='put')
+        # url('repo', repo_name=ID)
+        repo_model = RepoModel()
+        _form = RepoForm(edit=True)()
+        try:
+            form_result = _form.to_python(dict(request.POST))
+            repo_model.update(repo_name, form_result)
+            invalidate_cache('cached_repo_list')
+            h.flash(_('Repository %s updated succesfully' % repo_name),
+                    category='success')
+                           
+        except formencode.Invalid as errors:
+            c.repo_info = repo_model.get(repo_name)
+            c.users_array = repo_model.get_users_js()
+            errors.value.update({'user':c.repo_info.user.username})
+            c.form_errors = errors.error_dict
+            return htmlfill.render(
+                 render('admin/repos/repo_edit.html'),
+                defaults=errors.value,
+                encoding="UTF-8")
+        except Exception:
+            h.flash(_('error occured during update of repository %s') \
+                    % form_result['repo_name'], category='error')
+        return redirect(url('repos'))
+    
+    def delete(self, repo_name):
+        """DELETE /repos/repo_name: Delete an existing item"""
+        # Forms posted to this method should contain a hidden field:
+        #    <input type="hidden" name="_method" value="DELETE" />
+        # Or using helpers:
+        #    h.form(url('repo', repo_name=ID),
+        #           method='delete')
+        # url('repo', repo_name=ID)
+        
+        repo_model = RepoModel()
+        repo = repo_model.get(repo_name)
+        if not repo:
+            h.flash(_('%s repository is not mapped to db perhaps' 
+                      ' it was moved or renamed  from the filesystem'
+                      ' please run the application again'
+                      ' in order to rescan repositories') % repo_name,
+                      category='error')
+        
+            return redirect(url('repos'))
+        try:
+            repo_model.delete(repo)            
+            invalidate_cache('cached_repo_list')
+            h.flash(_('deleted repository %s') % repo_name, category='success')
+        except Exception:
+            h.flash(_('An error occured during deletion of %s') % repo_name,
+                    category='error')
+        
+        return redirect(url('repos'))
+        
+    def delete_perm_user(self, repo_name):
+        """
+        DELETE an existing repository permission user
+        @param repo_name:
+        """
+        
+        try:
+            repo_model = RepoModel()
+            repo_model.delete_perm_user(request.POST, repo_name)            
+        except Exception as e:
+            h.flash(_('An error occured during deletion of repository user'),
+                    category='error')
+        
+        
+    def show(self, repo_name, format='html'):
+        """GET /repos/repo_name: Show a specific item"""
+        # url('repo', repo_name=ID)
+        
+    def edit(self, repo_name, format='html'):
+        """GET /repos/repo_name/edit: Form to edit an existing item"""
+        # url('edit_repo', repo_name=ID)
+        repo_model = RepoModel()
+        c.repo_info = repo = repo_model.get(repo_name)
+        if not repo:
+            h.flash(_('%s repository is not mapped to db perhaps' 
+                      ' it was created or renamed from the filesystem'
+                      ' please run the application again'
+                      ' in order to rescan repositories') % repo_name,
+                      category='error')
+        
+            return redirect(url('repos'))        
+        defaults = c.repo_info.__dict__
+        defaults.update({'user':c.repo_info.user.username})
+        c.users_array = repo_model.get_users_js()
+        
+        for p in c.repo_info.repo2perm:
+            defaults.update({'perm_%s' % p.user.username: 
+                             p.permission.permission_name})
+            
+        return htmlfill.render(
+            render('admin/repos/repo_edit.html'),
+            defaults=defaults,
+            encoding="UTF-8",
+            force_defaults=False
+        )          
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pylons_app/controllers/admin/users.py	Wed Jun 30 17:14:47 2010 +0200
@@ -0,0 +1,155 @@
+#!/usr/bin/env python
+# encoding: utf-8
+# users controller for pylons
+# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
+ 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License or (at your opinion) any later version of the license.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# 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 April 4, 2010
+users controller for pylons
+@author: marcink
+"""
+from formencode import htmlfill
+from pylons import request, session, tmpl_context as c, url
+from pylons.controllers.util import abort, redirect
+from pylons.i18n.translation import _
+from pylons_app.lib import helpers as h
+from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator
+from pylons_app.lib.base import BaseController, render
+from pylons_app.model.db import User, UserLog
+from pylons_app.model.forms import UserForm
+from pylons_app.model.user_model import UserModel, DefaultUserException
+import formencode
+import logging
+
+log = logging.getLogger(__name__)
+
+class UsersController(BaseController):
+    """REST Controller styled on the Atom Publishing Protocol"""
+    # To properly map this controller, ensure your config/routing.py
+    # file has a resource setup:
+    #     map.resource('user', 'users')
+    
+    @LoginRequired()
+    @HasPermissionAllDecorator('hg.admin')
+    def __before__(self):
+        c.admin_user = session.get('admin_user')
+        c.admin_username = session.get('admin_username')
+        super(UsersController, self).__before__()
+    
+
+    def index(self, format='html'):
+        """GET /users: All items in the collection"""
+        # url('users')
+        
+        c.users_list = self.sa.query(User).all()     
+        return render('admin/users/users.html')
+    
+    def create(self):
+        """POST /users: Create a new item"""
+        # url('users')
+        
+        user_model = UserModel()
+        login_form = UserForm()()
+        try:
+            form_result = login_form.to_python(dict(request.POST))
+            user_model.create(form_result)
+            h.flash(_('created user %s') % form_result['username'],
+                    category='success')
+        except formencode.Invalid as errors:
+            c.form_errors = errors.error_dict
+            return htmlfill.render(
+                 render('admin/users/user_add.html'),
+                defaults=errors.value,
+                encoding="UTF-8")
+        except Exception:
+            h.flash(_('error occured during creation of user %s') \
+                    % form_result['username'], category='error')            
+        return redirect(url('users'))
+    
+    def new(self, format='html'):
+        """GET /users/new: Form to create a new item"""
+        # url('new_user')
+        return render('admin/users/user_add.html')
+
+    def update(self, id):
+        """PUT /users/id: Update an existing item"""
+        # Forms posted to this method should contain a hidden field:
+        #    <input type="hidden" name="_method" value="PUT" />
+        # Or using helpers:
+        #    h.form(url('user', id=ID),
+        #           method='put')
+        # url('user', id=ID)
+        user_model = UserModel()
+        _form = UserForm(edit=True)()
+        try:
+            form_result = _form.to_python(dict(request.POST))
+            user_model.update(id, form_result)
+            h.flash(_('User updated succesfully'), category='success')
+                           
+        except formencode.Invalid as errors:
+            c.user = user_model.get_user(id)
+            c.form_errors = errors.error_dict
+            return htmlfill.render(
+                 render('admin/users/user_edit.html'),
+                defaults=errors.value,
+                encoding="UTF-8")
+        except Exception:
+            h.flash(_('error occured during update of user %s') \
+                    % form_result['username'], category='error')
+            
+        return redirect(url('users'))
+    
+    def delete(self, id):
+        """DELETE /users/id: Delete an existing item"""
+        # Forms posted to this method should contain a hidden field:
+        #    <input type="hidden" name="_method" value="DELETE" />
+        # Or using helpers:
+        #    h.form(url('user', id=ID),
+        #           method='delete')
+        # url('user', id=ID)
+        user_model = UserModel()
+        try:
+            user_model.delete(id)
+            h.flash(_('sucessfully deleted user'), category='success')
+        except DefaultUserException as e:
+            h.flash(str(e), category='warning')
+        except Exception:
+            h.flash(_('An error occured during deletion of user'),
+                    category='error')            
+        return redirect(url('users'))
+        
+    def show(self, id, format='html'):
+        """GET /users/id: Show a specific item"""
+        # url('user', id=ID)
+    
+    
+    def edit(self, id, format='html'):
+        """GET /users/id/edit: Form to edit an existing item"""
+        # url('edit_user', id=ID)
+        c.user = self.sa.query(User).get(id)
+        if c.user.username == 'default':
+            h.flash(_("You can't edit this user since it's" 
+              " crucial for entire application"), category='warning')
+            return redirect(url('users'))
+        
+        defaults = c.user.__dict__
+        return htmlfill.render(
+            render('admin/users/user_edit.html'),
+            defaults=defaults,
+            encoding="UTF-8",
+            force_defaults=False
+        )    
--- a/pylons_app/controllers/permissions.py	Wed Jun 30 17:05:20 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-#!/usr/bin/env python
-# encoding: utf-8
-# permissions controller for pylons
-# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
- 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; version 2
-# of the License or (at your opinion) any later version of the license.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# 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 April 27, 2010
-permissions controller for pylons
-@author: marcink
-"""
-from formencode import htmlfill
-from pylons import request, session, tmpl_context as c, url
-from pylons.controllers.util import abort, redirect
-from pylons.i18n.translation import _
-from pylons_app.lib import helpers as h
-from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator
-from pylons_app.lib.base import BaseController, render
-from pylons_app.model.db import User, UserLog
-from pylons_app.model.forms import UserForm
-from pylons_app.model.user_model import UserModel
-import formencode
-import logging
-
-log = logging.getLogger(__name__)
-
-class PermissionsController(BaseController):
-    """REST Controller styled on the Atom Publishing Protocol"""
-    # To properly map this controller, ensure your config/routing.py
-    # file has a resource setup:
-    #     map.resource('permission', 'permissions')
-    
-    @LoginRequired()
-    #@HasPermissionAllDecorator('hg.admin')
-    def __before__(self):
-        c.admin_user = session.get('admin_user')
-        c.admin_username = session.get('admin_username')
-        super(PermissionsController, self).__before__()
-        
-    def index(self, format='html'):
-        """GET /permissions: All items in the collection"""
-        # url('permissions')
-        return render('admin/permissions/permissions.html')
-
-    def create(self):
-        """POST /permissions: Create a new item"""
-        # url('permissions')
-
-    def new(self, format='html'):
-        """GET /permissions/new: Form to create a new item"""
-        # url('new_permission')
-
-    def update(self, id):
-        """PUT /permissions/id: Update an existing item"""
-        # Forms posted to this method should contain a hidden field:
-        #    <input type="hidden" name="_method" value="PUT" />
-        # Or using helpers:
-        #    h.form(url('permission', id=ID),
-        #           method='put')
-        # url('permission', id=ID)
-
-    def delete(self, id):
-        """DELETE /permissions/id: Delete an existing item"""
-        # Forms posted to this method should contain a hidden field:
-        #    <input type="hidden" name="_method" value="DELETE" />
-        # Or using helpers:
-        #    h.form(url('permission', id=ID),
-        #           method='delete')
-        # url('permission', id=ID)
-
-    def show(self, id, format='html'):
-        """GET /permissions/id: Show a specific item"""
-        # url('permission', id=ID)
-
-    def edit(self, id, format='html'):
-        """GET /permissions/id/edit: Form to edit an existing item"""
-        # url('edit_permission', id=ID)
--- a/pylons_app/controllers/repos.py	Wed Jun 30 17:05:20 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,197 +0,0 @@
-#!/usr/bin/env python
-# encoding: utf-8
-# repos controller for pylons
-# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; version 2
-# of the License or (at your opinion) any later version of the license.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# 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 April 7, 2010
-admin controller for pylons
-@author: marcink
-"""
-from formencode import htmlfill
-from operator import itemgetter
-from pylons import request, response, session, tmpl_context as c, url
-from pylons.controllers.util import abort, redirect
-from pylons.i18n.translation import _
-from pylons_app.lib import helpers as h
-from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator
-from pylons_app.lib.base import BaseController, render
-from pylons_app.lib.utils import invalidate_cache
-from pylons_app.model.forms import RepoForm
-from pylons_app.model.hg_model import HgModel
-from pylons_app.model.repo_model import RepoModel
-import formencode
-import logging
-log = logging.getLogger(__name__)
-
-class ReposController(BaseController):
-    """REST Controller styled on the Atom Publishing Protocol"""
-    # To properly map this controller, ensure your config/routing.py
-    # file has a resource setup:
-    #     map.resource('repo', 'repos')
-    
-    @LoginRequired()
-    @HasPermissionAllDecorator('hg.admin')
-    def __before__(self):
-        c.admin_user = session.get('admin_user')
-        c.admin_username = session.get('admin_username')
-        super(ReposController, self).__before__()
-                
-    def index(self, format='html'):
-        """GET /repos: All items in the collection"""
-        # url('repos')
-        cached_repo_list = HgModel().get_repos()
-        c.repos_list = sorted(cached_repo_list, key=itemgetter('name_sort'))
-        return render('admin/repos/repos.html')
-    
-    def create(self):
-        """POST /repos: Create a new item"""
-        # url('repos')
-        repo_model = RepoModel()
-        _form = RepoForm()()
-        try:
-            form_result = _form.to_python(dict(request.POST))
-            repo_model.create(form_result, c.hg_app_user)
-            invalidate_cache('cached_repo_list')
-            h.flash(_('created repository %s') % form_result['repo_name'],
-                    category='success')
-                                                             
-        except formencode.Invalid as errors:
-            c.form_errors = errors.error_dict
-            c.new_repo = errors.value['repo_name']
-            return htmlfill.render(
-                 render('admin/repos/repo_add.html'),
-                defaults=errors.value,
-                encoding="UTF-8")        
-
-        except Exception:
-            h.flash(_('error occured during creation of repository %s') \
-                    % form_result['repo_name'], category='error')
-            
-        return redirect('repos')
-
-    def new(self, format='html'):
-        """GET /repos/new: Form to create a new item"""
-        new_repo = request.GET.get('repo', '')
-        c.new_repo = h.repo_name_slug(new_repo)
-
-        return render('admin/repos/repo_add.html')
-
-    def update(self, repo_name):
-        """PUT /repos/repo_name: Update an existing item"""
-        # Forms posted to this method should contain a hidden field:
-        #    <input type="hidden" name="_method" value="PUT" />
-        # Or using helpers:
-        #    h.form(url('repo', repo_name=ID),
-        #           method='put')
-        # url('repo', repo_name=ID)
-        repo_model = RepoModel()
-        _form = RepoForm(edit=True)()
-        try:
-            form_result = _form.to_python(dict(request.POST))
-            repo_model.update(repo_name, form_result)
-            invalidate_cache('cached_repo_list')
-            h.flash(_('Repository %s updated succesfully' % repo_name),
-                    category='success')
-                           
-        except formencode.Invalid as errors:
-            c.repo_info = repo_model.get(repo_name)
-            c.users_array = repo_model.get_users_js()
-            errors.value.update({'user':c.repo_info.user.username})
-            c.form_errors = errors.error_dict
-            return htmlfill.render(
-                 render('admin/repos/repo_edit.html'),
-                defaults=errors.value,
-                encoding="UTF-8")
-        except Exception:
-            h.flash(_('error occured during update of repository %s') \
-                    % form_result['repo_name'], category='error')
-        return redirect(url('repos'))
-    
-    def delete(self, repo_name):
-        """DELETE /repos/repo_name: Delete an existing item"""
-        # Forms posted to this method should contain a hidden field:
-        #    <input type="hidden" name="_method" value="DELETE" />
-        # Or using helpers:
-        #    h.form(url('repo', repo_name=ID),
-        #           method='delete')
-        # url('repo', repo_name=ID)
-        
-        repo_model = RepoModel()
-        repo = repo_model.get(repo_name)
-        if not repo:
-            h.flash(_('%s repository is not mapped to db perhaps' 
-                      ' it was moved or renamed  from the filesystem'
-                      ' please run the application again'
-                      ' in order to rescan repositories') % repo_name,
-                      category='error')
-        
-            return redirect(url('repos'))
-        try:
-            repo_model.delete(repo)            
-            invalidate_cache('cached_repo_list')
-            h.flash(_('deleted repository %s') % repo_name, category='success')
-        except Exception:
-            h.flash(_('An error occured during deletion of %s') % repo_name,
-                    category='error')
-        
-        return redirect(url('repos'))
-        
-    def delete_perm_user(self, repo_name):
-        """
-        DELETE an existing repository permission user
-        @param repo_name:
-        """
-        
-        try:
-            repo_model = RepoModel()
-            repo_model.delete_perm_user(request.POST, repo_name)            
-        except Exception as e:
-            h.flash(_('An error occured during deletion of repository user'),
-                    category='error')
-        
-        
-    def show(self, repo_name, format='html'):
-        """GET /repos/repo_name: Show a specific item"""
-        # url('repo', repo_name=ID)
-        
-    def edit(self, repo_name, format='html'):
-        """GET /repos/repo_name/edit: Form to edit an existing item"""
-        # url('edit_repo', repo_name=ID)
-        repo_model = RepoModel()
-        c.repo_info = repo = repo_model.get(repo_name)
-        if not repo:
-            h.flash(_('%s repository is not mapped to db perhaps' 
-                      ' it was created or renamed from the filesystem'
-                      ' please run the application again'
-                      ' in order to rescan repositories') % repo_name,
-                      category='error')
-        
-            return redirect(url('repos'))        
-        defaults = c.repo_info.__dict__
-        defaults.update({'user':c.repo_info.user.username})
-        c.users_array = repo_model.get_users_js()
-        
-        for p in c.repo_info.repo2perm:
-            defaults.update({'perm_%s' % p.user.username: 
-                             p.permission.permission_name})
-            
-        return htmlfill.render(
-            render('admin/repos/repo_edit.html'),
-            defaults=defaults,
-            encoding="UTF-8",
-            force_defaults=False
-        )          
--- a/pylons_app/controllers/users.py	Wed Jun 30 17:05:20 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,155 +0,0 @@
-#!/usr/bin/env python
-# encoding: utf-8
-# users controller for pylons
-# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
- 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; version 2
-# of the License or (at your opinion) any later version of the license.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# 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 April 4, 2010
-users controller for pylons
-@author: marcink
-"""
-from formencode import htmlfill
-from pylons import request, session, tmpl_context as c, url
-from pylons.controllers.util import abort, redirect
-from pylons.i18n.translation import _
-from pylons_app.lib import helpers as h
-from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator
-from pylons_app.lib.base import BaseController, render
-from pylons_app.model.db import User, UserLog
-from pylons_app.model.forms import UserForm
-from pylons_app.model.user_model import UserModel, DefaultUserException
-import formencode
-import logging
-
-log = logging.getLogger(__name__)
-
-class UsersController(BaseController):
-    """REST Controller styled on the Atom Publishing Protocol"""
-    # To properly map this controller, ensure your config/routing.py
-    # file has a resource setup:
-    #     map.resource('user', 'users')
-    
-    @LoginRequired()
-    @HasPermissionAllDecorator('hg.admin')
-    def __before__(self):
-        c.admin_user = session.get('admin_user')
-        c.admin_username = session.get('admin_username')
-        super(UsersController, self).__before__()
-    
-
-    def index(self, format='html'):
-        """GET /users: All items in the collection"""
-        # url('users')
-        
-        c.users_list = self.sa.query(User).all()     
-        return render('admin/users/users.html')
-    
-    def create(self):
-        """POST /users: Create a new item"""
-        # url('users')
-        
-        user_model = UserModel()
-        login_form = UserForm()()
-        try:
-            form_result = login_form.to_python(dict(request.POST))
-            user_model.create(form_result)
-            h.flash(_('created user %s') % form_result['username'],
-                    category='success')
-        except formencode.Invalid as errors:
-            c.form_errors = errors.error_dict
-            return htmlfill.render(
-                 render('admin/users/user_add.html'),
-                defaults=errors.value,
-                encoding="UTF-8")
-        except Exception:
-            h.flash(_('error occured during creation of user %s') \
-                    % form_result['username'], category='error')            
-        return redirect(url('users'))
-    
-    def new(self, format='html'):
-        """GET /users/new: Form to create a new item"""
-        # url('new_user')
-        return render('admin/users/user_add.html')
-
-    def update(self, id):
-        """PUT /users/id: Update an existing item"""
-        # Forms posted to this method should contain a hidden field:
-        #    <input type="hidden" name="_method" value="PUT" />
-        # Or using helpers:
-        #    h.form(url('user', id=ID),
-        #           method='put')
-        # url('user', id=ID)
-        user_model = UserModel()
-        _form = UserForm(edit=True)()
-        try:
-            form_result = _form.to_python(dict(request.POST))
-            user_model.update(id, form_result)
-            h.flash(_('User updated succesfully'), category='success')
-                           
-        except formencode.Invalid as errors:
-            c.user = user_model.get_user(id)
-            c.form_errors = errors.error_dict
-            return htmlfill.render(
-                 render('admin/users/user_edit.html'),
-                defaults=errors.value,
-                encoding="UTF-8")
-        except Exception:
-            h.flash(_('error occured during update of user %s') \
-                    % form_result['username'], category='error')
-            
-        return redirect(url('users'))
-    
-    def delete(self, id):
-        """DELETE /users/id: Delete an existing item"""
-        # Forms posted to this method should contain a hidden field:
-        #    <input type="hidden" name="_method" value="DELETE" />
-        # Or using helpers:
-        #    h.form(url('user', id=ID),
-        #           method='delete')
-        # url('user', id=ID)
-        user_model = UserModel()
-        try:
-            user_model.delete(id)
-            h.flash(_('sucessfully deleted user'), category='success')
-        except DefaultUserException as e:
-            h.flash(str(e), category='warning')
-        except Exception:
-            h.flash(_('An error occured during deletion of user'),
-                    category='error')            
-        return redirect(url('users'))
-        
-    def show(self, id, format='html'):
-        """GET /users/id: Show a specific item"""
-        # url('user', id=ID)
-    
-    
-    def edit(self, id, format='html'):
-        """GET /users/id/edit: Form to edit an existing item"""
-        # url('edit_user', id=ID)
-        c.user = self.sa.query(User).get(id)
-        if c.user.username == 'default':
-            h.flash(_("You can't edit this user since it's" 
-              " crucial for entire application"), category='warning')
-            return redirect(url('users'))
-        
-        defaults = c.user.__dict__
-        return htmlfill.render(
-            render('admin/users/user_edit.html'),
-            defaults=defaults,
-            encoding="UTF-8",
-            force_defaults=False
-        )