Navigation

Source code for pytyp.s11n.yaml

# The contents of this file are subject to the Mozilla Public License# (MPL) Version 1.1 (the "License"); you may not use this file except# in compliance with the License. You may obtain a copy of the License# at http://www.mozilla.org/MPL/## Software distributed under the License is distributed on an "AS IS"# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See# the License for the specific language governing rights and# limitations under the License.## The Original Code is Pytyp (http://www.acooke.org/pytyp)# The Initial Developer of the Original Code is Andrew Cooke.# Portions created by the Initial Developer are Copyright (C) 2011# Andrew Cooke. All Rights Reserved.## Alternatively, the contents of this file may be used under the terms# of the LGPL license (the GNU Lesser General Public License,# http://www.gnu.org/licenses/lgpl.html), in which case the provisions# of the LGPL License are applicable instead of those above.## If you wish to allow use of your version of this file only under the# terms of the LGPL License and not to allow others to use your version# of this file under the MPL, indicate your decision by deleting the# provisions above and replace them with the notice and other provisions# required by the LGPL License. If you do not delete the provisions# above, a recipient may use your version of this file under either the# MPL or the LGPL License.try:fromyamlimportsafe_dump,safe_dump_all,safe_load,safe_load_allfrompytyp.s11n.baseimportencode,decode

[docs]defdump_all(data,stream=None,**kargs):''' Serialize a sequence of values as a YAML formatted stream (or return a string). :param data: A generators of Python values. :param stream: The destination for the data. :param kargs: Additional parameters are passed directly to the corresponding routine in pyyaml. :return: A string containing YAML encoded `data` if `stream` is `None`; otherwise `None` (output written to `stream`). Here is an example of encoding a series of Python classes, and then reading that back from YAML: >>> class Example(): ... def __init__(self, foo): ... self.foo = foo ... def __repr__(self): ... return '<Example({0})>'.format(self.foo) >>> dump_all([Example('abc'), Example('xyz')]) '{foo: abc}\\n--- {foo: xyz}\\n' >>> load_all = make_load_all([Example, Example]) >>> list(load_all('{foo: abc}\\n--- {foo: xyz}\\n')) [<Example(abc)>, <Example(xyz)>] .. note:: The `_all()` routines work with YAML's support for multiple documents. Each document is handled separately and the list `[Example, Example]` above, as an argument to `make_load_all()`, is not a type specification, but an iterable collection of type specifications, one per document. '''returnsafe_dump_all((encode(d)fordindata),stream=stream,**kargs)

[docs]defmake_load(spec):''' Create a replacement for the `load()` function in pyyaml that will deserialize a stream containing a YAML document to a Python object. :param spec: The type specification for the root object. Nested objects are defined by type annotations. See :ref:`decoding` for full details. :return: A replacement for `load()` in the PyYAML package which returns data structure as `spec`. The documentation for `dump()` above contains an example of use. '''defload(stream,**kargs):returndecode(safe_load(stream,**kargs),spec)returnload

[docs]defmake_load_all(spec):''' Create a replacement for the `load_all()` function in pyyaml that will deserialize a stream containing multiple YAML documents to Python objects. :param spec: A generator giving type specifications for the root objects. Nested objects are defined by type annotations. See :ref:`decoding` for full details. :return: A replacement for `load_all()` in the PyYAML package which returns data structure as `spec`. The documentation for `dump_all()` above contains an example of use. '''defload_all(stream,**kargs):for(s,d)inzip(spec,safe_load_all(stream,**kargs)):yielddecode(d,s)returnload_all