You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by sh...@apache.org on 2021/10/12 03:39:27 UTC

[apisix-python-plugin-runner] branch master updated: fix: default response is empty (#34)

This is an automated email from the ASF dual-hosted git repository.

shuaijinchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-python-plugin-runner.git


The following commit(s) were added to refs/heads/master by this push:
     new fe6f842  fix: default response is empty (#34)
fe6f842 is described below

commit fe6f842ab4977820ff812e2f64f9cd2fbb00a62c
Author: 帅进超 <sh...@gmail.com>
AuthorDate: Tue Oct 12 11:39:15 2021 +0800

    fix: default response is empty (#34)
    
    * fix: default response is empty
    
    * test: update test case
    
    * test: update test function name
---
 .github/semantic.yml             | 15 +++++++++++++++
 .licenserc.yaml                  |  1 +
 apisix/runner/plugin/core.py     | 23 +++++++++++++++++++++++
 tests/runner/plugin/test_core.py | 18 ++++++++++++++++++
 4 files changed, 57 insertions(+)

diff --git a/.github/semantic.yml b/.github/semantic.yml
new file mode 100644
index 0000000..5fe591e
--- /dev/null
+++ b/.github/semantic.yml
@@ -0,0 +1,15 @@
+titleOnly: true
+allowRevertCommits: true
+types:
+  - feat
+  - fix
+  - docs
+  - style
+  - refactor
+  - perf
+  - test
+  - build
+  - ci
+  - chore
+  - revert
+  - change
diff --git a/.licenserc.yaml b/.licenserc.yaml
index b3b3b02..5cde714 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -31,5 +31,6 @@ header:
     - '**/__pycache__/**'
     - '**/images/**'
     - '**/config.json'
+    - '.github/'
 
   comment: on-failure
diff --git a/apisix/runner/plugin/core.py b/apisix/runner/plugin/core.py
index bab9af7..e5667fb 100644
--- a/apisix/runner/plugin/core.py
+++ b/apisix/runner/plugin/core.py
@@ -38,10 +38,33 @@ def execute(configs: dict, request, response) -> Tuple[int, str]:
             return RESP_STATUS_CODE_BAD_REQUEST, "execute plugin `%s`, %s" % (name, e.args.__str__())
         else:
             response.action_type = plugin.action
+            refresh_response(request, response)
 
     return RESP_STATUS_CODE_OK, RESP_STATUS_MESSAGE_OK
 
 
+def refresh_response(request, response) -> None:
+    # setting default header
+    if len(request.headers) >= 1:
+        for req_hk in request.headers.keys():
+            req_hv = request.headers.get(req_hk)
+            resp_hv = response.headers.get(req_hk)
+            if not resp_hv:
+                response.headers[req_hk] = req_hv
+
+    # setting default path
+    if not response.path or len(response.path) == 0:
+        response.path = request.path
+
+    # setting default args
+    if len(request.args) >= 1:
+        for req_ak in request.args.keys():
+            req_av = request.args.get(req_ak)
+            resp_av = response.args.get(req_ak)
+            if not resp_av:
+                response.args[req_ak] = req_av
+
+
 def loading() -> dict:
     path = "%s/plugins" % os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
     modules = iter_modules(path=[path])
diff --git a/tests/runner/plugin/test_core.py b/tests/runner/plugin/test_core.py
index 376090a..86ac90a 100644
--- a/tests/runner/plugin/test_core.py
+++ b/tests/runner/plugin/test_core.py
@@ -17,8 +17,10 @@
 
 import os
 from pkgutil import iter_modules
+
 from apisix.runner.plugin.core import loading as plugin_loading
 from apisix.runner.plugin.core import execute as plugin_execute
+from apisix.runner.plugin.core import refresh_response as refresh_response
 from apisix.runner.http.request import Request as NewHttpRequest
 from apisix.runner.http.response import Response as NewHttpResponse
 from apisix.runner.server.response import RESP_STATUS_CODE_OK
@@ -61,3 +63,19 @@ def test_execute():
     configs["test"] = Test()
     (code, _) = plugin_execute(configs, request, response)
     assert code == RESP_STATUS_CODE_BAD_REQUEST
+
+
+def test_refresh_response():
+    request = NewHttpRequest()
+    request.path = "/hello"
+    request.args = {
+        "q": "hello"
+    }
+    request.headers = {
+        "h": "world"
+    }
+    response = NewHttpResponse()
+    refresh_response(request, response)
+    assert request.path == response.path
+    assert request.args == response.args
+    assert request.headers == response.headers