From 441c699acbb4b443c705933c1fccee0d906a1262 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 14 Jun 2013 16:22:51 +0000 Subject: bitbake: compat/server/utils: Jettison pre python 2.7.3 workarounds Now we've moved to require python 2.7.3, we can jettison the compatibility workarounds/hacks for older python versions. (Bitbake rev: a51c402304f2080a76720f9b31d6dfdbed393bba) Signed-off-by: Richard Purdie --- bitbake/lib/bb/server/process.py | 46 ----------------- bitbake/lib/bb/server/xmlrpc.py | 104 +++++---------------------------------- 2 files changed, 11 insertions(+), 139 deletions(-) (limited to 'bitbake/lib/bb/server') diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py index d73fe827e4..0d4a26ced0 100644 --- a/bitbake/lib/bb/server/process.py +++ b/bitbake/lib/bb/server/process.py @@ -142,52 +142,6 @@ class ProcessServer(Process, BaseImplServer): def stop(self): self.keep_running.clear() - def bootstrap_2_6_6(self): - """Pulled from python 2.6.6. Needed to ensure we have the fix from - http://bugs.python.org/issue5313 when running on python version 2.6.2 - or lower.""" - - try: - self._children = set() - self._counter = itertools.count(1) - try: - sys.stdin.close() - sys.stdin = open(os.devnull) - except (OSError, ValueError): - pass - multiprocessing._current_process = self - util._finalizer_registry.clear() - util._run_after_forkers() - util.info('child process calling self.run()') - try: - self.run() - exitcode = 0 - finally: - util._exit_function() - except SystemExit as e: - if not e.args: - exitcode = 1 - elif type(e.args[0]) is int: - exitcode = e.args[0] - else: - sys.stderr.write(e.args[0] + '\n') - sys.stderr.flush() - exitcode = 1 - except: - exitcode = 1 - import traceback - sys.stderr.write('Process %s:\n' % self.name) - sys.stderr.flush() - traceback.print_exc() - - util.info('process exiting with exitcode %d' % exitcode) - return exitcode - - # Python versions 2.6.0 through 2.6.2 suffer from a multiprocessing bug - # which can result in a bitbake server hang during the parsing process - if (2, 6, 0) <= sys.version_info < (2, 6, 3): - _bootstrap = bootstrap_2_6_6 - class BitBakeProcessServerConnection(BitBakeBaseServerConnection): def __init__(self, serverImpl, ui_channel, event_queue): self.procserver = serverImpl diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py index 359d5adb67..5045e55ae2 100644 --- a/bitbake/lib/bb/server/xmlrpc.py +++ b/bitbake/lib/bb/server/xmlrpc.py @@ -51,100 +51,18 @@ import inspect, select from . import BitBakeBaseServer, BitBakeBaseServerConnection, BaseImplServer -if sys.hexversion < 0x020600F0: - print("Sorry, python 2.6 or later is required for bitbake's XMLRPC mode") - sys.exit(1) - -## -# The xmlrpclib.Transport class has undergone various changes in Python 2.7 -# which break BitBake's XMLRPC implementation. -# To work around this we subclass Transport and have a copy/paste of method -# implementations from Python 2.6.6's xmlrpclib. -# -# Upstream Python bug is #8194 (http://bugs.python.org/issue8194) -# This bug is relevant for Python 2.7.0 and 2.7.1 but was fixed for -# Python > 2.7.2 -# -# To implement a simple form of client control, we use a special transport -# that adds a HTTP header field ("Bitbake-token") to ensure that a server -# can communicate with only a client at a given time (the client must use -# the same token). -## -if (2, 7, 0) <= sys.version_info < (2, 7, 2): - class BBTransport(xmlrpclib.Transport): - def __init__(self): - self.connection_token = None - xmlrpclib.Transport.__init__(self) - - def request(self, host, handler, request_body, verbose=0): - h = self.make_connection(host) - if verbose: - h.set_debuglevel(1) - - self.send_request(h, handler, request_body) - self.send_host(h, host) - self.send_user_agent(h) - if self.connection_token: - h.putheader("Bitbake-token", self.connection_token) - self.send_content(h, request_body) - - errcode, errmsg, headers = h.getreply() - - if errcode != 200: - raise ProtocolError( - host + handler, - errcode, errmsg, - headers - ) - - self.verbose = verbose +class BBTransport(xmlrpclib.Transport): + def __init__(self): + self.connection_token = None + xmlrpclib.Transport.__init__(self) - try: - sock = h._conn.sock - except AttributeError: - sock = None - - return self._parse_response(h.getfile(), sock) - - def make_connection(self, host): - import httplib - host, extra_headers, x509 = self.get_host_info(host) - return httplib.HTTP(host) - - def _parse_response(self, file, sock): - p, u = self.getparser() - - while 1: - if sock: - response = sock.recv(1024) - else: - response = file.read(1024) - if not response: - break - if self.verbose: - print("body:", repr(response)) - p.feed(response) - - file.close() - p.close() - - return u.close() - - def set_connection_token(self, token): - self.connection_token = token -else: - class BBTransport(xmlrpclib.Transport): - def __init__(self): - self.connection_token = None - xmlrpclib.Transport.__init__(self) - - def set_connection_token(self, token): - self.connection_token = token - - def send_content(self, h, body): - if self.connection_token: - h.putheader("Bitbake-token", self.connection_token) - xmlrpclib.Transport.send_content(self, h, body) + def set_connection_token(self, token): + self.connection_token = token + + def send_content(self, h, body): + if self.connection_token: + h.putheader("Bitbake-token", self.connection_token) + xmlrpclib.Transport.send_content(self, h, body) def _create_server(host, port): t = BBTransport() -- cgit v1.2.3-54-g00ecf