pandora/pandora/manage.py

77 lines
2.7 KiB
Python
Raw Normal View History

2019-08-19 09:27:11 +00:00
#!/usr/bin/env python3
2010-06-23 05:23:55 +00:00
import os
2017-05-26 08:47:13 +00:00
import signal
2016-02-19 16:32:12 +00:00
import sys
2010-06-23 05:23:55 +00:00
2017-11-02 21:08:17 +00:00
def activate_venv(base):
if os.path.exists(base):
old_os_path = os.environ.get('PATH', '')
bin_path = os.path.join(base, 'bin')
if bin_path not in old_os_path:
os.environ['PATH'] = os.path.join(base, 'bin') + os.pathsep + old_os_path
2022-04-22 17:07:46 +00:00
version = '%s.%s' % (sys.version_info.major, sys.version_info.minor)
site_packages = os.path.join(base, 'lib', 'python%s' % version, 'site-packages')
2017-11-02 21:08:17 +00:00
prev_sys_path = list(sys.path)
import site
site.addsitedir(site_packages)
sys.real_prefix = sys.prefix
sys.prefix = base
# Move the added items to the front of the path:
new_sys_path = []
for item in list(sys.path):
if item not in prev_sys_path:
new_sys_path.append(item)
sys.path.remove(item)
sys.path[:0] = new_sys_path
2017-05-26 08:47:13 +00:00
class DelayedSignalHandler(object):
def __init__(self, managed_signals):
self.managed_signals = managed_signals
self.managed_signals_queue = list()
self.old_handlers = dict()
def _handle_signal(self, caught_signal, frame):
#self.managed_signals_queue.append((caught_signal, frame))
pass
def __enter__(self):
for managed_signal in self.managed_signals:
old_handler = signal.signal(managed_signal, self._handle_signal)
self.old_handlers[managed_signal] = old_handler
def __exit__(self, *_):
2017-10-15 10:00:28 +00:00
for managed_signal, old_handler in self.old_handlers.items():
2017-05-26 08:47:13 +00:00
signal.signal(managed_signal, old_handler)
'''
for managed_signal, frame in self.managed_signals_queue:
self.old_handlers[managed_signal](managed_signal, frame)
'''
2017-11-02 21:08:17 +00:00
if __name__ == "__main__":
root_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
2017-11-02 21:08:17 +00:00
# use python3 from venv
venv_dir = os.path.normpath(os.path.join(root_dir, '..'))
python3 = os.path.join(venv_dir, 'bin', 'python3')
if os.path.exists(python3) and sys.version_info[0] == 2:
import subprocess
cmd = [python3] + sys.argv
with DelayedSignalHandler((signal.SIGINT, signal.SIGTERM, signal.SIGHUP)):
exit_value = subprocess.call(cmd)
sys.exit(exit_value)
2010-06-23 05:23:55 +00:00
2017-11-02 21:08:17 +00:00
os.chdir(root_dir)
activate_venv(venv_dir)
2010-06-23 05:23:55 +00:00
2016-02-19 16:32:12 +00:00
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
from django.core.management import execute_from_command_line
import settings
if not os.path.exists(settings.SITE_CONFIG):
import sys
sys.stderr.write("Error: Can't find '%s'.\nBefore you run pan.do/ra you must create it\n" % settings.SITE_CONFIG)
sys.exit(1)
2016-02-19 16:32:12 +00:00
execute_from_command_line(sys.argv)