Merge branch 'version_battle' into 'master'

Make version relevant to an admin

See merge request allianceauth/allianceauth!1220
This commit is contained in:
Ariel Rin 2020-06-11 03:13:13 +00:00
commit 71fb19aa22
3 changed files with 42 additions and 33 deletions

View File

@ -70,15 +70,16 @@ class TestStatusOverviewTag(TestCase):
'notifications': GITHUB_NOTIFICATION_ISSUES[:5] 'notifications': GITHUB_NOTIFICATION_ISSUES[:5]
} }
mock_current_notifications.return_value = notifications mock_current_notifications.return_value = notifications
version_info = { version_info = {
'latest_major': True, 'latest_major': True,
'latest_minor': True, 'latest_minor': True,
'latest_patch': True, 'latest_patch': True,
'latest_beta': False,
'current_version': TEST_VERSION, 'current_version': TEST_VERSION,
'latest_major_version': '2.0.0', 'latest_major_version': '2.4.5',
'latest_minor_version': '2.4.0', 'latest_minor_version': '2.4.0',
'latest_patch_version': '2.4.5', 'latest_patch_version': '2.4.5',
'latest_beta_version': '2.4.4a1',
} }
mock_current_version_info.return_value = version_info mock_current_version_info.return_value = version_info
mock_fetch_celery_queue_length.return_value = 3 mock_fetch_celery_queue_length.return_value = 3
@ -90,10 +91,12 @@ class TestStatusOverviewTag(TestCase):
'latest_major': True, 'latest_major': True,
'latest_minor': True, 'latest_minor': True,
'latest_patch': True, 'latest_patch': True,
'latest_beta': False,
'current_version': TEST_VERSION, 'current_version': TEST_VERSION,
'latest_major_version': '2.0.0', 'latest_major_version': '2.4.5',
'latest_minor_version': '2.4.0', 'latest_minor_version': '2.4.0',
'latest_patch_version': '2.4.5', 'latest_patch_version': '2.4.5',
'latest_beta_version': '2.4.4a1',
'task_queue_length': 3, 'task_queue_length': 3,
} }
self.assertEqual(result, expected) self.assertEqual(result, expected)
@ -146,6 +149,7 @@ class TestVersionTags(TestCase):
self.assertEqual(result['latest_major_version'], '2.0.0') self.assertEqual(result['latest_major_version'], '2.0.0')
self.assertEqual(result['latest_minor_version'], '2.4.0') self.assertEqual(result['latest_minor_version'], '2.4.0')
self.assertEqual(result['latest_patch_version'], '2.4.5') self.assertEqual(result['latest_patch_version'], '2.4.5')
self.assertEqual(result['latest_beta_version'], '2.4.6a1')
@patch(MODULE_PATH + '.admin_status.__version__', TEST_VERSION) @patch(MODULE_PATH + '.admin_status.__version__', TEST_VERSION)
@patch(MODULE_PATH + '.admin_status.cache') @patch(MODULE_PATH + '.admin_status.cache')
@ -174,30 +178,33 @@ class TestLatestsVersion(TestCase):
tags = create_tags_list( tags = create_tags_list(
['2.1.1', '2.1.0', '2.0.0', '2.1.1a1', '1.1.1', '1.1.0', '1.0.0'] ['2.1.1', '2.1.0', '2.0.0', '2.1.1a1', '1.1.1', '1.1.0', '1.0.0']
) )
major, minor, patch = _latests_versions(tags) major, minor, patch, beta = _latests_versions(tags)
self.assertEqual(major, Pep440Version('2.0.0')) self.assertEqual(major, Pep440Version('2.0.0'))
self.assertEqual(minor, Pep440Version('2.1.0')) self.assertEqual(minor, Pep440Version('2.1.0'))
self.assertEqual(patch, Pep440Version('2.1.1')) self.assertEqual(patch, Pep440Version('2.1.1'))
self.assertEqual(beta, Pep440Version('2.1.1a1'))
def test_major_and_minor_not_defined_with_zero(self): def test_major_and_minor_not_defined_with_zero(self):
tags = create_tags_list( tags = create_tags_list(
['2.1.2', '2.1.1', '2.0.1', '2.1.1a1', '1.1.1', '1.1.0', '1.0.0'] ['2.1.2', '2.1.1', '2.0.1', '2.1.1a1', '1.1.1', '1.1.0', '1.0.0']
) )
major, minor, patch = _latests_versions(tags) major, minor, patch, beta = _latests_versions(tags)
self.assertEqual(major, Pep440Version('2.0.1')) self.assertEqual(major, Pep440Version('2.0.1'))
self.assertEqual(minor, Pep440Version('2.1.1')) self.assertEqual(minor, Pep440Version('2.1.1'))
self.assertEqual(patch, Pep440Version('2.1.2')) self.assertEqual(patch, Pep440Version('2.1.2'))
self.assertEqual(beta, Pep440Version('2.1.1a1'))
def test_can_ignore_invalid_versions(self): def test_can_ignore_invalid_versions(self):
tags = create_tags_list( tags = create_tags_list(
['2.1.1', '2.1.0', '2.0.0', '2.1.1a1', 'invalid'] ['2.1.1', '2.1.0', '2.0.0', '2.1.1a1', 'invalid']
) )
major, minor, patch = _latests_versions(tags) major, minor, patch, beta = _latests_versions(tags)
self.assertEqual(major, Pep440Version('2.0.0')) self.assertEqual(major, Pep440Version('2.0.0'))
self.assertEqual(minor, Pep440Version('2.1.0')) self.assertEqual(minor, Pep440Version('2.1.0'))
self.assertEqual(patch, Pep440Version('2.1.1')) self.assertEqual(patch, Pep440Version('2.1.1'))
self.assertEqual(beta, Pep440Version('2.1.1a1'))
class TestFetchListFromGitlab(TestCase): class TestFetchListFromGitlab(TestCase):

View File

@ -36,28 +36,8 @@
{{ current_version }} {{ current_version }}
</p> </p>
</li> </li>
<li class="list-group-item list-group-item-{% if latest_major %}success{% else %}danger{% endif %}"> <li class="list-group-item list-group-item-{% if latest_patch %}success{% elif latest_minor %}warning{% else %}danger{% endif %}">
<h5 class="list-group-item-heading">{% trans "Latest Major" %}</h5> <h5 class="list-group-item-heading">{% trans "Latest Stable" %}</h5>
<p class="list-group-item-text">
<a href="https://gitlab.com/allianceauth/allianceauth/tags" style="color:#000">
<i class="fa fa-gitlab hidden-xs" aria-hidden="true"></i>
{{ latest_major_version }}
</a>
{% if not latest_major %}<br>{% trans "Update available" %}{% endif %}
</p>
</li>
<li class="list-group-item list-group-item-{% if latest_minor %}success{% else %}danger{% endif %}">
<h5 class="list-group-item-heading">{% trans "Latest Minor" %}</h5>
<p class="list-group-item-text">
<a href="https://gitlab.com/allianceauth/allianceauth/tags" style="color:#000">
<i class="fa fa-gitlab hidden-xs" aria-hidden="true"></i>
{{ latest_minor_version }}
</a>
{% if not latest_minor %}<br>{% trans "Update available" %}{% endif %}
</p>
</li>
<li class="list-group-item list-group-item-{% if latest_patch %}success{% else %}warning{% endif %}">
<h5 class="list-group-item-heading">{% trans "Latest Patch" %}</h5>
<p class="list-group-item-text"> <p class="list-group-item-text">
<a href="https://gitlab.com/allianceauth/allianceauth/tags" style="color:#000"> <a href="https://gitlab.com/allianceauth/allianceauth/tags" style="color:#000">
<i class="fa fa-gitlab hidden-xs" aria-hidden="true"></i> <i class="fa fa-gitlab hidden-xs" aria-hidden="true"></i>
@ -66,6 +46,18 @@
{% if not latest_patch %}<br>{% trans "Update available" %}{% endif %} {% if not latest_patch %}<br>{% trans "Update available" %}{% endif %}
</p> </p>
</li> </li>
{% if latest_beta %}
<li class="list-group-item list-group-item-info">
<h5 class="list-group-item-heading">{% trans "Latest Pre-Release" %}</h5>
<p class="list-group-item-text">
<a href="https://gitlab.com/allianceauth/allianceauth/tags" style="color:#000">
<i class="fa fa-gitlab hidden-xs" aria-hidden="true"></i>
{{ latest_beta_version }}
</a>
<br>{% trans "Pre-Release available" %}
</p>
</li>
{% endif %}
</ul> </ul>
</div> </div>
</div> </div>

View File

@ -95,7 +95,7 @@ def _current_version_summary() -> dict:
logger.exception('Error while getting gitlab release tags') logger.exception('Error while getting gitlab release tags')
return {} return {}
latest_major_version, latest_minor_version, latest_patch_version = \ latest_major_version, latest_minor_version, latest_patch_version, latest_beta_version = \
_latests_versions(tags) _latests_versions(tags)
current_version = Pep440Version(__version__) current_version = Pep440Version(__version__)
@ -105,15 +105,21 @@ def _current_version_summary() -> dict:
current_version >= latest_minor_version if latest_minor_version else False current_version >= latest_minor_version if latest_minor_version else False
has_latest_patch = \ has_latest_patch = \
current_version >= latest_patch_version if latest_patch_version else False current_version >= latest_patch_version if latest_patch_version else False
has_current_beta = \
current_version.base_version <= latest_beta_version.base_version \
and latest_major_version.base_version <= latest_beta_version.base_version \
if latest_beta_version else False
response = { response = {
'latest_major': has_latest_major, 'latest_major': has_latest_major,
'latest_minor': has_latest_minor, 'latest_minor': has_latest_minor,
'latest_patch': has_latest_patch, 'latest_patch': has_latest_patch,
'latest_beta': has_current_beta,
'current_version': str(current_version), 'current_version': str(current_version),
'latest_major_version': str(latest_major_version), 'latest_major_version': str(latest_major_version),
'latest_minor_version': str(latest_minor_version), 'latest_minor_version': str(latest_minor_version),
'latest_patch_version': str(latest_patch_version) 'latest_patch_version': str(latest_patch_version),
'latest_beta_version': str(latest_beta_version)
} }
return response return response
@ -128,14 +134,18 @@ def _latests_versions(tags: list) -> tuple:
Non-compliant tags will be ignored Non-compliant tags will be ignored
""" """
versions = list() versions = list()
betas = list()
for tag in tags: for tag in tags:
try: try:
version = Pep440Version(tag.get('name')) version = Pep440Version(tag.get('name'))
except InvalidVersion: except InvalidVersion:
pass pass
else: else:
if not version.is_prerelease: if version.is_prerelease or version.is_devrelease:
betas.append(version)
else:
versions.append(version) versions.append(version)
latest_version = latest_patch_version = max(versions) latest_version = latest_patch_version = max(versions)
latest_major_version = min([ latest_major_version = min([
@ -145,8 +155,8 @@ def _latests_versions(tags: list) -> tuple:
v for v in versions v for v in versions
if v.major == latest_version.major and v.minor == latest_version.minor if v.major == latest_version.major and v.minor == latest_version.minor
]) ])
latest_beta_version = max(betas)
return latest_major_version, latest_minor_version, latest_patch_version return latest_major_version, latest_minor_version, latest_patch_version, latest_beta_version
def _fetch_list_from_gitlab(url: str, max_pages: int = MAX_PAGES): def _fetch_list_from_gitlab(url: str, max_pages: int = MAX_PAGES):