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