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

View File

@ -36,28 +36,8 @@
{{ current_version }}
</p>
</li>
<li class="list-group-item list-group-item-{% if latest_major %}success{% else %}danger{% endif %}">
<h5 class="list-group-item-heading">{% trans "Latest Major" %}</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>
<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 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>
@ -66,6 +46,18 @@
{% if not latest_patch %}<br>{% trans "Update available" %}{% endif %}
</p>
</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>
</div>
</div>

View File

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