mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-26 19:14:30 +00:00
88 lines
2.8 KiB
Python
88 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding:utf-8 -*-
|
|
#
|
|
# Copyright 2023 © AE UTBM
|
|
# ae@utbm.fr / ae.info@utbm.fr
|
|
# All contributors are listed in the CONTRIBUTORS file.
|
|
#
|
|
# This file is part of the website of the UTBM Student Association (AE UTBM),
|
|
# https://ae.utbm.fr.
|
|
#
|
|
# You can find the whole source code at https://github.com/ae-utbm/sith3
|
|
#
|
|
# LICENSED UNDER THE GNU GENERAL PUBLIC LICENSE VERSION 3 (GPLv3)
|
|
# SEE : https://raw.githubusercontent.com/ae-utbm/sith3/master/LICENSE
|
|
# OR WITHIN THE LOCAL FILE "LICENSE"
|
|
#
|
|
# PREVIOUSLY LICENSED UNDER THE MIT LICENSE,
|
|
# SEE : https://raw.githubusercontent.com/ae-utbm/sith3/master/LICENSE.old
|
|
# OR WITHIN THE LOCAL FILE "LICENSE.old"
|
|
#
|
|
|
|
import os
|
|
import signal
|
|
import sys
|
|
from http.server import CGIHTTPRequestHandler, test
|
|
|
|
from django.core.management.base import BaseCommand
|
|
from django.utils import autoreload
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Generate Sphinx documentation and launch basic server"
|
|
|
|
default_addr = "127.0.0.1"
|
|
default_port = "8080"
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument(
|
|
"addrport", nargs="?", help="Optional port number, or ipaddr:port"
|
|
)
|
|
|
|
def build_documentation(self):
|
|
os.chdir(os.path.join(self.project_dir, "doc"))
|
|
err = os.system("make html")
|
|
|
|
if err != 0:
|
|
self.stdout.write("A build error occured")
|
|
|
|
def start_server(self, **kwargs):
|
|
os.chdir(os.path.join(self.project_dir, "doc", "_build/html"))
|
|
addr = self.default_addr
|
|
port = self.default_port
|
|
if kwargs["addrport"]:
|
|
addrport = kwargs["addrport"].split(":")
|
|
|
|
addr = addrport[0]
|
|
|
|
if len(addrport) > 1:
|
|
port = addrport[1]
|
|
|
|
if not port.isnumeric():
|
|
self.stdout.write("%s is not a valid port" % (port,))
|
|
sys.exit(0)
|
|
|
|
test(HandlerClass=CGIHTTPRequestHandler, port=int(port), bind=addr)
|
|
|
|
def build_and_start_server(self, **kwargs):
|
|
self.build_documentation()
|
|
self.start_server(**kwargs)
|
|
|
|
def handle(self, *args, **kwargs):
|
|
self.project_dir = os.getcwd()
|
|
|
|
signal.signal(signal.SIGTERM, lambda *args: sys.exit(0))
|
|
try:
|
|
if os.environ.get(autoreload.DJANGO_AUTORELOAD_ENV) == "true":
|
|
reloader = autoreload.get_reloader()
|
|
reloader.watch_dir(os.path.join(self.project_dir, "doc"), "**/*.rst")
|
|
autoreload.logger.info(
|
|
"Watching for file changes with %s", reloader.__class__.__name__
|
|
)
|
|
autoreload.start_django(reloader, self.build_and_start_server, **kwargs)
|
|
else:
|
|
exit_code = autoreload.restart_with_reloader()
|
|
sys.exit(exit_code)
|
|
except KeyboardInterrupt:
|
|
pass
|