Skip to content

Commit

Permalink
Add management of query parameters by GET or POST
Browse files Browse the repository at this point in the history
  • Loading branch information
wlorenzetti committed Jan 4, 2024
1 parent cefff30 commit 9f9e306
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions g3w-admin/core/api/base/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -456,9 +456,9 @@ def response_data_mode(self, request, export_features=False):
raise APIException(e)

# Paging cannot be a backend filter
if 'page' in request.query_params:
kwargs['page'] = request.query_params.get('page')
kwargs['page_size'] = request.query_params.get('page_size', 10)
if 'page' in self.request_data:
kwargs['page'] = self.request_data.get('page')
kwargs['page_size'] = self.request_data.get('page_size', 10)

# Make sure we have all attrs we need to build the server FID
provider = self.metadata_layer.qgis_layer.dataProvider()
Expand Down Expand Up @@ -489,19 +489,24 @@ def response_data_mode(self, request, export_features=False):
# --------------------------------------
# IDEA: for big data it'll be iterate over features to get unique
# c++ iteration is fast. Instead memory layer with too many features can be a problem.
if 'unique' in request.query_params or 'fformatter' in request.query_params:
#
# Get parameter from GET or POST requests


if ('unique' in self.request_data or 'fformatter' in self.request_data):

uniques = None
pvalue = request.query_params.get('unique') if 'unique' in request.query_params else (
request.query_params.get('fformatter'))

pvalue = self.request_data.get('unique') if 'unique' in self.request_data else (
self.request_data.get('fformatter'))

qfieldidx = self.metadata_layer.qgis_layer.fields().indexOf(pvalue)
r_qfieldidx = qfieldidx
qlayer = self.metadata_layer.qgis_layer
qfeatures = self.features

# Get QgsFieldFormatter
if 'fformatter' in request.query_params:
if 'fformatter' in self.request_data:
ewsetup = self.metadata_layer.qgis_layer.editorWidgetSetup(qfieldidx)
qfformatter = QGS_APPLICATION.fieldFormatterRegistry().fieldFormatter(ewsetup.type())

Expand Down Expand Up @@ -536,8 +541,8 @@ def response_data_mode(self, request, export_features=False):

# Add ffield if exists
# 'ffield' is a proxy parameter for /vector/api/data filter parameter 'field'
if 'ffield' in request.query_params:
req.GET['field'] = request.query_params.get('ffield')
if 'ffield' in self.request_data:
req.GET['field'] = self.request_data.get('ffield')

view = LayerVectorView.as_view()
res = view(req, *[], **kwargs).render()
Expand All @@ -562,7 +567,7 @@ def response_data_mode(self, request, export_features=False):
for u in uniques:
try:
if u:
if 'unique' in request.query_params:
if 'unique' in self.request_data:
values.append(json.loads(QgsJsonUtils.encodeValue(u)))
else:
fvalue = qfformatter.representValue(
Expand Down Expand Up @@ -602,7 +607,7 @@ def response_data_mode(self, request, export_features=False):

# check for formatter query url param and check if != 0
export_features = False
formatter = str(request.query_params.get('formatter', request.data.get('formatter')))
formatter = str(self.request_data.get('formatter', request.data.get('formatter')))
if formatter:
if formatter.isnumeric() and int(formatter) == 1:
export_features = True
Expand Down Expand Up @@ -712,6 +717,9 @@ def get_response(self, request, mode_call=None, project_type=None, layer_id=None
# set reprojecting status
self.set_reprojecting_status()

# Get request data by GET or POST method
self.request_data = request.query_params if request.method == 'GET' else request.data

# get results
response = self.get_response_data(request)

Expand Down

0 comments on commit 9f9e306

Please sign in to comment.