Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
26fe4b70
Commit
26fe4b70
authored
Apr 26, 2011
by
Vinay Sajip
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test_logging coverage improvements.
parent
45456a09
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
136 additions
and
33 deletions
+136
-33
Lib/logging/__init__.py
Lib/logging/__init__.py
+28
-28
Lib/test/test_logging.py
Lib/test/test_logging.py
+108
-5
No files found.
Lib/logging/__init__.py
View file @
26fe4b70
...
...
@@ -37,13 +37,13 @@ __all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR',
try
:
import
codecs
except
ImportError
:
except
ImportError
:
#pragma: no cover
codecs
=
None
try
:
import
_thread
as
thread
import
threading
except
ImportError
:
except
ImportError
:
#pragma: no cover
thread
=
None
__author__
=
"Vinay Sajip <vinay_sajip@red-dove.com>"
...
...
@@ -67,16 +67,16 @@ else:
_srcfile
=
__file__
_srcfile
=
os
.
path
.
normcase
(
_srcfile
)
# next bit filched from 1.5.2's inspect.py
def
currentframe
():
"""Return the frame object for the caller's stack frame."""
try
:
raise
Exception
except
:
return
sys
.
exc_info
()[
2
].
tb_frame
.
f_back
if
hasattr
(
sys
,
'_getframe'
):
currentframe
=
lambda
:
sys
.
_getframe
(
3
)
# done filching
if
hasattr
(
sys
,
'_getframe'
):
currentframe
=
lambda
:
sys
.
_getframe
(
3
)
else
:
#pragma: no cover
def
currentframe
():
"""Return the frame object for the caller's stack frame."""
try
:
raise
Exception
except
:
return
sys
.
exc_info
()[
2
].
tb_frame
.
f_back
# _srcfile is only used in conjunction with sys._getframe().
# To provide compatibility with older versions of Python, set _srcfile
...
...
@@ -94,22 +94,22 @@ _startTime = time.time()
#raiseExceptions is used to see if exceptions during handling should be
#propagated
#
raiseExceptions
=
1
raiseExceptions
=
True
#
# If you don't want threading information in the log, set this to zero
#
logThreads
=
1
logThreads
=
True
#
# If you don't want multiprocessing information in the log, set this to zero
#
logMultiprocessing
=
1
logMultiprocessing
=
True
#
# If you don't want process information in the log, set this to zero
#
logProcesses
=
1
logProcesses
=
True
#---------------------------------------------------------------------------
# Level related stuff
...
...
@@ -201,7 +201,7 @@ def _checkLevel(level):
#
if
thread
:
_lock
=
threading
.
RLock
()
else
:
else
:
#pragma: no cover
_lock
=
None
...
...
@@ -281,10 +281,10 @@ class LogRecord(object):
if
logThreads
and
thread
:
self
.
thread
=
thread
.
get_ident
()
self
.
threadName
=
threading
.
current_thread
().
name
else
:
else
:
# pragma: no cover
self
.
thread
=
None
self
.
threadName
=
None
if
not
logMultiprocessing
:
if
not
logMultiprocessing
:
# pragma: no cover
self
.
processName
=
None
else
:
self
.
processName
=
'MainProcess'
...
...
@@ -644,11 +644,11 @@ class Filter(object):
yes. If deemed appropriate, the record may be modified in-place.
"""
if
self
.
nlen
==
0
:
return
1
return
True
elif
self
.
name
==
record
.
name
:
return
1
return
True
elif
record
.
name
.
find
(
self
.
name
,
0
,
self
.
nlen
)
!=
0
:
return
0
return
False
return
(
record
.
name
[
self
.
nlen
]
==
"."
)
class
Filterer
(
object
):
...
...
@@ -775,7 +775,7 @@ class Handler(Filterer):
"""
if
thread
:
self
.
lock
=
threading
.
RLock
()
else
:
else
:
#pragma: no cover
self
.
lock
=
None
def
acquire
(
self
):
...
...
@@ -939,7 +939,7 @@ class StreamHandler(Handler):
stream
.
write
(
msg
)
stream
.
write
(
self
.
terminator
)
self
.
flush
()
except
(
KeyboardInterrupt
,
SystemExit
):
except
(
KeyboardInterrupt
,
SystemExit
):
#pragma: no cover
raise
except
:
self
.
handleError
(
record
)
...
...
@@ -948,13 +948,13 @@ class FileHandler(StreamHandler):
"""
A handler class which writes formatted logging records to disk files.
"""
def
__init__
(
self
,
filename
,
mode
=
'a'
,
encoding
=
None
,
delay
=
0
):
def
__init__
(
self
,
filename
,
mode
=
'a'
,
encoding
=
None
,
delay
=
False
):
"""
Open the specified file and use it as the stream for logging.
"""
#keep the absolute path, otherwise derived classes which use this
#may come a cropper when the current directory changes
if
codecs
is
None
:
if
codecs
is
None
:
#pragma: no cover
encoding
=
None
self
.
baseFilename
=
os
.
path
.
abspath
(
filename
)
self
.
mode
=
mode
...
...
@@ -1352,9 +1352,9 @@ class Logger(Filterer):
#IronPython can use logging.
try
:
fn
,
lno
,
func
,
sinfo
=
self
.
findCaller
(
stack_info
)
except
ValueError
:
except
ValueError
:
# pragma: no cover
fn
,
lno
,
func
=
"(unknown file)"
,
0
,
"(unknown function)"
else
:
else
:
# pragma: no cover
fn
,
lno
,
func
=
"(unknown file)"
,
0
,
"(unknown function)"
if
exc_info
:
if
not
isinstance
(
exc_info
,
tuple
):
...
...
@@ -1465,7 +1465,7 @@ class Logger(Filterer):
Is this logger enabled for level 'level'?
"""
if
self
.
manager
.
disable
>=
level
:
return
0
return
False
return
level
>=
self
.
getEffectiveLevel
()
def
getChild
(
self
,
suffix
):
...
...
Lib/test/test_logging.py
View file @
26fe4b70
...
...
@@ -494,6 +494,37 @@ class CustomLevelsAndFiltersTest(BaseTest):
handler.removeFilter(garr)
class HandlerTest(BaseTest):
def test_name(self):
h = logging.Handler()
h.name = 'generic'
self.assertEqual(h.name, 'generic')
h.name = 'anothergeneric'
self.assertEqual(h.name, 'anothergeneric')
self.assertRaises(NotImplementedError, h.emit, None)
def test_abc(self):
pass
class BadStream(object):
def write(self, data):
raise RuntimeError('deliberate mistake')
class TestStreamHandler(logging.StreamHandler):
def handleError(self, record):
self.error_record = record
class StreamHandlerTest(BaseTest):
def test_error_handling(self):
h = TestStreamHandler(BadStream())
r = logging.makeLogRecord({})
old_raise = logging.raiseExceptions
try:
h.handle(r)
self.assertIs(h.error_record, r)
finally:
logging.raiseExceptions = old_raise
class MemoryHandlerTest(BaseTest):
"""Tests for the MemoryHandler."""
...
...
@@ -2196,6 +2227,39 @@ class FormatterTest(unittest.TestCase):
f = logging.Formatter('asctime', style='$')
self.assertFalse(f.usesTime())
def test_invalid_style(self):
self.assertRaises(ValueError, logging.Formatter, None, None, 'x')
def test_time(self):
r = self.get_record()
r.created = 735375780.0 # 21 April 1993 08:03:00
r.msecs = 123
f = logging.Formatter('%(asctime)s %(message)s')
self.assertEqual(f.formatTime(r), '1993-04-21 08:03:00,123')
self.assertEqual(f.formatTime(r, '%Y:%d'), '1993:21')
class ExceptionTest(BaseTest):
def test_formatting(self):
r = self.root_logger
h = RecordingHandler()
r.addHandler(h)
try:
raise RuntimeError('deliberate mistake')
except:
logging.exception('failed', stack_info=True)
r.removeHandler(h)
h.close()
r = h.records[0]
self.assertTrue(r.exc_text.startswith('Traceback (most recent '
'call last):
\
n
'))
self.assertTrue(r.exc_text.endswith('
\
n
RuntimeError: '
'deliberate mistake'))
self.assertTrue(r.stack_info.startswith('Stack (most recent '
'call last):
\
n
'))
self.assertTrue(r.stack_info.endswith('logging.exception(
\
'
failed
\
'
, '
'stack_info=True)'))
class LastResortTest(BaseTest):
def test_last_resort(self):
# Test the last resort handler
...
...
@@ -2407,6 +2471,23 @@ class ModuleLevelMiscTest(BaseTest):
logging.setLoggerClass(logging.Logger)
self.assertEqual(logging.getLoggerClass(), logging.Logger)
class LogRecordTest(BaseTest):
def test_str_rep(self):
r = logging.makeLogRecord({})
s = str(r)
self.assertTrue(s.startswith('<LogRecord: '))
self.assertTrue(s.endswith('>'))
def test_dict_arg(self):
h = RecordingHandler()
r = logging.getLogger()
r.addHandler(h)
d = {'less' : 'more' }
logging.warning('less is %(less)s', d)
self.assertIs(h.records[0].args, d)
self.assertEqual(h.records[0].message, 'less is more')
r.removeHandler(h)
h.close()
class BasicConfigTest(unittest.TestCase):
...
...
@@ -2508,6 +2589,9 @@ class BasicConfigTest(unittest.TestCase):
logging.basicConfig(level=57)
self.assertEqual(logging.root.level, 57)
# Test that second call has no effect
logging.basicConfig(level=58)
self.assertEqual(logging.root.level, 57)
def test_incompatible(self):
assertRaises = self.assertRaises
...
...
@@ -2521,12 +2605,20 @@ class BasicConfigTest(unittest.TestCase):
handlers=handlers)
def test_handlers(self):
handlers = [logging.StreamHandler(), logging.StreamHandler(sys.stdout)]
handlers = [
logging.StreamHandler(),
logging.StreamHandler(sys.stdout),
logging.StreamHandler(),
]
f = logging.Formatter()
handlers[2].setFormatter(f)
logging.basicConfig(handlers=handlers)
self.assertIs(handlers[0], logging.root.handlers[0])
self.assertIs(handlers[1], logging.root.handlers[1])
self.assertIs(handlers[2], logging.root.handlers[2])
self.assertIsNotNone(handlers[0].formatter)
self.assertIsNotNone(handlers[1].formatter)
self.assertIs(handlers[2].formatter, f)
self.assertIs(handlers[0].formatter, handlers[1].formatter)
def _test_log(self, method, level=None):
...
...
@@ -2758,6 +2850,17 @@ class BaseFileTest(BaseTest):
self.rmfiles.append(filename)
class FileHandlerTest(BaseFileTest):
def test_delay(self):
os.unlink(self.fn)
fh = logging.FileHandler(self.fn, delay=True)
self.assertIsNone(fh.stream)
self.assertFalse(os.path.exists(self.fn))
fh.handle(logging.makeLogRecord({}))
self.assertIsNotNone(fh.stream)
self.assertTrue(os.path.exists(self.fn))
fh.close()
class RotatingFileHandlerTest(BaseFileTest):
def next_rec(self):
return logging.LogRecord('n', logging.DEBUG, 'p', 1,
...
...
@@ -2851,15 +2954,15 @@ for when, exp in (('S', 1),
@run_with_locale('LC_ALL', '')
def test_main():
run_unittest(BuiltinLevelsTest, BasicFilterTest,
CustomLevelsAndFiltersTest, MemoryHandlerTest,
CustomLevelsAndFiltersTest,
HandlerTest,
MemoryHandlerTest,
ConfigFileTest, SocketHandlerTest, MemoryTest,
EncodingTest, WarningsTest, ConfigDictTest, ManagerTest,
FormatterTest,
FormatterTest,
StreamHandlerTest,
LogRecordFactoryTest, ChildLoggerTest, QueueHandlerTest,
ShutdownTest, ModuleLevelMiscTest, BasicConfigTest,
LoggerAdapterTest, LoggerTest,
RotatingFileHandlerTest,
LastResortTest,
FileHandlerTest,
RotatingFileHandlerTest,
LastResortTest,
LogRecordTest, ExceptionTest,
TimedRotatingFileHandlerTest
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment