def bruteVersionStr(self, valu): ''' Brute force the version out of a string. Args: valu (str): String to attempt to get version information for. Notes: This first attempts to parse strings using the it:semver normalization before attempting to extract version parts out of the string. Returns: int, dict: The system normalized version integer and a subs dictionary. ''' try: valu, info = self.core.model.type('it:semver').norm(valu) subs = info.get('subs') return valu, subs except s_exc.BadTypeValu: # Try doing version part extraction by noming through the string subs = s_version.parseVersionParts(valu) if subs is None: raise s_exc.BadTypeValu(valu=valu, name='bruteVersionStr', mesg='Unable to brute force version parts out of the string') if subs: valu = s_version.packVersion(subs.get('major'), subs.get('minor', 0), subs.get('patch', 0)) return valu, subs
def bruteStr(valu): ''' Brute force the version out of a string. Args: valu (str): String to attempt to get version information for. Notes: This first attempts to parse strings using the it:semver normalization before attempting to extract version parts out of the string. Returns: int, dict: The system normalized version integer and a subs dictionary. ''' try: valu, subs = s_datamodel.tlib.getTypeNorm('it:semver', valu) return valu, subs except s_common.BadTypeValu: # Try doing version part extraction by noming through the string subs = s_version.parseVersionParts(valu) if subs is None: raise s_common.BadTypeValu( valu=valu, mesg='Unable to brute force version parts out of the string') if subs: valu = s_version.packVersion(subs.get('major'), subs.get('minor', 0), subs.get('patch', 0)) return valu, subs
def test_version_extract_parts(self): data = ( ('1', {'major': 1}), ('1.2.3-B5CD5743F', {'major': 1, 'minor': 2, 'patch': 3}), ('2016-03-01', {'major': 2016, 'minor': 3, 'patch': 1}), ('1.2.windows-RC1', {'major': 1, 'minor': 2}), ('1.3a2.dev12', {'major': 1}), ('V1.2.3', {'major': 1, 'minor': 2, 'patch': 3}), ('V1.4.0-RC0', {'major': 1, 'minor': 4, 'patch': 0}), ('v2.4.0.0-1', {'major': 2, 'minor': 4, 'patch': 0}), ('v2.4.1.0-0.3.rc1', {'major': 2, 'minor': 4, 'patch': 1}), ('0.18.1', {'major': 0, 'minor': 18, 'patch': 1}), ('0.18rc2', {'major': 0}), ('2.0A1', {'major': 2}), ('1.0.0-alpha', {'major': 1, 'minor': 0, 'patch': 0}), ('1.0.0-alpha.1', {'major': 1, 'minor': 0, 'patch': 0}), ('1.0.0-0.3.7', {'major': 1, 'minor': 0, 'patch': 0}), ('1.0.0-x.7.z.92', {'major': 1, 'minor': 0, 'patch': 0}), ('1.0.0-alpha+001', {'major': 1, 'minor': 0, 'patch': 0}), ('1.0.0+20130313144700', {'major': 1, 'minor': 0, 'patch': 0}), ('1.0.0-beta+exp.sha.5114f85', {'major': 1, 'minor': 0, 'patch': 0}), ('OpenSSL_1_0_2l', {'major': 1, 'minor': 0}), ) for s, e in data: r = s_version.parseVersionParts(s) self.eq(r, e)