Skip to content

Commit 916b3e7

Browse files
committed
refactor helper function to preserve original class layout
1 parent 592d9a2 commit 916b3e7

File tree

1 file changed

+27
-24
lines changed

1 file changed

+27
-24
lines changed

pandas/io/excel/_odfreader.py

+27-24
Original file line numberDiff line numberDiff line change
@@ -190,27 +190,6 @@ def _get_column_repeat(self, cell) -> int:
190190

191191
return int(cell.attributes.get((TABLENS, "number-columns-repeated"), 1))
192192

193-
def _parse_odf_time(self, value: str) -> datetime.time:
194-
"""
195-
This helper function parses ODF time value
196-
"""
197-
parts = ODF_ISOTIME_PATTERN.match(value)
198-
if parts is None:
199-
raise ValueError(f"Failed to parse ODF time value: {value}")
200-
hours, minutes, seconds, _, second_part = parts.group(*range(1, 6))
201-
if second_part is None:
202-
microseconds = 0
203-
else:
204-
microseconds = int(int(second_part) * pow(10, 6 - len(second_part)))
205-
return datetime.time(
206-
# ignore date part from some representations
207-
# and datetime.time restrict hour values to 0..23
208-
hour=int(hours) % 24,
209-
minute=int(minutes),
210-
second=int(seconds),
211-
microsecond=microseconds,
212-
)
213-
214193
def _get_cell_value(self, cell) -> Scalar | NaTType:
215194
from odf.namespaces import OFFICENS
216195

@@ -243,10 +222,9 @@ def _get_cell_value(self, cell) -> Scalar | NaTType:
243222
cell_value = cell.attributes.get((OFFICENS, "date-value"))
244223
return pd.Timestamp(cell_value)
245224
elif cell_type == "time":
246-
cell_value = cell.attributes.get((OFFICENS, "time-value"))
247-
stamp = self._parse_odf_time(str(cell_value))
225+
cell_value = self._get_cell_time_value(cell)
248226
# cast needed here because Scalar doesn't include datetime.time
249-
return cast(Scalar, stamp)
227+
return cast(Scalar, cell_value)
250228
else:
251229
self.close()
252230
raise ValueError(f"Unrecognized type {cell_type}")
@@ -277,3 +255,28 @@ def _get_cell_string_value(self, cell) -> str:
277255
else:
278256
value.append(str(fragment).strip("\n"))
279257
return "".join(value)
258+
259+
def _get_cell_time_value(self, cell) -> datetime.time:
260+
"""
261+
This helper function parses ODF time value
262+
"""
263+
from odf.namespaces import OFFICENS
264+
265+
value = cell.attributes.get((OFFICENS, "time-value"))
266+
parts = ODF_ISOTIME_PATTERN.match(value)
267+
if parts is None:
268+
raise ValueError(f"Failed to parse ODF time value: {value}")
269+
hours, minutes, seconds, _, second_part = parts.group(*range(1, 6))
270+
if second_part is None:
271+
microseconds = 0
272+
else:
273+
microseconds = int(int(second_part) * pow(10, 6 - len(second_part)))
274+
275+
return datetime.time(
276+
# ignore date part from some representations
277+
# and datetime.time restrict hour values to 0..23
278+
hour=int(hours) % 24,
279+
minute=int(minutes),
280+
second=int(seconds),
281+
microsecond=microseconds,
282+
)

0 commit comments

Comments
 (0)