96 lines
2.5 KiB
Python
96 lines
2.5 KiB
Python
import argparse
|
|
import os
|
|
import subprocess
|
|
import shutil
|
|
import sys
|
|
import time
|
|
|
|
root_dir = sys.path[0]
|
|
|
|
|
|
def devupdate(args):
|
|
subprocess.check_call(
|
|
[
|
|
sys.executable,
|
|
'-m',
|
|
'pip',
|
|
'install',
|
|
'-r',
|
|
os.path.join(root_dir, 'dev-python-requirements.txt'),
|
|
]
|
|
)
|
|
|
|
|
|
def run(args):
|
|
import docker
|
|
|
|
POSTGRES_USER = 'locality'
|
|
POSTGRES_PASSWORD = 'wkyhjofg2837f'
|
|
POSTGRES_DB = 'locality'
|
|
|
|
postgres_env = {
|
|
'POSTGRES_USER': POSTGRES_USER,
|
|
'POSTGRES_PASSWORD': POSTGRES_PASSWORD,
|
|
'POSTGRES_DB': POSTGRES_DB,
|
|
}
|
|
|
|
locality_env = {
|
|
'LOCALITY_DATABASE_URL': 'postgres://{}:{}@localhost/{}'.format(
|
|
POSTGRES_USER,
|
|
POSTGRES_PASSWORD,
|
|
POSTGRES_DB),
|
|
'LOCALITY_STATIC_FILE_PATH': os.path.join(
|
|
root_dir,
|
|
'static'),
|
|
'LOCALITY_HMAC_SECRET': 'iknf4390-8guvmr3'
|
|
}
|
|
|
|
docker_client = docker.from_env()
|
|
postgres_container = docker_client.containers.run(
|
|
'postgres:14.11',
|
|
environment=postgres_env,
|
|
detach=True,
|
|
ports={'5432/tcp': ('127.0.0.1', 5432)},
|
|
)
|
|
try:
|
|
docker_stream = postgres_container.attach(stream=True)
|
|
for line_binary in docker_stream:
|
|
line = line_binary.decode('utf-8')
|
|
print(line)
|
|
if 'listening on IPv4 address "0.0.0.0", port 5432' in line:
|
|
break
|
|
for line_binary in docker_stream:
|
|
line = line_binary.decode('utf-8')
|
|
print(line)
|
|
if 'database system is ready to accept connections' in line:
|
|
break
|
|
|
|
cargo_bin = shutil.which('cargo')
|
|
locality_process = subprocess.Popen(
|
|
[cargo_bin, 'run'], env=locality_env, cwd=root_dir
|
|
)
|
|
|
|
try:
|
|
while locality_process.poll() is None:
|
|
time.sleep(0.5)
|
|
finally:
|
|
if locality_process.poll() is None:
|
|
locality_process.terminate()
|
|
finally:
|
|
postgres_container.stop()
|
|
postgres_container.remove()
|
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
subparsers = parser.add_subparsers(required=True)
|
|
run_parser = subparsers.add_parser(
|
|
'run', help='Run a test instance of locality'
|
|
)
|
|
run_parser.set_defaults(func=run)
|
|
devupdate_parser = subparsers.add_parser(
|
|
'devupdate', help='Install or update packages used by this script'
|
|
)
|
|
devupdate_parser.set_defaults(func=devupdate)
|
|
args = parser.parse_args()
|
|
args.func(args)
|