祖父-父-子备份轮转计算器
项目描述
GrandFatherSon是一个实现祖父-父-子轮转方案的备份轮转计算器。
这通常是通过保留一定数量的每日、每周和每月备份来完成的。为了减少使用的空间,应该删除较旧的备份。
用法
此模块期望输入为datetime.date或datetime.datetime对象。例如,假设您有1999年全年的每日备份需要轮转
>>> import datetime >>> start_date = datetime.date(1999, 1, 1) >>> end_date = datetime.date(1999, 12, 31) >>> backups = [start_date + datetime.timedelta(days=i) ... for i in range((end_date - start_date).days + 1)] >>> backups [datetime.date(1999, 1, 1), datetime.date(1999, 1, 2), datetime.date(1999, 1, 3), ... datetime.date(1999, 12, 30), datetime.date(1999, 12, 31)]
假设每个星期六进行完整备份,每天进行增量备份。应该保留一周或7天的增量备份。应该保留一个月或4周的完整备份。此外,对于三个月,每个月的第一个完整备份被保留,其余的备份被丢弃。
现在是年底的最后一天,您想找出哪些备份需要被修剪
>>> now = datetime.date(1999, 12, 31)
要查看需要保留的文件,请使用dates_to_keep函数
>>> from grandfatherson import dates_to_keep, SATURDAY >>> sorted(dates_to_keep(backups, days=7, weeks=4, months=3, ... firstweekday=SATURDAY, now=now)) [datetime.date(1999, 10, 1), datetime.date(1999, 11, 1), datetime.date(1999, 12, 1), datetime.date(1999, 12, 4), datetime.date(1999, 12, 11), datetime.date(1999, 12, 18), datetime.date(1999, 12, 25), datetime.date(1999, 12, 26), datetime.date(1999, 12, 27), datetime.date(1999, 12, 28), datetime.date(1999, 12, 29), datetime.date(1999, 12, 30), datetime.date(1999, 12, 31)]
如果您省略了now参数,它将默认使用datetime.datetime.now()。
要查看应该删除的文件,请使用dates_to_delete函数
>>> from grandfatherson import dates_to_delete, SATURDAY >>> sorted(dates_to_delete(backups, days=7, weeks=4, months=3, ... firstweekday=SATURDAY, now=now)) [datetime.date(1999, 1, 1), ... datetime.date(1999, 9, 30), datetime.date(1999, 10, 2), ... datetime.date(1999, 10, 31), datetime.date(1999, 11, 2), ... datetime.date(1999, 11, 30), datetime.date(1999, 12, 2), datetime.date(1999, 12, 3), datetime.date(1999, 12, 5), ... datetime.date(1999, 12, 10), datetime.date(1999, 12, 12), ... datetime.date(1999, 12, 17), datetime.date(1999, 12, 19), ... datetime.date(1999, 12, 24)]
最后,如果您需要轮转具有datetime格式的时标的备份,您可以使用相应的to_keep和to_delete函数
>>> now = datetime.datetime(1999, 12, 31, 23, 59, 59) >>> start_datetime = datetime.datetime(1999, 12, 31, 0, 0, 0) >>> end_datetime = datetime.datetime(1999, 12, 31, 23, 59, 59) >>> backups = [start_datetime + datetime.timedelta(seconds=i) ... for i ... in range((end_datetime - start_datetime).seconds + 1)] >>> backups [datetime.datetime(1999, 12, 31, 0, 0), datetime.datetime(1999, 12, 31, 0, 0, 1), datetime.datetime(1999, 12, 31, 0, 0, 2), ... datetime.datetime(1999, 12, 31, 23, 59, 58), datetime.datetime(1999, 12, 31, 23, 59, 59)] >>> from grandfatherson import to_keep >>> sorted(to_keep(backups, hours=2, minutes=10, seconds=10, now=now)) [datetime.datetime(1999, 12, 31, 22, 0), datetime.datetime(1999, 12, 31, 23, 0), datetime.datetime(1999, 12, 31, 23, 50), ... datetime.datetime(1999, 12, 31, 23, 59), datetime.datetime(1999, 12, 31, 23, 59, 50), ... datetime.datetime(1999, 12, 31, 23, 59, 59)] >>> from grandfatherson import to_delete >>> sorted(to_delete(backups, hours=2, minutes=10, seconds=10, now=now)) [datetime.datetime(1999, 12, 31, 0, 0), ... datetime.datetime(1999, 12, 31, 21, 59, 59), datetime.datetime(1999, 12, 31, 22, 0, 1), ... datetime.datetime(1999, 12, 31, 22, 59, 59), datetime.datetime(1999, 12, 31, 23, 0, 1), ... datetime.datetime(1999, 12, 31, 23, 49, 59), datetime.datetime(1999, 12, 31, 23, 50, 1), ... datetime.datetime(1999, 12, 31, 23, 58, 59), datetime.datetime(1999, 12, 31, 23, 59, 1), ... datetime.datetime(1999, 12, 31, 23, 59, 49)]
项目详情
关闭
GrandFatherSon-1.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b70a262c3ed10cacea3a1fd3f7ba53095479c4d68bd46f0869bc215fdc89f6fc |
|
MD5 | 4915275335a60acb6cc15559d64423eb |
|
BLAKE2b-256 | 091aaa26eaab11c1e0fcd3ae778c3def6d95a008c711b6b72797297d8675061d |