Skip to content

Instantly share code, notes, and snippets.

@ptone
Created March 19, 2011 23:21
Show Gist options
  • Save ptone/877899 to your computer and use it in GitHub Desktop.
Save ptone/877899 to your computer and use it in GitHub Desktop.
versioning strategies
from distutils.version import StrictVersion, LooseVersion
def compare_versions(version1, version2):
try:
return cmp(StrictVersion(version1), StrictVersion(version2))
# in case of abnormal version number, fall back to LooseVersion
except ValueError:
return cmp(LooseVersion(version1), LooseVersion(version2))
def highest_version(versions):
return reduce((lambda v1, v2: compare_versions(v1, v2) == 1 and v1 or v2), versions)
# -------------------------------------------------------
# simpler
from distutils.version import LooseVersion as versioner
class VersionManager(models.Manager):
def by_version(self, *args, **kwargs):
qs = self.get_query_set().filter(*args, **kwargs)
return sorted(qs,key=lambda v: versioner(v.number))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment