summaryrefslogtreecommitdiff
path: root/ishtar_common/views_item.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r--ishtar_common/views_item.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index ce70559f9..673ffb46a 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -1428,6 +1428,7 @@ def _get_data_from_query(items, query_table_cols, extra_request_keys,
if hasattr(items.model, "locked"):
values.append("locked")
values.append("lock_user_id")
+ values = [v for v in values if v] # filter empty values
return items.values_list(*values)
@@ -2591,3 +2592,53 @@ def get_distant_item(request, model, external_source_id, data_type=None):
if "link" in row:
row["link"] = row["link"].replace(str(idx), source_id)
return HttpResponse(json.dumps(dct), content_type="application/json")
+
+
+def external_export(request, source_id, model_name, slug):
+ external_sources = request.session.get("EXTERNAL_SOURCES", {})
+ url = None
+ for source in external_sources:
+ try:
+ src_id, __ = source.split("||")
+ src_id = int(src_id)
+ except ValueError:
+ continue
+ if src_id != source_id:
+ continue
+ for model in external_sources[source]:
+ if model_name == model.split("-")[-1]:
+ url = reverse("api-export-" + model_name, args=[slug])
+
+ if not url:
+ return HttpResponse('Unauthorized', status=401)
+
+ try:
+ src = models_rest.ApiExternalSource.objects.get(pk=source_id)
+ except (models_rest.ApiExternalSource.DoesNotExist, ValueError):
+ return HttpResponse('Unauthorized', status=401)
+
+ url = src.url + url
+ try:
+ response = requests.get(
+ url,
+ params=request.GET,
+ timeout=20,
+ headers={"Authorization": f"Token {src.key}"},
+ )
+ except requests.exceptions.Timeout:
+ return HttpResponse('Gateway Timeout', status=504)
+ if response.status_code != 200:
+ lbl = {
+ 401: "Unauthorized",
+ 404: "Page not found",
+ 500: "Server error",
+ }
+ lbl = lbl[response.status_code] \
+ if response.status_code in lbl else "Unknown error"
+ return HttpResponse(lbl, status=response.status_code)
+
+ response = HttpResponse(response.text, content_type="text/csv")
+ n = datetime.datetime.now()
+ filename = f"{model_name}-{n.strftime('%Y%m%d-%H%M%S')}.csv"
+ response["Content-Disposition"] = "attachment; filename=%s" % filename
+ return response