Merge remote-tracking branch 'refs/remotes/tsyesika/master'
[mediagoblin.git] / mediagoblin / gmg_commands / shell.py
CommitLineData
dbb92c60 1# GNU MediaGoblin -- federated, autonomous media hosting
cf29e8a8 2# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
dbb92c60
CAW
3#
4# This program is free software: you can redistribute it and/or modify
5# it under the terms of the GNU Affero General Public License as published by
6# the Free Software Foundation, either version 3 of the License, or
7# (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU Affero General Public License for more details.
13#
14# You should have received a copy of the GNU Affero General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17
18import code
dbb92c60 19
6e7ce8d1 20from mediagoblin import mg_globals
8820121a 21from mediagoblin.gmg_commands import util as commands_util
dbb92c60
CAW
22
23
24def shell_parser_setup(subparser):
0e93443f
CAW
25 subparser.add_argument(
26 '--ipython', help='Use ipython',
27 action="store_true")
dbb92c60
CAW
28
29
30SHELL_BANNER = """\
31GNU MediaGoblin shell!
32----------------------
33Available vars:
34 - mgoblin_app: instantiated mediagoblin application
6e7ce8d1 35 - mg_globals: mediagoblin.globals
dbb92c60
CAW
36 - db: database instance
37"""
38
0e93443f
CAW
39def py_shell(**user_namespace):
40 """
41 Run a shell using normal python shell.
42 """
43 code.interact(
44 banner=SHELL_BANNER,
45 local=user_namespace)
46
47
48def ipython_shell(**user_namespace):
49 """
4d9b426c 50 Run a shell for the user using ipython. Return False if there is no IPython
0e93443f
CAW
51 """
52 try:
53 from IPython import embed
54 except:
4d9b426c
SS
55 return False
56
0e93443f
CAW
57 embed(
58 banner1=SHELL_BANNER,
59 user_ns=user_namespace)
4d9b426c 60 return True
dbb92c60
CAW
61
62def shell(args):
63 """
4d9b426c 64 Setup a shell for the user either a normal Python shell or an IPython one
dbb92c60 65 """
0e93443f
CAW
66 user_namespace = {
67 'mg_globals': mg_globals,
68 'mgoblin_app': commands_util.setup_app(args),
69 'db': mg_globals.database}
70
71 if args.ipython:
72 ipython_shell(**user_namespace)
73 else:
4d9b426c
SS
74 # Try ipython_shell first and fall back if not available
75 if not ipython_shell(**user_namespace):
76 py_shell(**user_namespace)