Skip to content
/ django Public
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions django/utils/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import os
import subprocess
import sys
from distutils.version import LooseVersion

from django.utils.regex_helper import _lazy_re_compile

# Private, stable API for detecting the Python version. PYXY means "Python X.Y
# or later". So that third-party apps can use these values, each constant
Expand Down Expand Up @@ -95,15 +96,21 @@ def get_git_changeset():
return timestamp.strftime('%Y%m%d%H%M%S')


version_component_re = _lazy_re_compile(r'(\d+|[a-z]+|\.)')


def get_version_tuple(version):
"""
Return a tuple of version numbers (e.g. (1, 2, 3)) from the version
string (e.g. '1.2.3').
"""
loose_version = LooseVersion(version)
version_numbers = []
for item in loose_version.version:
if not isinstance(item, int):
break
version_numbers.append(item)
for item in version_component_re.split(version):
if item and item != '.':
try:
component = int(item)
except ValueError:
break
else:
version_numbers.append(component)
return tuple(version_numbers)