Mini Shell
"""Helpers for yaml parsing"""
import yaml
class DumbYamlConstructor(yaml.constructor.SafeConstructor):
"""Subclass of SafeYamlConstructor that leaves bool/null/int as strs"""
ignored_tags = [
'tag:yaml.org,2002:bool',
'tag:yaml.org,2002:null',
'tag:yaml.org,2002:int',
]
def __init__(self):
super().__init__()
for tag in self.ignored_tags:
self.add_constructor(tag, DumbYamlConstructor.return_unchanged)
def return_unchanged(self, node):
"""Handler for scalars that shouldn't be converted"""
return self.construct_scalar(node)
class DumbYamlLoader(
yaml.reader.Reader,
yaml.scanner.Scanner,
yaml.parser.Parser,
yaml.composer.Composer,
DumbYamlConstructor,
yaml.resolver.Resolver,
):
"""Custom YAML loader that leaves bool/null/int as strs, for use
parsing cPanel's /etc/ YAML files
Example:
yaml.load(file_handle, rads.DumbYamlLoader)
"""
__module__ = 'rads'
def __init__(self, stream):
yaml.reader.Reader.__init__(self, stream)
yaml.scanner.Scanner.__init__(self)
yaml.parser.Parser.__init__(self)
yaml.composer.Composer.__init__(self)
DumbYamlConstructor.__init__(self)
yaml.resolver.Resolver.__init__(self)
Zerion Mini Shell 1.0