debian-tablib/tablib/formats/_yaml.py

66 lines
1.3 KiB
Python
Raw Normal View History

2010-09-25 11:49:21 +02:00
# -*- coding: utf-8 -*-
2010-09-25 22:49:21 +02:00
""" Tablib - YAML Support.
"""
2011-03-23 07:02:56 +01:00
import sys
2010-10-06 18:23:58 +02:00
try:
2011-02-17 22:31:52 +01:00
import yaml
2010-10-06 18:23:58 +02:00
except ImportError:
2011-03-23 07:17:26 +01:00
if sys.version_info[0] > 2:
2011-03-23 07:02:56 +01:00
import tablib.packages.yaml3 as yaml
else:
import tablib.packages.yaml as yaml
2010-10-06 18:23:58 +02:00
2010-09-25 11:49:21 +02:00
import tablib
2010-09-25 22:49:21 +02:00
2010-09-25 11:49:21 +02:00
title = 'yaml'
2012-06-08 09:10:43 +02:00
extensions = ('yaml', 'yml')
2010-09-25 11:49:21 +02:00
def export_set(dataset):
2011-02-17 22:31:52 +01:00
"""Returns YAML representation of Dataset."""
return yaml.safe_dump(dataset._package(ordered=False))
2010-09-25 11:49:21 +02:00
def export_book(databook):
2011-02-17 22:31:52 +01:00
"""Returns YAML representation of Databook."""
return yaml.safe_dump(databook._package(ordered=False))
2010-09-25 11:49:21 +02:00
2010-09-25 21:39:09 +02:00
def import_set(dset, in_stream):
2011-02-17 22:31:52 +01:00
"""Returns dataset from YAML stream."""
2010-09-25 11:49:21 +02:00
2011-02-17 22:31:52 +01:00
dset.wipe()
dset.dict = yaml.safe_load(in_stream)
2010-09-25 12:20:34 +02:00
2010-09-25 21:56:20 +02:00
def import_book(dbook, in_stream):
2011-02-17 22:31:52 +01:00
"""Returns databook from YAML stream."""
2010-09-25 12:20:34 +02:00
2011-02-17 22:31:52 +01:00
dbook.wipe()
2010-09-25 21:56:20 +02:00
for sheet in yaml.load(in_stream):
2011-03-23 08:56:07 +01:00
data = tablib.Dataset()
2011-02-17 22:31:52 +01:00
data.title = sheet['title']
data.dict = sheet['data']
dbook.add_sheet(data)
2010-09-26 00:03:03 +02:00
def detect(stream):
2011-02-17 22:31:52 +01:00
"""Returns True if given stream is valid YAML."""
try:
_yaml = yaml.safe_load(stream)
2011-02-17 22:31:52 +01:00
if isinstance(_yaml, (list, tuple, dict)):
return True
else:
return False
2012-01-29 17:18:30 +01:00
except (yaml.parser.ParserError, yaml.reader.ReaderError,
yaml.scanner.ScannerError):
return False