Coverage for chalicelib/core/log_tools/bugsnag.py: 70%

45 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 12:56 +0000

1import logging 

2 

3import requests 

4 

5from chalicelib.core.log_tools import log_tools 

6from chalicelib.utils.log import sanitize 

7from schemas import schemas 

8 

9logger = logging.getLogger(__name__) 

10IN_TY = "bugsnag" 

11 

12 

13def list_projects(auth_token): 

14 r = requests.get(url="https://api.bugsnag.com/user/organizations", 

15 params={"per_page": "100"}, 

16 headers={"Authorization": "token " + auth_token, "X-Version": "2"}) 

17 if r.status_code != 200: 17 ↛ 23line 17 didn't jump to line 23 because the condition on line 17 was always true

18 logger.error("=======> bugsnag get organizations: something went wrong") 

19 logger.error(r.status_code) 

20 logger.error(sanitize(r.text)) 

21 return [] 

22 

23 orgs = [] 

24 for i in r.json(): 

25 

26 pr = requests.get(url="https://api.bugsnag.com/organizations/%s/projects" % i["id"], 

27 params={"per_page": "100"}, 

28 headers={"Authorization": "token " + auth_token, "X-Version": "2"}) 

29 if pr.status_code != 200: 

30 logger.error("=======> bugsnag get projects: something went wrong") 

31 logger.error(pr.status_code) 

32 logger.error(sanitize(pr.text)) 

33 continue 

34 orgs.append({"name": i["name"], "projects": [{"name": p["name"], "id": p["id"]} for p in pr.json()]}) 

35 return orgs 

36 

37 

38def get_all(tenant_id): 

39 return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY) 

40 

41 

42def get(project_id): 

43 return log_tools.get(project_id=project_id, integration=IN_TY) 

44 

45 

46def update(tenant_id, project_id, changes): 

47 options = {} 

48 if "authorizationToken" in changes: 48 ↛ 50line 48 didn't jump to line 50 because the condition on line 48 was always true

49 options["authorizationToken"] = changes.pop("authorizationToken") 

50 if "bugsnagProjectId" in changes: 50 ↛ 52line 50 didn't jump to line 52 because the condition on line 50 was always true

51 options["bugsnagProjectId"] = changes.pop("bugsnagProjectId") 

52 return log_tools.edit(project_id=project_id, integration=IN_TY, changes=options) 

53 

54 

55def add(tenant_id, project_id, authorization_token, bugsnag_project_id): 

56 options = { 

57 "bugsnagProjectId": bugsnag_project_id, 

58 "authorizationToken": authorization_token, 

59 } 

60 return log_tools.add(project_id=project_id, integration=IN_TY, options=options) 

61 

62 

63def delete(tenant_id, project_id): 

64 return log_tools.delete(project_id=project_id, integration=IN_TY) 

65 

66 

67def add_edit(tenant_id, project_id, data:schemas.IntegrationBugsnagSchema ): 

68 s = get(project_id) 

69 if s is not None: 

70 return update(tenant_id=tenant_id, project_id=project_id, 

71 changes={"authorizationToken": data.authorization_token, 

72 "bugsnagProjectId": data.bugsnag_project_id}) 

73 else: 

74 return add(tenant_id=tenant_id, 

75 project_id=project_id, 

76 authorization_token=data.authorization_token, 

77 bugsnag_project_id=data.bugsnag_project_id)