Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a65234478c | |||
| 30a0ac6a1b |
+4
-56
@@ -16,12 +16,11 @@ import os
|
|||||||
import traceback
|
import traceback
|
||||||
from shutil import rmtree, copyfileobj
|
from shutil import rmtree, copyfileobj
|
||||||
import zipfile
|
import zipfile
|
||||||
import sys
|
|
||||||
|
|
||||||
from gluon.fileutils import (w2p_pack, create_app, w2p_unpack,
|
from gluon.fileutils import (w2p_pack, create_app, w2p_unpack,
|
||||||
w2p_pack_plugin, w2p_unpack_plugin,
|
w2p_pack_plugin, w2p_unpack_plugin,
|
||||||
up, fix_newlines, abspath, recursive_unlink,
|
up, fix_newlines, abspath, recursive_unlink,
|
||||||
read_file, write_file, parse_version, missing_app_folders)
|
write_file, parse_version)
|
||||||
from gluon.restricted import RestrictedError
|
from gluon.restricted import RestrictedError
|
||||||
from gluon.settings import global_settings
|
from gluon.settings import global_settings
|
||||||
from gluon.cache import CacheOnDisk
|
from gluon.cache import CacheOnDisk
|
||||||
@@ -29,7 +28,7 @@ from gluon._compat import urlopen, to_native
|
|||||||
|
|
||||||
# TODO: move into add_path_first
|
# TODO: move into add_path_first
|
||||||
if not global_settings.web2py_runtime_gae:
|
if not global_settings.web2py_runtime_gae:
|
||||||
import site
|
pass
|
||||||
|
|
||||||
|
|
||||||
REGEX_DEFINE_TABLE = r"""^\w+\.define_table\(\s*['"](?P<name>\w+)['"]"""
|
REGEX_DEFINE_TABLE = r"""^\w+\.define_table\(\s*['"](?P<name>\w+)['"]"""
|
||||||
@@ -442,54 +441,3 @@ def upgrade(request, url='http://web2py.com'):
|
|||||||
return True, None
|
return True, None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return False, e
|
return False, e
|
||||||
|
|
||||||
|
|
||||||
# TODO: move to fileutils
|
|
||||||
def add_path_first(path):
|
|
||||||
sys.path = [path] + [p for p in sys.path if (
|
|
||||||
not p == path and not p == (path + '/'))]
|
|
||||||
if not global_settings.web2py_runtime_gae:
|
|
||||||
if not path in sys.path:
|
|
||||||
site.addsitedir(path)
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: move to fileutils
|
|
||||||
def try_mkdir(path):
|
|
||||||
if not os.path.exists(path):
|
|
||||||
try:
|
|
||||||
if os.path.islink(path):
|
|
||||||
# path is a broken link, try to mkdir the target of the link
|
|
||||||
# instead of the link itself.
|
|
||||||
os.mkdir(os.path.realpath(path))
|
|
||||||
else:
|
|
||||||
os.mkdir(path)
|
|
||||||
except OSError as e:
|
|
||||||
if e.errno == 17: # "File exists" (race condition).
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: move to fileutils
|
|
||||||
def create_missing_folders():
|
|
||||||
if not global_settings.web2py_runtime_gae:
|
|
||||||
for path in ('applications', 'deposit', 'site-packages', 'logs'):
|
|
||||||
try_mkdir(abspath(path, gluon=True))
|
|
||||||
"""
|
|
||||||
OLD sys.path dance
|
|
||||||
paths = (global_settings.gluon_parent, abspath(
|
|
||||||
'site-packages', gluon=True), abspath('gluon', gluon=True), '')
|
|
||||||
"""
|
|
||||||
for p in (global_settings.gluon_parent,
|
|
||||||
abspath('site-packages', gluon=True),
|
|
||||||
''):
|
|
||||||
add_path_first(p)
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: move to fileutils
|
|
||||||
def create_missing_app_folders(request):
|
|
||||||
if not global_settings.web2py_runtime_gae:
|
|
||||||
if request.folder not in global_settings.app_folders:
|
|
||||||
for amf in missing_app_folders(request.folder):
|
|
||||||
try_mkdir(amf)
|
|
||||||
global_settings.app_folders.add(request.folder)
|
|
||||||
|
|||||||
+1
-3
@@ -40,12 +40,10 @@ from gluon.validators import Validator
|
|||||||
from gluon.settings import global_settings
|
from gluon.settings import global_settings
|
||||||
from pydal.base import BaseAdapter
|
from pydal.base import BaseAdapter
|
||||||
from gluon.custom_import import custom_import_install
|
from gluon.custom_import import custom_import_install
|
||||||
from gluon.fileutils import mktree, listdir, read_file, write_file, abspath
|
from gluon.fileutils import mktree, listdir, read_file, write_file, abspath, add_path_first
|
||||||
from gluon.template import parse_template
|
from gluon.template import parse_template
|
||||||
from gluon.cfs import getcfs
|
from gluon.cfs import getcfs
|
||||||
from gluon.restricted import restricted, compile2
|
from gluon.restricted import restricted, compile2
|
||||||
from gluon.admin import add_path_first
|
|
||||||
|
|
||||||
|
|
||||||
CACHED_REGEXES = {}
|
CACHED_REGEXES = {}
|
||||||
CACHED_REGEXES_MAX_SIZE = 1000
|
CACHED_REGEXES_MAX_SIZE = 1000
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ File operations
|
|||||||
|
|
||||||
from gluon import storage
|
from gluon import storage
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import re
|
import re
|
||||||
import tarfile
|
import tarfile
|
||||||
import glob
|
import glob
|
||||||
@@ -47,6 +48,9 @@ __all__ = (
|
|||||||
'w2p_pack_plugin',
|
'w2p_pack_plugin',
|
||||||
'w2p_unpack_plugin',
|
'w2p_unpack_plugin',
|
||||||
'fix_newlines',
|
'fix_newlines',
|
||||||
|
'create_missing_folders',
|
||||||
|
'create_missing_app_folders',
|
||||||
|
'add_path_first',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -441,3 +445,50 @@ def abspath(*relpath, **kwargs):
|
|||||||
if kwargs.get('gluon', False):
|
if kwargs.get('gluon', False):
|
||||||
return os.path.join(global_settings.gluon_parent, path)
|
return os.path.join(global_settings.gluon_parent, path)
|
||||||
return os.path.join(global_settings.applications_parent, path)
|
return os.path.join(global_settings.applications_parent, path)
|
||||||
|
|
||||||
|
|
||||||
|
def try_mkdir(path):
|
||||||
|
if not os.path.exists(path):
|
||||||
|
try:
|
||||||
|
if os.path.islink(path):
|
||||||
|
# path is a broken link, try to mkdir the target of the link
|
||||||
|
# instead of the link itself.
|
||||||
|
os.mkdir(os.path.realpath(path))
|
||||||
|
else:
|
||||||
|
os.mkdir(path)
|
||||||
|
except OSError as e:
|
||||||
|
if e.errno == 17: # "File exists" (race condition).
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
def create_missing_folders():
|
||||||
|
if not global_settings.web2py_runtime_gae:
|
||||||
|
for path in ('applications', 'deposit', 'site-packages', 'logs'):
|
||||||
|
try_mkdir(abspath(path, gluon=True))
|
||||||
|
"""
|
||||||
|
OLD sys.path dance
|
||||||
|
paths = (global_settings.gluon_parent, abspath(
|
||||||
|
'site-packages', gluon=True), abspath('gluon', gluon=True), '')
|
||||||
|
"""
|
||||||
|
for p in (global_settings.gluon_parent,
|
||||||
|
abspath('site-packages', gluon=True),
|
||||||
|
''):
|
||||||
|
add_path_first(p)
|
||||||
|
|
||||||
|
|
||||||
|
def create_missing_app_folders(request):
|
||||||
|
if not global_settings.web2py_runtime_gae:
|
||||||
|
if request.folder not in global_settings.app_folders:
|
||||||
|
for amf in missing_app_folders(request.folder):
|
||||||
|
try_mkdir(amf)
|
||||||
|
global_settings.app_folders.add(request.folder)
|
||||||
|
|
||||||
|
|
||||||
|
def add_path_first(path):
|
||||||
|
sys.path = [path] + [p for p in sys.path if (
|
||||||
|
not p == path and not p == (path + '/'))]
|
||||||
|
if not global_settings.web2py_runtime_gae:
|
||||||
|
if not path in sys.path:
|
||||||
|
site.addsitedir(path)
|
||||||
|
|||||||
+2
-2
@@ -27,10 +27,10 @@ import string
|
|||||||
from gluon._compat import Cookie, urllib_quote
|
from gluon._compat import Cookie, urllib_quote
|
||||||
# from thread import allocate_lock
|
# from thread import allocate_lock
|
||||||
|
|
||||||
from gluon.fileutils import abspath, read_file, write_file
|
from gluon.fileutils import abspath, read_file, write_file, create_missing_folders, create_missing_app_folders, \
|
||||||
|
add_path_first
|
||||||
from gluon.settings import global_settings
|
from gluon.settings import global_settings
|
||||||
from gluon.utils import web2py_uuid, unlocalised_http_header_date
|
from gluon.utils import web2py_uuid, unlocalised_http_header_date
|
||||||
from gluon.admin import add_path_first, create_missing_folders, create_missing_app_folders
|
|
||||||
from gluon.globals import current
|
from gluon.globals import current
|
||||||
|
|
||||||
# Remarks:
|
# Remarks:
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ from gluon.restricted import RestrictedError
|
|||||||
from gluon.globals import Request, Response, Session
|
from gluon.globals import Request, Response, Session
|
||||||
from gluon.storage import Storage, List
|
from gluon.storage import Storage, List
|
||||||
from gluon.admin import w2p_unpack
|
from gluon.admin import w2p_unpack
|
||||||
|
from gluon.fileutils import create_missing_app_folders
|
||||||
from pydal.base import BaseAdapter
|
from pydal.base import BaseAdapter
|
||||||
from gluon._compat import iteritems, ClassType, PY2
|
from gluon._compat import iteritems, ClassType, PY2
|
||||||
|
|
||||||
@@ -166,6 +167,9 @@ def env(
|
|||||||
path_info = '%s?%s' % (path_info, '&'.join(vars))
|
path_info = '%s?%s' % (path_info, '&'.join(vars))
|
||||||
request.env.path_info = path_info
|
request.env.path_info = path_info
|
||||||
|
|
||||||
|
# Ensure necessary folders are created
|
||||||
|
create_missing_app_folders(request)
|
||||||
|
|
||||||
# Monkey patch so credentials checks pass.
|
# Monkey patch so credentials checks pass.
|
||||||
|
|
||||||
def check_credentials(request, other_application='admin'):
|
def check_credentials(request, other_application='admin'):
|
||||||
@@ -257,6 +261,7 @@ def run(
|
|||||||
# underscore necessary because request.vars is a property
|
# underscore necessary because request.vars is a property
|
||||||
extra_request['_vars'] = vars
|
extra_request['_vars'] = vars
|
||||||
_env = env(a, c=c, f=f, import_models=import_models, extra_request=extra_request)
|
_env = env(a, c=c, f=f, import_models=import_models, extra_request=extra_request)
|
||||||
|
|
||||||
if c:
|
if c:
|
||||||
pyfile = os.path.join('applications', a, 'controllers', c + '.py')
|
pyfile = os.path.join('applications', a, 'controllers', c + '.py')
|
||||||
pycfile = os.path.join('applications', a, 'compiled',
|
pycfile = os.path.join('applications', a, 'compiled',
|
||||||
|
|||||||
Reference in New Issue
Block a user