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