395
395
"""Parse an interval string as documented by Mandos before 1.6.1,
396
396
and return a datetime.timedelta
398
>>> parse_pre_1_6_1_interval('7d') == datetime.timedelta(days=7)
400
>>> parse_pre_1_6_1_interval('60s') == datetime.timedelta(0, 60)
402
>>> parse_pre_1_6_1_interval('60m') == datetime.timedelta(hours=1)
404
>>> parse_pre_1_6_1_interval('24h') == datetime.timedelta(days=1)
406
>>> parse_pre_1_6_1_interval('1w') == datetime.timedelta(days=7)
408
>>> parse_pre_1_6_1_interval('5m 30s') == datetime.timedelta(0, 330)
410
>>> parse_pre_1_6_1_interval('') == datetime.timedelta(0)
398
>>> parse_pre_1_6_1_interval("7d") == datetime.timedelta(days=7)
400
>>> parse_pre_1_6_1_interval("60s") == datetime.timedelta(0, 60)
402
>>> parse_pre_1_6_1_interval("60m") == datetime.timedelta(hours=1)
404
>>> parse_pre_1_6_1_interval("24h") == datetime.timedelta(days=1)
406
>>> parse_pre_1_6_1_interval("1w") == datetime.timedelta(days=7)
408
>>> parse_pre_1_6_1_interval("5m 30s") == datetime.timedelta(0, 330)
410
>>> parse_pre_1_6_1_interval("") == datetime.timedelta(0)
412
412
>>> # Ignore unknown characters, allow any order and repetitions
413
>>> parse_pre_1_6_1_interval('2dxy7zz11y3m5m') == datetime.timedelta(2, 480, 18000)
413
>>> parse_pre_1_6_1_interval("2dxy7zz11y3m5m") == datetime.timedelta(2, 480, 18000)
876
876
{key: properties[key]
877
877
for key in self.all_keywords}
878
878
for properties in clients.values()}
879
print(json.dumps(data, indent=4, separators=(',', ': ')))
879
print(json.dumps(data, indent=4, separators=(",", ": ")))
882
882
class PrintTable(Output):
2742
2742
class TestSetSecretCmd(TestPropertySetterCmd):
2743
2743
command = command.SetSecret
2744
2744
propname = "Secret"
2745
values_to_set = [io.BytesIO(b""),
2746
io.BytesIO(b"secret\0xyzzy\nbar")]
2747
values_to_get = [f.getvalue() for f in values_to_set]
2745
def __init__(self, *args, **kwargs):
2746
self.values_to_set = [io.BytesIO(b""),
2747
io.BytesIO(b"secret\0xyzzy\nbar")]
2748
self.values_to_get = [f.getvalue() for f in
2750
super(TestSetSecretCmd, self).__init__(*args, **kwargs)
2750
2753
class TestSetTimeoutCmd(TestPropertySetterCmd):
2806
def should_only_run_tests():
2809
def parse_test_args():
2810
# type: () -> argparse.Namespace
2807
2811
parser = argparse.ArgumentParser(add_help=False)
2808
parser.add_argument("--check", action='store_true')
2812
parser.add_argument("--check", action="store_true")
2813
parser.add_argument("--prefix", )
2809
2814
args, unknown_args = parser.parse_known_args()
2810
run_tests = args.check
2812
# Remove --check argument from sys.argv
2816
# Remove test options from sys.argv
2813
2817
sys.argv[1:] = unknown_args
2816
2820
# Add all tests from doctest strings
2817
2821
def load_tests(loader, tests, none):
2822
2826
if __name__ == "__main__":
2827
options = parse_test_args()
2824
if should_only_run_tests():
2825
# Call using ./tdd-python-script --check [--verbose]
2830
extra_test_prefix = options.prefix
2831
if extra_test_prefix is not None:
2832
if not (unittest.main(argv=[""], exit=False)
2833
.result.wasSuccessful()):
2835
class ExtraTestLoader(unittest.TestLoader):
2836
testMethodPrefix = extra_test_prefix
2837
# Call using ./scriptname --check [--verbose]
2838
unittest.main(argv=[""], testLoader=ExtraTestLoader())
2840
unittest.main(argv=[""])
2830
2844
logging.shutdown()
2848
# (lambda (&optional extra)
2849
# (if (not (funcall run-tests-in-test-buffer default-directory
2851
# (funcall show-test-buffer-in-test-window)
2852
# (funcall remove-test-window)
2853
# (if extra (message "Extra tests run successfully!"))))
2854
# run-tests-in-test-buffer:
2855
# (lambda (dir &optional extra)
2856
# (with-current-buffer (get-buffer-create "*Test*")
2857
# (setq buffer-read-only nil
2858
# default-directory dir)
2860
# (compilation-mode))
2861
# (let ((process-result
2862
# (let ((inhibit-read-only t))
2863
# (process-file-shell-command
2864
# (funcall get-command-line extra) nil "*Test*"))))
2865
# (and (numberp process-result)
2866
# (= process-result 0))))
2868
# (lambda (&optional extra)
2869
# (let ((quoted-script
2870
# (shell-quote-argument (funcall get-script-name))))
2872
# (concat "%s --check" (if extra " --prefix=atest" ""))
2876
# (if (fboundp 'file-local-name)
2877
# (file-local-name (buffer-file-name))
2878
# (or (file-remote-p (buffer-file-name) 'localname)
2879
# (buffer-file-name))))
2880
# remove-test-window:
2882
# (let ((test-window (get-buffer-window "*Test*")))
2883
# (if test-window (delete-window test-window))))
2884
# show-test-buffer-in-test-window:
2886
# (when (not (get-buffer-window-list "*Test*"))
2887
# (setq next-error-last-buffer (get-buffer "*Test*"))
2888
# (let* ((side (if (>= (window-width) 146) 'right 'bottom))
2889
# (display-buffer-overriding-action
2890
# `((display-buffer-in-side-window) (side . ,side)
2891
# (window-height . fit-window-to-buffer)
2892
# (window-width . fit-window-to-buffer))))
2893
# (display-buffer "*Test*"))))
2896
# (let* ((run-extra-tests (lambda () (interactive)
2897
# (funcall run-tests t)))
2898
# (inner-keymap `(keymap (116 . ,run-extra-tests))) ; t
2899
# (outer-keymap `(keymap (3 . ,inner-keymap)))) ; C-c
2900
# (setq minor-mode-overriding-map-alist
2901
# (cons `(run-tests . ,outer-keymap)
2902
# minor-mode-overriding-map-alist)))
2903
# (add-hook 'after-save-hook run-tests 90 t))