Skip to content

Commit 8c99c3e

Browse files
committed
Add subject to body of emails for OpenAI parser
1 parent 70ca5a3 commit 8c99c3e

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

circuit_maintenance_parser/provider.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ def get_maintenances(self, data: NotificationData) -> Iterable[Maintenance]:
133133
if os.getenv("PARSER_OPENAI_API_KEY"):
134134
self._processors.append(CombinedProcessor(data_parsers=[EmailDateParser, OpenAIParser]))
135135

136+
# Add subject to all html or text/* data_parts if not already present.
137+
self.add_subject_to_text(data)
138+
136139
for processor in self._processors:
137140
try:
138141
return processor.process(data, self.get_extended_data())
@@ -152,6 +155,30 @@ def get_maintenances(self, data: NotificationData) -> Iterable[Maintenance]:
152155
related_exceptions=related_exceptions,
153156
)
154157

158+
159+
def add_subject_to_text(self, data: NotificationData):
160+
"""Append the subject to all text/* data_parts if not already present."""
161+
subject = None
162+
for part in data.data_parts:
163+
if part.type == 'email-header-subject':
164+
subject = part.content.decode(errors='ignore')
165+
break
166+
if subject:
167+
new_data_parts = []
168+
for part in data.data_parts:
169+
if part.type.startswith('text/') or part.type.startswith('html'):
170+
content_str = part.content.decode(errors='ignore')
171+
if subject not in content_str:
172+
# Append subject and update content
173+
new_content = (content_str + '\n' + subject).encode()
174+
new_data_parts.append(type(part)(part.type, new_content))
175+
else:
176+
new_data_parts.append(part)
177+
else:
178+
new_data_parts.append(part)
179+
data.data_parts = new_data_parts
180+
181+
155182
@classmethod
156183
def get_default_organizer(cls) -> str:
157184
"""Expose default_organizer as class attribute."""

0 commit comments

Comments
 (0)