FileReader #5

Merged
bacant150 merged 15 commits from lab1_huranets into lab1 2026-02-26 10:04:10 +02:00
Showing only changes of commit d621390f51 - Show all commits

View File

@@ -24,8 +24,8 @@ class FileDatasource:
self._started = False self._started = False
# one-row buffers (supports CSVs with or without header) # one-row buffers (supports CSVs with or without header)
self._acc_buf: Optional[List[str]] = None self._acc_has_header: Optional[bool] = None
self._gps_buf: Optional[List[str]] = None self._gps_has_header: Optional[bool] = None
def startReading(self, *args, **kwargs): def startReading(self, *args, **kwargs):
"""Must be called before read()""" """Must be called before read()"""
@@ -50,8 +50,8 @@ class FileDatasource:
if not self._started: if not self._started:
raise RuntimeError("Datasource is not started. Call startReading() before read().") raise RuntimeError("Datasource is not started. Call startReading() before read().")
acc_row = self._get_next_row(self._acc_reader, self._acc_buf) acc_row = self._get_next_row(self._acc_reader)
gps_row = self._get_next_row(self._gps_reader, self._gps_buf) gps_row = self._get_next_row(self._gps_reader)
acc = self._parse_acc(acc_row) acc = self._parse_acc(acc_row)
gps = self._parse_gps(gps_row) gps = self._parse_gps(gps_row)
@@ -78,16 +78,12 @@ class FileDatasource:
self._acc_reader = csv.reader(self._acc_f, skipinitialspace=True) self._acc_reader = csv.reader(self._acc_f, skipinitialspace=True)
VladiusVostokus commented 2026-02-25 16:05:28 +02:00 (Migrated from github.com)
Review

if you open file, your read pointer is already 0, why to set it to 0 again?

if you open file, your read pointer is already 0, why to set it to 0 again?
bacant150 commented 2026-02-25 21:09:54 +02:00 (Migrated from github.com)
Review

I removed the unnecessary rewind from _open_files().

I removed the unnecessary rewind from _open_files().
self._gps_reader = csv.reader(self._gps_f, skipinitialspace=True) self._gps_reader = csv.reader(self._gps_f, skipinitialspace=True)
self._acc_buf = None self._acc_has_header = None
self._gps_buf = None self._gps_has_header = None
# detect header / buffer first data row (we only need the buffered row) # detect header / buffer first data row (we only need the buffered row)
_, self._acc_buf = self._detect_header_and_buffer( self._rewind_acc()
self._acc_reader, expected_cols=3, header_tokens=("x", "y", "z") self._rewind_gps()
)
_, self._gps_buf = self._detect_header_and_buffer(
self._gps_reader, expected_cols=2, header_tokens=("longitude", "latitude")
)
def _close_files(self) -> None: def _close_files(self) -> None:
for f in (self._acc_f, self._gps_f): for f in (self._acc_f, self._gps_f):
@@ -101,8 +97,6 @@ class FileDatasource:
self._gps_f = None self._gps_f = None
self._acc_reader = None self._acc_reader = None
self._gps_reader = None self._gps_reader = None
self._acc_buf = None
self._gps_buf = None
def _rewind_acc(self) -> None: def _rewind_acc(self) -> None:
if self._acc_f is None: if self._acc_f is None:
@@ -110,7 +104,7 @@ class FileDatasource:
self._acc_f.seek(0) self._acc_f.seek(0)
VladiusVostokus commented 2026-02-25 16:06:38 +02:00 (Migrated from github.com)
Review

Why leave _ here if it's not used?

Why leave _ here if it's not used?
bacant150 commented 2026-02-25 21:13:00 +02:00 (Migrated from github.com)
Review

Good catch. The _detect_header_and_buffer helper wasn’t used and didn’t modify class state, so I removed it.

Good catch. The _detect_header_and_buffer helper wasn’t used and didn’t modify class state, so I removed it.
self._acc_reader = csv.reader(self._acc_f, skipinitialspace=True) self._acc_reader = csv.reader(self._acc_f, skipinitialspace=True)
next(self._acc_reader) # Skip header row next(self._acc_reader) # Skip header row
_, self._acc_buf = self._detect_header_and_buffer( self._acc_has_header, _ = self._detect_header_and_buffer(
self._acc_reader, expected_cols=3, header_tokens=("x", "y", "z") self._acc_reader, expected_cols=3, header_tokens=("x", "y", "z")
) )
@@ -120,22 +114,17 @@ class FileDatasource:
self._gps_f.seek(0) self._gps_f.seek(0)
VladiusVostokus commented 2026-02-25 15:52:46 +02:00 (Migrated from github.com)
Review

Why leave _ here if it's not used?
Maybe dont return anything from this method?

Why leave _ here if it's not used? Maybe dont return anything from this method?
VladiusVostokus commented 2026-02-25 16:00:51 +02:00 (Migrated from github.com)
Review

As I see this method doesn't modify any class fiels, so maybe just remove this method?

As I see this method doesn't modify any class fiels, so maybe just remove this method?
bacant150 commented 2026-02-25 20:57:57 +02:00 (Migrated from github.com)
Review

The _detect_header_and_buffer method was not modifying any class state and its return value was unused.
I removed the method and simplified the logic.

The _detect_header_and_buffer method was not modifying any class state and its return value was unused. I removed the method and simplified the logic.
self._gps_reader = csv.reader(self._gps_f, skipinitialspace=True) self._gps_reader = csv.reader(self._gps_f, skipinitialspace=True)
next(self._gps_reader) # Skip header row next(self._gps_reader) # Skip header row
_, self._gps_buf = self._detect_header_and_buffer( self._gps_has_header, _ = self._detect_header_and_buffer(
self._gps_reader, expected_cols=2, header_tokens=("longitude", "latitude") self._gps_reader, expected_cols=2, header_tokens=("longitude", "latitude")
) )
def _get_next_row(self, reader, buffer) -> List[str]: def _get_next_row(self, reader) -> List[str]:
"""Get the next valid row from the reader or buffer.""" """Get the next valid row from the reader."""
if reader is None: if reader is None:
raise RuntimeError("Reader is not initialized.") raise RuntimeError("Reader is not initialized.")
while True: while True:
if buffer is not None: row = next(reader, None)
row = buffer
buffer = None
else:
row = next(reader, None)
if row is None: if row is None:
# EOF -> rewind & continue # EOF -> rewind & continue
self._rewind_acc() if reader == self._acc_reader else self._rewind_gps() self._rewind_acc() if reader == self._acc_reader else self._rewind_gps()
VladiusVostokus commented 2026-02-25 11:10:29 +02:00 (Migrated from github.com)
Review

This looks a bit comlex
Why itarate though loop to get 1 row?

This looks a bit comlex Why itarate though loop to get 1 row?
bacant150 commented 2026-02-25 11:53:08 +02:00 (Migrated from github.com)
Review

"Simplified the line reading logic by replacing the while True loop with a clearer check

"Simplified the line reading logic by replacing the while True loop with a clearer check