• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

digiteinfotech / kairon / 13115292153

03 Feb 2025 02:07PM UTC coverage: 90.041% (-0.2%) from 90.222%
13115292153

Pull #1779

github

web-flow
Merge eabf68bed into 0e29863a1
Pull Request #1779: Callback Service Change

193 of 272 new or added lines in 6 files covered. (70.96%)

5 existing lines in 2 files now uncovered.

24656 of 27383 relevant lines covered (90.04%)

0.9 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

85.71
/kairon/async_callback/router/pyscript_callback.py
1
from typing import Optional
1✔
2
from blacksheep import Router, Request, Response as BSResponse
1✔
3
from blacksheep.contents import JSONContent
1✔
4

5
from loguru import logger
1✔
6
from kairon.async_callback.processor import CallbackProcessor
1✔
7
from kairon.exceptions import AppException
1✔
8

9
router = Router()
1✔
10

11

12
async def process_router_message(token: str, identifier: Optional[str] = None, req_type: str = 'GET', request: Request = None) -> BSResponse:
1✔
13
    """Process the incoming request for the callback."""
14
    if not request:
1✔
15
        raise AppException("Request is not valid!")
1✔
16

17
    data = {
1✔
18
        'type': req_type,
19
        'body': None,
20
        'params': {},
21
    }
22

23
    if request.query:
1✔
NEW
24
        data['params'].update({key: request.query.get(key) for key in request.query.keys()})
×
25

26
    try:
1✔
27
        req_data = None
1✔
28

29
        try:
1✔
30
            req_data = await request.json()
1✔
31
            logger.info('Request Body type: json')
1✔
UNCOV
32
        except Exception as e:
×
UNCOV
33
            logger.info('Request Body type: text')
×
NEW
34
            req_data = await request.read()
×
UNCOV
35
            if req_data and len(req_data) > 0:
×
36
                req_data = req_data.decode('utf-8')
×
37
            else:
UNCOV
38
                req_data = None
×
39

40
        if req_data:
1✔
41
            data.update({"body": req_data})
1✔
42

43
        request_source = request.scope.get("client", ["unknown"])[0]
1✔
44
        logger.info(f"Request source IP: {request_source}")
1✔
45
        logger.info(f"Data from request: {data}")
1✔
46
        print(request_source)
1✔
47

48
        data, message, error_code = await CallbackProcessor.process_async_callback_request(
1✔
49
            token, identifier, data, request_source
50
        )
51

52
        return BSResponse(
1✔
53
            status=200,
54
            content=JSONContent({
55
                "message": message,
56
                "data": data,
57
                "error_code": error_code,
58
                "success": error_code == 0,
59
            })
60
        )
61
    except AppException as ae:
1✔
62
        logger.error(f"AppException: {ae}")
1✔
63
        return BSResponse(
1✔
64
            status=400,
65
            content=JSONContent({
66
                "message": str(ae),
67
                "error_code": 400,
68
                "data": None,
69
                "success": False,
70
            })
71
        )
72
    except Exception as e:
1✔
73
        logger.exception(e)
1✔
74
        return BSResponse(
1✔
75
            status=500,
76
            content=JSONContent({
77
                "message": str(e),
78
                "error_code": 400,
79
                "data": None,
80
                "success": False
81
            })
82
        )
83

84

85
@router.get("/callback/d/{identifier}/{token}")
1✔
86
async def execute_async_action_get(request: Request, identifier: str, token: str) -> BSResponse:
1✔
87
    print(token, identifier)
1✔
88
    return await process_router_message(token, identifier, 'GET', request)
1✔
89

90

91
@router.post("/callback/d/{identifier}/{token}")
1✔
92
async def execute_async_action_post(request: Request, identifier: str, token: str) -> BSResponse:
1✔
93
    return await process_router_message(token, identifier, 'POST', request)
1✔
94

95

96
@router.put("/callback/d/{identifier}/{token}")
1✔
97
async def execute_async_action_put(request: Request, identifier: str, token: str) -> BSResponse:
1✔
98
    return await process_router_message(token, identifier, 'PUT', request)
1✔
99

100

101
@router.patch("/callback/d/{identifier}/{token}")
1✔
102
async def execute_async_action_patch(request: Request, identifier: str, token: str) -> BSResponse:
1✔
103
    return await process_router_message(token, identifier, 'PATCH', request)
1✔
104

105

106
@router.delete("/callback/d/{identifier}/{token}")
1✔
107
async def execute_async_action_delete(request: Request, identifier: str, token: str) -> BSResponse:
1✔
108
    return await process_router_message(token, identifier, 'DELETE', request)
1✔
109

110

111
@router.post("/callback/s/{token}")
1✔
112
async def execute_async_action_standalone_post(request: Request, token: str) -> BSResponse:
1✔
113
    return await process_router_message(token, None, 'POST', request)
1✔
114

115

116
@router.put("/callback/s/{token}")
1✔
117
async def execute_async_action_standalone_put(request: Request, token: str) -> BSResponse:
1✔
NEW
118
    return await process_router_message(token, None, 'PUT', request)
×
119

120

121
@router.patch("/callback/s/{token}")
1✔
122
async def execute_async_action_standalone_patch(request: Request, token: str) -> BSResponse:
1✔
NEW
123
    return await process_router_message(token, None, 'PATCH', request)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc