MCPcopy
hub / github.com/Gallopsled/pwntools / emit

Method emit

pwnlib/log.py:526–593  ·  view source on GitHub ↗

Emit a log record or create/update an animated progress logger depending on whether :data:`term.term_mode` is enabled.

(self, record)

Source from the content-addressed store, hash-verified

524 def stream(self, value):
525 pass
526 def emit(self, record):
527 """
528 Emit a log record or create/update an animated progress logger
529 depending on whether :data:`term.term_mode` is enabled.
530 """
531 # We have set the root 'pwnlib' logger to have a logLevel of 1,
532 # when logging has been enabled via install_default_handler.
533 #
534 # If the level is 1, we should only process the record if
535 # context.log_level is less than the record's log level.
536 #
537 # If the level is not 1, somebody else expressly set the log
538 # level somewhere on the tree, and we should use that value.
539 level = logging.getLogger(record.name).getEffectiveLevel()
540 if level == 1:
541 level = context.log_level
542 if level > record.levelno:
543 return
544
545 progress = getattr(record, 'pwnlib_progress', None)
546
547 # if the record originates from a `Progress` object and term handling
548 # is enabled we can have animated spinners! so check that
549 if progress is None or not term.term_mode:
550 super(Handler, self).emit(record)
551 return
552
553 # yay, spinners!
554
555 # since we want to be able to update the spinner we overwrite the
556 # message type so that the formatter doesn't output a prefix symbol
557 msgtype = record.pwnlib_msgtype
558 record.pwnlib_msgtype = 'animated'
559 msg = "%s\n" % self.format(record)
560
561 # we enrich the `Progress` object to keep track of the spinner
562 if not hasattr(progress, '_spinner_handle'):
563 spinner_handle = term.output('[x] ')
564 msg_handle = term.output(msg)
565 stop = threading.Event()
566 def spin():
567 '''Wheeeee!'''
568 state = 0
569 states = random.choice(spinners.spinners)
570 while True:
571 prefix = '[%s] ' % _spinner_style(states[state])
572 spinner_handle.update(prefix)
573 state = (state + 1) % len(states)
574 if stop.wait(0.1):
575 break
576 t = Thread(target = spin)
577 t.daemon = True
578 t.start()
579 progress._spinner_handle = spinner_handle
580 progress._msg_handle = msg_handle
581 progress._stop_event = stop
582 progress._spinner_thread = t
583 else:

Callers

nothing calls this directly

Calls 4

ThreadClass · 0.90
formatMethod · 0.80
setMethod · 0.80
updateMethod · 0.45

Tested by

no test coverage detected