Skip to content

Commit b9a8689

Browse files
author
Milan Falešník
committed
Enable logging just exception types to reduce clutter in known cases
1 parent 7d7a4e6 commit b9a8689

2 files changed

Lines changed: 36 additions & 21 deletions

File tree

src/widgetastic/browser.py

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ def perform_click(self):
278278
"""Clicks the left mouse button at the current mouse position."""
279279
ActionChains(self.selenium).click().perform()
280280

281-
@logged(log_args=True, only_after=True, debug_only=True)
281+
@logged(log_args=True, only_after=True, debug_only=True, log_full_exception=False)
282282
def click(self, locator, *args, **kwargs):
283283
"""Clicks at a specific element using two separate events (mouse move, mouse click).
284284
@@ -299,7 +299,7 @@ def click(self, locator, *args, **kwargs):
299299
except (StaleElementReferenceException, UnexpectedAlertPresentException):
300300
pass
301301

302-
@logged(log_args=True, only_after=True, debug_only=True)
302+
@logged(log_args=True, only_after=True, debug_only=True, log_full_exception=False)
303303
def raw_click(self, locator, *args, **kwargs):
304304
"""Clicks at a specific element using the direct event.
305305
@@ -347,7 +347,7 @@ def is_displayed(self, locator, *args, **kwargs):
347347
# Just in case
348348
return False
349349

350-
@logged(log_args=True, only_after=True, debug_only=True)
350+
@logged(log_args=True, only_after=True, debug_only=True, log_full_exception=False)
351351
@repeat_once_on_exceptions(
352352
StaleElementReferenceException, MoveTargetOutOfBoundsException,
353353
check_safe=True)
@@ -392,7 +392,7 @@ def move_to_element(self, locator, *args, **kwargs):
392392
locator))
393393
return el
394394

395-
@logged(log_args=True, only_after=True, debug_only=True)
395+
@logged(log_args=True, only_after=True, debug_only=True, log_full_exception=False)
396396
def move_by_offset(self, x, y):
397397
"""Moves mouse pointer by given values."""
398398
ActionChains(self.selenium).move_by_offset(x, y).perform()
@@ -404,7 +404,8 @@ def execute_script(self, script, *args, **kwargs):
404404
self.logger.debug('execute_script(%r)', script)
405405
return self.selenium.execute_script(dedent(script), *args, **kwargs)
406406

407-
@logged(log_args=True, log_result=True, only_after=True, debug_only=True)
407+
@logged(
408+
log_args=True, log_result=True, only_after=True, debug_only=True, log_full_exception=False)
408409
def classes(self, locator, *args, **kwargs):
409410
"""Return a list of classes attached to the element.
410411
@@ -416,7 +417,8 @@ def classes(self, locator, *args, **kwargs):
416417
return set(self.execute_script(
417418
"return arguments[0].classList;", self.element(locator, *args, **kwargs), silent=True))
418419

419-
@logged(log_args=True, log_result=True, only_after=True, debug_only=True)
420+
@logged(
421+
log_args=True, log_result=True, only_after=True, debug_only=True, log_full_exception=False)
420422
def tag(self, *args, **kwargs):
421423
"""Returns the tag name of the element represented by the locator passed.
422424
@@ -427,7 +429,8 @@ def tag(self, *args, **kwargs):
427429
"""
428430
return self.element(*args, **kwargs).tag_name
429431

430-
@logged(log_args=True, log_result=True, only_after=True, debug_only=True)
432+
@logged(
433+
log_args=True, log_result=True, only_after=True, debug_only=True, log_full_exception=False)
431434
def text(self, locator, *args, **kwargs):
432435
"""Returns the text inside the element represented by the locator passed.
433436
@@ -455,24 +458,26 @@ def text(self, locator, *args, **kwargs):
455458

456459
return normalize_space(text)
457460

458-
@logged(log_args=True, log_result=True, only_after=True, debug_only=True)
461+
@logged(
462+
log_args=True, log_result=True, only_after=True, debug_only=True, log_full_exception=False)
459463
def get_attribute(self, attr, locator, *args, **kwargs):
460464
"""Get attribute value from an element."""
461465
return self.element(locator, *args, **kwargs).get_attribute(attr)
462466

463-
@logged(log_args=True, only_after=True, debug_only=True)
467+
@logged(log_args=True, only_after=True, debug_only=True, log_full_exception=False)
464468
def set_attribute(self, attr, value, locator, *args, **kwargs):
465469
return self.execute_script(
466470
"arguments[0].setAttribute(arguments[1], arguments[2]);",
467471
self.element(locator, *args, **kwargs), attr, value)
468472

469-
@logged(log_args=True, log_result=True, only_after=True, debug_only=True)
473+
@logged(
474+
log_args=True, log_result=True, only_after=True, debug_only=True, log_full_exception=False)
470475
def size_of(self, locator, *args, **kwargs):
471476
"""Returns element's size as a tuple of width/height."""
472477
size = self.element(locator, *args, **kwargs).size
473478
return Size(size['width'], size['height'])
474479

475-
@logged(log_args=True, only_after=True, debug_only=True)
480+
@logged(log_args=True, only_after=True, debug_only=True, log_full_exception=False)
476481
def clear(self, locator, *args, **kwargs):
477482
"""Clears a text input with given locator."""
478483
el = self.element(locator, *args, **kwargs)
@@ -482,11 +487,12 @@ def clear(self, locator, *args, **kwargs):
482487
self.plugin.ensure_page_safe()
483488
return result
484489

485-
@logged(log_args=True, log_result=True, only_after=True, debug_only=True)
490+
@logged(
491+
log_args=True, log_result=True, only_after=True, debug_only=True, log_full_exception=False)
486492
def is_selected(self, locator, *args, **kwargs):
487493
return self.element(locator, *args, **kwargs).is_selected()
488494

489-
@logged(log_args=True, debug_only=True)
495+
@logged(log_args=True, debug_only=True, log_full_exception=False)
490496
def send_keys(self, text, locator, *args, **kwargs):
491497
"""Sends keys to the element. Detects the file inputs automatically.
492498
@@ -539,7 +545,8 @@ def get_alert(self):
539545
return self.selenium.switch_to_alert()
540546

541547
@property
542-
@logged(log_args=True, log_result=True, only_after=True, debug_only=True)
548+
@logged(
549+
log_args=True, log_result=True, only_after=True, debug_only=True, log_full_exception=False)
543550
def alert_present(self):
544551
"""Checks whether there is any alert present.
545552
@@ -554,7 +561,7 @@ def alert_present(self):
554561
else:
555562
return True
556563

557-
@logged(log_args=True)
564+
@logged(log_args=True, log_full_exception=False)
558565
def dismiss_any_alerts(self):
559566
"""Loops until there are no further alerts present to dismiss.
560567
@@ -568,7 +575,7 @@ def dismiss_any_alerts(self):
568575
except NoAlertPresentException: # Just in case. alert_present should be reliable
569576
pass
570577

571-
@logged(log_args=True, log_result=True)
578+
@logged(log_args=True, log_result=True, log_full_exception=False)
572579
def handle_alert(self, cancel=False, wait=30.0, squash=False, prompt=None, check_present=False):
573580
"""Handles an alert popup.
574581

src/widgetastic/log.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ def create_widget_logger(widget_path, logger=None):
5050
{'widget_path': widget_path})
5151

5252

53-
def logged(log_args=False, log_result=False, only_after=False, debug_only=False):
53+
def logged(
54+
log_args=False, log_result=False, only_after=False, debug_only=False,
55+
log_full_exception=True):
5456
"""Decorator that logs entry and exit to a method and also times the execution.
5557
5658
It assumes that the object where you decorate the methods on has a ``.logger`` attribute.
@@ -65,6 +67,7 @@ def logged(log_args=False, log_result=False, only_after=False, debug_only=False)
6567
log_result: Whether to log the result value returned from the method.
6668
only_after: Whether to log only after the method finished.
6769
debug_only: Use only debug log level at max.
70+
log_full_exception: Whether to log the full exceptions.
6871
"""
6972
def g(f):
7073
@wraps(f)
@@ -85,11 +88,16 @@ def wrapped(self, *args, **kwargs):
8588
'%s not read on widget\'s request (elapsed %.0f ms)',
8689
signature, elapsed_time)
8790
raise
88-
except Exception:
91+
except Exception as e:
8992
elapsed_time = (time.time() - start_time) * 1000.0
90-
self.logger.exception(
91-
'An exception happened during %s call (elapsed %.0f ms)',
92-
signature, elapsed_time)
93+
if log_full_exception:
94+
self.logger.exception(
95+
'An exception happened during %s call (elapsed %.0f ms)',
96+
signature, elapsed_time)
97+
else:
98+
self.logger.error(
99+
'An exception %s happened during %s call (elapsed %.0f ms)',
100+
str(e), signature, elapsed_time)
93101
raise
94102
else:
95103
elapsed_time = (time.time() - start_time) * 1000.0

0 commit comments

Comments
 (0)