##// END OF EJS Templates
moved sqlalchemy session to base.
marcink -
r151:988477a0 default
parent child Browse files
Show More
@@ -1,81 +1,78 b''
1 import logging
1 import logging
2 import os
2 import os
3 from pylons import request, response, session, tmpl_context as c, url, app_globals as g
3 from pylons import request, response, session, tmpl_context as c, url, app_globals as g
4 from pylons.controllers.util import abort, redirect
4 from pylons.controllers.util import abort, redirect
5 from pylons_app.lib import auth
5 from pylons_app.lib import auth
6 from pylons_app.lib.base import BaseController, render
6 from pylons_app.lib.base import BaseController, render
7 from pylons_app.model import meta
8 from pylons_app.model.db import Users, UserLogs
7 from pylons_app.model.db import Users, UserLogs
9 from pylons_app.lib.auth import authenticate
8 from pylons_app.lib.auth import authenticate
10 from pylons_app.model.hg_model import HgModel
9 from pylons_app.model.hg_model import HgModel
11 from operator import itemgetter
10 from operator import itemgetter
12 import shutil
11 import shutil
13 from pylons_app.lib.utils import invalidate_cache
12 from pylons_app.lib.utils import invalidate_cache
14 log = logging.getLogger(__name__)
13 log = logging.getLogger(__name__)
15
14
16 class ReposController(BaseController):
15 class ReposController(BaseController):
17 """REST Controller styled on the Atom Publishing Protocol"""
16 """REST Controller styled on the Atom Publishing Protocol"""
18 # To properly map this controller, ensure your config/routing.py
17 # To properly map this controller, ensure your config/routing.py
19 # file has a resource setup:
18 # file has a resource setup:
20 # map.resource('repo', 'repos')
19 # map.resource('repo', 'repos')
21
20
22 @authenticate
21 @authenticate
23 def __before__(self):
22 def __before__(self):
24
25 c.admin_user = session.get('admin_user')
23 c.admin_user = session.get('admin_user')
26 c.admin_username = session.get('admin_username')
24 c.admin_username = session.get('admin_username')
27 self.sa = meta.Session
28
25
29 def index(self, format='html'):
26 def index(self, format='html'):
30 """GET /repos: All items in the collection"""
27 """GET /repos: All items in the collection"""
31 # url('repos')
28 # url('repos')
32 hg_model = HgModel()
29 hg_model = HgModel()
33 c.repos_list = list(hg_model.get_repos())
30 c.repos_list = list(hg_model.get_repos())
34 c.repos_list.sort(key=itemgetter('name'))
31 c.repos_list.sort(key=itemgetter('name'))
35 return render('admin/repos/repos.html')
32 return render('admin/repos/repos.html')
36
33
37 def create(self):
34 def create(self):
38 """POST /repos: Create a new item"""
35 """POST /repos: Create a new item"""
39 # url('repos')
36 # url('repos')
40
37
41 def new(self, format='html'):
38 def new(self, format='html'):
42 """GET /repos/new: Form to create a new item"""
39 """GET /repos/new: Form to create a new item"""
43 # url('new_repo')
40 # url('new_repo')
44
41
45 def update(self, id):
42 def update(self, id):
46 """PUT /repos/id: Update an existing item"""
43 """PUT /repos/id: Update an existing item"""
47 # Forms posted to this method should contain a hidden field:
44 # Forms posted to this method should contain a hidden field:
48 # <input type="hidden" name="_method" value="PUT" />
45 # <input type="hidden" name="_method" value="PUT" />
49 # Or using helpers:
46 # Or using helpers:
50 # h.form(url('repo', id=ID),
47 # h.form(url('repo', id=ID),
51 # method='put')
48 # method='put')
52 # url('repo', id=ID)
49 # url('repo', id=ID)
53
50
54 def delete(self, id):
51 def delete(self, id):
55 """DELETE /repos/id: Delete an existing item"""
52 """DELETE /repos/id: Delete an existing item"""
56 # Forms posted to this method should contain a hidden field:
53 # Forms posted to this method should contain a hidden field:
57 # <input type="hidden" name="_method" value="DELETE" />
54 # <input type="hidden" name="_method" value="DELETE" />
58 # Or using helpers:
55 # Or using helpers:
59 # h.form(url('repo', id=ID),
56 # h.form(url('repo', id=ID),
60 # method='delete')
57 # method='delete')
61 # url('repo', id=ID)
58 # url('repo', id=ID)
62 from datetime import datetime
59 from datetime import datetime
63 path = g.paths[0][1].replace('*', '')
60 path = g.paths[0][1].replace('*', '')
64 rm_path = os.path.join(path, id)
61 rm_path = os.path.join(path, id)
65 log.info("Removing %s", rm_path)
62 log.info("Removing %s", rm_path)
66 shutil.move(os.path.join(rm_path, '.hg'), os.path.join(rm_path, 'rm__.hg'))
63 shutil.move(os.path.join(rm_path, '.hg'), os.path.join(rm_path, 'rm__.hg'))
67 shutil.move(rm_path, os.path.join(path, 'rm__%s-%s' % (datetime.today(), id)))
64 shutil.move(rm_path, os.path.join(path, 'rm__%s-%s' % (datetime.today(), id)))
68
65
69 #clear our cached list for refresh with new repo
66 #clear our cached list for refresh with new repo
70 invalidate_cache('repo_list_2')
67 invalidate_cache('repo_list_2')
71
68
72 return redirect(url('repos'))
69 return redirect(url('repos'))
73
70
74
71
75 def show(self, id, format='html'):
72 def show(self, id, format='html'):
76 """GET /repos/id: Show a specific item"""
73 """GET /repos/id: Show a specific item"""
77 # url('repo', id=ID)
74 # url('repo', id=ID)
78 return render('/repos_show.html')
75 return render('/repos_show.html')
79 def edit(self, id, format='html'):
76 def edit(self, id, format='html'):
80 """GET /repos/id/edit: Form to edit an existing item"""
77 """GET /repos/id/edit: Form to edit an existing item"""
81 # url('edit_repo', id=ID)
78 # url('edit_repo', id=ID)
@@ -1,114 +1,111 b''
1 import logging
1 import logging
2
2
3 from pylons import request, response, session, tmpl_context as c, url, app_globals as g
3 from pylons import request, response, session, tmpl_context as c, url, app_globals as g
4 from pylons.controllers.util import abort, redirect
4 from pylons.controllers.util import abort, redirect
5
5
6 from pylons_app.lib.base import BaseController, render
6 from pylons_app.lib.base import BaseController, render
7 from formencode import htmlfill
7 from formencode import htmlfill
8 from pylons_app.model import meta
9 from pylons_app.model.db import Users, UserLogs
8 from pylons_app.model.db import Users, UserLogs
10 from pylons_app.lib.auth import authenticate
9 from pylons_app.lib.auth import authenticate
11 import crypt
10 import crypt
12
11
13 log = logging.getLogger(__name__)
12 log = logging.getLogger(__name__)
14
13
15 class UsersController(BaseController):
14 class UsersController(BaseController):
16 """REST Controller styled on the Atom Publishing Protocol"""
15 """REST Controller styled on the Atom Publishing Protocol"""
17 # To properly map this controller, ensure your config/routing.py
16 # To properly map this controller, ensure your config/routing.py
18 # file has a resource setup:
17 # file has a resource setup:
19 # map.resource('user', 'users')
18 # map.resource('user', 'users')
20
19
21 @authenticate
20 @authenticate
22 def __before__(self):
21 def __before__(self):
23
24 c.admin_user = session.get('admin_user')
22 c.admin_user = session.get('admin_user')
25 c.admin_username = session.get('admin_username')
23 c.admin_username = session.get('admin_username')
26 self.sa = meta.Session
27
24
28 def index(self, format='html'):
25 def index(self, format='html'):
29 """GET /users: All items in the collection"""
26 """GET /users: All items in the collection"""
30 # url('users')
27 # url('users')
31
28
32 c.users_list = self.sa.query(Users).all()
29 c.users_list = self.sa.query(Users).all()
33 return render('admin/users/users.html')
30 return render('admin/users/users.html')
34
31
35 def create(self):
32 def create(self):
36 """POST /users: Create a new item"""
33 """POST /users: Create a new item"""
37 # url('users')
34 # url('users')
38 params = dict(request.params)
35 params = dict(request.params)
39
36
40 try:
37 try:
41 new_user = Users()
38 new_user = Users()
42 new_user.active = params.get('active', False)
39 new_user.active = params.get('active', False)
43 new_user.username = params.get('username')
40 new_user.username = params.get('username')
44 new_user.password = crypt.crypt(params.get('password'), '6a')
41 new_user.password = crypt.crypt(params.get('password'), '6a')
45 new_user.admin = False
42 new_user.admin = False
46 self.sa.add(new_user)
43 self.sa.add(new_user)
47 self.sa.commit()
44 self.sa.commit()
48 except:
45 except:
49 self.sa.rollback()
46 self.sa.rollback()
50 raise
47 raise
51
48
52 return redirect(url('users'))
49 return redirect(url('users'))
53
50
54 def new(self, format='html'):
51 def new(self, format='html'):
55 """GET /users/new: Form to create a new item"""
52 """GET /users/new: Form to create a new item"""
56 # url('new_user')
53 # url('new_user')
57 return render('admin/users/user_add.html')
54 return render('admin/users/user_add.html')
58
55
59 def update(self, id):
56 def update(self, id):
60 """PUT /users/id: Update an existing item"""
57 """PUT /users/id: Update an existing item"""
61 # Forms posted to this method should contain a hidden field:
58 # Forms posted to this method should contain a hidden field:
62 # <input type="hidden" name="_method" value="PUT" />
59 # <input type="hidden" name="_method" value="PUT" />
63 # Or using helpers:
60 # Or using helpers:
64 # h.form(url('user', id=ID),
61 # h.form(url('user', id=ID),
65 # method='put')
62 # method='put')
66 # url('user', id=ID)
63 # url('user', id=ID)
67 params = dict(request.params)
64 params = dict(request.params)
68
65
69 try:
66 try:
70 new_user = self.sa.query(Users).get(id)
67 new_user = self.sa.query(Users).get(id)
71 new_user.active = params.get('active', False)
68 new_user.active = params.get('active', False)
72 new_user.username = params.get('username')
69 new_user.username = params.get('username')
73 if params.get('new_password'):
70 if params.get('new_password'):
74 new_user.password = crypt.crypt(params.get('new_password'), '6a')
71 new_user.password = crypt.crypt(params.get('new_password'), '6a')
75 self.sa.add(new_user)
72 self.sa.add(new_user)
76 self.sa.commit()
73 self.sa.commit()
77 except:
74 except:
78 self.sa.rollback()
75 self.sa.rollback()
79 raise
76 raise
80
77
81 return redirect(url('users'))
78 return redirect(url('users'))
82
79
83 def delete(self, id):
80 def delete(self, id):
84 """DELETE /users/id: Delete an existing item"""
81 """DELETE /users/id: Delete an existing item"""
85 # Forms posted to this method should contain a hidden field:
82 # Forms posted to this method should contain a hidden field:
86 # <input type="hidden" name="_method" value="DELETE" />
83 # <input type="hidden" name="_method" value="DELETE" />
87 # Or using helpers:
84 # Or using helpers:
88 # h.form(url('user', id=ID),
85 # h.form(url('user', id=ID),
89 # method='delete')
86 # method='delete')
90 # url('user', id=ID)
87 # url('user', id=ID)
91 try:
88 try:
92 self.sa.delete(self.sa.query(Users).get(id))
89 self.sa.delete(self.sa.query(Users).get(id))
93 self.sa.commit()
90 self.sa.commit()
94 except:
91 except:
95 self.sa.rollback()
92 self.sa.rollback()
96 raise
93 raise
97 return redirect(url('users'))
94 return redirect(url('users'))
98
95
99 def show(self, id, format='html'):
96 def show(self, id, format='html'):
100 """GET /users/id: Show a specific item"""
97 """GET /users/id: Show a specific item"""
101 # url('user', id=ID)
98 # url('user', id=ID)
102
99
103
100
104 def edit(self, id, format='html'):
101 def edit(self, id, format='html'):
105 """GET /users/id/edit: Form to edit an existing item"""
102 """GET /users/id/edit: Form to edit an existing item"""
106 # url('edit_user', id=ID)
103 # url('edit_user', id=ID)
107 c.user = self.sa.query(Users).get(id)
104 c.user = self.sa.query(Users).get(id)
108 defaults = c.user.__dict__
105 defaults = c.user.__dict__
109 return htmlfill.render(
106 return htmlfill.render(
110 render('admin/users/user_edit.html'),
107 render('admin/users/user_edit.html'),
111 defaults=defaults,
108 defaults=defaults,
112 encoding="UTF-8",
109 encoding="UTF-8",
113 force_defaults=False
110 force_defaults=False
114 )
111 )
@@ -1,27 +1,28 b''
1 """The base Controller API
1 """The base Controller API
2
2
3 Provides the BaseController class for subclassing.
3 Provides the BaseController class for subclassing.
4 """
4 """
5 from pylons.controllers import WSGIController
5 from pylons.controllers import WSGIController
6 from pylons.templating import render_mako as render
6 from pylons.templating import render_mako as render
7 from pylons_app.model import meta
7 from pylons_app.model import meta
8 from beaker.cache import cache_region
8 from beaker.cache import cache_region
9 from pylons import tmpl_context as c
9 from pylons import tmpl_context as c
10 from pylons_app.model.hg_model import HgModel
10 from pylons_app.model.hg_model import HgModel
11
11
12 @cache_region('long_term', 'repo_list_2')
12 @cache_region('long_term', 'repo_list_2')
13 def _get_repos():
13 def _get_repos():
14 return [rep['name'] for rep in HgModel().get_repos()]
14 return [rep['name'] for rep in HgModel().get_repos()]
15
15
16 class BaseController(WSGIController):
16 class BaseController(WSGIController):
17
17
18 def __call__(self, environ, start_response):
18 def __call__(self, environ, start_response):
19 """Invoke the Controller"""
19 """Invoke the Controller"""
20 # WSGIController.__call__ dispatches to the Controller method
20 # WSGIController.__call__ dispatches to the Controller method
21 # the request is routed to. This routing information is
21 # the request is routed to. This routing information is
22 # available in environ['pylons.routes_dict']
22 # available in environ['pylons.routes_dict']
23 c.repo_list = _get_repos()
23 c.repo_list = _get_repos()
24 self.sa = meta.Session
24 try:
25 try:
25 return WSGIController.__call__(self, environ, start_response)
26 return WSGIController.__call__(self, environ, start_response)
26 finally:
27 finally:
27 meta.Session.remove()
28 meta.Session.remove()
General Comments 0
You need to be logged in to leave comments. Login now