|
10 | 10 | from ..archive import Archive |
11 | 11 | from ..cache import Cache |
12 | 12 | from ..constants import * # NOQA |
13 | | -from ..helpers import interval, int_or_interval, sig_int, archivename_validator |
| 13 | +from ..helpers import interval, int_or_flexibledelta, sig_int, archivename_validator |
14 | 14 | from ..helpers import ArchiveFormatter, ProgressIndicatorPercent, CommandError, Error |
15 | 15 | from ..manifest import Manifest |
16 | 16 |
|
@@ -105,11 +105,11 @@ def quarterly_3monthly_period_func(a): |
105 | 105 | DATETIME_MIN_WITH_ZONE = datetime.min.replace(tzinfo=timezone.utc) |
106 | 106 |
|
107 | 107 |
|
108 | | -def prune_split(archives, rule, n_or_interval, base_timestamp, kept_because={}): |
109 | | - if isinstance(n_or_interval, int): |
110 | | - n, earliest_timestamp = n_or_interval, None |
| 108 | +def prune_split(archives, rule, n_or_flexibledelta, base_timestamp, kept_because={}): |
| 109 | + if isinstance(n_or_flexibledelta, int): |
| 110 | + n, earliest_timestamp = n_or_flexibledelta, None |
111 | 111 | else: |
112 | | - n, earliest_timestamp = None, base_timestamp - n_or_interval |
| 112 | + n, earliest_timestamp = None, n_or_flexibledelta.subtract_from(base_timestamp, calendar=True) |
113 | 113 |
|
114 | 114 | def can_retain(a, keep): |
115 | 115 | if n is not None: |
@@ -194,9 +194,9 @@ def do_prune(self, args, repository, manifest): |
194 | 194 | base_timestamp = datetime.now().astimezone() |
195 | 195 | # find archives which need to be kept because of the various time period rules |
196 | 196 | for rule in PRUNING_PATTERNS.keys(): |
197 | | - num_or_interval = getattr(args, rule, None) |
198 | | - if num_or_interval is not None: |
199 | | - keep += prune_split(archives, rule, num_or_interval, base_timestamp, kept_because) |
| 197 | + n_or_flexibledelta = getattr(args, rule, None) |
| 198 | + if n_or_flexibledelta is not None: |
| 199 | + keep += prune_split(archives, rule, n_or_flexibledelta, base_timestamp, kept_because) |
200 | 200 |
|
201 | 201 | to_delete = set(archives) - set(keep) |
202 | 202 | with Cache(repository, manifest, iec=args.iec) as cache: |
@@ -346,74 +346,74 @@ def build_parser_prune(self, subparsers, common_parser, mid_common_parser): |
346 | 346 | subparser.add_argument( |
347 | 347 | "--keep", |
348 | 348 | dest="keep", |
349 | | - type=int_or_interval, |
| 349 | + type=int_or_flexibledelta, |
350 | 350 | action=Highlander, |
351 | 351 | help="number or time interval of archives to keep", |
352 | 352 | ) |
353 | 353 | subparser.add_argument( |
354 | 354 | "--keep-secondly", |
355 | 355 | dest="secondly", |
356 | | - type=int_or_interval, |
| 356 | + type=int_or_flexibledelta, |
357 | 357 | action=Highlander, |
358 | 358 | help="number or time interval of secondly archives to keep", |
359 | 359 | ) |
360 | 360 | subparser.add_argument( |
361 | 361 | "--keep-minutely", |
362 | 362 | dest="minutely", |
363 | | - type=int_or_interval, |
| 363 | + type=int_or_flexibledelta, |
364 | 364 | action=Highlander, |
365 | 365 | help="number or time interval of minutely archives to keep", |
366 | 366 | ) |
367 | 367 | subparser.add_argument( |
368 | 368 | "-H", |
369 | 369 | "--keep-hourly", |
370 | 370 | dest="hourly", |
371 | | - type=int_or_interval, |
| 371 | + type=int_or_flexibledelta, |
372 | 372 | action=Highlander, |
373 | 373 | help="number or time interval of hourly archives to keep", |
374 | 374 | ) |
375 | 375 | subparser.add_argument( |
376 | 376 | "-d", |
377 | 377 | "--keep-daily", |
378 | 378 | dest="daily", |
379 | | - type=int_or_interval, |
| 379 | + type=int_or_flexibledelta, |
380 | 380 | action=Highlander, |
381 | 381 | help="number or time interval of daily archives to keep", |
382 | 382 | ) |
383 | 383 | subparser.add_argument( |
384 | 384 | "-w", |
385 | 385 | "--keep-weekly", |
386 | 386 | dest="weekly", |
387 | | - type=int_or_interval, |
| 387 | + type=int_or_flexibledelta, |
388 | 388 | action=Highlander, |
389 | 389 | help="number or time interval of weekly archives to keep", |
390 | 390 | ) |
391 | 391 | subparser.add_argument( |
392 | 392 | "-m", |
393 | 393 | "--keep-monthly", |
394 | 394 | dest="monthly", |
395 | | - type=int_or_interval, |
| 395 | + type=int_or_flexibledelta, |
396 | 396 | action=Highlander, |
397 | 397 | help="number or time interval of monthly archives to keep", |
398 | 398 | ) |
399 | 399 | quarterly_group = subparser.add_mutually_exclusive_group() |
400 | 400 | quarterly_group.add_argument( |
401 | 401 | "--keep-13weekly", |
402 | 402 | dest="quarterly_13weekly", |
403 | | - type=int_or_interval, |
| 403 | + type=int_or_flexibledelta, |
404 | 404 | help="number or time interval of quarterly archives to keep (13 week strategy)", |
405 | 405 | ) |
406 | 406 | quarterly_group.add_argument( |
407 | 407 | "--keep-3monthly", |
408 | 408 | dest="quarterly_3monthly", |
409 | | - type=int_or_interval, |
| 409 | + type=int_or_flexibledelta, |
410 | 410 | help="number or time interval of quarterly archives to keep (3 month strategy)", |
411 | 411 | ) |
412 | 412 | subparser.add_argument( |
413 | 413 | "-y", |
414 | 414 | "--keep-yearly", |
415 | 415 | dest="yearly", |
416 | | - type=int_or_interval, |
| 416 | + type=int_or_flexibledelta, |
417 | 417 | action=Highlander, |
418 | 418 | help="number or time interval of yearly archives to keep", |
419 | 419 | ) |
|
0 commit comments