@@ -1059,6 +1059,25 @@ def version_detail(request, package_name, version):
1059
1059
from django .views .decorators .cache import cache_page
1060
1060
1061
1061
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
+
1062
1081
@cache_page (60 * 15 )
1063
1082
def xml_plugins (request , qg_version = None , stable_only = None , package_name = None ):
1064
1083
"""
@@ -1092,10 +1111,10 @@ def xml_plugins(request, qg_version=None, stable_only=None, package_name=None):
1092
1111
object_list = []
1093
1112
1094
1113
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' ) })
1099
1118
1100
1119
# Get all versions for the given plugin)
1101
1120
if package_name :
@@ -1208,10 +1227,10 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non
1208
1227
object_list = []
1209
1228
1210
1229
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' ) })
1215
1234
1216
1235
# Get all versions for the given plugin
1217
1236
if package_name :
@@ -1256,8 +1275,8 @@ def xml_plugins_new(request, qg_version=None, stable_only=None, package_name=Non
1256
1275
FROM %(pv_table)s pv
1257
1276
WHERE (
1258
1277
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'
1261
1280
AND pv.experimental = %(experimental)s
1262
1281
)
1263
1282
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
1274
1293
}
1275
1294
)
1276
1295
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' :
1278
1307
# Do the query
1279
1308
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
+ })]
1293
1317
1294
1318
return render (
1295
1319
request ,
0 commit comments