Skip to content

Commit

Permalink
[REQUEST-ACTIONS]: Dynamic trigger
Browse files Browse the repository at this point in the history
  • Loading branch information
amadolid committed Mar 20, 2024
1 parent 4c0396b commit bd4bb1d
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 0 deletions.
63 changes: 63 additions & 0 deletions jaseci_core/jaseci/extens/act_lib/request.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Built in actions for Jaseci"""

import requests
from jaseci.jsorc.live_actions import jaseci_action

Expand Down Expand Up @@ -167,3 +168,65 @@ def multipart(
stream.close()

return ret


@jaseci_action()
def trigger(
method: str,
url: str,
data: dict = None,
json: dict = None,
files: list = None,
header: dict = {},
meta: dict = {},
**kwargs
):
"""
Issue request
Param 1 - method
Param 2 - url
Param 3 - data (Optional) used for request body
Param 4 - files (Optional) used for request files
Param 5 - header
Return - response object
"""

hook = meta["h"]
_files = []
stream_to_be_close = []

if files is not None:
for f in files:
file_handler = hook.get_file_handler(f)
stream = file_handler.open("rb", None, True)
stream_to_be_close.append(stream)
_files.append(
(
file_handler.field or "file",
(file_handler.name, stream, file_handler.content_type),
)
)

act = getattr(requests, method)

if data is not None:
kwargs["data"] = data

if json is not None:
kwargs["json"] = json

if _files:
kwargs["files"] = _files

res = act(url, headers=header, **kwargs)
ret = {"status_code": res.status_code}
try:
ret["response"] = res.json()
except Exception:
ret["response"] = res.text

for stream in stream_to_be_close:
stream.close()

return ret
13 changes: 13 additions & 0 deletions jaseci_core/jaseci/extens/act_lib/tests/fixtures/request.jac
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
walker sample {
can request.trigger;

with entry {
report request.trigger("get", "https://dummyjson.com/products/1");
report request.trigger("post", "https://dummyjson.com/products/add", json={
"title": "Testing"
});
report request.trigger("put", "https://dummyjson.com/products/1", json={
"title": "Testing2"
});
}
}
31 changes: 31 additions & 0 deletions jaseci_core/jaseci/extens/act_lib/tests/test_request.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from jaseci.utils.test_core import CoreTest, jac_testcase


class RequestTests(CoreTest):
"""Unit tests for STD library language"""

fixture_src = __file__

@jac_testcase("request.jac", "sample")
def test_request_trigger(self, ret):
reports = ret["report"]
report: dict = reports[0]

self.assertEqual(200, report.get("status_code"))
self.assertIsNotNone(response := report.get("response"))
self.assertEqual(1, response["id"])
self.assertEqual("iPhone 9", response["title"])

report: dict = reports[1]

self.assertEqual(200, report.get("status_code"))
self.assertIsNotNone(response := report.get("response"))
self.assertEqual(101, response["id"])
self.assertEqual("Testing", response["title"])

report: dict = reports[2]

self.assertEqual(200, report.get("status_code"))
self.assertIsNotNone(response := report.get("response"))
self.assertEqual(1, response["id"])
self.assertEqual("Testing2", response["title"])

0 comments on commit bd4bb1d

Please sign in to comment.