From 1f18e740539aed751865ecff9d0f3cba44230e54 Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Thu, 1 Oct 2020 11:49:53 +0200 Subject: Refactoring file structure, Added summary --- src/philo/log.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/philo/log.py (limited to 'src/philo/log.py') diff --git a/src/philo/log.py b/src/philo/log.py new file mode 100644 index 0000000..f5817d0 --- /dev/null +++ b/src/philo/log.py @@ -0,0 +1,47 @@ +# ############################################################################ # +# # +# ::: :::::::: # +# log.py :+: :+: :+: # +# +:+ +:+ +:+ # +# By: cacharle +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2020/10/01 10:51:39 by cacharle #+# #+# # +# Updated: 2020/10/01 11:30:53 by cacharle ### ########.fr # +# # +# ############################################################################ # + +import re + +from .event import Event +from . import error + +class Log: + def __init__(self, line: str, philo_num, start_time, end_time): + match = re.match( + r"^(?P\d+) " + r"(?P\d+) " + r"(?Pis thinking|is eating|is sleeping|died|has taken fork)$", + line + ) + if match is None: + raise error.Format(line, "wrong format") + + self._line = line + self.id = self._parse_ranged_int(match.group("id"), 1, philo_num) + self.timestamp = self._parse_ranged_int( + match.group("timestamp"), start_time, end_time) + + self.event = Event.from_string(match.group('event')) + + def _parse_ranged_int(self, s, lo, hi): + try: + value = int(s) + if not (lo <= value <= hi): + raise error.Format(self._line, + "{} should be between {} - {}".format(s, lo, hi)) + except ValueError: + raise error.Format(self._line, "{} sould be an integer".format(s)) + return value + + def __repr__(self): + return "{}ms #{} {}".format(self.timestamp, self.id, self.event) -- cgit