From 733335c715e78a48baa461018e1d6e3cc55cdbc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BE=9D=E7=91=AA=E8=B2=93?= Date: Mon, 3 Aug 2020 23:12:04 +0800 Subject: [PATCH] Replaced the set() method with the kwargs-based query() method in UrlBuilder in the Mia core application. --- accounting/views.py | 6 +++--- mia_core/status.py | 8 ++++---- mia_core/templatetags/mia_core.py | 5 ++--- mia_core/utils.py | 26 ++++++++++++++------------ 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/accounting/views.py b/accounting/views.py index 0bd61fd..02e709c 100644 --- a/accounting/views.py +++ b/accounting/views.py @@ -861,7 +861,7 @@ def txn_store(request, txn_type, txn=None): url = reverse("accounting:transactions.create", args=(txn_type,)) else: url = reverse("accounting:transactions.edit", args=(txn_type, txn)) - url = str(UrlBuilder(url).set("r", request.GET.get("r"))) + url = str(UrlBuilder(url).query(r=request.GET.get("r"))) return error_redirect(request, url, post) if txn is None: @@ -869,7 +869,7 @@ def txn_store(request, txn_type, txn=None): fill_txn_from_post(txn_type, txn, post) if not txn.is_dirty(): url = reverse("accounting:transactions.show", args=(txn_type, txn)) - url = str(UrlBuilder(url).set("r", request.GET.get("r"))) + url = str(UrlBuilder(url).query(r=request.GET.get("r"))) message = gettext_noop("This transaction was not modified.") return success_redirect(request, url, message) @@ -904,7 +904,7 @@ def txn_store(request, txn_type, txn=None): for record in txn.records: record.save() url = reverse("accounting:transactions.show", args=(txn_type, txn)) - url = str(UrlBuilder(url).set("r", request.GET.get("r"))) + url = str(UrlBuilder(url).query(r=request.GET.get("r"))) message = gettext_noop("This transaction was saved successfully.") return success_redirect(request, url, message) diff --git a/mia_core/status.py b/mia_core/status.py index 247a8e3..f92f2ce 100644 --- a/mia_core/status.py +++ b/mia_core/status.py @@ -38,8 +38,8 @@ def success_redirect(request, url, success): Returns: HttpResponseRedirect: The redirect response. """ - id = _store(request, {"success": success}) - return HttpResponseRedirect(str(UrlBuilder(url).set("s", id))) + status_id = _store(request, {"success": success}) + return HttpResponseRedirect(str(UrlBuilder(url).query(s=status_id))) def error_redirect(request, url, form): @@ -57,8 +57,8 @@ def error_redirect(request, url, form): Returns: HttpResponseRedirect: The redirect response. """ - id = _store(request, {"form": form}) - return HttpResponseRedirect(str(UrlBuilder(url).set("s", id))) + status_id = _store(request, {"form": form}) + return HttpResponseRedirect(str(UrlBuilder(url).query(s=status_id))) def retrieve_status(request): diff --git a/mia_core/templatetags/mia_core.py b/mia_core/templatetags/mia_core.py index 95da9c9..a0622c6 100644 --- a/mia_core/templatetags/mia_core.py +++ b/mia_core/templatetags/mia_core.py @@ -95,8 +95,7 @@ def url_with_return(context, view_name, *args): str: The URL. """ url = reverse(view_name, args=args) - return_to = context.request.get_full_path() - return str(UrlBuilder(url).set("r", return_to)) + return str(UrlBuilder(url).query(r=context.request.get_full_path())) @register.simple_tag(takes_context=True) @@ -112,7 +111,7 @@ def url_keep_return(context, view_name, *args): str: The URL. """ url = reverse(view_name, args=args) - return str(UrlBuilder(url).set("r", context.request.GET.get("r"))) + return str(UrlBuilder(url).query(r=context.request.GET.get("r"))) @register.simple_tag(takes_context=True) diff --git a/mia_core/utils.py b/mia_core/utils.py index f3ee0d6..a0ec118 100644 --- a/mia_core/utils.py +++ b/mia_core/utils.py @@ -197,19 +197,21 @@ class UrlBuilder: self.params = [x for x in self.params if x.name != name] return self - def set(self, name, value): - """Sets a query parameter. The current parameters with the - same name will be replaced. - - Args: - name (str): The parameter name - value (str): The parameter value - - Returns: - UrlBuilder: The URL builder itself, with the parameter - modified. + def query(self, **kwargs): + """A keyword-styled query parameter setter. The existing values are + always replaced. Multiple-values are added when the value is a list or + tuple. The existing values are dropped when the value is None. """ - return self.remove(name).add(name, value) + for key in kwargs: + self.remove(key) + if isinstance(kwargs[key], list) or isinstance(kwargs[key], tuple): + for value in kwargs[key]: + self.add(key, value) + elif kwargs[key] is None: + pass + else: + self.add(key, kwargs[key]) + return self def clone(self): """Returns a copy of this URL builder.