def __lt__()

in ebcli/objects/solutionstack.py [0:0]


    def __lt__(self, other):
        """
        Method compares `self` with `other` SolutionStack using the a series of rules
        to determine which of the two should **appear before** the other.

        e.g.

        - Node.js SolutionStacks (SS) will appear before Ruby SS by virtue of
        their relative SOLUTION_STACK_ORDER_INDEX
        - Ruby 2.4 SS will appear before Ruby 2.3 SS
        - Python 3.4 SS will appear before Python 3.4 (Preconfigured Docker) SS
        - Tomcat 8 Java 8 SS will appear before Tomcat 8 Java 7 SS
        - v2.2.2 SS will appear before v2.2.1 SS
        - 2017.02 SS will appear before 2017.01 SS
        - 64bit SS will appear before 32bit SS

        :param other: `other` SolutionStack to compare with

        :return: `True`, if `self` is '<' `other`, else `False`
        """
        try:
            if SOLUTION_STACK_ORDER_INDEX[self.language_name] \
                    != SOLUTION_STACK_ORDER_INDEX[other.language_name]:
                return SOLUTION_STACK_ORDER_INDEX[self.language_name] \
                       < SOLUTION_STACK_ORDER_INDEX[other.language_name]

            if self.language_version != other.language_version:
                return self.language_version > other.language_version

            if 'Preconfigured' in other.name and 'Preconfigured' not in self.name:
                return True
            if 'Preconfigured' in self.name and 'Preconfigured' not in other.name:
                return False

            if self.language_name in ['Tomcat', 'GlassFish']:
                if self.secondary_language_version != other.secondary_language_version:
                    return self.secondary_language_version > other.secondary_language_version

            if self.platform_version != other.platform_version:
                return self.platform_version > other.platform_version

            if 'Amazon' in self.name and 'Debian' in other.name:
                return True
            elif 'Debain' in self.name and 'Amazon' in other.name:
                return False

            if self.operating_system_version != other.operating_system_version:
                return self.operating_system_version > other.operating_system_version

            if self.os_bitness != other.os_bitness:
                return self.os_bitness > other.os_bitness

            if self.language_name == 'Ruby':
                return 'Passenger' in self.name

            if self.language_name == 'IIS':
                # prefer to Windows Server 2016 to Windows Server Core 2016
                return 'Windows Server Core' not in self.name

            return True
        except Exception:
            return True