|
@@ -203,7 +203,7 @@ def format_line(format, data):
|
|
|
raise PlaceholderError(format, data, e.__class__.__name__, str(e))
|
|
|
|
|
|
|
|
|
-def replace_placeholders(text):
|
|
|
+def replace_placeholders(text, overrides={}):
|
|
|
"""Replace placeholders in text with their values."""
|
|
|
from ..platform import fqdn, hostname, getosusername
|
|
|
current_time = datetime.now(timezone.utc)
|
|
@@ -220,6 +220,7 @@ def replace_placeholders(text):
|
|
|
'borgmajor': '%d' % borg_version_tuple[:1],
|
|
|
'borgminor': '%d.%d' % borg_version_tuple[:2],
|
|
|
'borgpatch': '%d.%d.%d' % borg_version_tuple[:3],
|
|
|
+ **overrides,
|
|
|
}
|
|
|
return format_line(text, data)
|
|
|
|
|
@@ -387,13 +388,13 @@ class Location:
|
|
|
)
|
|
|
""" + optional_archive_re, re.VERBOSE) # archive name (optional, may be empty)
|
|
|
|
|
|
- def __init__(self, text=''):
|
|
|
- if not self.parse(text):
|
|
|
+ def __init__(self, text='', overrides={}):
|
|
|
+ if not self.parse(text, overrides):
|
|
|
raise ValueError('Invalid location format: "%s"' % self.orig)
|
|
|
|
|
|
- def parse(self, text):
|
|
|
+ def parse(self, text, overrides={}):
|
|
|
self.orig = text
|
|
|
- text = replace_placeholders(text)
|
|
|
+ text = replace_placeholders(text, overrides)
|
|
|
valid = self._parse(text)
|
|
|
if valid:
|
|
|
return True
|
|
@@ -497,6 +498,12 @@ class Location:
|
|
|
':{}'.format(self.port) if self.port else '',
|
|
|
path)
|
|
|
|
|
|
+ def with_timestamp(self, timestamp):
|
|
|
+ return Location(self.orig, overrides={
|
|
|
+ 'now': DatetimeWrapper(timestamp.astimezone(None)),
|
|
|
+ 'utcnow': DatetimeWrapper(timestamp),
|
|
|
+ })
|
|
|
+
|
|
|
|
|
|
def location_validator(archive=None, proto=None):
|
|
|
def validator(text):
|