From ce67f4cec6b3b9a790f02fb18dbceec431641d93 Mon Sep 17 00:00:00 2001 From: Sumandari Date: Thu, 2 Dec 2021 12:06:30 +0800 Subject: [PATCH 1/3] fix min_qg_version query --- qgis-app/plugins/tests/test_view.py | 27 ++++++++++++++++++++++++ qgis-app/plugins/views.py | 32 ++++++++++++++++++++++++----- 2 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 qgis-app/plugins/tests/test_view.py diff --git a/qgis-app/plugins/tests/test_view.py b/qgis-app/plugins/tests/test_view.py new file mode 100644 index 00000000..0ea739f8 --- /dev/null +++ b/qgis-app/plugins/tests/test_view.py @@ -0,0 +1,27 @@ +from django.test import TestCase + +from plugins.views import _add_patch_version + + +class TestTruncateVersion(TestCase): + """Test _add_patch_version function""" + + def test__add_patch_version_with_3_segment_version_number(self): + version = '1.2.' + self.assertEqual(_add_patch_version(version), '1.2.99') + + def test__add_patch_version_with_2_segment_version_number(self): + version = '1.2' + self.assertEqual(_add_patch_version(version), '1.2.99') + + def test__add_patch_version_with_1_segment_version_number(self): + version = '1' + self.assertEqual(_add_patch_version(version), '1') + + def test__add_patch_version_with_None(self): + version = None + self.assertEqual(_add_patch_version(version), None) + + def test__add_patch_version_with_empty_string(self): + version = '' + self.assertEqual(_add_patch_version(version), '') diff --git a/qgis-app/plugins/views.py b/qgis-app/plugins/views.py index 077e7e65..deaa182c 100644 --- a/qgis-app/plugins/views.py +++ b/qgis-app/plugins/views.py @@ -903,6 +903,26 @@ def version_detail(request, package_name, version): from django.views.decorators.cache import cache_page +def _add_patch_version(version: str) -> str: + """To add patch number in version. + + e.g qgis version = 3.16 we add patch number (99) in versioning -> 3.16.99 + We use this versioning to query against PluginVersion min_qg_version, + so that the query result will include all PluginVersion with + minimum QGIS version 3.16 regardless of the patch number. + """ + + if not version: + return version + separator = '.' + v = version.split(separator) + if len(v) > 1: + two_first_segment = separator.join(v[:2]) + max_patch_version = 99 + version = f'{two_first_segment}.{max_patch_version}' + return version + + @cache_page(60 * 15) def xml_plugins(request, qg_version=None, stable_only=None, package_name=None): """ @@ -924,8 +944,8 @@ def xml_plugins(request, qg_version=None, stable_only=None, package_name=None): object_list = [] if qg_version: - filters.update({'pluginversion__min_qg_version__lte' : qg_version}) - version_filters.update({'min_qg_version__lte' : qg_version}) + filters.update({'pluginversion__min_qg_version__lte' : _add_patch_version(qg_version)}) + version_filters.update({'min_qg_version__lte' : _add_patch_version(qg_version)}) filters.update({'pluginversion__max_qg_version__gte' : qg_version}) version_filters.update({'max_qg_version__gte' : qg_version}) @@ -1001,8 +1021,8 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non object_list = [] if qg_version: - filters.update({'pluginversion__min_qg_version__lte' : qg_version}) - version_filters.update({'min_qg_version__lte' : qg_version}) + filters.update({'pluginversion__min_qg_version__lte' : _add_patch_version(qg_version)}) + version_filters.update({'min_qg_version__lte' : _add_patch_version(qg_version)}) filters.update({'pluginversion__max_qg_version__gte' : qg_version}) version_filters.update({'max_qg_version__gte' : qg_version}) @@ -1046,7 +1066,7 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non WHERE ( pv.approved = True AND pv."max_qg_version" >= '%(qg_version)s' - AND pv."min_qg_version" <= '%(qg_version)s' + AND pv."min_qg_version" <= '%(qg_version_with_patch)s' AND pv.experimental = %(experimental)s ) ORDER BY pv.plugin_id, pv.version DESC @@ -1057,6 +1077,7 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non 'pv_table': PluginVersion._meta.db_table, 'p_table': Plugin._meta.db_table, 'qg_version': qg_version, + 'qg_version_with_patch': _add_patch_version(qg_version), 'experimental': 'False', 'trusted_users_ids': str(trusted_users_ids), }) @@ -1069,6 +1090,7 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non 'pv_table': PluginVersion._meta.db_table, 'p_table': Plugin._meta.db_table, 'qg_version': qg_version, + 'qg_version_with_patch': _add_patch_version(qg_version), 'experimental': 'True', 'trusted_users_ids': str(trusted_users_ids), })] From 4cd2894fe7236cd649e688ef20f2ade085fa46f1 Mon Sep 17 00:00:00 2001 From: Sumandari Date: Thu, 3 Feb 2022 13:10:57 +0800 Subject: [PATCH 2/3] added 0 patch value for qgis version against max_qg_version --- qgis-app/plugins/tests/test_view.py | 10 ++++----- qgis-app/plugins/views.py | 33 ++++++++++++++--------------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/qgis-app/plugins/tests/test_view.py b/qgis-app/plugins/tests/test_view.py index 0ea739f8..c256e7bb 100644 --- a/qgis-app/plugins/tests/test_view.py +++ b/qgis-app/plugins/tests/test_view.py @@ -8,20 +8,20 @@ class TestTruncateVersion(TestCase): def test__add_patch_version_with_3_segment_version_number(self): version = '1.2.' - self.assertEqual(_add_patch_version(version), '1.2.99') + self.assertEqual(_add_patch_version(version, '0'), '1.2.0') def test__add_patch_version_with_2_segment_version_number(self): version = '1.2' - self.assertEqual(_add_patch_version(version), '1.2.99') + self.assertEqual(_add_patch_version(version, '99'), '1.2.99') def test__add_patch_version_with_1_segment_version_number(self): version = '1' - self.assertEqual(_add_patch_version(version), '1') + self.assertEqual(_add_patch_version(version, '99'), '1') def test__add_patch_version_with_None(self): version = None - self.assertEqual(_add_patch_version(version), None) + self.assertEqual(_add_patch_version(version, '99'), None) def test__add_patch_version_with_empty_string(self): version = '' - self.assertEqual(_add_patch_version(version), '') + self.assertEqual(_add_patch_version(version, '99'), '') diff --git a/qgis-app/plugins/views.py b/qgis-app/plugins/views.py index deaa182c..cd12d502 100644 --- a/qgis-app/plugins/views.py +++ b/qgis-app/plugins/views.py @@ -903,7 +903,7 @@ def version_detail(request, package_name, version): from django.views.decorators.cache import cache_page -def _add_patch_version(version: str) -> str: +def _add_patch_version(version: str, additional_patch: str ) -> str: """To add patch number in version. e.g qgis version = 3.16 we add patch number (99) in versioning -> 3.16.99 @@ -918,8 +918,7 @@ def _add_patch_version(version: str) -> str: v = version.split(separator) if len(v) > 1: two_first_segment = separator.join(v[:2]) - max_patch_version = 99 - version = f'{two_first_segment}.{max_patch_version}' + version = f'{two_first_segment}.{additional_patch}' return version @@ -944,10 +943,10 @@ def xml_plugins(request, qg_version=None, stable_only=None, package_name=None): object_list = [] if qg_version: - filters.update({'pluginversion__min_qg_version__lte' : _add_patch_version(qg_version)}) - version_filters.update({'min_qg_version__lte' : _add_patch_version(qg_version)}) - filters.update({'pluginversion__max_qg_version__gte' : qg_version}) - version_filters.update({'max_qg_version__gte' : qg_version}) + filters.update({'pluginversion__min_qg_version__lte' : _add_patch_version(qg_version, '99')}) + version_filters.update({'min_qg_version__lte' : _add_patch_version(qg_version, '99')}) + filters.update({'pluginversion__max_qg_version__gte' : _add_patch_version(qg_version, '0')}) + version_filters.update({'max_qg_version__gte' : _add_patch_version(qg_version, '0')}) # Get all versions for the given plugin) @@ -1021,10 +1020,10 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non object_list = [] if qg_version: - filters.update({'pluginversion__min_qg_version__lte' : _add_patch_version(qg_version)}) - version_filters.update({'min_qg_version__lte' : _add_patch_version(qg_version)}) - filters.update({'pluginversion__max_qg_version__gte' : qg_version}) - version_filters.update({'max_qg_version__gte' : qg_version}) + filters.update({'pluginversion__min_qg_version__lte' : _add_patch_version(qg_version, '99')}) + version_filters.update({'min_qg_version__lte' : _add_patch_version(qg_version, '99')}) + filters.update({'pluginversion__max_qg_version__gte' : _add_patch_version(qg_version, '0')}) + version_filters.update({'max_qg_version__gte' : _add_patch_version(qg_version, '0')}) # Get all versions for the given plugin if package_name: @@ -1065,8 +1064,8 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non FROM %(pv_table)s pv WHERE ( pv.approved = True - AND pv."max_qg_version" >= '%(qg_version)s' - AND pv."min_qg_version" <= '%(qg_version_with_patch)s' + AND pv."max_qg_version" >= '%(qg_version_with_patch_0)s' + AND pv."min_qg_version" <= '%(qg_version_with_patch_99)s' AND pv.experimental = %(experimental)s ) ORDER BY pv.plugin_id, pv.version DESC @@ -1076,8 +1075,8 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non object_list_new = PluginVersion.objects.raw(sql % { 'pv_table': PluginVersion._meta.db_table, 'p_table': Plugin._meta.db_table, - 'qg_version': qg_version, - 'qg_version_with_patch': _add_patch_version(qg_version), + 'qg_version_with_patch_0': _add_patch_version(qg_version, '0'), + 'qg_version_with_patch_99': _add_patch_version(qg_version, '99'), 'experimental': 'False', 'trusted_users_ids': str(trusted_users_ids), }) @@ -1089,8 +1088,8 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non object_list_new += [o for o in PluginVersion.objects.raw(sql % { 'pv_table': PluginVersion._meta.db_table, 'p_table': Plugin._meta.db_table, - 'qg_version': qg_version, - 'qg_version_with_patch': _add_patch_version(qg_version), + 'qg_version_with_patch_0': _add_patch_version(qg_version, '0'), + 'qg_version_with_patch_99': _add_patch_version(qg_version, '99'), 'experimental': 'True', 'trusted_users_ids': str(trusted_users_ids), })] From 1856b86daaa7ca2969bdd2ad4db41b03701d2032 Mon Sep 17 00:00:00 2001 From: Sumandari Date: Thu, 3 Feb 2022 14:10:27 +0800 Subject: [PATCH 3/3] only add patch if it has major.minor version --- qgis-app/plugins/tests/test_view.py | 6 +++--- qgis-app/plugins/views.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/qgis-app/plugins/tests/test_view.py b/qgis-app/plugins/tests/test_view.py index c256e7bb..67b9fc32 100644 --- a/qgis-app/plugins/tests/test_view.py +++ b/qgis-app/plugins/tests/test_view.py @@ -7,12 +7,12 @@ class TestTruncateVersion(TestCase): """Test _add_patch_version function""" def test__add_patch_version_with_3_segment_version_number(self): - version = '1.2.' - self.assertEqual(_add_patch_version(version, '0'), '1.2.0') + version = '1.2.3' + self.assertEqual(_add_patch_version(version, '99'), '1.2.3') def test__add_patch_version_with_2_segment_version_number(self): version = '1.2' - self.assertEqual(_add_patch_version(version, '99'), '1.2.99') + self.assertEqual(_add_patch_version(version, '00'), '1.2.00') def test__add_patch_version_with_1_segment_version_number(self): version = '1' diff --git a/qgis-app/plugins/views.py b/qgis-app/plugins/views.py index cd12d502..63cb6e4c 100644 --- a/qgis-app/plugins/views.py +++ b/qgis-app/plugins/views.py @@ -916,7 +916,7 @@ def _add_patch_version(version: str, additional_patch: str ) -> str: return version separator = '.' v = version.split(separator) - if len(v) > 1: + if len(v) == 2: two_first_segment = separator.join(v[:2]) version = f'{two_first_segment}.{additional_patch}' return version