MCPcopy Create free account
hub / github.com/PyMySQL/PyMySQL / convert_timedelta

Function convert_timedelta

pymysql/converters.py:194–235  ·  view source on GitHub ↗

Returns a TIME column as a timedelta object: >>> convert_timedelta('25:06:17') datetime.timedelta(days=1, seconds=3977) >>> convert_timedelta('-25:06:17') datetime.timedelta(days=-2, seconds=82423) Illegal values are returned as string: >>> convert_timedelta('ran

(obj)

Source from the content-addressed store, hash-verified

192
193
194def convert_timedelta(obj):
195 """Returns a TIME column as a timedelta object:
196
197 >>> convert_timedelta('25:06:17')
198 datetime.timedelta(days=1, seconds=3977)
199 >>> convert_timedelta('-25:06:17')
200 datetime.timedelta(days=-2, seconds=82423)
201
202 Illegal values are returned as string:
203
204 >>> convert_timedelta('random crap')
205 'random crap'
206
207 Note that MySQL always returns TIME columns as (+|-)HH:MM:SS, but
208 can accept values as (+|-)DD HH:MM:SS. The latter format will not
209 be parsed correctly by this function.
210 """
211 if isinstance(obj, (bytes, bytearray)):
212 obj = obj.decode("ascii")
213
214 m = TIMEDELTA_RE.match(obj)
215 if not m:
216 return obj
217
218 try:
219 groups = list(m.groups())
220 groups[-1] = _convert_second_fraction(groups[-1])
221 negate = -1 if groups[0] else 1
222 hours, minutes, seconds, microseconds = groups[1:]
223
224 tdelta = (
225 datetime.timedelta(
226 hours=int(hours),
227 minutes=int(minutes),
228 seconds=int(seconds),
229 microseconds=int(microseconds),
230 )
231 * negate
232 )
233 return tdelta
234 except ValueError:
235 return obj
236
237
238TIME_RE = re.compile(r"(\d{1,2}):(\d{1,2}):(\d{1,2})(?:.(\d{1,6}))?")

Callers

nothing calls this directly

Calls 1

_convert_second_fractionFunction · 0.85

Tested by

no test coverage detected