import configparser
import os
import subprocess
import tempfile

import bazel_tools
import bazel_tools.tools.python

from elftools.elf.elffile import ELFFile
from elftools.elf.segments import InterpSegment

from bazel_tools.tools.python.runfiles import runfiles
r = runfiles.Create()

uwsgi = r.Rlocation("pydeps_pypi__uWSGI_2_0_18/uWSGI-2.0.18.data/scripts/uwsgi")
settings = r.Rlocation("hscloud/personal/q3k/djtest/djtest/settings.py")

# uwsgi from runfiles is non-chmodded, we have to run it through its interpreter
ld = None
with open(uwsgi, 'rb') as f:
    elffile = ELFFile(f)
    for segment in elffile.iter_segments():
        if isinstance(segment, InterpSegment):
            ld = segment.get_interp_name()
if ld is None:
    raise Exception("could not find interpreter/ld.so path in uwsgi - failing")

apppath = os.path.dirname(settings)
sitepath = os.path.dirname(apppath)

pythonpath = os.environ['PYTHONPATH']

# Make UWSGI ini config file
cfgf = tempfile.NamedTemporaryFile(mode='w', delete=False)

config = configparser.ConfigParser()
config['uwsgi'] = {}
config['uwsgi']['master'] = '1'
config['uwsgi']['chdir'] = sitepath
config['uwsgi']['module'] = 'djtest.wsgi'
config['uwsgi']['env'] = 'DJANGO_SETTINGS_MODULE=djtest.settings'
config['uwsgi']['http'] = '127.0.0.1:8080'
config['uwsgi']['pythonpath'] = pythonpath

config.write(cfgf)
cfgf.close()

args = [
    ld,
    uwsgi,
    '--ini', cfgf.name,
]

subprocess.call(args)

os.unlink(cfgf.name)
