-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmigrate_cron.py
More file actions
51 lines (39 loc) · 1.51 KB
/
migrate_cron.py
File metadata and controls
51 lines (39 loc) · 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import asyncio
import aiosqlite
DB_PATH = "bot.db"
DOW_MAP = {
'0': 'SUN', '1': 'MON', '2': 'TUE', '3': 'WED',
'4': 'THU', '5': 'FRI', '6': 'SAT', '7': 'SUN'
}
def normalize_cron(expression: str) -> str:
parts = expression.strip().split()
if len(parts) != 5:
return expression
dow_part = parts[4]
new_dow = ""
# Если там уже буквы - ничего не меняем (грубая проверка)
# Но лучше пройтись посимвольно
for char in dow_part:
if char in DOW_MAP:
new_dow += DOW_MAP[char]
else:
new_dow += char
parts[4] = new_dow
return " ".join(parts)
async def migrate():
print("🔄 Исправление дней недели в Cron...")
async with aiosqlite.connect(DB_PATH) as db:
# 1. Берем все задачи
cursor = await db.execute("SELECT id, cron_expression FROM tasks")
rows = await cursor.fetchall()
count = 0
for task_id, cron_exp in rows:
new_cron = normalize_cron(cron_exp)
if new_cron != cron_exp:
print(f"🔧 ID {task_id}: {cron_exp} -> {new_cron}")
await db.execute("UPDATE tasks SET cron_expression = ? WHERE id = ?", (new_cron, task_id))
count += 1
await db.commit()
print(f"✅ Обновлено задач: {count}")
if __name__ == "__main__":
asyncio.run(migrate())