Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/allure_commons/lifecycle.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
| author | shellac |
|---|---|
| date | Mon, 22 Mar 2021 18:12:50 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:4f3585e2f14b |
|---|---|
| 1 from collections import OrderedDict | |
| 2 from contextlib import contextmanager | |
| 3 from allure_commons._core import plugin_manager | |
| 4 from allure_commons.model2 import TestResultContainer | |
| 5 from allure_commons.model2 import TestResult | |
| 6 from allure_commons.model2 import Attachment, ATTACHMENT_PATTERN | |
| 7 from allure_commons.model2 import TestStepResult | |
| 8 from allure_commons.model2 import ExecutableItem | |
| 9 from allure_commons.model2 import TestBeforeResult | |
| 10 from allure_commons.model2 import TestAfterResult | |
| 11 from allure_commons.utils import uuid4 | |
| 12 from allure_commons.utils import now | |
| 13 from allure_commons.types import AttachmentType | |
| 14 | |
| 15 | |
| 16 class AllureLifecycle(object): | |
| 17 def __init__(self): | |
| 18 self._items = OrderedDict() | |
| 19 | |
| 20 def _get_item(self, uuid=None, item_type=None): | |
| 21 uuid = uuid or self._last_item_uuid(item_type=item_type) | |
| 22 return self._items.get(uuid) | |
| 23 | |
| 24 def _pop_item(self, uuid=None, item_type=None): | |
| 25 uuid = uuid or self._last_item_uuid(item_type=item_type) | |
| 26 return self._items.pop(uuid, None) | |
| 27 | |
| 28 def _last_item_uuid(self, item_type=None): | |
| 29 for uuid in reversed(self._items): | |
| 30 item = self._items.get(uuid) | |
| 31 if item_type is None: | |
| 32 return uuid | |
| 33 elif type(item) == item_type or isinstance(item, item_type): | |
| 34 return uuid | |
| 35 | |
| 36 @contextmanager | |
| 37 def schedule_test_case(self, uuid=None): | |
| 38 test_result = TestResult() | |
| 39 test_result.uuid = uuid or uuid4() | |
| 40 self._items[test_result.uuid] = test_result | |
| 41 yield test_result | |
| 42 | |
| 43 @contextmanager | |
| 44 def update_test_case(self, uuid=None): | |
| 45 yield self._get_item(uuid=uuid, item_type=TestResult) | |
| 46 | |
| 47 def write_test_case(self, uuid=None): | |
| 48 test_result = self._pop_item(uuid=uuid, item_type=TestResult) | |
| 49 if test_result: | |
| 50 plugin_manager.hook.report_result(result=test_result) | |
| 51 | |
| 52 @contextmanager | |
| 53 def start_step(self, parent_uuid=None, uuid=None): | |
| 54 parent = self._get_item(uuid=parent_uuid, item_type=ExecutableItem) | |
| 55 step = TestStepResult() | |
| 56 step.start = now() | |
| 57 parent.steps.append(step) | |
| 58 self._items[uuid or uuid4()] = step | |
| 59 yield step | |
| 60 | |
| 61 @contextmanager | |
| 62 def update_step(self, uuid=None): | |
| 63 yield self._get_item(uuid=uuid, item_type=TestStepResult) | |
| 64 | |
| 65 def stop_step(self, uuid=None): | |
| 66 step = self._pop_item(uuid=uuid, item_type=TestStepResult) | |
| 67 if step and not step.stop: | |
| 68 step.stop = now() | |
| 69 | |
| 70 @contextmanager | |
| 71 def start_container(self, uuid=None): | |
| 72 container = TestResultContainer(uuid=uuid or uuid4()) | |
| 73 self._items[container.uuid] = container | |
| 74 yield container | |
| 75 | |
| 76 def containers(self): | |
| 77 for item in self._items.values(): | |
| 78 if type(item) == TestResultContainer: | |
| 79 yield item | |
| 80 | |
| 81 @contextmanager | |
| 82 def update_container(self, uuid=None): | |
| 83 yield self._get_item(uuid=uuid, item_type=TestResultContainer) | |
| 84 | |
| 85 def write_container(self, uuid=None): | |
| 86 container = self._pop_item(uuid=uuid, item_type=TestResultContainer) | |
| 87 if container and (container.befores or container.afters): | |
| 88 plugin_manager.hook.report_container(container=container) | |
| 89 | |
| 90 @contextmanager | |
| 91 def start_before_fixture(self, parent_uuid=None, uuid=None): | |
| 92 fixture = TestBeforeResult() | |
| 93 parent = self._get_item(uuid=parent_uuid, item_type=TestResultContainer) | |
| 94 if parent: | |
| 95 parent.befores.append(fixture) | |
| 96 self._items[uuid or uuid4()] = fixture | |
| 97 yield fixture | |
| 98 | |
| 99 @contextmanager | |
| 100 def update_before_fixture(self, uuid=None): | |
| 101 yield self._get_item(uuid=uuid, item_type=TestBeforeResult) | |
| 102 | |
| 103 def stop_before_fixture(self, uuid=None): | |
| 104 fixture = self._pop_item(uuid=uuid, item_type=TestBeforeResult) | |
| 105 if fixture and not fixture.stop: | |
| 106 fixture.stop = now() | |
| 107 | |
| 108 @contextmanager | |
| 109 def start_after_fixture(self, parent_uuid=None, uuid=None): | |
| 110 fixture = TestAfterResult() | |
| 111 parent = self._get_item(uuid=parent_uuid, item_type=TestResultContainer) | |
| 112 if parent: | |
| 113 parent.afters.append(fixture) | |
| 114 self._items[uuid or uuid4()] = fixture | |
| 115 yield fixture | |
| 116 | |
| 117 @contextmanager | |
| 118 def update_after_fixture(self, uuid=None): | |
| 119 yield self._get_item(uuid=uuid, item_type=TestAfterResult) | |
| 120 | |
| 121 def stop_after_fixture(self, uuid=None): | |
| 122 fixture = self._pop_item(uuid=uuid, item_type=TestAfterResult) | |
| 123 if fixture and not fixture.stop: | |
| 124 fixture.stop = now() | |
| 125 | |
| 126 def _attach(self, uuid, name=None, attachment_type=None, extension=None): | |
| 127 mime_type = attachment_type | |
| 128 extension = extension if extension else 'attach' | |
| 129 | |
| 130 if type(attachment_type) is AttachmentType: | |
| 131 extension = attachment_type.extension | |
| 132 mime_type = attachment_type.mime_type | |
| 133 | |
| 134 file_name = ATTACHMENT_PATTERN.format(prefix=uuid, ext=extension) | |
| 135 attachment = Attachment(source=file_name, name=name, type=mime_type) | |
| 136 uuid = self._last_item_uuid(item_type=ExecutableItem) | |
| 137 self._items[uuid].attachments.append(attachment) | |
| 138 | |
| 139 return file_name | |
| 140 | |
| 141 def attach_file(self, uuid, source, name=None, attachment_type=None, extension=None): | |
| 142 file_name = self._attach(uuid, name=name, attachment_type=attachment_type, extension=extension) | |
| 143 plugin_manager.hook.report_attached_file(source=source, file_name=file_name) | |
| 144 | |
| 145 def attach_data(self, uuid, body, name=None, attachment_type=None, extension=None): | |
| 146 file_name = self._attach(uuid, name=name, attachment_type=attachment_type, extension=extension) | |
| 147 plugin_manager.hook.report_attached_data(body=body, file_name=file_name) |
