in tracking/translations_parser/parser.py [0:0]
def parse(self) -> None:
"""
Parses and publishes training logs:
1. Optionally reads Marian context (version, configuration)
2. Looks for training or validation data among next lines
"""
if self.parsed:
raise Exception("The parser already ran.")
logs_iter = self._iter_log_entries()
logger.info("Reading logs stream.")
if not self.skip_marian_context:
# Copy logs iterable so we avoid reading out of context lines.
# This will not affect inner self._current_index, as we stop incrementing after reading the context.
logs_iter, copy = tee(logs_iter)
self.parse_marian_context(copy)
for publisher in self.publishers:
publisher.open(self)
# Run training and validation data parser
self.parse_data(logs_iter)
self.parsed = True
# Once all data has been parsed, call the final publication API
for publisher in self.publishers:
try:
publisher.publish()
# Publish optional metrics
if self.metrics:
publisher.handle_metrics(self.metrics)
except Exception as e:
logger.error(f"Error publishing data using {publisher.__class__.__name__}: {e}")
for publisher in self.publishers:
publisher.close()