16 from robot.utils import is_string, normalize, NormalizedDict, Matcher
20 __slots__ = [
'_tags',
'_reserved']
40 normalized = NormalizedDict([(str(t),
None)
for t
in tags], ignore=
'_')
43 if 'NONE' in normalized:
44 del normalized[
'NONE']
45 reserved = tuple(tag.split(
':')[1]
for tag
in normalized._keys
46 if tag[:6] ==
'robot:')
47 return tuple(normalized), reserved
54 self.
__init____init__([t
for t
in self
if not tags.match(t)])
60 return self.
matchmatch(tags)
63 return len(self._tags)
66 return iter(self._tags)
69 return '[%s]' %
', '.join(self)
72 return repr(list(self))
75 if not isinstance(other, Tags):
77 self_normalized = [
normalize(tag, ignore=
'_')
for tag
in self]
78 other_normalized = [
normalize(tag, ignore=
'_')
for tag
in other]
79 return sorted(self_normalized) == sorted(other_normalized)
82 item = self._tags[index]
83 return item
if not isinstance(index, slice)
else Tags(item)
86 return Tags(tuple(self) + tuple(
Tags(other)))
97 tags = tags
if isinstance(tags, Tags)
else Tags(tags)
98 return any(p.match(tags)
for p
in self.
_patterns_patterns)
101 return self.
matchmatch(tag)
113 return '[%s]' %
', '.join(str(pattern)
for pattern
in self)
117 pattern = pattern.replace(
' ',
'')
122 if 'AND' in pattern
or '&' in pattern:
123 return AndTagPattern(pattern.replace(
'&',
'AND').split(
'AND'))
130 self.
_matcher_matcher = Matcher(pattern, ignore=
'_')
133 return self.
_matcher_matcher.match_any(tags)
139 return self.
_matcher_matcher.pattern
151 return all(p.match(tags)
for p
in self.
_patterns_patterns)
157 return ' AND '.join(str(pattern)
for pattern
in self)
166 return any(p.match(tags)
for p
in self.
_patterns_patterns)
172 return ' OR '.join(str(pattern)
for pattern
in self)
188 for pattern
in self.
_rest_rest:
192 return ' NOT '.join(str(pattern)
for pattern
in self).lstrip()
def normalize(string, ignore=(), caseless=True, spaceless=True)
Normalizes given string according to given spec.