def app_create(app, request, force=False, key=None, info=False): """Create a copy of welcome.w2p (scaffolding) app Args: app(str): application name request: the global request object """ path = apath(app, request) if not os.path.exists(path): try: os.mkdir(path) except: if info: return False, traceback.format_exc() else: return False elif not force: if info: return False, "Application exists" else: return False try: create_app(path) if info: return True, None else: return True except: rmtree(path) if info: return False, traceback.format_exc() else: return False
def setUp(self): self.tearDown() appdir = os.path.join('applications', test_app_name) os.mkdir(appdir) create_app(appdir) self.db = None from gluon.globals import current s = Storage({'application': test_app_name, 'folder': "applications/%s" % test_app_name, 'controller': 'default'}) current.request = s T = TranslatorFactory('', 'en') current.T = T self.db = DAL('sqlite://dummy2.db', folder="applications/%s/databases" % test_app_name, check_reserved=['all'])
def run( appname, plain=False, import_models=False, startfile=None, bpython=False, python_code=None, cronjob=False, scheduler_job=False): """ Start interactive shell or run Python script (startfile) in web2py controller environment. appname is formatted like: - a : web2py application name - a/c : exec the controller c into the application environment - a/c/f : exec the controller c, then the action f into the application environment - a/c/f?x=y : as above """ (a, c, f, args, vars) = parse_path_info(appname, av=True) errmsg = 'invalid application name: %s' % appname if not a: die(errmsg, error_preamble=False) adir = os.path.join('applications', a) if not os.path.exists(adir): if not cronjob and not scheduler_job and \ sys.stdin and not sys.stdin.name == '/dev/null': confirm = raw_input( 'application %s does not exist, create (y/n)?' % a) else: logging.warn('application does not exist and will not be created') return if confirm.lower() in ('y', 'yes'): os.mkdir(adir) fileutils.create_app(adir) if c: import_models = True extra_request = {} if args: extra_request['args'] = args if scheduler_job: extra_request['is_scheduler'] = True if vars: # underscore necessary because request.vars is a property extra_request['_vars'] = vars _env = env(a, c=c, f=f, import_models=import_models, extra_request=extra_request) if c: pyfile = os.path.join('applications', a, 'controllers', c + '.py') pycfile = os.path.join('applications', a, 'compiled', "controllers_%s_%s.pyc" % (c, f)) if ((cronjob and os.path.isfile(pycfile)) or not os.path.isfile(pyfile)): exec(read_pyc(pycfile), _env) elif os.path.isfile(pyfile): execfile(pyfile, _env) else: die(errmsg, error_preamble=False) if f: exec('print( %s())' % f, _env) return _env.update(exec_pythonrc()) if startfile: try: ccode = None if startfile.endswith('.pyc'): ccode = read_pyc(startfile) exec(ccode, _env) else: execfile(startfile, _env) if import_models: BaseAdapter.close_all_instances('commit') except: print(traceback.format_exc()) if import_models: BaseAdapter.close_all_instances('rollback') elif python_code: try: exec(python_code, _env) if import_models: BaseAdapter.close_all_instances('commit') except: print(traceback.format_exc()) if import_models: BaseAdapter.close_all_instances('rollback') else: if not plain: if bpython: try: import bpython bpython.embed(locals_=_env) return except: logger.warning( 'import bpython error; trying ipython...') else: try: import IPython if IPython.__version__ > '1.0.0': IPython.start_ipython(user_ns=_env) return elif IPython.__version__ == '1.0.0': from IPython.terminal.embed import InteractiveShellEmbed shell = InteractiveShellEmbed(user_ns=_env) shell() return elif IPython.__version__ >= '0.11': from IPython.frontend.terminal.embed import InteractiveShellEmbed shell = InteractiveShellEmbed(user_ns=_env) shell() return else: # following 2 lines fix a problem with # IPython; thanks Michael Toomim if '__builtins__' in _env: del _env['__builtins__'] shell = IPython.Shell.IPShell(argv=[], user_ns=_env) shell.mainloop() return except: logger.warning( 'import IPython error; use default python shell') enable_autocomplete_and_history(adir, _env) code.interact(local=_env)
def setUpClass(cls): appdir = os.path.join('applications', test_app_name) if not os.path.exists(appdir): os.mkdir(appdir) create_app(appdir) startwebserver()
def setUpModule(): if not os.path.exists(appdir): os.mkdir(appdir) create_app(appdir)
def setUpClass(cls): appdir = os.path.join('applications', test_app_name) if not os.path.exists(appdir): os.mkdir(appdir) create_app(appdir)