diff options
Diffstat (limited to 'bitbake/lib/bb/server/xmlrpc.py')
| -rw-r--r-- | bitbake/lib/bb/server/xmlrpc.py | 60 |
1 files changed, 52 insertions, 8 deletions
diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py index 1a475e04ba..6874765136 100644 --- a/bitbake/lib/bb/server/xmlrpc.py +++ b/bitbake/lib/bb/server/xmlrpc.py | |||
| @@ -49,7 +49,6 @@ from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler | |||
| 49 | import bb | 49 | import bb |
| 50 | from bb import daemonize | 50 | from bb import daemonize |
| 51 | from bb.ui import uievent | 51 | from bb.ui import uievent |
| 52 | from . import BitBakeBaseServer, BitBakeBaseServerConnection, BaseImplServer | ||
| 53 | 52 | ||
| 54 | DEBUG = False | 53 | DEBUG = False |
| 55 | 54 | ||
| @@ -193,15 +192,25 @@ class BitBakeXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): | |||
| 193 | self.wfile.write(bytes(response, 'utf-8')) | 192 | self.wfile.write(bytes(response, 'utf-8')) |
| 194 | 193 | ||
| 195 | 194 | ||
| 196 | class XMLRPCProxyServer(BaseImplServer): | 195 | class XMLRPCProxyServer(object): |
| 197 | """ not a real working server, but a stub for a proxy server connection | 196 | """ not a real working server, but a stub for a proxy server connection |
| 198 | 197 | ||
| 199 | """ | 198 | """ |
| 200 | def __init__(self, host, port, use_builtin_types=True): | 199 | def __init__(self, host, port, use_builtin_types=True): |
| 201 | self.host = host | 200 | self.host = host |
| 202 | self.port = port | 201 | self.port = port |
| 202 | self._idlefuns = {} | ||
| 203 | 203 | ||
| 204 | class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer): | 204 | def addcooker(self, cooker): |
| 205 | self.cooker = cooker | ||
| 206 | |||
| 207 | def register_idle_function(self, function, data): | ||
| 208 | """Register a function to be called while the server is idle""" | ||
| 209 | assert hasattr(function, '__call__') | ||
| 210 | self._idlefuns[function] = data | ||
| 211 | |||
| 212 | |||
| 213 | class XMLRPCServer(SimpleXMLRPCServer): | ||
| 205 | # remove this when you're done with debugging | 214 | # remove this when you're done with debugging |
| 206 | # allow_reuse_address = True | 215 | # allow_reuse_address = True |
| 207 | 216 | ||
| @@ -209,7 +218,7 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer): | |||
| 209 | """ | 218 | """ |
| 210 | Constructor | 219 | Constructor |
| 211 | """ | 220 | """ |
| 212 | BaseImplServer.__init__(self) | 221 | self._idlefuns = {} |
| 213 | self.single_use = single_use | 222 | self.single_use = single_use |
| 214 | # Use auto port configuration | 223 | # Use auto port configuration |
| 215 | if (interface[1] == -1): | 224 | if (interface[1] == -1): |
| @@ -231,7 +240,7 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer): | |||
| 231 | self.next_heartbeat = time.time() | 240 | self.next_heartbeat = time.time() |
| 232 | 241 | ||
| 233 | def addcooker(self, cooker): | 242 | def addcooker(self, cooker): |
| 234 | BaseImplServer.addcooker(self, cooker) | 243 | self.cooker = cooker |
| 235 | self.commands.cooker = cooker | 244 | self.commands.cooker = cooker |
| 236 | 245 | ||
| 237 | def autoregister_all_functions(self, context, prefix): | 246 | def autoregister_all_functions(self, context, prefix): |
| @@ -335,7 +344,13 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer): | |||
| 335 | def set_connection_token(self, token): | 344 | def set_connection_token(self, token): |
| 336 | self.connection_token = token | 345 | self.connection_token = token |
| 337 | 346 | ||
| 338 | class BitBakeXMLRPCServerConnection(BitBakeBaseServerConnection): | 347 | def register_idle_function(self, function, data): |
| 348 | """Register a function to be called while the server is idle""" | ||
| 349 | assert hasattr(function, '__call__') | ||
| 350 | self._idlefuns[function] = data | ||
| 351 | |||
| 352 | |||
| 353 | class BitBakeXMLRPCServerConnection(object): | ||
| 339 | def __init__(self, serverImpl, clientinfo=("localhost", 0), observer_only = False, featureset = None): | 354 | def __init__(self, serverImpl, clientinfo=("localhost", 0), observer_only = False, featureset = None): |
| 340 | self.connection, self.transport = _create_server(serverImpl.host, serverImpl.port) | 355 | self.connection, self.transport = _create_server(serverImpl.host, serverImpl.port) |
| 341 | self.clientinfo = clientinfo | 356 | self.clientinfo = clientinfo |
| @@ -388,7 +403,7 @@ class BitBakeXMLRPCServerConnection(BitBakeBaseServerConnection): | |||
| 388 | except: | 403 | except: |
| 389 | pass | 404 | pass |
| 390 | 405 | ||
| 391 | class BitBakeServer(BitBakeBaseServer): | 406 | class BitBakeServer(object): |
| 392 | def initServer(self, interface = ("localhost", 0), | 407 | def initServer(self, interface = ("localhost", 0), |
| 393 | single_use = False, idle_timeout=0): | 408 | single_use = False, idle_timeout=0): |
| 394 | self.interface = interface | 409 | self.interface = interface |
| @@ -405,7 +420,20 @@ class BitBakeServer(BitBakeBaseServer): | |||
| 405 | def set_connection_token(self, token): | 420 | def set_connection_token(self, token): |
| 406 | self.connection.transport.set_connection_token(token) | 421 | self.connection.transport.set_connection_token(token) |
| 407 | 422 | ||
| 408 | class BitBakeXMLRPCClient(BitBakeBaseServer): | 423 | def addcooker(self, cooker): |
| 424 | self.cooker = cooker | ||
| 425 | self.serverImpl.addcooker(cooker) | ||
| 426 | |||
| 427 | def getServerIdleCB(self): | ||
| 428 | return self.serverImpl.register_idle_function | ||
| 429 | |||
| 430 | def saveConnectionDetails(self): | ||
| 431 | return | ||
| 432 | |||
| 433 | def endSession(self): | ||
| 434 | self.connection.terminate() | ||
| 435 | |||
| 436 | class BitBakeXMLRPCClient(object): | ||
| 409 | 437 | ||
| 410 | def __init__(self, observer_only = False, token = None): | 438 | def __init__(self, observer_only = False, token = None): |
| 411 | self.token = token | 439 | self.token = token |
| @@ -446,3 +474,19 @@ class BitBakeXMLRPCClient(BitBakeBaseServer): | |||
| 446 | 474 | ||
| 447 | def endSession(self): | 475 | def endSession(self): |
| 448 | self.connection.removeClient() | 476 | self.connection.removeClient() |
| 477 | |||
| 478 | def initServer(self): | ||
| 479 | self.serverImpl = None | ||
| 480 | self.connection = None | ||
| 481 | return | ||
| 482 | |||
| 483 | def addcooker(self, cooker): | ||
| 484 | self.cooker = cooker | ||
| 485 | self.serverImpl.addcooker(cooker) | ||
| 486 | |||
| 487 | def getServerIdleCB(self): | ||
| 488 | return self.serverImpl.register_idle_function | ||
| 489 | |||
| 490 | def detach(self): | ||
| 491 | return | ||
| 492 | |||
