Skip to content

Commit

Permalink
Merge pull request #77 from gregoil/make_logs_inherit
Browse files Browse the repository at this point in the history
Set loggers inheritance hierarchy
  • Loading branch information
gregoil committed Jul 19, 2018
2 parents 408268c + 4694fe5 commit 5065dee
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 8 deletions.
4 changes: 1 addition & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
language: python
python:
- '2.7'

install: pip install tox coveralls
script: tox
after_success: coveralls

deploy:
provider: pypi
on:
tags: true
distributions: sdist bdist_wheel
user: gregoil
password:
secure: FPeYFjy+BLKF8ntnmEv9uUEci1FwIvtllfzKcYc54rQ9bTB9DLBS870qMYdnHzxWr6jm/YeOZ1azo0ITPP5Va0IJGRan0RXh0c2g4sw6NhsX4x9uxmjHodo61nD9SnkNiVi44HpLtOsRbrEFSJgZa9dDSwvUppuQKRD7Aje0ECJqauQHOov55Rdka6F/W9FjHaAgkTXWucKqPursxzO7AUFApinlqpWLPx62Yinv8JjONz0o1eTpl37qjafdT2pJKPYzteLoXjCnMME10GY5jJdBmoAs/tBnBl2WcjLs9kHvjR/IK89feXpOzzpp2cW18JURtXOhHyO0+ySHiu0H/6jEn1AT/voTVUpgRJQF5AyDf8nJlkUTbKMgdpwvR4gVKkxZekLR+iudTB1ADmkg5q0AUBetcQz6ypgJ9KW9wwl+vcAruGVIghtRF8WXzIyKZEJl0h43MG064Bvxr+Iy2LX8u8iqraEGOW4zaLhJxKTkZI+ZFOAS2pec62u61kd0OMkhl30nSS+7y1wYflwAlu06XaaCalv0wBZkUf2H6Bwn1Hapf1zdjhWy9YwhrNot6NqAw/w9DoEDYD/3XAHqnp+sAIgr9K34owCmijX4nKIKry8RgX0xhnA9m4SYn+VEsrI7fGWeXBKA/1S+6LnYQLWgs2a4bv3pH/MG6pFOUzc=
secure: LwMeVGDt2AKlz/4W9c6Qde57QHV0zn1TA3WqR5s4lFJYJTDGawB/mmIBq7SC/DLl3zsgLg/ybMjxkex03mXdkxp+f9W5svxHCJ9xoPfk+LekaZqCuLUA9dQmQJ4p0ZH4u22cbNZv3h27uvP5aefT04coEhZ8yZxlw/H92LSpsMvm/xZAx/oVr8457Xfr6Qhqp+X/AGkqLlzqXeCEcPlsmTf4HEaOb6e84h9+ZJic6fTPZB7sOlZlhHt23XKQs2jp9paqGD5MVoYSYAzAsKV5CRhZ2cJdFe3vvDgMVCJ9IMJMDw1fdKnT7W9DBnuEA+d4635cZWJLwD8tjLHN2DApvpZ99Hj9il2yWyFWiVn3/Auz6+TfGgsoj3DMTcApJqbep0ooVS5qXqh2WBWgvIqLmi+NPcKkG3xLWRfzU+Xsk0VP83AiUo6RZzhhvKRTw7T7n2XZD/3m473I6rniiajc3cgG6M0O5iOCRGBJEB9CvBb3Z3I1Jw5qtnELyMGOHQvhSGU1Sy9JQBmhJ5xFYmrHIaNUtw072Xn5ertvMgCjSbZcAJg8LG1AJFHkd2m4oUBzOfX6cXjpZDtwAMB3g+HZrNinY8Vbky48gMrNDXZJTQC0F7ta3alqe/q4uP2mEbhSq7iCnvnNIy9SJ+nyERPI9KIzj7qzEoWAHh5cuGDNEi8=
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from setuptools import setup, find_packages

__version__ = "3.0.5"
__version__ = "3.1.0"

result_handlers = [
"db = rotest.core.result.handlers.db_handler:DBHandler",
Expand Down
16 changes: 16 additions & 0 deletions src/rotest/common/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,22 @@ def define_core_logger(is_colored):
return logger


def get_tree_path(test):
"""Get the identifiers tree path to the test.
The hierarchical identifiers path is used to create inheritance between
the loggers of the tests.
Args:
test (object): test instance to get the path for.
"""
path = str(test.identifier)
if test.parent is not None:
return "%s.%s" % (get_tree_path(test.parent), path)

return path


def get_test_logger(logger_basename, log_dir):
"""Define test_logger using define_logger method.
Expand Down
12 changes: 12 additions & 0 deletions src/rotest/core/abstract_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,16 @@ def __init__(self, indexer=count(), methodName='runTest', save_state=True,
if parent is not None:
parent.addTest(self)

def override_resource_loggers(self):
"""Replace the resources' logger with the test's logger."""
for resource in self.all_resources.itervalues():
resource.override_logger(self.logger)

def release_resource_loggers(self):
"""Revert logger replacement."""
for resource in self.all_resources.itervalues():
resource.release_logger(self.logger)

@classmethod
def get_resource_requests_fields(cls):
"""Yield tuples of all the resource request fields of this test.
Expand Down Expand Up @@ -197,6 +207,8 @@ def request_resources(self, resources_to_request, use_previous=False):

self.add_resources(requested_resources)
self.locked_resources.update(requested_resources)
for resource in requested_resources.itervalues():
resource.override_logger(self.logger)

if self.result is not None:
self.result.updateResources(self)
Expand Down
2 changes: 0 additions & 2 deletions src/rotest/core/case.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

from rotest.common import core_log
from rotest.common.utils import get_work_dir
from rotest.common.log import get_test_logger
from rotest.common.config import ROTEST_WORK_DIR
from rotest.core.abstract_test import AbstractTest, request
from rotest.core.models.case_data import TestOutcome, CaseData
Expand Down Expand Up @@ -76,7 +75,6 @@ def __init__(self, indexer=count(), methodName='runTest',
self.work_dir = get_work_dir(base_work_dir, name, self)
self.data = CaseData(name=name, run_data=run_data)

self.logger = get_test_logger(repr(self.data), self.work_dir)
core_log.debug("Initialized %r test-case successfully", name)

if self.resource_manager is None:
Expand Down
6 changes: 4 additions & 2 deletions src/rotest/core/result/result.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
import pkg_resources

from rotest.common import core_log
from rotest.common.log import get_test_logger
from rotest.core.models.case_data import TestOutcome
from rotest.common.log import get_test_logger, get_tree_path
from rotest.core.flow_component import AbstractFlowComponent


Expand Down Expand Up @@ -70,8 +70,9 @@ def startTest(self, test):
if not isinstance(test, AbstractFlowComponent) or test.is_main:
super(Result, self).startTest(test)

test.logger = get_test_logger(repr(test.data), test.work_dir)
test.logger = get_test_logger(get_tree_path(test), test.work_dir)
test.logger.info("Test %r has started running", test.data)
test.override_resource_loggers()
test.start()

for result_handler in self.result_handlers:
Expand Down Expand Up @@ -140,6 +141,7 @@ def stopTest(self, test):
test.logger.debug("Test %r has stopped running", test.data)

test.data.end()
test.release_resource_loggers()
for result_handler in self.result_handlers:
result_handler.stop_test(test)

Expand Down
22 changes: 22 additions & 0 deletions src/rotest/management/base_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ def __init__(self, data=None, **kwargs):
# that resource is used outside case.
self.kwargs = kwargs
self.logger = core_log
self._prev_loggers = []

if data is not None:
self.data = data
Expand Down Expand Up @@ -256,6 +257,27 @@ def validate(self):
"""
return False

def override_logger(self, new_logger):
"""Replace the resource's logger.
Args:
new_logger (logging.Logger): new logger to set.
"""
if self.logger is new_logger:
return

self._prev_loggers.insert(0, self.logger)
self.logger = new_logger

def release_logger(self, logger):
"""Revert logger replacement.
Args:
logger (logging.Logger): logger to release.
"""
if self.logger is logger:
self.logger = self._prev_loggers.pop(0)

def enable_debug(self):
"""Wrap the resource methods with debugger."""
debug(self.connect, ignore_exceptions=[KeyboardInterrupt, BdbQuit])
Expand Down

0 comments on commit 5065dee

Please sign in to comment.