1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 from __future__
import absolute_import
, print_function
, unicode_literals
14 class PresetHandler(object):
16 def __init__(self
, path
):
22 if not self
._presets
and os
.path
.isfile(self
.path
):
23 with
open(self
.path
, 'r') as fh
:
24 self
._presets
= yaml
.safe_load(fh
) or {}
28 def __contains__(self
, name
):
29 return name
in self
.presets
31 def __getitem__(self
, name
):
32 return self
.presets
[name
]
35 return len(self
.presets
)
40 return yaml
.safe_dump(self
.presets
, default_flow_style
=False)
44 print("no presets found")
49 if 'EDITOR' not in os
.environ
:
50 print("error: must set the $EDITOR environment variable to use --edit-presets")
53 subprocess
.call(shlex
.split(os
.environ
['EDITOR']) + [self
.path
])
55 def save(self
, name
, **data
):
56 self
.presets
[name
] = data
58 with
open(self
.path
, "w") as fh
:
62 class MergedHandler(object):
63 def __init__(self
, *paths
):
64 """Helper class for dealing with multiple preset files."""
65 self
.handlers
= [PresetHandler(p
) for p
in paths
]
67 def __contains__(self
, name
):
68 return any(name
in handler
for handler
in self
.handlers
)
70 def __getitem__(self
, name
):
71 for handler
in self
.handlers
:
77 return sum(len(h
) for h
in self
.handlers
)
82 for handler
in self
.handlers
83 for k
, v
in handler
.presets
.items()
85 return yaml
.safe_dump(all_presets
, default_flow_style
=False)
89 print("no presets found")
92 for handler
in self
.handlers
:
95 val
= '\n '.join([''] + val
.splitlines() + ['']) # indent all lines by 2 spaces
96 print("Presets from {}:".format(handler
.path
))