mirror of
https://github.com/frappe/bench.git
synced 2024-11-13 16:56:33 +00:00
refactor: Optimize and simplify imports
* make relative imports absolute * minor: Simplify logic
This commit is contained in:
parent
778fe6cb0b
commit
da85e0ccdd
@ -8,7 +8,7 @@ import click
|
||||
import bench
|
||||
from bench.app import use_rq
|
||||
from bench.config.common_site_config import get_config
|
||||
from bench.utils import find_executable
|
||||
from bench.utils import which
|
||||
|
||||
|
||||
def setup_procfile(bench_path, yes=False, skip_redis=False):
|
||||
@ -19,7 +19,7 @@ def setup_procfile(bench_path, yes=False, skip_redis=False):
|
||||
abort=True)
|
||||
|
||||
procfile = bench.config.env().get_template('Procfile').render(
|
||||
node=find_executable("node") or find_executable("nodejs"),
|
||||
node=which("node") or which("nodejs"),
|
||||
use_rq=use_rq(bench_path),
|
||||
webserver_port=config.get('webserver_port'),
|
||||
CI=os.environ.get('CI'),
|
||||
|
@ -9,7 +9,7 @@ from bench.config.common_site_config import get_config
|
||||
from bench.config.nginx import make_nginx_conf
|
||||
from bench.config.supervisor import generate_supervisor_config, update_supervisord_config
|
||||
from bench.config.systemd import generate_systemd_config
|
||||
from bench.utils import CommandFailedError, exec_cmd, find_executable, fix_prod_setup_perms, get_bench_name, get_cmd_output, log
|
||||
from bench.utils import CommandFailedError, exec_cmd, which, fix_prod_setup_perms, get_bench_name, get_cmd_output, log
|
||||
|
||||
|
||||
logger = logging.getLogger(bench.PROJECT_NAME)
|
||||
@ -17,13 +17,13 @@ logger = logging.getLogger(bench.PROJECT_NAME)
|
||||
|
||||
def setup_production_prerequisites():
|
||||
"""Installs ansible, fail2banc, NGINX and supervisor"""
|
||||
if not find_executable("ansible"):
|
||||
if not which("ansible"):
|
||||
exec_cmd("sudo {0} -m pip install ansible".format(sys.executable))
|
||||
if not find_executable("fail2ban-client"):
|
||||
if not which("fail2ban-client"):
|
||||
exec_cmd("bench setup role fail2ban")
|
||||
if not find_executable("nginx"):
|
||||
if not which("nginx"):
|
||||
exec_cmd("bench setup role nginx")
|
||||
if not find_executable("supervisord"):
|
||||
if not which("supervisord"):
|
||||
exec_cmd("bench setup role supervisor")
|
||||
|
||||
|
||||
@ -95,11 +95,11 @@ def disable_production(bench_path='.'):
|
||||
|
||||
|
||||
def service(service_name, service_option):
|
||||
if os.path.basename(find_executable('systemctl') or '') == 'systemctl' and is_running_systemd():
|
||||
if os.path.basename(which('systemctl') or '') == 'systemctl' and is_running_systemd():
|
||||
systemctl_cmd = "sudo {service_manager} {service_option} {service_name}"
|
||||
exec_cmd(systemctl_cmd.format(service_manager='systemctl', service_option=service_option, service_name=service_name))
|
||||
|
||||
elif os.path.basename(find_executable('service') or '') == 'service':
|
||||
elif os.path.basename(which('service') or '') == 'service':
|
||||
service_cmd = "sudo {service_manager} {service_name} {service_option}"
|
||||
exec_cmd(service_cmd.format(service_manager='service', service_name=service_name, service_option=service_option))
|
||||
|
||||
@ -145,7 +145,7 @@ def is_running_systemd():
|
||||
|
||||
|
||||
def reload_supervisor():
|
||||
supervisorctl = find_executable('supervisorctl')
|
||||
supervisorctl = which('supervisorctl')
|
||||
|
||||
try:
|
||||
# first try reread/update
|
||||
@ -178,7 +178,7 @@ def reload_supervisor():
|
||||
|
||||
def reload_nginx():
|
||||
try:
|
||||
exec_cmd('sudo {0} -t'.format(find_executable('nginx')))
|
||||
exec_cmd('sudo {0} -t'.format(which('nginx')))
|
||||
except:
|
||||
raise
|
||||
|
||||
|
@ -6,7 +6,7 @@ import os
|
||||
# imports - module imports
|
||||
import bench
|
||||
from bench.app import use_rq
|
||||
from bench.utils import get_bench_name, find_executable
|
||||
from bench.utils import get_bench_name, which
|
||||
from bench.config.common_site_config import get_config, update_config, get_gunicorn_workers
|
||||
|
||||
# imports - third party imports
|
||||
@ -31,8 +31,8 @@ def generate_supervisor_config(bench_path, user=None, yes=False, skip_redis=Fals
|
||||
"user": user,
|
||||
"use_rq": use_rq(bench_path),
|
||||
"http_timeout": config.get("http_timeout", 120),
|
||||
"redis_server": find_executable('redis-server'),
|
||||
"node": find_executable('node') or find_executable('nodejs'),
|
||||
"redis_server": which('redis-server'),
|
||||
"node": which('node') or which('nodejs'),
|
||||
"redis_cache_config": os.path.join(bench_dir, 'config', 'redis_cache.conf'),
|
||||
"redis_socketio_config": os.path.join(bench_dir, 'config', 'redis_socketio.conf'),
|
||||
"redis_queue_config": os.path.join(bench_dir, 'config', 'redis_queue.conf'),
|
||||
@ -40,7 +40,7 @@ def generate_supervisor_config(bench_path, user=None, yes=False, skip_redis=Fals
|
||||
"gunicorn_workers": config.get('gunicorn_workers', get_gunicorn_workers()["gunicorn_workers"]),
|
||||
"bench_name": get_bench_name(bench_path),
|
||||
"background_workers": config.get('background_workers') or 1,
|
||||
"bench_cmd": find_executable('bench'),
|
||||
"bench_cmd": which('bench'),
|
||||
"skip_redis": skip_redis,
|
||||
})
|
||||
|
||||
|
@ -9,7 +9,7 @@ import click
|
||||
import bench
|
||||
from bench.app import use_rq
|
||||
from bench.config.common_site_config import get_config, get_gunicorn_workers, update_config
|
||||
from bench.utils import exec_cmd, find_executable, get_bench_name
|
||||
from bench.utils import exec_cmd, which, get_bench_name
|
||||
|
||||
|
||||
def generate_systemd_config(bench_path, user=None, yes=False,
|
||||
@ -53,8 +53,8 @@ def generate_systemd_config(bench_path, user=None, yes=False,
|
||||
"user": user,
|
||||
"use_rq": use_rq(bench_path),
|
||||
"http_timeout": config.get("http_timeout", 120),
|
||||
"redis_server": find_executable('redis-server'),
|
||||
"node": find_executable('node') or find_executable('nodejs'),
|
||||
"redis_server": which('redis-server'),
|
||||
"node": which('node') or which('nodejs'),
|
||||
"redis_cache_config": os.path.join(bench_dir, 'config', 'redis_cache.conf'),
|
||||
"redis_socketio_config": os.path.join(bench_dir, 'config', 'redis_socketio.conf'),
|
||||
"redis_queue_config": os.path.join(bench_dir, 'config', 'redis_queue.conf'),
|
||||
@ -62,7 +62,7 @@ def generate_systemd_config(bench_path, user=None, yes=False,
|
||||
"gunicorn_workers": config.get('gunicorn_workers', get_gunicorn_workers()["gunicorn_workers"]),
|
||||
"bench_name": get_bench_name(bench_path),
|
||||
"worker_target_wants": " ".join(background_workers),
|
||||
"bench_cmd": find_executable('bench')
|
||||
"bench_cmd": which('bench')
|
||||
}
|
||||
|
||||
if not yes:
|
||||
|
@ -2,26 +2,17 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# imports - standard imports
|
||||
import compileall
|
||||
import errno
|
||||
import glob
|
||||
import grp
|
||||
import itertools
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import pwd
|
||||
import re
|
||||
import select
|
||||
import site
|
||||
import subprocess
|
||||
import sys
|
||||
from datetime import datetime
|
||||
from distutils.spawn import find_executable
|
||||
|
||||
# imports - third party imports
|
||||
import click
|
||||
from six import iteritems
|
||||
|
||||
# imports - module imports
|
||||
import bench
|
||||
@ -143,6 +134,8 @@ def init(path, apps_path=None, no_procfile=False, no_backups=False,
|
||||
try:
|
||||
os.makedirs(os.path.join(path, dirname))
|
||||
except OSError as e:
|
||||
import errno
|
||||
|
||||
if e.errno == errno.EEXIST:
|
||||
pass
|
||||
|
||||
@ -184,6 +177,7 @@ def init(path, apps_path=None, no_procfile=False, no_backups=False,
|
||||
def update(pull=False, apps=None, patch=False, build=False, requirements=False, backup=True, compile=True,
|
||||
force=False, reset=False, restart_supervisor=False, restart_systemd=False):
|
||||
"""command: bench update"""
|
||||
import re
|
||||
from bench import patches
|
||||
from bench.app import is_version_upgrade, pull_apps, validate_branch
|
||||
from bench.config.common_site_config import get_config, update_config
|
||||
@ -244,9 +238,11 @@ def update(pull=False, apps=None, patch=False, build=False, requirements=False,
|
||||
post_upgrade(version_upgrade[1], version_upgrade[2], bench_path=bench_path)
|
||||
|
||||
if pull and compile:
|
||||
from compileall import compile_dir
|
||||
|
||||
print('Compiling Python files...')
|
||||
apps_dir = os.path.join(bench_path, 'apps')
|
||||
compileall.compile_dir(apps_dir, quiet=1, rx=re.compile('.*node_modules.*'))
|
||||
compile_dir(apps_dir, quiet=1, rx=re.compile('.*node_modules.*'))
|
||||
|
||||
if restart_supervisor or conf.get('restart_supervisor_on_update'):
|
||||
restart_supervisor_processes(bench_path=bench_path)
|
||||
@ -268,7 +264,7 @@ def copy_patches_txt(bench_path):
|
||||
|
||||
|
||||
def clone_apps_from(bench_path, clone_from, update_app=True):
|
||||
from .app import install_app
|
||||
from bench.app import install_app
|
||||
print('Copying apps from {0}...'.format(clone_from))
|
||||
subprocess.check_output(['cp', '-R', os.path.join(clone_from, 'apps'), bench_path])
|
||||
|
||||
@ -316,7 +312,9 @@ def exec_cmd(cmd, cwd='.'):
|
||||
logger.warning("{0} executed with exit code {1}".format(cmd_log, return_code))
|
||||
|
||||
|
||||
def which(executable, raise_err = False):
|
||||
def which(executable, raise_err=False):
|
||||
from distutils.spawn import find_executable
|
||||
|
||||
exec_ = find_executable(executable)
|
||||
|
||||
if not exec_ and raise_err:
|
||||
@ -411,9 +409,9 @@ def setup_sudoers(user):
|
||||
template = bench.config.env().get_template('frappe_sudoers')
|
||||
frappe_sudoers = template.render(**{
|
||||
'user': user,
|
||||
'service': find_executable('service'),
|
||||
'systemctl': find_executable('systemctl'),
|
||||
'nginx': find_executable('nginx'),
|
||||
'service': which('service'),
|
||||
'systemctl': which('systemctl'),
|
||||
'nginx': which('nginx'),
|
||||
})
|
||||
frappe_sudoers = safe_decode(frappe_sudoers)
|
||||
|
||||
@ -449,7 +447,7 @@ def setup_logging(bench_path='.'):
|
||||
|
||||
def get_process_manager():
|
||||
for proc_man in ['honcho', 'foreman', 'forego']:
|
||||
proc_man_path = find_executable(proc_man)
|
||||
proc_man_path = which(proc_man)
|
||||
if proc_man_path:
|
||||
return proc_man_path
|
||||
|
||||
@ -486,7 +484,7 @@ def get_git_version():
|
||||
|
||||
|
||||
def check_git_for_shallow_clone():
|
||||
from .config.common_site_config import get_config
|
||||
from bench.config.common_site_config import get_config
|
||||
config = get_config('.')
|
||||
|
||||
if config:
|
||||
@ -514,7 +512,7 @@ def get_cmd_output(cmd, cwd='.', _raise=True):
|
||||
|
||||
|
||||
def restart_supervisor_processes(bench_path='.', web_workers=False):
|
||||
from .config.common_site_config import get_config
|
||||
from bench.config.common_site_config import get_config
|
||||
conf = get_config(bench_path=bench_path)
|
||||
bench_name = get_bench_name(bench_path)
|
||||
|
||||
@ -600,7 +598,7 @@ def update_node_packages(bench_path='.'):
|
||||
def update_yarn_packages(bench_path='.'):
|
||||
apps_dir = os.path.join(bench_path, 'apps')
|
||||
|
||||
if not find_executable('yarn'):
|
||||
if not which('yarn'):
|
||||
print("Please install yarn using below command and try again.")
|
||||
print("`npm install -g yarn`")
|
||||
return
|
||||
@ -621,6 +619,8 @@ def update_npm_packages(bench_path='.'):
|
||||
|
||||
if os.path.exists(package_json_path):
|
||||
with open(package_json_path, "r") as f:
|
||||
from six import iteritems
|
||||
|
||||
app_package_json = json.loads(f.read())
|
||||
# package.json is usually a dict in a dict
|
||||
for key, value in iteritems(app_package_json):
|
||||
@ -658,9 +658,7 @@ def backup_all_sites(bench_path='.'):
|
||||
|
||||
|
||||
def is_root():
|
||||
if os.getuid() == 0:
|
||||
return True
|
||||
return False
|
||||
return os.getuid() == 0
|
||||
|
||||
|
||||
def set_mariadb_host(host, bench_path='.'):
|
||||
@ -718,7 +716,8 @@ def drop_privileges(uid_name='nobody', gid_name='nogroup'):
|
||||
|
||||
|
||||
def fix_prod_setup_perms(bench_path='.', frappe_user=None):
|
||||
from .config.common_site_config import get_config
|
||||
from glob import glob
|
||||
from bench.config.common_site_config import get_config
|
||||
|
||||
if not frappe_user:
|
||||
frappe_user = get_config(bench_path).get('frappe_user')
|
||||
@ -729,14 +728,14 @@ def fix_prod_setup_perms(bench_path='.', frappe_user=None):
|
||||
|
||||
globs = ["logs/*", "config/*"]
|
||||
for glob_name in globs:
|
||||
for path in glob.glob(glob_name):
|
||||
for path in glob(glob_name):
|
||||
uid = pwd.getpwnam(frappe_user).pw_uid
|
||||
gid = grp.getgrnam(frappe_user).gr_gid
|
||||
os.chown(path, uid, gid)
|
||||
|
||||
|
||||
def run_frappe_cmd(*args, **kwargs):
|
||||
from .cli import from_command_line
|
||||
from bench.cli import from_command_line
|
||||
|
||||
bench_path = kwargs.get('bench_path', '.')
|
||||
f = get_env_cmd('python', bench_path=bench_path)
|
||||
@ -762,15 +761,15 @@ def run_frappe_cmd(*args, **kwargs):
|
||||
|
||||
def validate_upgrade(from_ver, to_ver, bench_path='.'):
|
||||
if to_ver >= 6:
|
||||
if not find_executable('npm') and not (find_executable('node') or find_executable('nodejs')):
|
||||
if not which('npm') and not (which('node') or which('nodejs')):
|
||||
raise Exception("Please install nodejs and npm")
|
||||
|
||||
|
||||
def post_upgrade(from_ver, to_ver, bench_path='.'):
|
||||
from .config.common_site_config import get_config
|
||||
from .config import redis
|
||||
from .config.supervisor import generate_supervisor_config
|
||||
from .config.nginx import make_nginx_conf
|
||||
from bench.config.common_site_config import get_config
|
||||
from bench.config import redis
|
||||
from bench.config.supervisor import generate_supervisor_config
|
||||
from bench.config.nginx import make_nginx_conf
|
||||
conf = get_config(bench_path=bench_path)
|
||||
print("-" * 80 + "Your bench was upgraded to version {0}".format(to_ver))
|
||||
|
||||
@ -848,8 +847,10 @@ def update_translations(app, lang):
|
||||
|
||||
|
||||
def print_output(p):
|
||||
from select import select
|
||||
|
||||
while p.poll() is None:
|
||||
readx = select.select([p.stdout.fileno(), p.stderr.fileno()], [], [])[0]
|
||||
readx = select([p.stdout.fileno(), p.stderr.fileno()], [], [])[0]
|
||||
send_buffer = []
|
||||
for fd in readx:
|
||||
if fd == p.stdout.fileno():
|
||||
@ -910,7 +911,7 @@ def set_git_remote_url(git_url, bench_path='.'):
|
||||
|
||||
|
||||
def run_playbook(playbook_name, extra_vars=None, tag=None):
|
||||
if not find_executable('ansible'):
|
||||
if not which('ansible'):
|
||||
print("Ansible is needed to run this command, please install it using 'pip install ansible'")
|
||||
sys.exit(1)
|
||||
args = ['ansible-playbook', '-c', 'local', playbook_name, '-vvvv']
|
||||
@ -982,6 +983,8 @@ def migrate_env(python, backup=False):
|
||||
|
||||
# Backup venv: restore using `virtualenv --relocatable` if needed
|
||||
if backup:
|
||||
from datetime import datetime
|
||||
|
||||
parch = os.path.join(path, 'archived_envs')
|
||||
if not os.path.exists(parch):
|
||||
os.mkdir(parch)
|
||||
|
Loading…
Reference in New Issue
Block a user