def long_poll_generator(box_events, uploaded_file, request): # pylint:disable=redefined-outer-name generator = box_events.generate_events_with_long_polling(stream_position=0) def long_poll(): for event in generator: long_poll_thread.events.append(event) long_poll_thread.event_ready.set() if long_poll_thread.should_stop_polling: return long_poll_thread.consumed_events.wait() long_poll_thread.consumed_events.clear() long_poll_thread = Thread(target=long_poll) long_poll_thread.should_stop_polling = False long_poll_thread.events = [] long_poll_thread.event_ready = Event() long_poll_thread.consumed_events = Event() long_poll_thread.start() def fin(): long_poll_thread.should_stop_polling = True uploaded_file.delete() long_poll_thread.event_ready.wait() generator.close() long_poll_thread.join() request.addfinalizer(fin) return long_poll_thread