Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/yaml/__init__.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:32:28 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:d30785e31577 | 1:56ad4e20f292 |
---|---|
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 |