Best Python code snippet using autotest_python
logging_manager.py
Source:logging_manager.py  
...29        manager = FdRedirectionLoggingManager()30    else:31        manager = LoggingManager()32    if manage_stdout_and_stderr:33        manager.manage_stdout()34        manager.manage_stderr()35    return manager36# implementation follows37logger = logging.getLogger()38def _current_handlers():39    return set(logger.handlers)40#ä¿å彿°çcode对象41_caller_code_to_skip_in_logging_stack = set()42def do_not_report_as_logging_caller(func):43    #è£
饰å¨ï¼è¿ä¸ªå½æ°ä¸è¿è¡log44    """Decorator to annotate functions we will tell logging not to log."""45    # These are not the droids you are looking for.46    # You may go about your business.47    _caller_code_to_skip_in_logging_stack.add(func.func_code)48    return func49# Copied from Python 2.4 logging/__init__.py Logger.findCaller and enhanced.50# The logging code remains the same and compatible with this monkey patching51# through at least Python version 2.6.2.52#è²ä¼¼æ²¡ä»ä¹æä¹ï¼loggingä¸çfindcallï¼æ¥æ¾è°ç¨æ ï¼è·åå½åçè¡å·å彿°åç53def _logging_manager_aware_logger__find_caller(unused):54    """55    Find the stack frame of the caller so that we can note the source56    file name, line number and function name.57    """58    f = sys._getframe(2).f_back59    rv = "(unknown file)", 0, "(unknown function)"60    while hasattr(f, "f_code"):61        co = f.f_code62        filename = os.path.normcase(co.co_filename)63        if filename == logging._srcfile:64            f = f.f_back65            continue66        # START additional code.67        #!!!妿æä»¬æ¾å°çcode对象ä¿åå¨ä¸logçstackéé¢ï¼é£ä¹è¿ä¸ªlogå°±ä¸report68        if co in _caller_code_to_skip_in_logging_stack:69            f = f.f_back70            continue71        # END additional code.72        rv = (filename, f.f_lineno, co.co_name)73        break74    return rv75if sys.version_info[:2] > (2, 7):76    warnings.warn('This module has not been reviewed for Python %s' %77                  sys.version)78# Monkey patch our way around logging's design...79# Monkey patch代表çå¨runtimeçæ¶åå¨æçæ¿æ¢æåæ¥æ¨¡åä¸çæ¹æ³ãç±»ã80#忥çfind_caller彿°81_original_logger__find_caller = logging.Logger.findCaller82#æ¿æ¢æautotestèªå·±çfind_callerï¼å¢å äºå¯ä»¥ä¸»å¨ä¸log codeçåè½83logging.Logger.findCaller = _logging_manager_aware_logger__find_caller84class LoggingFile(object):85    """86    File-like object that will receive messages pass them to the logging87    infrastructure in an appropriate way.88    """89    #åè£
èªå·±æ¯ä¸ä¸ªæä»¶ï¼ä½å®é
æ¯ä¸ä¸ªlogï¼ç®çæ¯å°ä¸ä¸ªå符串ï¼åè¡çè¾åºå°logä¸90    #妿æ¯ä¸ä¸ªå
嫿¢è¡çstringï¼ä¼åæå¤ä¸ªlogä¸ååºå»91    def __init__(self, prefix='', level=logging.DEBUG,92                 logger=logging.getLogger()):93        """94        :param prefix - The prefix for each line logged by this object.95        """96        self._prefix = prefix97        self._level = level98        self._buffer = []99        self._logger = logger100    @do_not_report_as_logging_caller101    def write(self, data):102        """"103        Writes data only if it constitutes a whole line. If it's not the case,104        store it in a buffer and wait until we have a complete line.105        :param data - Raw data (a string) that will be processed.106        """107        #ä¼ å
¥dataï¼ä¸ä¸ªå符串ï¼dataè¿è¡åè¡108        #第ä¸è¡ååä¸ä¸ªbufferç»å109        #æåä¸è¡ç»§ç»æ¾å¨bufferéï¼çå¾
åç»çlog110        # splitlines() discards a trailing blank line, so use split() instead111        data_lines = data.split('\n')112        if len(data_lines) > 1:113            self._buffer.append(data_lines[0])114            self._flush_buffer()115        for line in data_lines[1:-1]:116            self._log_line(line)117        if data_lines[-1]:118            self._buffer.append(data_lines[-1])119    @do_not_report_as_logging_caller120    def writelines(self, lines):121        """"122        Writes itertable of lines123        :param lines: An iterable of strings that will be processed.124        """125        for data in lines:126            self.write(data)127    @do_not_report_as_logging_caller128    def _log_line(self, line):129        """130        Passes lines of output to the logging module.131        """132        self._logger.log(self._level, self._prefix + line)133    @do_not_report_as_logging_caller134    def _flush_buffer(self):135        if self._buffer:136            self._log_line(''.join(self._buffer))137            self._buffer = []138    @do_not_report_as_logging_caller139    def flush(self):140        self._flush_buffer()141    def isatty(self):142        return False143class SortingLoggingFile(LoggingFile):144    """145    File-like object that will receive messages and pass them to the logging146    infrastructure. It decides where to pass each line by applying a regex147    to it and seeing which level it matched.148    """149    def __init__(self, prefix='', level_list=[('ERROR', logging.ERROR),150                                              ('WARN', logging.WARN), ('INFO', logging.INFO),151                                              ('DEBUG', logging.DEBUG)], logger=logging.getLogger()):152        super(SortingLoggingFile, self).__init__(prefix=prefix, logger=logger)153        #çæä¸ä¸ªæ°list[(re对象,40),(re对象ï¼30)]154        self._level_list = [(re.compile(x), y) for x, y in level_list]155    @do_not_report_as_logging_caller156    def _log_line(self, line):157        #妿lineä¸åå¨ä»¥ä¸4个级å«çreåæ®µï¼ålogging158        for pattern, level in self._level_list:159            if pattern.search(line):160                self._logger.log(level, self._prefix + line)161                break162        #å¦åæ·»å ä¸ä¸ªUNMATCHED_LOG_LEVEL163        else:164            self._logger.log(logging.ERROR, 'UNMATCHED_LOG_LEVEL: ' +165                             self._prefix + line)166class _StreamManager(object):167    """168    Redirects all output for some output stream (normally stdout or stderr) to169    the logging module by replacing the file objects with a new LoggingFile170    that calls logging.log().171    """172    #å°stdoutåstderrä¸çææå
容éå®åå°logä¸å»173    def __init__(self, stream, level, stream_setter):174        """175        :param stream: stream object to manage176        :param level: level at which data written to the stream will be logged177        :param stream_setter: function accepting a stream object that will178                replace the given stream in its original location.179        """180        self._stream = stream #éè¦manageçæµ181        self._level = level182        self._stream_setter = stream_setter #æ¹æ³ï¼æ¥åä¸ä¸ªæµå¯¹è±¡183        self._logging_stream = None184    def _replace_with_logger(self):185        #å°loggingæµæ¿æ¢æLoggingFile对象ï¼è°ç¨_stream_setter彿°186        self._logging_stream = LoggingFile(level=self._level)187        self._stream_setter(self._logging_stream)188    def _restore_stream(self):189        self._stream_setter(self._stream)190    def flush(self):191        self._logging_stream.flush()192    def start_logging(self):193        """Start directing the stream to the logging module."""194        self._replace_with_logger()195    def stop_logging(self):196        """Restore the stream to its original settings."""197        self._restore_stream()198    def on_push_context(self, context):199        """200        Called when the logging manager is about to push a new context onto the201        stack and has changed logging settings.  The StreamHandler can modify202        the context to be saved before returning.203        """204        pass205    def on_restore_context(self, context):206        """207        Called when the logging manager is restoring a previous context.208        """209        pass210class LoggingManager(object):211    """212    Manages a stack of logging configurations, allowing clients to conveniently213    add and remove logging destinations.  Also keeps a list of StreamManagers214    to easily direct streams into the logging module.215    """216    #管çä¸å loggingé
ç½®ï¼å
许clientsæ¹ä¾¿çå¢å loggingä½ç½®ï¼å¦å¤ä¿æä¸ä¸ªStreamMangerå表217    #ç¨äºstreams redirect218    STREAM_MANAGER_CLASS = _StreamManager219    logging_config_object = None220    def __init__(self):221        """222        This class should not ordinarily be constructed directly (other than in223        tests).  Use the module-global factory method get_logging_manager()224        instead.225        """226        #使ç¨å
¨å±å½æ°get_logging_managerï¼ä¸è¦å¤æ¬¡initè¿ä¸ªç±»227        if self.logging_config_object is None:228            raise RuntimeError('You must call configure_logging() before this')229        # _context_stack holds a stack of context dicts.  Each context dict230        # contains:231        # * old_handlers: list of registered logging Handlers232        # contexts may also be extended by _StreamHandlers233        self._context_stack = []234        self._streams = []235        self._started = False236    def manage_stream(self, stream, level, stream_setter):237        """238        Tells this manager to manage the given stream.  All data written to the239        stream will be directed to the logging module instead.  Must be called240        before start_logging().241        :param stream: stream to manage242        :param level: level to log data written to this stream243        :param stream_setter: function to set the stream to a new object244        """245        if self._started:246            raise RuntimeError('You must call this before start_logging()')247        self._streams.append(self.STREAM_MANAGER_CLASS(stream, level,248                                                       stream_setter))249    def _sys_stream_setter(self, stream_name):250        #!éè¦ï¼å°sys.stdoutåstderr设置为ä¸ä¸ªæä»¶å¯¹è±¡ï¼251        assert stream_name in ('stdout', 'stderr'), stream_name252        def set_stream(file_object):253            setattr(sys, stream_name, file_object)254        return set_stream255    def manage_stdout(self):256        self.manage_stream(sys.stdout, logging.INFO,257                           self._sys_stream_setter('stdout'))258    def manage_stderr(self):259        self.manage_stream(sys.stderr, self.logging_config_object.stderr_level,260                           self._sys_stream_setter('stderr'))261    def start_logging(self):262        """263        Begin capturing output to the logging module.264        """265        for stream_manager in self._streams:266            stream_manager.start_logging()267        self._started = True268    def stop_logging(self):269        """...ReaderManager.py
Source:ReaderManager.py  
1#!/usr/bin/env python2# -*- encoding: utf-8 -*-3import re4import sys5import time6import json7import socket8import datetime9import ProcReader.util as util_utils10from collections import OrderedDict11from DaemonClass import Daemon12from ProcReader.settings import (MANAGE_PIDFILE, MANAGE_STDIN,13                                 MANAGE_STDOUT, MANAGE_STDERR,14                                 MANAGE_WR_URL)15class ReaderManager(Daemon):16    _intvl = None17    _wr_url = None18    _readersters = OrderedDict()19    def __init__(self,20                 pidfile=MANAGE_PIDFILE,21                 stdin=MANAGE_STDIN,22                 stdout=MANAGE_STDOUT,23                 stderr=MANAGE_STDERR,24                 intvl=10,25                 wr_url=MANAGE_WR_URL):26        super(ReaderManager, self).__init__(pidfile=pidfile,27                                            stdin=stdin, stdout=stdout, stderr=stderr)28        self._wr_url = wr_url29        tmp_str = util_utils.rd_data('%s%s' % (self._wr_url, 'getintvl'))30        if tmp_str:31            self._intvl = int(tmp_str)32        else:33            self._intvl = intvl34        tmp_list = None35        tmp_str = util_utils.rd_data('%s%s' % (self._wr_url, 'getreadersters'))36        if tmp_str:37            tmp_list = eval(tmp_str)38            if type(tmp_list) == type(''):39                tmp_list = eval(tmp_list)40            for reader in tmp_list:41                p_name, cls = util_utils.load_class(reader)42                if p_name and cls:43                    self._readersters[p_name] = cls()44        else:45            self._readersters = OrderedDict()46    def set_intvl(self, intvl):47        if intvl > 1:48            self._intvl = intvl49            util_utils.wr_data('%s%s' % (self._wr_url, 'setintvl'), intvl)50            self.restart()51    def set_readersters(self, readersters):52        reader_list = eval(readersters)53        self._readersters = OrderedDict()54        for reader in reader_list:55            p_name, cls = util_utils.load_class(reader)56            if p_name and cls:57                self._readersters[p_name] = cls()58        util_utils.wr_data('%s%s' %59                           (self._wr_url, 'setreadersters'), readersters)60        self.restart()61    def _reader(self):62        reader_data = OrderedDict()63        if self._readersters:64            for readerster in self._readersters:65                reader_data[readerster] = {}66                reader_data[readerster]['timestamp'] = time.asctime(67                    time.localtime())68                reader_data[readerster]['data'] = self._readersters[readerster].get_data()69        return reader_data70    def run(self):71        cnt = 072        while True:73            wr_obj = {}74            try:75                wr_obj['data'] = self._reader()76                wr_obj['timestamp'] = time.asctime(time.localtime())77                wr_obj['hostname'] = socket.gethostname()78                wr_obj['ip_address'] = socket.gethostbyname(wr_obj['hostname'])79            except socket.gaierror as e:80                wr_obj['ip_address'] = ''81            finally:82                util_utils.wr_data('%s%s' % (self._wr_url, 'setdata'), wr_obj)83                time.sleep(self._intvl)84                cnt += 185if __name__ == '__main__':86    daemon = ReaderManager()87    if len(sys.argv) == 2:88        if sys.argv[1] == 'start':89            daemon.start()90        elif sys.argv[1] == 'stop':91            daemon.stop()92        elif sys.argv[1] == 'restart':93            daemon.restart()94        else:95            print('Unknown command')96            sys.exit(2)97    elif len(sys.argv) == 3:98        if sys.argv[1] == 'setintvl':99            if re.match(r'^-?\d+$', sys.argv[2]) or re.match(r'^-?(\.\d+|\d+(\.\d+)?)', sys.argv[2]):100                daemon.set_intvl(int(sys.argv[2]))101                print('Set interval: %s' % sys.argv[2])102        elif sys.argv[1] == 'setreader':103            reader_list = None104            try:105                reader_list = eval(sys.argv[2])106            except:107                print('%s is not a list.' % sys.argv[2])108            if reader_list:109                daemon.set_readersters(sys.argv[2])110    else:111        print('USAGE: %s start/stop/restart' % sys.argv[0])...settings.py
Source:settings.py  
1#!/usr/bin/env python2# -*- encoding: utf-8 -*-3BASE_RATE = 10244# cpu.py5PROC_CPU_INFO = '/proc/cpuinfo'6PROC_CPU_STAT = '/proc/stat'7# disk.py8PROC_DISK_STAT = '/proc/diskstats'9PROC_FILE_SYST = '/proc/filesystems'10DISK_UNIT_LIST = ('B', 'KB', 'MB', 'GB', 'TB', 'PB')11DISK_RATE_LIST = (12    pow(BASE_RATE, 0), pow(BASE_RATE, 1),13    pow(BASE_RATE, 2), pow(BASE_RATE, 3),14    pow(BASE_RATE, 4), pow(BASE_RATE, 5),15)16DISK_ETC_MTAB = '/etc/mtab'17# load.py18PROC_LOAD_STAT = '/proc/loadavg'19# mem.py20PROC_MEM_INFO = '/proc/meminfo'21MEM_UNIT_LIST = ('KB', 'MB', 'GB')22MEM_RATE_LIST = (23    pow(BASE_RATE, 0), pow(BASE_RATE, 1),24    pow(BASE_RATE, 2),25)26# net.py27PROC_NET_DEV = '/proc/net/dev'28# uptime.py29PROC_UPTIME_INFO = '/proc/uptime'30# daemon.py31DEV_STD_IN = '/dev/stdin'32DEV_STD_OUT = '/dev/stdout'33DEV_STD_ERR = '/dev/stderr'34# httpserver.py35READER_PATH = '/usr/local/procagent'36READERS_LIST = [37    'ProcReader.cpu.CPUUsageReader',38    'ProcReader.mem.MemInfoReader',39    'ProcReader.load.LoadStatReader',40    'ProcReader.disk.DiskUsageReader',41    'ProcReader.net.NetStatReader',42    'ProcReader.uptime.UptimeReader',43]44# readermanager.py45MANAGE_PIDFILE = '/tmp/readercls.pid'46MANAGE_STDIN = '/dev/null'47MANAGE_STDOUT = '/dev/null'48MANAGE_STDERR = '/dev/null'...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
