File: savedb.py

package info (click to toggle)
slm 2.11-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,504 kB
  • sloc: python: 15,349; javascript: 5,043; makefile: 184; sh: 182; xml: 57
file content (59 lines) | stat: -rwxr-xr-x 2,158 bytes parent folder | download | duplicates (2)
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
52
53
54
55
56
57
58
59
#! /usr/bin/python3

import sys
import os
import re
from subprocess import run
import argparse
from glob import glob
from datetime import datetime, timedelta

if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description='Enregistre la base de données')
    parser.add_argument(
        '--verify', action='store_true',
        help="(Optionnel) vérifier ce qui serait fait, sans rien faire vraiment")
    parser.add_argument(
        'dbdir', help="Répertoire contenant la base de données")
    options = parser.parse_args(sys.argv[1:])
    cmd = f"cd {options.dbdir}; " + \
        "zip media/sauvegarde/db-$(date +%Y-%m-%d_T_%H-%M-%S).sqlite3.zip " + \
        "db.sqlite3 > /dev/null 2>&1"
    if options.verify:
        print("On lancerait la commande :", repr(cmd))
    else:
        run(cmd, shell=True)
    saved = glob(os.path.join(options.dbdir, "media", "sauvegarde", "db*.zip"))
    save_dic={}
    for s in saved:
        m = re.match(
            r".*/db.*(\d\d\d\d)-(\d\d)-(\d\d)[_T]*(\d\d)-(\d\d)-(\d\d).*\.zip",
            s)
        if m:
            save_dic[s] = datetime(
                year = int(m.group(1)),
                month = int(m.group(2)),
                day = int(m.group(3)),
                hour = int(m.group(4)),
                minute = int(m.group(5)),
                second = int(m.group(6)),
            )
    plusDeQuinzeJours = datetime.now() - timedelta(days=14)
    plusDeQuatremois = datetime.now() - timedelta(days=4*30.5)
    for s in save_dic:
        wd = save_dic[s].date().weekday()
        vieux = save_dic[s] < plusDeQuinzeJours
        tresvieux = save_dic[s] < plusDeQuatremois
        if vieux and wd != 6 or tresvieux:
            day = (
                "lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche").split(
                    ",")[wd]
            if tresvieux:
                explication = "fichier de plus de 4 mois"
            else:
                explication = f"fichier de plus de 15 jours, {day} (pas un dimanche)"
            if options.verify:
                print("On effacerait", s, explication)
            else:
                os.unlink(s)