Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/allure_commons/mapping.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/allure_commons/mapping.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,119 @@ +from itertools import chain, islice +import attr +import re +from allure_commons.types import Severity, LabelType, LinkType +from allure_commons.types import ALLURE_UNIQUE_LABELS +from allure_commons.model2 import Label, Link + + +TAG_PREFIX = "allure" + +semi_sep = re.compile(r"allure[\.\w]+:") +eq_sep = re.compile(r"allure[\.\w]+=") + + +def allure_tag_sep(tag): + if semi_sep.search(tag): + return ":" + if eq_sep.search(tag): + return "=" + + +def __is(kind, t): + return kind in [v for k, v in t.__dict__.items() if not k.startswith('__')] + + +def parse_tag(tag, issue_pattern=None, link_pattern=None): + """ + >>> parse_tag("blocker") + Label(name='severity', value='blocker') + + >>> parse_tag("allure.issue:http://example.com/BUG-42") + Link(type='issue', url='http://example.com/BUG-42', name='http://example.com/BUG-42') + + >>> parse_tag("allure.link.home:http://qameta.io") + Link(type='link', url='http://qameta.io', name='home') + + >>> parse_tag("allure.suite:mapping") + Label(name='suite', value='mapping') + + >>> parse_tag("allure.suite:mapping") + Label(name='suite', value='mapping') + + >>> parse_tag("allure.label.owner:me") + Label(name='owner', value='me') + + >>> parse_tag("foo.label:1") + Label(name='tag', value='foo.label:1') + + >>> parse_tag("allure.foo:1") + Label(name='tag', value='allure.foo:1') + """ + sep = allure_tag_sep(tag) + schema, value = islice(chain(tag.split(sep, 1), [None]), 2) + prefix, kind, name = islice(chain(schema.split('.'), [None], [None]), 3) + + if tag in [severity for severity in Severity]: + return Label(name=LabelType.SEVERITY, value=tag) + + if prefix == TAG_PREFIX and value is not None: + + if __is(kind, LinkType): + if issue_pattern and kind == "issue" and not value.startswith("http"): + value = issue_pattern.format(value) + if link_pattern and kind == "link" and not value.startswith("http"): + value = link_pattern.format(value) + return Link(type=kind, name=name or value, url=value) + + if __is(kind, LabelType): + return Label(name=kind, value=value) + + if kind == "id": + return Label(name=LabelType.ID, value=value) + + if kind == "label" and name is not None: + return Label(name=name, value=value) + + return Label(name=LabelType.TAG, value=tag) + + +def labels_set(labels): + """ + >>> labels_set([Label(name=LabelType.SEVERITY, value=Severity.NORMAL), + ... Label(name=LabelType.SEVERITY, value=Severity.BLOCKER) + ... ]) + [Label(name='severity', value=<Severity.BLOCKER: 'blocker'>)] + + >>> labels_set([Label(name=LabelType.SEVERITY, value=Severity.NORMAL), + ... Label(name='severity', value='minor') + ... ]) + [Label(name='severity', value='minor')] + + >>> labels_set([Label(name=LabelType.EPIC, value="Epic"), + ... Label(name=LabelType.EPIC, value="Epic") + ... ]) + [Label(name='epic', value='Epic')] + + >>> labels_set([Label(name=LabelType.EPIC, value="Epic1"), + ... Label(name=LabelType.EPIC, value="Epic2") + ... ]) + [Label(name='epic', value='Epic1'), Label(name='epic', value='Epic2')] + """ + class Wl(object): + def __init__(self, label): + self.label = label + + def __repr__(self): + return "{name}{value}".format(**attr.asdict(self.label)) + + def __eq__(self, other): + if self.label.name in ALLURE_UNIQUE_LABELS: + return self.label.name == other.label.name + return repr(self) == repr(other) + + def __hash__(self): + if self.label.name in ALLURE_UNIQUE_LABELS: + return hash(self.label.name) + return hash(repr(self)) + + return sorted([wl.label for wl in set([Wl(label) for label in reversed(labels)])])