diff options
Diffstat (limited to 'scripts/swig_bot_lib/server.py')
-rw-r--r-- | scripts/swig_bot_lib/server.py | 144 |
1 files changed, 0 insertions, 144 deletions
diff --git a/scripts/swig_bot_lib/server.py b/scripts/swig_bot_lib/server.py deleted file mode 100644 index 57fb8d9db4e9..000000000000 --- a/scripts/swig_bot_lib/server.py +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/env python - -""" -SWIG generation server. Listens for connections from swig generation clients -and runs swig in the requested fashion, sending back the results. -""" - -# Future imports -from __future__ import absolute_import -from __future__ import print_function - -# Python modules -import argparse -import io -import logging -import os -import select -import shutil -import socket -import struct -import sys -import tempfile -import traceback - -# LLDB modules -import use_lldb_suite -from lldbsuite.support import fs -from lldbsuite.support import sockutil - -# package imports -from . import local -from . import remote - -default_port = 8537 - - -def add_subparser_args(parser): - parser.add_argument( - "--port", - action="store", - default=default_port, - help=("The local port to bind to")) - - parser.add_argument( - "--swig-executable", - action="store", - default=fs.find_executable("swig"), - dest="swig_executable") - - -def finalize_subparser_options(options): - pass - - -def initialize_listening_socket(options): - logging.debug("Creating socket...") - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - - logging.info("Binding to ip address '', port {}".format(options.port)) - s.bind(('', options.port)) - - logging.debug("Putting socket in listen mode...") - s.listen() - return s - - -def accept_once(sock, options): - logging.debug("Waiting for connection...") - while True: - rlist, wlist, xlist = select.select([sock], [], [], 0.5) - if not rlist: - continue - - client, addr = sock.accept() - logging.info("Received connection from {}".format(addr)) - data_size = struct.unpack("!I", sockutil.recvall(client, 4))[0] - logging.debug("Expecting {} bytes of data from client" - .format(data_size)) - data = sockutil.recvall(client, data_size) - logging.info("Received {} bytes of data from client" - .format(len(data))) - - pack_location = None - try: - tempfolder = os.path.join(tempfile.gettempdir(), "swig-bot") - os.makedirs(tempfolder, exist_ok=True) - - pack_location = tempfile.mkdtemp(dir=tempfolder) - logging.debug("Extracting archive to {}".format(pack_location)) - - local.unpack_archive(pack_location, data) - logging.debug("Successfully unpacked archive...") - - config_file = os.path.normpath(os.path.join(pack_location, - "config.json")) - parsed_config = remote.parse_config(io.open(config_file)) - config = local.LocalConfig() - config.languages = parsed_config["languages"] - config.swig_executable = options.swig_executable - config.src_root = pack_location - config.target_dir = os.path.normpath( - os.path.join(config.src_root, "output")) - logging.info( - "Running swig. languages={}, swig={}, src_root={}, target={}" - .format(config.languages, config.swig_executable, - config.src_root, config.target_dir)) - - status = local.generate(config) - logging.debug("Finished running swig. Packaging up files {}" - .format(os.listdir(config.target_dir))) - zip_data = io.BytesIO() - zip_file = local.pack_archive(zip_data, config.target_dir, None) - response_status = remote.serialize_response_status(status) - logging.debug("Sending response status {}".format(response_status)) - logging.info("(swig output) -> swig_output.json") - zip_file.writestr("swig_output.json", response_status) - - zip_file.close() - response_data = zip_data.getvalue() - logging.info("Sending {} byte response".format(len(response_data))) - client.sendall(struct.pack("!I", len(response_data))) - client.sendall(response_data) - finally: - if pack_location is not None: - logging.debug("Removing temporary folder {}" - .format(pack_location)) - shutil.rmtree(pack_location) - - -def accept_loop(sock, options): - while True: - try: - accept_once(sock, options) - except Exception as e: - error = traceback.format_exc() - logging.error("An error occurred while processing the connection.") - logging.error(error) - - -def run(options): - print(options) - sock = initialize_listening_socket(options) - accept_loop(sock, options) - return options |