Source code for tocoli.cmp

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from tocoli import *
from tocoli.type import to_bool, to_integer


[docs]def comparable(left, right, case_sensitive=False): """Makes values comparable. Returns a tuple of values""" if isinstance(left, string_types) and right is None: if case_sensitive: return (left, None) else: return (left.lower(), None) if left is None and isinstance(right, string_types): if case_sensitive: return (None, right) else: return (None, right.lower()) if isinstance(left, string_types) and isinstance(right, string_types): if case_sensitive: return (left, right) else: return (left.lower(), right.lower()) elif isinstance(left, string_types) and isinstance(right, integer_types): return (to_integer(left), to_integer(right)) elif isinstance(left, integer_types) and isinstance(right, string_types): return (to_integer(left), to_integer(right)) elif isinstance(left, string_types) and isinstance(right, float): return (float(left), right) elif isinstance(left, float) and isinstance(right, string_types): return (left, float(right)) elif isinstance(left, string_types) and isinstance(right, bool): return (to_bool(left), right) elif isinstance(left, bool) and isinstance(right, string_types): return (left, to_bool(right)) elif isinstance(left, integer_types) and isinstance(right, bool): return (bool(left), right) elif isinstance(left, bool) and isinstance(right, integer_types): return (left, bool(right)) elif isinstance(left, float) and isinstance(right, bool): return (bool(int(left)), right) elif isinstance(left, bool) and isinstance(right, float): return (left, bool(int(right))) elif hasattr(left, '__iter__') and hasattr(right, '__iter__'): nl = [] nr = [] if len(left) == len(right): for i in range(len(left)): l, r = comparable(left[i], right[i], case_sensitive) nl.append(l) nr.append(r) else: for i in range(len(left)): l, _ = comparable(left[i], None, case_sensitive) nl.append(l) for i in range(len(right)): r, _ = comparable(right[i], None, case_sensitive) nr.append(r) return(nl, nr) else: return(left, right)