Python queue.LifoQueue() Examples

The following are 26 code examples of queue.LifoQueue(). You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may also want to check out all available functions/classes of the module queue , or try the search function .
Example #1
Source File: test.py    From lnd_grpc with MIT License 6 votes vote down vote up
def test_subscribe_transactions(self, alice):
        gen_and_sync_lnd(alice.bitcoin, [alice])
        subscription = alice.subscribe_transactions()
        alice.add_funds(alice.bitcoin, 1)
        assert isinstance(subscription, grpc._channel._Rendezvous)
        assert isinstance(subscription.__next__(), rpc_pb2.Transaction)

        # gen_and_sync_lnd(alice.bitcoin, [alice])
        # transaction_updates = queue.LifoQueue()
        #
        # def sub_transactions():
        #     try:
        #         for response in alice.subscribe_transactions():
        #             transaction_updates.put(response)
        #     except StopIteration:
        #         pass
        #
        # alice_sub = threading.Thread(target=sub_transactions(), daemon=True)
        # alice_sub.start()
        # time.sleep(1)
        # while not alice_sub.is_alive():
        #     time.sleep(0.1)
        # alice.add_funds(alice.bitcoin, 1)
        #
        # assert any(isinstance(update) == rpc_pb2.Transaction for update in get_updates(transaction_updates)) 
Example #2
Source File: test.py    From lnd_grpc with MIT License 6 votes vote down vote up
def test_subscribe_channel_events(self, bitcoind, bob, carol):
        bob, carol = setup_nodes(bitcoind, [bob, carol])
        gen_and_sync_lnd(bitcoind, [bob, carol])
        chan_updates = queue.LifoQueue()

        def sub_channel_events():
            try:
                for response in bob.subscribe_channel_events():
                    chan_updates.put(response)
            except grpc._channel._Rendezvous:
                pass

        bob_sub = threading.Thread(target=sub_channel_events, daemon=True)
        bob_sub.start()
        time.sleep(1)
        while not bob_sub.is_alive():
            time.sleep(0.1)
        channel_point = bob.list_channels()[0].channel_point

        bob.close_channel(channel_point=channel_point).__next__()
        generate(bitcoind, 3)
        gen_and_sync_lnd(bitcoind, [bob, carol])
        assert any(
            update.closed_channel is not None for update in get_updates(chan_updates)
        ) 
Example #3
Source File: dataloader_webcam.py    From video-to-pose3D with MIT License 6 votes vote down vote up
def __init__(self, webcam = 0, batchSize=1, queueSize=256):
        # initialize the file video stream along with the boolean
        # used to indicate if the thread should be stopped or not
        self.det_model = Darknet("yolo/cfg/yolov3-spp.cfg")
        self.det_model.load_weights('models/yolo/yolov3-spp.weights')
        self.det_model.net_info['height'] = opt.inp_dim
        self.det_inp_dim = int(self.det_model.net_info['height'])
        assert self.det_inp_dim % 32 == 0
        assert self.det_inp_dim > 32
        self.det_model.cuda()
        self.det_model.eval()

        self.stream = cv2.VideoCapture(int(webcam))
        assert self.stream.isOpened(), 'Cannot open webcam'
        self.stopped = False
        self.batchSize = batchSize

        # initialize the queue used to store frames read from
        # the video file
        self.Q = LifoQueue(maxsize=queueSize) 
Example #4
Source File: _graph.py    From OpenFermion-ProjectQ with Apache License 2.0 6 votes vote down vote up
def find_index(self, value, starting_node=0):
        """Find the index of the first node that matches value in a BFS

        Performs a breadth-first search of the graph starting at node index
        starting_node.  Returns the index or None if no match is found

        Args:
            value(Node Value) - Value to match against in the graph
            starting_node(int) - Node index to start search from
        """
        if starting_node > self.node_count():
            raise IndexError("Node ID out of range.")

        node_queue = queue.LifoQueue()
        node_queue.put(starting_node)
        visited = [starting_node]
        while not node_queue.empty():
            next_id = node_queue.get()
            if (self.nodes[next_id].value == value):
                return next_id  # Success
            for uid in self.neighbors[next_id]:
                if (self.uid_to_index[uid] not in visited):
                    node_queue.put(self.uid_to_index[uid])
                    visited += [self.uid_to_index[uid]]
        return None 
Example #5
Source File: dataloader_webcam.py    From video-to-pose3D with MIT License 6 votes vote down vote up
def __init__(self, dataloder, batchSize=1, queueSize=1024):
        # initialize the file video stream along with the boolean
        # used to indicate if the thread should be stopped or not
        self.det_model = Darknet("yolo/cfg/yolov3-spp.cfg")
        self.det_model.load_weights('models/yolo/yolov3-spp.weights')
        self.det_model.net_info['height'] = opt.inp_dim
        self.det_inp_dim = int(self.det_model.net_info['height'])
        assert self.det_inp_dim % 32 == 0
        assert self.det_inp_dim > 32
        self.det_model.cuda()
        self.det_model.eval()

        self.stopped = False
        self.dataloder = dataloder
        self.batchSize = batchSize
        # initialize the queue used to store frames read from
        # the video file
        self.Q = LifoQueue(maxsize=queueSize) 
Example #6
Source File: parenthesisChecker.py    From DSA-GeeksClasses with GNU General Public License v3.0 6 votes vote down vote up
def ispar(s):
    # code here
    import queue
    stack = queue.LifoQueue()
    
    for i in range(len(s)):
        if ((s[i] == '{') | (s[i] == '[') | (s[i] == '(')):
            stack.put(s[i])
        if ((s[i] == '}') | (s[i] == ']') | (s[i] == ')')):
            if stack.empty():
                return False
            elif not isMatchingPair(stack.get(),s[i]):
                return False
        
    if stack.empty():
        return True
    else:
        return False 
Example #7
Source File: main.py    From capture_reid with Apache License 2.0 6 votes vote down vote up
def __init__(self, mode):
        self.mode = mode
        self.conf = capture_conf.env[mode]
        self.init_sources(self.conf.source_paths)
        self.detector = Predict.instance()
        self.trackers = [Tracker(nn_matching.NearestNeighborDistanceMetric("cosine", self.conf.track_max_cosine_distance, self.conf.track_nn_budget),
                                 max_iou_distance=self.conf.track_max_iou_distance,
                                 max_age=self.conf.track_max_age,
                                 n_init=self.conf.track_n_init)
                         for _ in self.sources_parsed]
        self.track_pool = new_pools(self.conf.pool_size)
        self.save_pool = new_pools(self.conf.pool_size)
        self.frame_index = 0
        self.video_state = False
        if self.conf.video_on:
            self.box_queue = queue.LifoQueue(100)
            if self.conf.is_async:
                submit(self.video_on)
        self.debug = mode == 'dev'
        if self.debug:
            self.last_time = datetime.now()
            self.fps = 0
            self.pids = set() 
Example #8
Source File: unhandled_exception_handler.py    From ClusterRunner with Apache License 2.0 6 votes vote down vote up
def __init__(self):
        super().__init__()
        self._handling_lock = Lock()
        self._teardown_callback_stack = LifoQueue()  # we execute callbacks in the reverse order that they were added
        self._logger = log.get_logger(__name__)
        self._handled_exceptions = Queue()
        self._teardown_callback_raised_exception = False

        # Set up handlers to be called when the application process receives certain signals.
        # Note: this will raise if called on a non-main thread, but we should NOT work around that here. (That could
        # prevent the teardown handler from ever being registered!) Calling code should be organized so that this
        # singleton is only ever initialized on the main thread.
        signal.signal(signal.SIGTERM, self._application_teardown_signal_handler)
        signal.signal(signal.SIGINT, self._application_teardown_signal_handler)
        try:
            signal.signal(process_utils.SIGINFO, self._application_info_dump_signal_handler)
        except ValueError:
            self._logger.warning('Failed to register signal handler for SIGINFO. This is expected if ClusterRunner '
                                 'is running on Windows.') 
Example #9
Source File: httpserver.py    From pytest-httpserver with MIT License 6 votes vote down vote up
def __init__(self, host=DEFAULT_LISTEN_HOST, port=DEFAULT_LISTEN_PORT, ssl_context: Optional[SSLContext] = None,
                 default_waiting_settings: Optional[WaitingSettings] = None):
        """
        Initializes the instance.

        """
        self.host = host
        self.port = port
        self.server = None
        self.server_thread = None
        self.assertions = []
        self.log = []
        self.ordered_handlers = []
        self.oneshot_handlers = RequestHandlerList()
        self.handlers = RequestHandlerList()
        self.permanently_failed = False
        self.ssl_context = ssl_context
        if default_waiting_settings is not None:
            self.default_waiting_settings = default_waiting_settings
        else:
            self.default_waiting_settings = WaitingSettings()
        self._waiting_settings = copy(self.default_waiting_settings)
        self._waiting_result = queue.LifoQueue(maxsize=1) 
Example #10
Source File: dataloader.py    From video-to-pose3D with MIT License 5 votes vote down vote up
def __init__(self, webcam, queueSize=256):
        # initialize the file video stream along with the boolean
        # used to indicate if the thread should be stopped or not
        self.stream = cv2.VideoCapture(int(webcam))
        assert self.stream.isOpened(), 'Cannot capture source'
        self.stopped = False
        # initialize the queue used to store frames read from
        # the video file
        self.Q = LifoQueue(maxsize=queueSize) 
Example #11
Source File: dataloader_webcam.py    From video-to-pose3D with MIT License 5 votes vote down vote up
def __init__(self, detectionLoader, queueSize=1024):
        # initialize the file video stream along with the boolean
        # used to indicate if the thread should be stopped or not
        self.detectionLoader = detectionLoader
        self.stopped = False

        # initialize the queue used to store data
        self.Q = LifoQueue(maxsize=queueSize) 
Example #12
Source File: dataloader_webcam.py    From video-to-pose3D with MIT License 5 votes vote down vote up
def __init__(self, webcam, batchSize=1, queueSize=256):
        # initialize the file video stream along with the boolean
        # used to indicate if the thread should be stopped or not
        self.stream = cv2.VideoCapture(int(webcam))
        assert self.stream.isOpened(), 'Cannot capture source'
        self.stopped = False
        # initialize the queue used to store frames read from
        # the video file
        self.batchSize = batchSize
        self.Q = LifoQueue(maxsize=queueSize) 
Example #13
Source File: source_queue.py    From capture_reid with Apache License 2.0 5 votes vote down vote up
def __init__(self, sources_parsed, max_queue_size=5):
        procs, queues, shape = [], [], []
        for source in sources_parsed:
            shape.append((int(source.h), int(source.w), 3))
            if source.url.startswith("rtsp"):
                procs.append(sp.Popen(['ffmpeg',
                                       '-loglevel', 'error',
                                       '-hwaccel', 'cuvid',
                                       '-c:v', 'h264_cuvid',
                                       '-rtsp_transport', 'tcp',
                                       '-i', os.path.expanduser(source.url),
                                       '-vf', 'hwdownload,format=nv12',
                                       '-c:v', 'rawvideo',
                                       '-f', 'rawvideo',
                                       '-pix_fmt', 'bgr24',
                                       'pipe:1'], stdin=sp.PIPE, stdout=sp.PIPE, shell=False, bufsize=int(source.h) * int(source.w) * 3 * 10))
            else:
                procs.append(sp.Popen(['ffmpeg',
                                       '-loglevel', 'error',
                                       '-hwaccel', 'cuvid',
                                       '-c:v', 'h264_cuvid',
                                       '-re',
                                       '-i', os.path.expanduser(source.url),
                                       '-vf', 'hwdownload,format=nv12',
                                       '-c:v', 'rawvideo',
                                       '-f', 'rawvideo',
                                       '-pix_fmt', 'bgr24',
                                       'pipe:1'], stdin=sp.PIPE, stdout=sp.PIPE, shell=False, bufsize=int(source.h) * int(source.w) * 3 * 10))
            queues.append(queue.LifoQueue(max_queue_size))
        self.shape = shape
        self.procs = procs
        self.queues = queues
        submit(self.source_queue, self.procs, self.queues) 
Example #14
Source File: grabber.py    From TTBot with GNU General Public License v3.0 5 votes vote down vote up
def __init__(self):
        self.db = Database(MONGODB)
        self.ID_queue = queue.LifoQueue() 
Example #15
Source File: menu.py    From plex-mpv-shim with MIT License 5 votes vote down vote up
def __init__(self, playerManager):
        self.playerManager = playerManager

        self.is_menu_shown = False
        self.menu_title = ""
        self.menu_stack = LifoQueue()
        self.menu_list = []
        self.menu_selection = 0
        self.menu_tmp = None
        self.original_osd_color = playerManager._player.osd_back_color
        self.original_osd_size = playerManager._player.osd_font_size

    # The menu is a bit of a hack...
    # It works using multiline OSD.
    # We also have to force the window to open. 
Example #16
Source File: py_linq.py    From py-enumerable with MIT License 5 votes vote down vote up
def __iter__(self):
        stack = LifoQueue()
        for element in self._iterable:
            stack.put(element)
        while not stack.empty():
            yield stack.get() 
Example #17
Source File: protocol.py    From exchangelib with BSD 2-Clause "Simplified" License 5 votes vote down vote up
def _create_session_pool(self):
        # Create a pool to reuse sessions containing connections to the server
        session_pool = LifoQueue()
        for _ in range(self._session_pool_size):
            session_pool.put(self.create_session(), block=False)
        return session_pool 
Example #18
Source File: removeConsecutiveDuplicatePairs.py    From DSA-GeeksClasses with GNU General Public License v3.0 5 votes vote down vote up
def removePair(s):
    # code here
    import queue
    stack = queue.LifoQueue()
    r = ''
    stack.put(s[0])
    for i in range(1,len(s)):
        if stack.empty():
            stack.put(s[i])
        else:
            f = stack.get()
            if f != s[i]:
                stack.put(f)
                stack.put(s[i])
            else:
                stack.put(f)
                g = stack.get()
                if g == s[i]:
                    pass
    while (stack.empty() is not True):
        x = stack.get()
        r = x + r
    if r != '':
        return r
    else:
        return "Empty String" 
Example #19
Source File: external_miner.py    From pyquarkchain with MIT License 5 votes vote down vote up
def __init__(self, configs, stopper: threading.Event):
        super().__init__()
        self.configs = configs
        self.stopper = stopper
        self.input_q = LifoQueue()
        self.output_q = LifoQueue() 
Example #20
Source File: test.py    From lnd_grpc with MIT License 5 votes vote down vote up
def test_subscribe_invoices(self, alice):
        """
        Invoice subscription run as a thread
        """
        gen_and_sync_lnd(alice.bitcoin, [alice])
        invoice_updates = queue.LifoQueue()

        def sub_invoices():
            try:
                for response in alice.subscribe_invoices():
                    invoice_updates.put(response)
            except grpc._channel._Rendezvous:
                pass

        alice_sub = threading.Thread(target=sub_invoices, daemon=True)
        alice_sub.start()
        time.sleep(1)
        while not alice_sub.is_alive():
            time.sleep(0.1)
        alice.add_invoice(value=SEND_AMT)
        alice.daemon.wait_for_log("AddIndex")
        time.sleep(0.1)

        assert any(
            isinstance(update, rpc_pb2.Invoice)
            for update in get_updates(invoice_updates)
        ) 
Example #21
Source File: test_queue.py    From ironpython3 with Apache License 2.0 4 votes vote down vote up
def simple_queue_test(self, q):
        if q.qsize():
            raise RuntimeError("Call this function with an empty queue")
        self.assertTrue(q.empty())
        self.assertFalse(q.full())
        # I guess we better check things actually queue correctly a little :)
        q.put(111)
        q.put(333)
        q.put(222)
        target_order = dict(Queue = [111, 333, 222],
                            LifoQueue = [222, 333, 111],
                            PriorityQueue = [111, 222, 333])
        actual_order = [q.get(), q.get(), q.get()]
        self.assertEqual(actual_order, target_order[q.__class__.__name__],
                         "Didn't seem to queue the correct data!")
        for i in range(QUEUE_SIZE-1):
            q.put(i)
            self.assertTrue(q.qsize(), "Queue should not be empty")
        self.assertTrue(not qfull(q), "Queue should not be full")
        last = 2 * QUEUE_SIZE
        full = 3 * 2 * QUEUE_SIZE
        q.put(last)
        self.assertTrue(qfull(q), "Queue should be full")
        self.assertFalse(q.empty())
        self.assertTrue(q.full())
        try:
            q.put(full, block=0)
            self.fail("Didn't appear to block with a full queue")
        except queue.Full:
            pass
        try:
            q.put(full, timeout=0.01)
            self.fail("Didn't appear to time-out with a full queue")
        except queue.Full:
            pass
        # Test a blocking put
        self.do_blocking_test(q.put, (full,), q.get, ())
        self.do_blocking_test(q.put, (full, True, 10), q.get, ())
        # Empty it
        for i in range(QUEUE_SIZE):
            q.get()
        self.assertTrue(not q.qsize(), "Queue should be empty")
        try:
            q.get(block=0)
            self.fail("Didn't appear to block with an empty queue")
        except queue.Empty:
            pass
        try:
            q.get(timeout=0.01)
            self.fail("Didn't appear to time-out with an empty queue")
        except queue.Empty:
            pass
        # Test a blocking get
        self.do_blocking_test(q.get, (), q.put, ('empty',))
        self.do_blocking_test(q.get, (True, 10), q.put, ('empty',)) 
Example #22
Source File: test_queue.py    From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 4 votes vote down vote up
def simple_queue_test(self, q):
        if q.qsize():
            raise RuntimeError("Call this function with an empty queue")
        self.assertTrue(q.empty())
        self.assertFalse(q.full())
        # I guess we better check things actually queue correctly a little :)
        q.put(111)
        q.put(333)
        q.put(222)
        target_order = dict(Queue = [111, 333, 222],
                            LifoQueue = [222, 333, 111],
                            PriorityQueue = [111, 222, 333])
        actual_order = [q.get(), q.get(), q.get()]
        self.assertEqual(actual_order, target_order[q.__class__.__name__],
                         "Didn't seem to queue the correct data!")
        for i in range(QUEUE_SIZE-1):
            q.put(i)
            self.assertTrue(q.qsize(), "Queue should not be empty")
        self.assertTrue(not qfull(q), "Queue should not be full")
        last = 2 * QUEUE_SIZE
        full = 3 * 2 * QUEUE_SIZE
        q.put(last)
        self.assertTrue(qfull(q), "Queue should be full")
        self.assertFalse(q.empty())
        self.assertTrue(q.full())
        try:
            q.put(full, block=0)
            self.fail("Didn't appear to block with a full queue")
        except queue.Full:
            pass
        try:
            q.put(full, timeout=0.01)
            self.fail("Didn't appear to time-out with a full queue")
        except queue.Full:
            pass
        # Test a blocking put
        self.do_blocking_test(q.put, (full,), q.get, ())
        self.do_blocking_test(q.put, (full, True, 10), q.get, ())
        # Empty it
        for i in range(QUEUE_SIZE):
            q.get()
        self.assertTrue(not q.qsize(), "Queue should be empty")
        try:
            q.get(block=0)
            self.fail("Didn't appear to block with an empty queue")
        except queue.Empty:
            pass
        try:
            q.get(timeout=0.01)
            self.fail("Didn't appear to time-out with an empty queue")
        except queue.Empty:
            pass
        # Test a blocking get
        self.do_blocking_test(q.get, (), q.put, ('empty',))
        self.do_blocking_test(q.get, (True, 10), q.put, ('empty',)) 
Example #23
Source File: brutedns.py    From subdomain3 with MIT License 4 votes vote down vote up
def __init__(self, args):
        self.target_domain = args.domain
        self.cname_flag = args.cname
        if not (self.target_domain):
            print('usage: brutedns.py -h')
            sys.exit(1)

        self.check_env()
        self.level = args.level
        self.sub_dict = args.sub_file
        self.speed = args.speed
        self.default_dns = True if args.default_dns is "y" else False
        self.next_sub_dict = args.next_sub_file
        self.other_result = args.other_file

        self.timeout = 10
        self.resolver = dns.resolver.Resolver(configure=self.default_dns)
        self.resolver.lifetime = self.timeout
        self.resolver.timeout = self.timeout

        self.found_count = 0
        self.next_found_count = 0
        self.cmdline = ""
        self.queues = LifoQueue()
        self.queue_sub = Queue()
        self.cdn_set = set()
        self.cname_set = set()
        self.white_filter_subdomain = set()
        self.cname_block_dict = dict()
        self.ip_block_dict = dict()
        self.ip_all_dict = dict()
        self.ip_flag_dict = dict()
        self.active_ip_dict = dict()
        self.ip_count_dict = dict()
        self.black_ip = set()

        self.set_next_sub = self.load_next_sub_dict()
        self.set_cdn = self.load_cdn()

        self.load_sub_dict_to_queue()
        self.extract_next_sub_log()

        self.segment_num = self.judge_speed(self.speed)

        if not self.default_dns:
            self.nameservers = self.load_nameservers()
            self.check_nameservers() 
Example #24
Source File: test_queue.py    From Fluid-Designer with GNU General Public License v3.0 4 votes vote down vote up
def simple_queue_test(self, q):
        if q.qsize():
            raise RuntimeError("Call this function with an empty queue")
        self.assertTrue(q.empty())
        self.assertFalse(q.full())
        # I guess we better check things actually queue correctly a little :)
        q.put(111)
        q.put(333)
        q.put(222)
        target_order = dict(Queue = [111, 333, 222],
                            LifoQueue = [222, 333, 111],
                            PriorityQueue = [111, 222, 333])
        actual_order = [q.get(), q.get(), q.get()]
        self.assertEqual(actual_order, target_order[q.__class__.__name__],
                         "Didn't seem to queue the correct data!")
        for i in range(QUEUE_SIZE-1):
            q.put(i)
            self.assertTrue(q.qsize(), "Queue should not be empty")
        self.assertTrue(not qfull(q), "Queue should not be full")
        last = 2 * QUEUE_SIZE
        full = 3 * 2 * QUEUE_SIZE
        q.put(last)
        self.assertTrue(qfull(q), "Queue should be full")
        self.assertFalse(q.empty())
        self.assertTrue(q.full())
        try:
            q.put(full, block=0)
            self.fail("Didn't appear to block with a full queue")
        except queue.Full:
            pass
        try:
            q.put(full, timeout=0.01)
            self.fail("Didn't appear to time-out with a full queue")
        except queue.Full:
            pass
        # Test a blocking put
        self.do_blocking_test(q.put, (full,), q.get, ())
        self.do_blocking_test(q.put, (full, True, 10), q.get, ())
        # Empty it
        for i in range(QUEUE_SIZE):
            q.get()
        self.assertTrue(not q.qsize(), "Queue should be empty")
        try:
            q.get(block=0)
            self.fail("Didn't appear to block with an empty queue")
        except queue.Empty:
            pass
        try:
            q.get(timeout=0.01)
            self.fail("Didn't appear to time-out with an empty queue")
        except queue.Empty:
            pass
        # Test a blocking get
        self.do_blocking_test(q.get, (), q.put, ('empty',))
        self.do_blocking_test(q.get, (True, 10), q.put, ('empty',)) 
Example #25
Source File: _graph.py    From OpenFermion-ProjectQ with Apache License 2.0 4 votes vote down vote up
def shortest_path(self, node_id1, node_id2):
        """Find the shortest path between node1 and node2 on the graph

        Args:
            node_id1(int): Index of first node
            node_id2(int): Index of second node

        Returns(list): List of nodes from node_id1 to node_id2 that constitute
        the shortest possible path in the graph between those two nodes.
        """
        if node_id1 >= self.node_count() or node_id2 >= self.node_count():
            raise IndexError("Node ID out of range for graph")

        # Treat special case of equal inputs
        if node_id1 == node_id2:
            return [node_id1]

        # Initialize two arrays for backtracking the shortest path found
        previous = [None] * self.node_count()  # Tracks the moves
        distances = [None] * self.node_count()  # Records distance to nodes
        distances[node_id1] = 0

        node_queue = queue.LifoQueue()
        node_queue.put(node_id1)

        while not node_queue.empty():
            next_id = node_queue.get()
            if next_id == node_id2:
                break  # Success
            new_distance = distances[next_id] + 1
            # On each iteration, check if going to a neighbor node was
            # shortest path to that node, if so, add that node to the queue
            # and record distance and path that is being taken.
            for uid in self.neighbors[next_id]:
                if ((distances[self.uid_to_index[uid]] is None) or
                        (distances[self.uid_to_index[uid]] > new_distance)):
                    distances[self.uid_to_index[uid]] = new_distance
                    previous[self.uid_to_index[uid]] = next_id
                    node_queue.put(self.uid_to_index[uid])

        # Backtrack to get path
        if previous[node_id2] is None:
            raise IndexError("Unable to find target node, "
                             "possibly disconnected graph.")

        path = []
        next = node_id2
        while next is not None:
            path.append(next)
            next = previous[next]
        # Return reversed backtrack path to get in order from node 1 to 2
        return path[::-1] 
Example #26
Source File: test.py    From lnd_grpc with MIT License 4 votes vote down vote up
def test_all_invoice(self, bitcoind, bob, carol):
        bob, carol = setup_nodes(bitcoind, [bob, carol])
        _hash, preimage = random_32_byte_hash()
        invoice_queue = queue.LifoQueue()
        invoice = carol.add_hold_invoice(
            memo="pytest hold invoice", hash=_hash, value=SEND_AMT
        )
        decoded_invoice = carol.decode_pay_req(pay_req=invoice.payment_request)
        assert isinstance(invoice, invoices_pb2.AddHoldInvoiceResp)

        # thread functions
        def inv_sub_worker(_hash):
            try:
                for _response in carol.subscribe_single_invoice(_hash):
                    invoice_queue.put(_response)
            except grpc._channel._Rendezvous:
                pass

        def pay_hold_inv_worker(payment_request):
            try:
                bob.pay_invoice(payment_request=payment_request)
            except grpc._channel._Rendezvous:
                pass

        def settle_inv_worker(_preimage):
            try:
                carol.settle_invoice(preimage=_preimage)
            except grpc._channel._Rendezvous:
                pass

        # setup the threads
        inv_sub = threading.Thread(
            target=inv_sub_worker, name="inv_sub", args=[_hash], daemon=True
        )
        pay_inv = threading.Thread(
            target=pay_hold_inv_worker, args=[invoice.payment_request]
        )
        settle_inv = threading.Thread(target=settle_inv_worker, args=[preimage])

        # start the threads
        inv_sub.start()
        # wait for subscription to start
        while not inv_sub.is_alive():
            time.sleep(0.1)
        pay_inv.start()
        time.sleep(2)
        # carol.daemon.wait_for_log(regex=f'Invoice({decoded_invoice.payment_hash}): accepted,')
        settle_inv.start()
        while settle_inv.is_alive():
            time.sleep(0.1)
        inv_sub.join(timeout=1)

        assert any(invoice.settled is True for invoice in get_updates(invoice_queue))