@@ -58,40 +58,25 @@ def __gt__(self, other: Any) -> bool:
5858 return False
5959
6060
61- class ComparableDict :
61+ class ComparableDict ( ComparableTuple ) :
6262 """
6363 Allows comparison of dictionaries, allowing for missing/None values.
6464 """
6565
66- def __init__ (self , dict_ : Dict [Any , Any ]) -> None :
67- self ._dict = dict_
68-
69- def __lt__ (self , other : Any ) -> bool :
70- if not isinstance (other , ComparableDict ):
71- return True
72- keys = sorted (self ._dict .keys () | other ._dict .keys ())
73- return ComparableTuple (self ._dict .get (k ) for k in keys ) \
74- < ComparableTuple (other ._dict .get (k ) for k in keys )
75-
76- def __gt__ (self , other : Any ) -> bool :
77- if not isinstance (other , ComparableDict ):
78- return False
79- keys = sorted (self ._dict .keys () | other ._dict .keys ())
80- return ComparableTuple (self ._dict .get (k ) for k in keys ) \
81- > ComparableTuple (other ._dict .get (k ) for k in keys )
66+ def __new__ (cls , d : Dict [Any , Any ]) -> 'ComparableDict' :
67+ return super (ComparableDict , cls ).__new__ (cls , sorted (d .items ()))
8268
8369
8470class ComparablePackageURL (ComparableTuple ):
8571 """
8672 Allows comparison of PackageURL, allowing for qualifiers.
8773 """
8874
89- def __new__ (cls , purl : 'PackageURL' ) -> 'ComparablePackageURL' :
90- return super ().__new__ (
91- ComparablePackageURL , (
92- purl .type ,
93- purl .namespace ,
94- purl .version ,
95- ComparableDict (purl .qualifiers ) if isinstance (purl .qualifiers , dict ) else purl .qualifiers ,
96- purl .subpath
97- ))
75+ def __new__ (cls , p : 'PackageURL' ) -> 'ComparablePackageURL' :
76+ return super (ComparablePackageURL , cls ).__new__ (cls , (
77+ p .type ,
78+ p .namespace ,
79+ p .version ,
80+ ComparableDict (p .qualifiers ) if isinstance (p .qualifiers , dict ) else p .qualifiers ,
81+ p .subpath
82+ ))
0 commit comments