Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/yaml/__init__.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
| author | shellac |
|---|---|
| date | Sat, 02 May 2020 07:14:21 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:26e78fe6e8c4 |
|---|---|
| 1 | |
| 2 from .error import * | |
| 3 | |
| 4 from .tokens import * | |
| 5 from .events import * | |
| 6 from .nodes import * | |
| 7 | |
| 8 from .loader import * | |
| 9 from .dumper import * | |
| 10 | |
| 11 __version__ = '5.3.1' | |
| 12 try: | |
| 13 from .cyaml import * | |
| 14 __with_libyaml__ = True | |
| 15 except ImportError: | |
| 16 __with_libyaml__ = False | |
| 17 | |
| 18 import io | |
| 19 | |
| 20 #------------------------------------------------------------------------------ | |
| 21 # Warnings control | |
| 22 #------------------------------------------------------------------------------ | |
| 23 | |
| 24 # 'Global' warnings state: | |
| 25 _warnings_enabled = { | |
| 26 'YAMLLoadWarning': True, | |
| 27 } | |
| 28 | |
| 29 # Get or set global warnings' state | |
| 30 def warnings(settings=None): | |
| 31 if settings is None: | |
| 32 return _warnings_enabled | |
| 33 | |
| 34 if type(settings) is dict: | |
| 35 for key in settings: | |
| 36 if key in _warnings_enabled: | |
| 37 _warnings_enabled[key] = settings[key] | |
| 38 | |
| 39 # Warn when load() is called without Loader=... | |
| 40 class YAMLLoadWarning(RuntimeWarning): | |
| 41 pass | |
| 42 | |
| 43 def load_warning(method): | |
| 44 if _warnings_enabled['YAMLLoadWarning'] is False: | |
| 45 return | |
| 46 | |
| 47 import warnings | |
| 48 | |
| 49 message = ( | |
| 50 "calling yaml.%s() without Loader=... is deprecated, as the " | |
| 51 "default Loader is unsafe. Please read " | |
| 52 "https://msg.pyyaml.org/load for full details." | |
| 53 ) % method | |
| 54 | |
| 55 warnings.warn(message, YAMLLoadWarning, stacklevel=3) | |
| 56 | |
| 57 #------------------------------------------------------------------------------ | |
| 58 def scan(stream, Loader=Loader): | |
| 59 """ | |
| 60 Scan a YAML stream and produce scanning tokens. | |
| 61 """ | |
| 62 loader = Loader(stream) | |
| 63 try: | |
| 64 while loader.check_token(): | |
| 65 yield loader.get_token() | |
| 66 finally: | |
| 67 loader.dispose() | |
| 68 | |
| 69 def parse(stream, Loader=Loader): | |
| 70 """ | |
| 71 Parse a YAML stream and produce parsing events. | |
| 72 """ | |
| 73 loader = Loader(stream) | |
| 74 try: | |
| 75 while loader.check_event(): | |
| 76 yield loader.get_event() | |
| 77 finally: | |
| 78 loader.dispose() | |
| 79 | |
| 80 def compose(stream, Loader=Loader): | |
| 81 """ | |
| 82 Parse the first YAML document in a stream | |
| 83 and produce the corresponding representation tree. | |
| 84 """ | |
| 85 loader = Loader(stream) | |
| 86 try: | |
| 87 return loader.get_single_node() | |
| 88 finally: | |
| 89 loader.dispose() | |
| 90 | |
| 91 def compose_all(stream, Loader=Loader): | |
| 92 """ | |
| 93 Parse all YAML documents in a stream | |
| 94 and produce corresponding representation trees. | |
| 95 """ | |
| 96 loader = Loader(stream) | |
| 97 try: | |
| 98 while loader.check_node(): | |
| 99 yield loader.get_node() | |
| 100 finally: | |
| 101 loader.dispose() | |
| 102 | |
| 103 def load(stream, Loader=None): | |
| 104 """ | |
| 105 Parse the first YAML document in a stream | |
| 106 and produce the corresponding Python object. | |
| 107 """ | |
| 108 if Loader is None: | |
| 109 load_warning('load') | |
| 110 Loader = FullLoader | |
| 111 | |
| 112 loader = Loader(stream) | |
| 113 try: | |
| 114 return loader.get_single_data() | |
| 115 finally: | |
| 116 loader.dispose() | |
| 117 | |
| 118 def load_all(stream, Loader=None): | |
| 119 """ | |
| 120 Parse all YAML documents in a stream | |
| 121 and produce corresponding Python objects. | |
| 122 """ | |
| 123 if Loader is None: | |
| 124 load_warning('load_all') | |
| 125 Loader = FullLoader | |
| 126 | |
| 127 loader = Loader(stream) | |
| 128 try: | |
| 129 while loader.check_data(): | |
| 130 yield loader.get_data() | |
| 131 finally: | |
| 132 loader.dispose() | |
| 133 | |
| 134 def full_load(stream): | |
| 135 """ | |
| 136 Parse the first YAML document in a stream | |
| 137 and produce the corresponding Python object. | |
| 138 | |
| 139 Resolve all tags except those known to be | |
| 140 unsafe on untrusted input. | |
| 141 """ | |
| 142 return load(stream, FullLoader) | |
| 143 | |
| 144 def full_load_all(stream): | |
| 145 """ | |
| 146 Parse all YAML documents in a stream | |
| 147 and produce corresponding Python objects. | |
| 148 | |
| 149 Resolve all tags except those known to be | |
| 150 unsafe on untrusted input. | |
| 151 """ | |
| 152 return load_all(stream, FullLoader) | |
| 153 | |
| 154 def safe_load(stream): | |
| 155 """ | |
| 156 Parse the first YAML document in a stream | |
| 157 and produce the corresponding Python object. | |
| 158 | |
| 159 Resolve only basic YAML tags. This is known | |
| 160 to be safe for untrusted input. | |
| 161 """ | |
| 162 return load(stream, SafeLoader) | |
| 163 | |
| 164 def safe_load_all(stream): | |
| 165 """ | |
| 166 Parse all YAML documents in a stream | |
| 167 and produce corresponding Python objects. | |
| 168 | |
| 169 Resolve only basic YAML tags. This is known | |
| 170 to be safe for untrusted input. | |
| 171 """ | |
| 172 return load_all(stream, SafeLoader) | |
| 173 | |
| 174 def unsafe_load(stream): | |
| 175 """ | |
| 176 Parse the first YAML document in a stream | |
| 177 and produce the corresponding Python object. | |
| 178 | |
| 179 Resolve all tags, even those known to be | |
| 180 unsafe on untrusted input. | |
| 181 """ | |
| 182 return load(stream, UnsafeLoader) | |
| 183 | |
| 184 def unsafe_load_all(stream): | |
| 185 """ | |
| 186 Parse all YAML documents in a stream | |
| 187 and produce corresponding Python objects. | |
| 188 | |
| 189 Resolve all tags, even those known to be | |
| 190 unsafe on untrusted input. | |
| 191 """ | |
| 192 return load_all(stream, UnsafeLoader) | |
| 193 | |
| 194 def emit(events, stream=None, Dumper=Dumper, | |
| 195 canonical=None, indent=None, width=None, | |
| 196 allow_unicode=None, line_break=None): | |
| 197 """ | |
| 198 Emit YAML parsing events into a stream. | |
| 199 If stream is None, return the produced string instead. | |
| 200 """ | |
| 201 getvalue = None | |
| 202 if stream is None: | |
| 203 stream = io.StringIO() | |
| 204 getvalue = stream.getvalue | |
| 205 dumper = Dumper(stream, canonical=canonical, indent=indent, width=width, | |
| 206 allow_unicode=allow_unicode, line_break=line_break) | |
| 207 try: | |
| 208 for event in events: | |
| 209 dumper.emit(event) | |
| 210 finally: | |
| 211 dumper.dispose() | |
| 212 if getvalue: | |
| 213 return getvalue() | |
| 214 | |
| 215 def serialize_all(nodes, stream=None, Dumper=Dumper, | |
| 216 canonical=None, indent=None, width=None, | |
| 217 allow_unicode=None, line_break=None, | |
| 218 encoding=None, explicit_start=None, explicit_end=None, | |
| 219 version=None, tags=None): | |
| 220 """ | |
| 221 Serialize a sequence of representation trees into a YAML stream. | |
| 222 If stream is None, return the produced string instead. | |
| 223 """ | |
| 224 getvalue = None | |
| 225 if stream is None: | |
| 226 if encoding is None: | |
| 227 stream = io.StringIO() | |
| 228 else: | |
| 229 stream = io.BytesIO() | |
| 230 getvalue = stream.getvalue | |
| 231 dumper = Dumper(stream, canonical=canonical, indent=indent, width=width, | |
| 232 allow_unicode=allow_unicode, line_break=line_break, | |
| 233 encoding=encoding, version=version, tags=tags, | |
| 234 explicit_start=explicit_start, explicit_end=explicit_end) | |
| 235 try: | |
| 236 dumper.open() | |
| 237 for node in nodes: | |
| 238 dumper.serialize(node) | |
| 239 dumper.close() | |
| 240 finally: | |
| 241 dumper.dispose() | |
| 242 if getvalue: | |
| 243 return getvalue() | |
| 244 | |
| 245 def serialize(node, stream=None, Dumper=Dumper, **kwds): | |
| 246 """ | |
| 247 Serialize a representation tree into a YAML stream. | |
| 248 If stream is None, return the produced string instead. | |
| 249 """ | |
| 250 return serialize_all([node], stream, Dumper=Dumper, **kwds) | |
| 251 | |
| 252 def dump_all(documents, stream=None, Dumper=Dumper, | |
| 253 default_style=None, default_flow_style=False, | |
| 254 canonical=None, indent=None, width=None, | |
| 255 allow_unicode=None, line_break=None, | |
| 256 encoding=None, explicit_start=None, explicit_end=None, | |
| 257 version=None, tags=None, sort_keys=True): | |
| 258 """ | |
| 259 Serialize a sequence of Python objects into a YAML stream. | |
| 260 If stream is None, return the produced string instead. | |
| 261 """ | |
| 262 getvalue = None | |
| 263 if stream is None: | |
| 264 if encoding is None: | |
| 265 stream = io.StringIO() | |
| 266 else: | |
| 267 stream = io.BytesIO() | |
| 268 getvalue = stream.getvalue | |
| 269 dumper = Dumper(stream, default_style=default_style, | |
| 270 default_flow_style=default_flow_style, | |
| 271 canonical=canonical, indent=indent, width=width, | |
| 272 allow_unicode=allow_unicode, line_break=line_break, | |
| 273 encoding=encoding, version=version, tags=tags, | |
| 274 explicit_start=explicit_start, explicit_end=explicit_end, sort_keys=sort_keys) | |
| 275 try: | |
| 276 dumper.open() | |
| 277 for data in documents: | |
| 278 dumper.represent(data) | |
| 279 dumper.close() | |
| 280 finally: | |
| 281 dumper.dispose() | |
| 282 if getvalue: | |
| 283 return getvalue() | |
| 284 | |
| 285 def dump(data, stream=None, Dumper=Dumper, **kwds): | |
| 286 """ | |
| 287 Serialize a Python object into a YAML stream. | |
| 288 If stream is None, return the produced string instead. | |
| 289 """ | |
| 290 return dump_all([data], stream, Dumper=Dumper, **kwds) | |
| 291 | |
| 292 def safe_dump_all(documents, stream=None, **kwds): | |
| 293 """ | |
| 294 Serialize a sequence of Python objects into a YAML stream. | |
| 295 Produce only basic YAML tags. | |
| 296 If stream is None, return the produced string instead. | |
| 297 """ | |
| 298 return dump_all(documents, stream, Dumper=SafeDumper, **kwds) | |
| 299 | |
| 300 def safe_dump(data, stream=None, **kwds): | |
| 301 """ | |
| 302 Serialize a Python object into a YAML stream. | |
| 303 Produce only basic YAML tags. | |
| 304 If stream is None, return the produced string instead. | |
| 305 """ | |
| 306 return dump_all([data], stream, Dumper=SafeDumper, **kwds) | |
| 307 | |
| 308 def add_implicit_resolver(tag, regexp, first=None, | |
| 309 Loader=None, Dumper=Dumper): | |
| 310 """ | |
| 311 Add an implicit scalar detector. | |
| 312 If an implicit scalar value matches the given regexp, | |
| 313 the corresponding tag is assigned to the scalar. | |
| 314 first is a sequence of possible initial characters or None. | |
| 315 """ | |
| 316 if Loader is None: | |
| 317 loader.Loader.add_implicit_resolver(tag, regexp, first) | |
| 318 loader.FullLoader.add_implicit_resolver(tag, regexp, first) | |
| 319 loader.UnsafeLoader.add_implicit_resolver(tag, regexp, first) | |
| 320 else: | |
| 321 Loader.add_implicit_resolver(tag, regexp, first) | |
| 322 Dumper.add_implicit_resolver(tag, regexp, first) | |
| 323 | |
| 324 def add_path_resolver(tag, path, kind=None, Loader=None, Dumper=Dumper): | |
| 325 """ | |
| 326 Add a path based resolver for the given tag. | |
| 327 A path is a list of keys that forms a path | |
| 328 to a node in the representation tree. | |
| 329 Keys can be string values, integers, or None. | |
| 330 """ | |
| 331 if Loader is None: | |
| 332 loader.Loader.add_path_resolver(tag, path, kind) | |
| 333 loader.FullLoader.add_path_resolver(tag, path, kind) | |
| 334 loader.UnsafeLoader.add_path_resolver(tag, path, kind) | |
| 335 else: | |
| 336 Loader.add_path_resolver(tag, path, kind) | |
| 337 Dumper.add_path_resolver(tag, path, kind) | |
| 338 | |
| 339 def add_constructor(tag, constructor, Loader=None): | |
| 340 """ | |
| 341 Add a constructor for the given tag. | |
| 342 Constructor is a function that accepts a Loader instance | |
| 343 and a node object and produces the corresponding Python object. | |
| 344 """ | |
| 345 if Loader is None: | |
| 346 loader.Loader.add_constructor(tag, constructor) | |
| 347 loader.FullLoader.add_constructor(tag, constructor) | |
| 348 loader.UnsafeLoader.add_constructor(tag, constructor) | |
| 349 else: | |
| 350 Loader.add_constructor(tag, constructor) | |
| 351 | |
| 352 def add_multi_constructor(tag_prefix, multi_constructor, Loader=None): | |
| 353 """ | |
| 354 Add a multi-constructor for the given tag prefix. | |
| 355 Multi-constructor is called for a node if its tag starts with tag_prefix. | |
| 356 Multi-constructor accepts a Loader instance, a tag suffix, | |
| 357 and a node object and produces the corresponding Python object. | |
| 358 """ | |
| 359 if Loader is None: | |
| 360 loader.Loader.add_multi_constructor(tag_prefix, multi_constructor) | |
| 361 loader.FullLoader.add_multi_constructor(tag_prefix, multi_constructor) | |
| 362 loader.UnsafeLoader.add_multi_constructor(tag_prefix, multi_constructor) | |
| 363 else: | |
| 364 Loader.add_multi_constructor(tag_prefix, multi_constructor) | |
| 365 | |
| 366 def add_representer(data_type, representer, Dumper=Dumper): | |
| 367 """ | |
| 368 Add a representer for the given type. | |
| 369 Representer is a function accepting a Dumper instance | |
| 370 and an instance of the given data type | |
| 371 and producing the corresponding representation node. | |
| 372 """ | |
| 373 Dumper.add_representer(data_type, representer) | |
| 374 | |
| 375 def add_multi_representer(data_type, multi_representer, Dumper=Dumper): | |
| 376 """ | |
| 377 Add a representer for the given type. | |
| 378 Multi-representer is a function accepting a Dumper instance | |
| 379 and an instance of the given data type or subtype | |
| 380 and producing the corresponding representation node. | |
| 381 """ | |
| 382 Dumper.add_multi_representer(data_type, multi_representer) | |
| 383 | |
| 384 class YAMLObjectMetaclass(type): | |
| 385 """ | |
| 386 The metaclass for YAMLObject. | |
| 387 """ | |
| 388 def __init__(cls, name, bases, kwds): | |
| 389 super(YAMLObjectMetaclass, cls).__init__(name, bases, kwds) | |
| 390 if 'yaml_tag' in kwds and kwds['yaml_tag'] is not None: | |
| 391 if isinstance(cls.yaml_loader, list): | |
| 392 for loader in cls.yaml_loader: | |
| 393 loader.add_constructor(cls.yaml_tag, cls.from_yaml) | |
| 394 else: | |
| 395 cls.yaml_loader.add_constructor(cls.yaml_tag, cls.from_yaml) | |
| 396 | |
| 397 cls.yaml_dumper.add_representer(cls, cls.to_yaml) | |
| 398 | |
| 399 class YAMLObject(metaclass=YAMLObjectMetaclass): | |
| 400 """ | |
| 401 An object that can dump itself to a YAML stream | |
| 402 and load itself from a YAML stream. | |
| 403 """ | |
| 404 | |
| 405 __slots__ = () # no direct instantiation, so allow immutable subclasses | |
| 406 | |
| 407 yaml_loader = [Loader, FullLoader, UnsafeLoader] | |
| 408 yaml_dumper = Dumper | |
| 409 | |
| 410 yaml_tag = None | |
| 411 yaml_flow_style = None | |
| 412 | |
| 413 @classmethod | |
| 414 def from_yaml(cls, loader, node): | |
| 415 """ | |
| 416 Convert a representation node to a Python object. | |
| 417 """ | |
| 418 return loader.construct_yaml_object(node, cls) | |
| 419 | |
| 420 @classmethod | |
| 421 def to_yaml(cls, dumper, data): | |
| 422 """ | |
| 423 Convert a Python object to a representation node. | |
| 424 """ | |
| 425 return dumper.represent_yaml_object(cls.yaml_tag, data, cls, | |
| 426 flow_style=cls.yaml_flow_style) | |
| 427 |
