1
0
This repository has been archived on 2025-03-06. You can view files and clone it, but cannot push or open issues or pull requests.

66 lines
1.4 KiB
Python

from . import yaml
@yaml.sequence(u"!Unordered")
class Unordered:
"""
A list where order is not important (like a set, except elements can be repeated)
Represented by `!Unordered` in YAML.
"""
def __init__(self, *args):
self.items = args
def __iter__(self):
return iter(self.items)
def __eq__(self, other):
items = list(self.items)
try:
for x in other:
items.remove(x)
return True
except ValueError:
return False
@yaml.scalar(u"!Approx")
class Approx:
"""
A helper which allows for approximate comparison of floats using `!Approx`
"""
def __init__(self, value, threshold=0.000001):
self.value = float(value)
self.threshold = threshold
def __eq__(self, other):
diff = abs(other - self.value)
return diff <= self.threshold
def __repr__(self):
return "Approx({})".format(self.value)
def get_value(self):
return self.value
@yaml.scalar(u"!Trim")
class Trim:
"""
A helper which allows for comparison of trimmed strings with `!Trim`
"""
def __init__(self, value):
self.value = value
def __eq__(self, other):
return self.value.strip() == other.strip()
def __repr__(self):
return "Strip({})".format(self.value)
def get_value(self):
return self.value