(
expire_value: int, expire_style: str
)
| 44 | |
| 45 | |
| 46 | async def get_expire_info( |
| 47 | expire_value: int, expire_style: str |
| 48 | ) -> Tuple[Optional[datetime.datetime], int, int, str]: |
| 49 | expired_count, used_count = -1, 0 |
| 50 | now = await get_now() |
| 51 | code = None |
| 52 | |
| 53 | max_timedelta = ( |
| 54 | datetime.timedelta(seconds=settings.max_save_seconds) |
| 55 | if settings.max_save_seconds > 0 |
| 56 | else datetime.timedelta(days=7) |
| 57 | ) |
| 58 | detail = ( |
| 59 | await max_save_times_desc(settings.max_save_seconds) |
| 60 | if settings.max_save_seconds > 0 |
| 61 | else "7天" |
| 62 | ) |
| 63 | detail = f"限制最长时间为 {detail[0]},可换用其他方式" |
| 64 | |
| 65 | expire_styles = { |
| 66 | "day": lambda: now + datetime.timedelta(days=expire_value), |
| 67 | "hour": lambda: now + datetime.timedelta(hours=expire_value), |
| 68 | "minute": lambda: now + datetime.timedelta(minutes=expire_value), |
| 69 | "count": lambda: (now + datetime.timedelta(days=1), expire_value), |
| 70 | "forever": lambda: (None, None), |
| 71 | } |
| 72 | |
| 73 | if expire_style in expire_styles: |
| 74 | result = expire_styles[expire_style]() |
| 75 | if isinstance(result, tuple): |
| 76 | expired_at, extra = result |
| 77 | if expire_style == "count": |
| 78 | expired_count = extra |
| 79 | else: |
| 80 | expired_at = result |
| 81 | if expired_at and expired_at - now > max_timedelta: |
| 82 | raise HTTPException(status_code=403, detail=detail) |
| 83 | else: |
| 84 | expired_at = now + datetime.timedelta(days=1) |
| 85 | |
| 86 | if not code: |
| 87 | code = await get_random_code() |
| 88 | |
| 89 | return expired_at, expired_count, used_count, code |
| 90 | |
| 91 | |
| 92 | def get_code_generate_type() -> str: |
no test coverage detected