t-bug-catcher 0.6.6__tar.gz → 0.6.7__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.6.6 → t_bug_catcher-0.6.7}/PKG-INFO +1 -1
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/setup.cfg +1 -1
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/setup.py +1 -1
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/__init__.py +1 -1
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/jira.py +6 -4
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/utils/common.py +17 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher.egg-info/PKG-INFO +1 -1
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/MANIFEST.in +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/README.rst +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/pyproject.toml +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/requirements.txt +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/bug_catcher.py +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/bug_snag.py +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/config.py +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/exceptions.py +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/resources/whispers_config.yml +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/stack_saver.py +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/utils/__init__.py +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/utils/logger.py +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher/workitems.py +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher.egg-info/SOURCES.txt +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher.egg-info/dependency_links.txt +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher.egg-info/not-zip-safe +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher.egg-info/requires.txt +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/t_bug_catcher.egg-info/top_level.txt +0 -0
- {t_bug_catcher-0.6.6 → t_bug_catcher-0.6.7}/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.6.
|
|
29
|
+
version="0.6.7",
|
|
30
30
|
zip_safe=False,
|
|
31
31
|
install_requires=install_requirements,
|
|
32
32
|
include_package_data=True,
|
|
@@ -22,7 +22,7 @@ from retry import retry
|
|
|
22
22
|
from .config import CONFIG
|
|
23
23
|
from .exceptions import BadRequestError
|
|
24
24
|
from .utils import logger
|
|
25
|
-
from .utils.common import Encoder, get_frames, remove_holotree_id, retrieve_build_info
|
|
25
|
+
from .utils.common import Encoder, clean_nested_data, get_frames, remove_holotree_id, retrieve_build_info
|
|
26
26
|
from .workitems import variables
|
|
27
27
|
|
|
28
28
|
|
|
@@ -856,8 +856,7 @@ class Jira:
|
|
|
856
856
|
exc_traceback_info: str = (
|
|
857
857
|
f"Traceback (most recent call last):\n{''.join(traceback.format_tb(exc_traceback)[-1])}{exc_info}"
|
|
858
858
|
)
|
|
859
|
-
|
|
860
|
-
return {
|
|
859
|
+
description = {
|
|
861
860
|
"version": 1,
|
|
862
861
|
"type": "doc",
|
|
863
862
|
"content": []
|
|
@@ -873,6 +872,7 @@ class Jira:
|
|
|
873
872
|
+ (self.__metadata_markup(metadata) if metadata else [])
|
|
874
873
|
+ self.__error_markup(error_id),
|
|
875
874
|
}
|
|
875
|
+
return clean_nested_data(description)
|
|
876
876
|
|
|
877
877
|
def __create_warning_description_markup(
|
|
878
878
|
self,
|
|
@@ -1501,7 +1501,9 @@ class Jira:
|
|
|
1501
1501
|
return response
|
|
1502
1502
|
except Exception as ex:
|
|
1503
1503
|
logger.warning(f"Failed to create Jira issue due to: {type(ex)}: {ex}")
|
|
1504
|
-
self.report_internal_error(
|
|
1504
|
+
self.report_internal_error(
|
|
1505
|
+
exception=ex, metadata=variables, additional_info="Failed to report unhandled error."
|
|
1506
|
+
)
|
|
1505
1507
|
return False
|
|
1506
1508
|
|
|
1507
1509
|
def report_internal_error(self, exception: Exception, metadata: dict = None, additional_info: str = None):
|
|
@@ -115,6 +115,23 @@ def remove_holotree_id(path: str) -> str:
|
|
|
115
115
|
return re.sub(pattern, r"\1", path)
|
|
116
116
|
|
|
117
117
|
|
|
118
|
+
def clean_nested_data(data):
|
|
119
|
+
"""Recursively replaces None values with empty strings in nested dictionaries and lists.
|
|
120
|
+
|
|
121
|
+
Args:
|
|
122
|
+
data: Input data structure (dict, list, or other type)
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
Cleaned data structure with None values replaced by empty strings
|
|
126
|
+
"""
|
|
127
|
+
if isinstance(data, dict):
|
|
128
|
+
return {key: clean_nested_data(value) for key, value in data.items()}
|
|
129
|
+
elif isinstance(data, (list, tuple)):
|
|
130
|
+
return [clean_nested_data(item) for item in data]
|
|
131
|
+
else:
|
|
132
|
+
return "" if data is None else data
|
|
133
|
+
|
|
134
|
+
|
|
118
135
|
def retrieve_build_info():
|
|
119
136
|
"""Logs build information."""
|
|
120
137
|
if not os.path.exists(CONFIG.BUILD_INFO_FILE):
|
|
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
|
|
File without changes
|