def __init__(self, uid, host, port, boss_port):
        self.uid = uid
        self.boss_port = boss_port
        self.host = host
        self.port = port
        self.boss_api_handler = BossClient(host, boss_port).boss_access

        if in_parent_process():
            save_pid_file("pretend_extended-mock-{0}.pid".format(uid))
class Pretender(object):
    def __init__(self, uid, host, port, boss_port):
        self.uid = uid
        self.boss_port = boss_port
        self.host = host
        self.port = port
        self.boss_api_handler = BossClient(host, boss_port).boss_access

        if in_parent_process():
            save_pid_file("pretend_extended-mock-{0}.pid".format(uid))

    def run(self):
        raise NotImplementedError("run() not defined in {0}".format(self.__class__))

    @classmethod
    def start(cls):
        server = cls.from_command_line_args()
        try:
            server.run()
        except socket.error:
            LOGGER.info("QUITTING")
            import sys

            sys.exit(RETURN_CODE_PORT_IN_USE)

    @classmethod
    def from_command_line_args(cls):
        """Default parser for mock server scripts.

        Parse command line args and return the parsed object.
        """
        parser = argparse.ArgumentParser(description="Start the server")
        parser.add_argument(
            "-H", "--host", dest="host", default="localhost", help="host/IP to run the server on (default: localhost)"
        )
        parser.add_argument(
            "-p",
            "--port",
            dest="port",
            type=int,
            default=8001,
            help=("port number to run the " "server on (default: 8001)"),
        )
        parser.add_argument(
            "-b", "--boss", dest="boss_port", default="8000", help="port for accessing the Boss server."
        )
        parser.add_argument(
            "-d", "--debug", dest="debug", default=False, action="store_true", help="start a build right after creation"
        )
        parser.add_argument("-i", "--uid", dest="uid")
        args = parser.parse_args()
        return cls(uid=args.uid, host=args.host, port=args.port, boss_port=args.boss_port)

    def store_history_retrieve_preset(self, body):
        return self.boss_api_handler.http("POST", url="/replay/{0}".format(self.uid), body=body)