Source code for obci.cmd.obci_run_peer

#!/usr/bin/env python3

import importlib
import importlib.util
import sys
import socket
import time

from obci.configs import settings
from obci.core.peer import Peer, PeerInitUrls
from obci.mx_legacy.clients import BaseMultiplexerServer


[docs]def run_legacy_peer(cls): # run legacy-type peer cls(settings.MULTIPLEXER_ADDRESSES).loop()
[docs]def run_new_peer(cls): BROKER_ADDR = socket.gethostbyname(settings.MULTIPLEXER_ADDRESSES[0][0]) broker_rep_url = 'tcp://' + BROKER_ADDR + ':' + str(settings.MULTIPLEXER_ADDRESSES[0][1]) argv = sys.argv + ['--broker-rep-url', broker_rep_url, '--pub-urls', 'tcp://*:*', '--rep-urls', 'tcp://*:*'] peer = cls.create_peer(argv) # wait for peer to connect to broker while True: if peer._initialization_finished: break time.sleep(0.1) # wait for peer to shutdown while True: if not peer._initialization_finished: break time.sleep(0.1)
[docs]def get_peer_class(peer_module_path): try: spec = importlib.util.spec_from_file_location('peer', peer_module_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) except ImportError as ex: print('Could not import module! {}'.format(ex)) sys.exit(2) for name, cls in module.__dict__.items(): if cls.__class__.__name__ != 'type': continue if issubclass(cls, (Peer, BaseMultiplexerServer)): return cls return None
[docs]def run(): try: peer_module_path = sys.argv[1] except IndexError: print('No Python module path for peer specified.') sys.exit(1) # remove obci_run_peer entry point from argv sys.argv.pop(0) cls = get_peer_class(peer_module_path) if cls is None: print('No peer is defined in the specified module.') sys.exit(2) if issubclass(cls, BaseMultiplexerServer): run_legacy_peer(cls) elif issubclass(cls, Peer): run_new_peer(cls) sys.exit(0)