gnunet-svn
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]