Skip to content

Commit b1f16eb

Browse files
dimasciputsumandari
andauthored
Fix min_qg_version query in plugins.xml (#224) (#264)
* fix min_qg_version query * added 0 patch value for qgis version against max_qg_version * only add patch if it has major.minor version Co-authored-by: sumandari <[email protected]>
1 parent a205eff commit b1f16eb

File tree

2 files changed

+75
-24
lines changed

2 files changed

+75
-24
lines changed

qgis-app/plugins/tests/test_view.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from django.test import TestCase
2+
3+
from plugins.views import _add_patch_version
4+
5+
6+
class TestTruncateVersion(TestCase):
7+
"""Test _add_patch_version function"""
8+
9+
def test__add_patch_version_with_3_segment_version_number(self):
10+
version = '1.2.3'
11+
self.assertEqual(_add_patch_version(version, '99'), '1.2.3')
12+
13+
def test__add_patch_version_with_2_segment_version_number(self):
14+
version = '1.2'
15+
self.assertEqual(_add_patch_version(version, '00'), '1.2.00')
16+
17+
def test__add_patch_version_with_1_segment_version_number(self):
18+
version = '1'
19+
self.assertEqual(_add_patch_version(version, '99'), '1')
20+
21+
def test__add_patch_version_with_None(self):
22+
version = None
23+
self.assertEqual(_add_patch_version(version, '99'), None)
24+
25+
def test__add_patch_version_with_empty_string(self):
26+
version = ''
27+
self.assertEqual(_add_patch_version(version, '99'), '')

qgis-app/plugins/views.py

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,6 +1059,25 @@ def version_detail(request, package_name, version):
10591059
from django.views.decorators.cache import cache_page
10601060

10611061

1062+
def _add_patch_version(version: str, additional_patch: str ) -> str:
1063+
"""To add patch number in version.
1064+
1065+
e.g qgis version = 3.16 we add patch number (99) in versioning -> 3.16.99
1066+
We use this versioning to query against PluginVersion min_qg_version,
1067+
so that the query result will include all PluginVersion with
1068+
minimum QGIS version 3.16 regardless of the patch number.
1069+
"""
1070+
1071+
if not version:
1072+
return version
1073+
separator = '.'
1074+
v = version.split(separator)
1075+
if len(v) == 2:
1076+
two_first_segment = separator.join(v[:2])
1077+
version = f'{two_first_segment}.{additional_patch}'
1078+
return version
1079+
1080+
10621081
@cache_page(60 * 15)
10631082
def xml_plugins(request, qg_version=None, stable_only=None, package_name=None):
10641083
"""
@@ -1092,10 +1111,10 @@ def xml_plugins(request, qg_version=None, stable_only=None, package_name=None):
10921111
object_list = []
10931112

10941113
if qg_version:
1095-
filters.update({"pluginversion__min_qg_version__lte": qg_version})
1096-
version_filters.update({"min_qg_version__lte": qg_version})
1097-
filters.update({"pluginversion__max_qg_version__gte": qg_version})
1098-
version_filters.update({"max_qg_version__gte": qg_version})
1114+
filters.update({'pluginversion__min_qg_version__lte' : _add_patch_version(qg_version, '99')})
1115+
version_filters.update({'min_qg_version__lte' : _add_patch_version(qg_version, '99')})
1116+
filters.update({'pluginversion__max_qg_version__gte' : _add_patch_version(qg_version, '0')})
1117+
version_filters.update({'max_qg_version__gte' : _add_patch_version(qg_version, '0')})
10991118

11001119
# Get all versions for the given plugin)
11011120
if package_name:
@@ -1208,10 +1227,10 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non
12081227
object_list = []
12091228

12101229
if qg_version:
1211-
filters.update({"pluginversion__min_qg_version__lte": qg_version})
1212-
version_filters.update({"min_qg_version__lte": qg_version})
1213-
filters.update({"pluginversion__max_qg_version__gte": qg_version})
1214-
version_filters.update({"max_qg_version__gte": qg_version})
1230+
filters.update({'pluginversion__min_qg_version__lte' : _add_patch_version(qg_version, '99')})
1231+
version_filters.update({'min_qg_version__lte' : _add_patch_version(qg_version, '99')})
1232+
filters.update({'pluginversion__max_qg_version__gte' : _add_patch_version(qg_version, '0')})
1233+
version_filters.update({'max_qg_version__gte' : _add_patch_version(qg_version, '0')})
12151234

12161235
# Get all versions for the given plugin
12171236
if package_name:
@@ -1256,8 +1275,8 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non
12561275
FROM %(pv_table)s pv
12571276
WHERE (
12581277
pv.approved = True
1259-
AND pv."max_qg_version" >= '%(qg_version)s'
1260-
AND pv."min_qg_version" <= '%(qg_version)s'
1278+
AND pv."max_qg_version" >= '%(qg_version_with_patch_0)s'
1279+
AND pv."min_qg_version" <= '%(qg_version_with_patch_99)s'
12611280
AND pv.experimental = %(experimental)s
12621281
)
12631282
ORDER BY pv.plugin_id, pv.version DESC
@@ -1274,22 +1293,27 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non
12741293
}
12751294
)
12761295

1277-
if stable_only != "1":
1296+
object_list_new = PluginVersion.objects.raw(sql % {
1297+
'pv_table': PluginVersion._meta.db_table,
1298+
'p_table': Plugin._meta.db_table,
1299+
'qg_version_with_patch_0': _add_patch_version(qg_version, '0'),
1300+
'qg_version_with_patch_99': _add_patch_version(qg_version, '99'),
1301+
'experimental': 'False',
1302+
'trusted_users_ids': str(trusted_users_ids),
1303+
})
1304+
1305+
1306+
if stable_only != '1':
12781307
# Do the query
12791308
object_list_new = [o for o in object_list_new]
1280-
object_list_new += [
1281-
o
1282-
for o in PluginVersion.objects.raw(
1283-
sql
1284-
% {
1285-
"pv_table": PluginVersion._meta.db_table,
1286-
"p_table": Plugin._meta.db_table,
1287-
"qg_version": qg_version,
1288-
"experimental": "True",
1289-
"trusted_users_ids": str(trusted_users_ids),
1290-
}
1291-
)
1292-
]
1309+
object_list_new += [o for o in PluginVersion.objects.raw(sql % {
1310+
'pv_table': PluginVersion._meta.db_table,
1311+
'p_table': Plugin._meta.db_table,
1312+
'qg_version_with_patch_0': _add_patch_version(qg_version, '0'),
1313+
'qg_version_with_patch_99': _add_patch_version(qg_version, '99'),
1314+
'experimental': 'True',
1315+
'trusted_users_ids': str(trusted_users_ids),
1316+
})]
12931317

12941318
return render(
12951319
request,

0 commit comments

Comments
 (0)