Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/planemo/xml/diff.py @ 2:6af9afd405e9 draft
"planemo upload commit 0a63dd5f4d38a1f6944587f52a8cd79874177fc1"
| author | shellac |
|---|---|
| date | Thu, 14 May 2020 14:56:58 -0400 |
| parents | 26e78fe6e8c4 |
| children |
comparison
equal
deleted
inserted
replaced
| 1:75ca89e9b81c | 2:6af9afd405e9 |
|---|---|
| 1 | |
| 2 def diff(x1, x2, reporter=None): | |
| 3 """Return 0 if and only if the XML has the same content.""" | |
| 4 compare = xml_compare(x1, x2, reporter) | |
| 5 return_val = 0 if compare else 1 | |
| 6 return return_val | |
| 7 | |
| 8 | |
| 9 # From | |
| 10 # bitbucket.org/ianb/formencode/src/tip/formencode/doctest_xml_compare.py | |
| 11 # with (PSF license) | |
| 12 def xml_compare(x1, x2, reporter=None): | |
| 13 if reporter is None: | |
| 14 def reporter(x): | |
| 15 return None | |
| 16 | |
| 17 if x1.tag != x2.tag: | |
| 18 reporter('Tags do not match: %s and %s\n' % (x1.tag, x2.tag)) | |
| 19 return False | |
| 20 for name, value in x1.attrib.items(): | |
| 21 if x2.attrib.get(name) != value: | |
| 22 reporter('Attributes do not match: %s=%r, %s=%r\n' | |
| 23 % (name, value, name, x2.attrib.get(name))) | |
| 24 return False | |
| 25 for name in x2.attrib.keys(): | |
| 26 if name not in x1.attrib: | |
| 27 reporter('x2 has an attribute x1 is missing: %s\n' | |
| 28 % name) | |
| 29 return False | |
| 30 if not text_compare(x1.text, x2.text): | |
| 31 reporter('text: %r != %r\n' % (x1.text, x2.text)) | |
| 32 return False | |
| 33 if not text_compare(x1.tail, x2.tail): | |
| 34 reporter('tail: %r != %r\n' % (x1.tail, x2.tail)) | |
| 35 return False | |
| 36 return _compare_children(x1, x2, reporter) | |
| 37 | |
| 38 | |
| 39 def _compare_children(x1, x2, reporter): | |
| 40 cl1 = list(x1) | |
| 41 cl2 = list(x2) | |
| 42 if len(cl1) != len(cl2): | |
| 43 reporter('children length differs, %i != %i\n' | |
| 44 % (len(cl1), len(cl2))) | |
| 45 return False | |
| 46 i = 0 | |
| 47 for c1, c2 in zip(cl1, cl2): | |
| 48 i += 1 | |
| 49 if not xml_compare(c1, c2, reporter=reporter): | |
| 50 reporter('children %i do not match: %s\n' | |
| 51 % (i, c1.tag)) | |
| 52 return False | |
| 53 return True | |
| 54 | |
| 55 | |
| 56 def text_compare(t1, t2): | |
| 57 if not t1 and not t2: | |
| 58 return True | |
| 59 return (t1 or '').strip() == (t2 or '').strip() |
