t-bug-catcher 0.5.8__tar.gz → 0.5.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/PKG-INFO +1 -1
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/setup.cfg +1 -1
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/setup.py +1 -1
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/__init__.py +1 -1
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/bug_catcher.py +4 -2
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/jira.py +9 -2
- t_bug_catcher-0.5.10/t_bug_catcher/utils/logger.py +16 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher.egg-info/PKG-INFO +1 -1
- t_bug_catcher-0.5.8/t_bug_catcher/utils/logger.py +0 -24
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/MANIFEST.in +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/README.rst +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/pyproject.toml +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/requirements.txt +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/bug_snag.py +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/config.py +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/exceptions.py +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/resources/whispers_config.yml +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/stack_saver.py +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/utils/__init__.py +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/utils/common.py +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher/workitems.py +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher.egg-info/SOURCES.txt +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher.egg-info/dependency_links.txt +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher.egg-info/not-zip-safe +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher.egg-info/requires.txt +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/t_bug_catcher.egg-info/top_level.txt +0 -0
- {t_bug_catcher-0.5.8 → t_bug_catcher-0.5.10}/tests/test_t_bug_catcher.py +0 -0
|
@@ -26,7 +26,7 @@ setup(
|
|
|
26
26
|
packages=find_packages(include=["t_bug_catcher", "t_bug_catcher.*"]),
|
|
27
27
|
test_suite="tests",
|
|
28
28
|
url="https://www.thoughtful.ai/",
|
|
29
|
-
version="0.5.
|
|
29
|
+
version="0.5.10",
|
|
30
30
|
zip_safe=False,
|
|
31
31
|
install_requires=install_requirements,
|
|
32
32
|
include_package_data=True,
|
|
@@ -190,7 +190,7 @@ class BugCatcher:
|
|
|
190
190
|
frames = get_frames(exception.__traceback__)
|
|
191
191
|
exc_info = f"{os.path.basename(frames[-1].filename)}:{frames[-1].name}:{frames[-1].lineno}"
|
|
192
192
|
exception.handled_error = exc_info
|
|
193
|
-
|
|
193
|
+
logger.info(f"Exception {exc_info} reported.")
|
|
194
194
|
self.__errors_count += 1
|
|
195
195
|
|
|
196
196
|
def report_error_to_jira(
|
|
@@ -292,7 +292,9 @@ class BugCatcher:
|
|
|
292
292
|
self.__jira.report_unhandled_error(exc_type, exc_value, exc_traceback, stack_trace)
|
|
293
293
|
if self.__configurator.is_bugsnag_configured:
|
|
294
294
|
self.__bug_snag.report_unhandled_error(exc_type, exc_value, exc_traceback)
|
|
295
|
-
|
|
295
|
+
frames = get_frames(exc_value.__traceback__)
|
|
296
|
+
exc_info = f"{os.path.basename(frames[-1].filename)}:{frames[-1].name}:{frames[-1].lineno}"
|
|
297
|
+
logger.info(f"Exception {exc_info} reported.")
|
|
296
298
|
self.__errors_count += 1
|
|
297
299
|
|
|
298
300
|
def __get_sys_hook_attribute(self, attribute: str = "bug_catcher_client"):
|
|
@@ -15,6 +15,7 @@ from typing import List, Optional, Union
|
|
|
15
15
|
|
|
16
16
|
import requests
|
|
17
17
|
from requests.auth import HTTPBasicAuth
|
|
18
|
+
from requests.exceptions import ChunkedEncodingError
|
|
18
19
|
from retry import retry
|
|
19
20
|
|
|
20
21
|
from .config import CONFIG
|
|
@@ -29,11 +30,11 @@ def retry_if_bad_request(func):
|
|
|
29
30
|
attempt = 1
|
|
30
31
|
tries = 3
|
|
31
32
|
|
|
32
|
-
@retry(exceptions=BadRequestError, tries=tries, delay=1, backoff=2)
|
|
33
|
+
@retry(exceptions=(BadRequestError, ChunkedEncodingError), tries=tries, delay=1, backoff=2)
|
|
33
34
|
def wrapper(*args, **kwargs):
|
|
34
35
|
try:
|
|
35
36
|
return func(*args, **kwargs)
|
|
36
|
-
except BadRequestError as ex:
|
|
37
|
+
except (BadRequestError, ChunkedEncodingError) as ex:
|
|
37
38
|
nonlocal attempt
|
|
38
39
|
attempt = attempt + 1 if attempt < tries else 1
|
|
39
40
|
raise ex
|
|
@@ -1120,6 +1121,12 @@ class Jira:
|
|
|
1120
1121
|
else []
|
|
1121
1122
|
)
|
|
1122
1123
|
|
|
1124
|
+
if len(issue.get("fields", {}).get("comment", [])) >= 5000:
|
|
1125
|
+
logger.warning(
|
|
1126
|
+
f"Comments for '{issue.get('key')}' were not posted due to exceeding JIRA comments limit (5000)."
|
|
1127
|
+
)
|
|
1128
|
+
return
|
|
1129
|
+
|
|
1123
1130
|
self.update_comment(
|
|
1124
1131
|
ticket_id=issue["id"],
|
|
1125
1132
|
comments=self.__create_comment_markup(
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"""Logger."""
|
|
2
|
+
import logging
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
log_format = logging.Formatter("[%(asctime)s] %(levelname)-8s %(name)-17s %(message)s")
|
|
6
|
+
log_level = logging.DEBUG
|
|
7
|
+
logger = logging.getLogger("t_bug_catcher")
|
|
8
|
+
if logger.hasHandlers():
|
|
9
|
+
logger.handlers = []
|
|
10
|
+
logger.setLevel(log_level)
|
|
11
|
+
logger.propagate = False
|
|
12
|
+
|
|
13
|
+
handler = logging.StreamHandler(sys.stdout)
|
|
14
|
+
handler.setLevel(log_level)
|
|
15
|
+
handler.setFormatter(log_format)
|
|
16
|
+
logger.addHandler(handler)
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"""Logger."""
|
|
2
|
-
import logging
|
|
3
|
-
|
|
4
|
-
try:
|
|
5
|
-
from libraries import logger
|
|
6
|
-
|
|
7
|
-
if not isinstance(logger, logging.Logger):
|
|
8
|
-
raise TypeError("Logger is not an instance of logging.Logger.")
|
|
9
|
-
except (ImportError, TypeError):
|
|
10
|
-
log_format = logging.Formatter(
|
|
11
|
-
r"%(asctime)s - %(levelname)-7s %(threadName)-12s [%(filename)s:%(lineno)s - %(funcName)s()] - %(message)s"
|
|
12
|
-
)
|
|
13
|
-
log_level = logging.DEBUG
|
|
14
|
-
|
|
15
|
-
logger = logging.getLogger("t_bug_catcher")
|
|
16
|
-
if logger.hasHandlers():
|
|
17
|
-
logger.handlers = []
|
|
18
|
-
logger.setLevel(log_level)
|
|
19
|
-
logger.propagate = False
|
|
20
|
-
|
|
21
|
-
handler = logging.StreamHandler()
|
|
22
|
-
handler.setLevel(log_level)
|
|
23
|
-
handler.setFormatter(log_format)
|
|
24
|
-
logger.addHandler(handler)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|