[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [taler-bank] branch master updated: HTTP-Serving date-range
From: |
gnunet |
Subject: |
[GNUnet-SVN] [taler-bank] branch master updated: HTTP-Serving date-range based history query. |
Date: |
Tue, 02 Apr 2019 20:22:36 +0200 |
This is an automated email from the git hooks/post-receive script.
marcello pushed a commit to branch master
in repository bank.
The following commit(s) were added to refs/heads/master by this push:
new 6f7415a HTTP-Serving date-range based history query.
6f7415a is described below
commit 6f7415a2d2c612bf91aa7a73449ef1a141790386
Author: Marcello Stanisci <address@hidden>
AuthorDate: Tue Apr 2 20:21:43 2019 +0200
HTTP-Serving date-range based history query.
---
talerbank/app/schemas.py | 31 +++++++++++++++++++++++++++++++
talerbank/app/urls.py | 1 +
talerbank/app/views.py | 47 ++++++++++++++++++++++++++++++++++++++++-------
3 files changed, 72 insertions(+), 7 deletions(-)
diff --git a/talerbank/app/schemas.py b/talerbank/app/schemas.py
index b268275..90c39d4 100644
--- a/talerbank/app/schemas.py
+++ b/talerbank/app/schemas.py
@@ -148,6 +148,29 @@ REJECT_REQUEST_SCHEMA = {
##
+# Definition for /history-range request URL parameters.
+HISTORY_RANGE_REQUEST_SCHEMA = {
+ "type": "object",
+ "properties": {
+ "auth": {"type": "string", "pattern": "^basic$"},
+ "cancelled": {"type": "string",
+ "pattern": "^(omit|show)$",
+ "required": False},
+ "start": {"type": "integer"},
+ "end": {"type": "integer"},
+ "ordering": {"type": "string",
+ "pattern": r"^(ascending|descending)$",
+ "required": False},
+ "direction": {"type": "string",
+ "pattern": r"^(debit|credit|both|cancel\+|cancel-)$"},
+ "account_number": {"type": "string",
+ "pattern": "^([0-9]+)$",
+ "required": False}
+ }
+}
+
+
+##
# Definition for /history request URL parameters.
HISTORY_REQUEST_SCHEMA = {
"type": "object",
@@ -250,6 +273,13 @@ def validate_history(data):
validate(data, HISTORY_REQUEST_SCHEMA)
##
+# Check /history-range input data.
+#
+# @param data dict representing /history's GET parameters.
+def validate_history_range(data):
+ validate(data, HISTORY_RANGE_REQUEST_SCHEMA)
+
+##
# Check wire details
# (regardless of which endpoint triggered the check)
#
@@ -288,6 +318,7 @@ def validate_data(request, data):
switch = {
"/reject": validate_reject,
"/history": validate_history,
+ "/history-range": validate_history_range,
"/admin/add/incoming": validate_add_incoming,
"/pin/verify": check_withdraw_session,
"/pin/question": validate_pin_tan
diff --git a/talerbank/app/urls.py b/talerbank/app/urls.py
index c4a543c..d18f971 100644
--- a/talerbank/app/urls.py
+++ b/talerbank/app/urls.py
@@ -38,6 +38,7 @@ urlpatterns = [
url(r'^accounts/register/$', views.register, name="register"),
url(r'^profile$', views.profile_page, name="profile"),
url(r'^history$', views.serve_history, name="history"),
+ url(r'^history-range$', views.serve_history_range, name="history-range"),
url(r'^reject$', views.reject, name="reject"),
url(r'^withdraw$', views.withdraw_nojs, name="withdraw-nojs"),
url(r'^public-accounts$', views.serve_public_accounts,
diff --git a/talerbank/app/views.py b/talerbank/app/views.py
index 5002e08..b21b2fe 100644
--- a/talerbank/app/views.py
+++ b/talerbank/app/views.py
@@ -40,6 +40,7 @@ from django.contrib.auth.models import User
from django.db.models import Q
from django.http import JsonResponse, HttpResponse
from django.shortcuts import render, redirect
+from datetime import datetime
from .models import BankAccount, BankTransaction
from .amount import Amount
from .schemas import validate_data
@@ -693,6 +694,43 @@ def build_history_response(qs, cancelled, user_account):
return history
##
+# Serve a request of /history-range.
+#
+# @param request Django-specific HTTP request.
+# @param user_account the account whose history should be gotten.
+# @return Django-specific HTTP response object.
address@hidden
address@hidden
+def serve_history_range(request, user_account):
+ validate_data(request, request.GET.dict())
+
+ # Ordering.
+ ordering = request.GET.get("ordering", "descending")
+
+ # Note: those values got sanity-checked by "validate_data()"
+ start = int(request.GET.get("start"))
+ end = int(request.GET.get("end"))
+
+ start_td = datetime.fromtimestamp(start)
+ end_td = datetime.fromtimestamp(end)
+
+ qs = query_history_range(user_account.bankaccount,
+ request.GET.get("direction"),
+ start_td,
+ end_td,
+ "descending" == ordering)
+
+ history = build_history_response(qs,
+ request.GET.get("cancelled",
+ "show"),
+ user_account)
+ if not history:
+ return HttpResponse(status=204)
+ return JsonResponse(dict(data=history), status=200)
+
+
+
+##
# Serve a request of /history.
#
# @param request Django-specific HTTP request.
@@ -717,12 +755,6 @@ def serve_history(request, user_account):
if not start:
start = 0 if "+" == sign else UINT64_MAX
- # query_history_range (bank_account,
- # direction,
- # start,
- # end,
- # ordering)
-
qs = query_history(user_account.bankaccount,
request.GET.get("direction"),
int(parsed_delta.group(2)),
@@ -731,7 +763,8 @@ def serve_history(request, user_account):
"descending" == ordering)
history = build_history_response(qs,
- request.GET.get("cancelled", "show"),
+ request.GET.get("cancelled",
+ "show"),
user_account)
if not history:
return HttpResponse(status=204)
--
To stop receiving notification emails like this one, please contact
address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] [taler-bank] branch master updated: HTTP-Serving date-range based history query.,
gnunet <=