| 356 | |
| 357 | |
| 358 | def extract_expire_flags( |
| 359 | ex: Optional[ExpiryT] = None, |
| 360 | px: Optional[ExpiryT] = None, |
| 361 | exat: Optional[AbsExpiryT] = None, |
| 362 | pxat: Optional[AbsExpiryT] = None, |
| 363 | ) -> List[EncodableT]: |
| 364 | exp_options: list[EncodableT] = [] |
| 365 | if ex is not None: |
| 366 | exp_options.append("EX") |
| 367 | if isinstance(ex, datetime.timedelta): |
| 368 | exp_options.append(int(ex.total_seconds())) |
| 369 | elif isinstance(ex, int): |
| 370 | exp_options.append(ex) |
| 371 | elif isinstance(ex, str) and ex.isdigit(): |
| 372 | exp_options.append(int(ex)) |
| 373 | else: |
| 374 | raise DataError("ex must be datetime.timedelta or int") |
| 375 | elif px is not None: |
| 376 | exp_options.append("PX") |
| 377 | if isinstance(px, datetime.timedelta): |
| 378 | exp_options.append(int(px.total_seconds() * 1000)) |
| 379 | elif isinstance(px, int): |
| 380 | exp_options.append(px) |
| 381 | else: |
| 382 | raise DataError("px must be datetime.timedelta or int") |
| 383 | elif exat is not None: |
| 384 | if isinstance(exat, datetime.datetime): |
| 385 | exat = int(exat.timestamp()) |
| 386 | exp_options.extend(["EXAT", exat]) |
| 387 | elif pxat is not None: |
| 388 | if isinstance(pxat, datetime.datetime): |
| 389 | pxat = int(pxat.timestamp() * 1000) |
| 390 | exp_options.extend(["PXAT", pxat]) |
| 391 | |
| 392 | return exp_options |
| 393 | |
| 394 | |
| 395 | def truncate_text(txt, max_length=100): |