diff env/lib/python3.7/site-packages/pyaml/__init__.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/pyaml/__init__.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals, print_function
-
-import itertools as it, operator as op, functools as ft
-from collections import defaultdict, OrderedDict, namedtuple
-import os, sys, io, re
-
-import yaml
-
-if sys.version_info.major > 2: unicode = str
-
-
-class PrettyYAMLDumper(yaml.dumper.SafeDumper):
-
-	def __init__(self, *args, **kws):
-		self.pyaml_force_embed = kws.pop('force_embed', False)
-		self.pyaml_string_val_style = kws.pop('string_val_style', None)
-		self.pyaml_sort_dicts = kws.pop('sort_dicts', True)
-		return super(PrettyYAMLDumper, self).__init__(*args, **kws)
-
-	def represent_odict(dumper, data):
-		value = list()
-		node = yaml.nodes.MappingNode(
-			'tag:yaml.org,2002:map', value, flow_style=None )
-		if dumper.alias_key is not None:
-			dumper.represented_objects[dumper.alias_key] = node
-		for item_key, item_value in data.items():
-			node_key = dumper.represent_data(item_key)
-			node_value = dumper.represent_data(item_value)
-			value.append((node_key, node_value))
-		node.flow_style = False
-		return node
-
-	def represent_undefined(dumper, data):
-		if isinstance(data, tuple) and hasattr(data, '_make') and hasattr(data, '_asdict'):
-			return dumper.represent_odict(data._asdict()) # assuming namedtuple
-		elif isinstance(data, OrderedDict): return dumper.represent_odict(data)
-		elif isinstance(data, dict): return dumper.represent_dict(data)
-		elif callable(getattr(data, 'tolist', None)): return dumper.represent_data(data.tolist())
-		return super(PrettyYAMLDumper, dumper).represent_undefined(data)
-
-	def represent_dict(dumper, data):
-		if not dumper.pyaml_sort_dicts: return dumper.represent_odict(data)
-		return super(PrettyYAMLDumper, dumper).represent_dict(data)
-
-	def serialize_node(self, node, parent, index):
-		if self.pyaml_force_embed: self.serialized_nodes.clear()
-		return super(PrettyYAMLDumper, self).serialize_node(node, parent, index)
-
-	@staticmethod
-	def pyaml_transliterate(string):
-		if not all(ord(c) < 128 for c in string):
-			from unidecode import unidecode
-			string = unidecode(string)
-		string_new = ''
-		for ch in string:
-			if '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' or ch in '-_': string_new += ch
-			else: string_new += '_'
-		return string_new.lower()
-
-	def anchor_node(self, node, hint=list()):
-		if node in self.anchors:
-			if self.anchors[node] is None and not self.pyaml_force_embed:
-				self.anchors[node] = self.generate_anchor(node)\
-					if not hint else '{}'.format(
-						self.pyaml_transliterate(
-							'_-_'.join(map(op.attrgetter('value'), hint)) ) )
-		else:
-			self.anchors[node] = None
-			if isinstance(node, yaml.nodes.SequenceNode):
-				for item in node.value:
-					self.anchor_node(item)
-			elif isinstance(node, yaml.nodes.MappingNode):
-				for key, value in node.value:
-					self.anchor_node(key)
-					self.anchor_node(value, hint=hint+[key])
-
-PrettyYAMLDumper.add_representer(dict, PrettyYAMLDumper.represent_dict)
-PrettyYAMLDumper.add_representer(defaultdict, PrettyYAMLDumper.represent_dict)
-PrettyYAMLDumper.add_representer(OrderedDict, PrettyYAMLDumper.represent_odict)
-PrettyYAMLDumper.add_representer(set, PrettyYAMLDumper.represent_list)
-PrettyYAMLDumper.add_representer(None, PrettyYAMLDumper.represent_undefined)
-
-if sys.version_info.major >= 3:
-	try: import pathlib
-	except ImportError: pass
-	else:
-		PrettyYAMLDumper.add_representer(
-			type(pathlib.Path('')), lambda cls,o: cls.represent_data(str(o)) )
-
-
-class UnsafePrettyYAMLDumper(PrettyYAMLDumper):
-
-	def expect_block_sequence(self):
-		self.increase_indent(flow=False, indentless=False)
-		self.state = self.expect_first_block_sequence_item
-
-	def expect_block_sequence_item(self, first=False):
-		if not first and isinstance(self.event, yaml.events.SequenceEndEvent):
-			self.indent = self.indents.pop()
-			self.state = self.states.pop()
-		else:
-			self.write_indent()
-			self.write_indicator('-', True, indention=True)
-			self.states.append(self.expect_block_sequence_item)
-			self.expect_node(sequence=True)
-
-	def choose_scalar_style(self):
-		is_dict_key = self.states[-1] == self.expect_block_mapping_simple_value
-		if is_dict_key:
-			# Don't mess-up (replace) styles for dict keys, if possible
-			if self.pyaml_string_val_style: self.event.style = 'plain'
-		else:
-			# Make sure we don't create "key: null" mapping accidentally
-			if self.event.value.endswith(':'): self.event.style = "'"
-		return super(UnsafePrettyYAMLDumper, self).choose_scalar_style()\
-			if self.event.style != 'plain' else ("'" if ' ' in self.event.value else None)
-
-	def represent_stringish(dumper, data):
-		# Will crash on bytestrings with weird chars in them,
-		#  because we can't tell if it's supposed to be e.g. utf-8 readable string
-		#  or an arbitrary binary buffer, and former one *must* be pretty-printed
-		# PyYAML's Representer.represent_str does the guesswork and !!binary or !!python/str
-		# Explicit crash on any bytes object might be more sane, but also annoying
-		# Use something like base64 to encode such buffer values instead
-		# Having such binary stuff pretty much everywhere on unix (e.g. paths) kinda sucks
-		data = unicode(data) # read the comment above
-
-		# Try to use '|' style for multiline data,
-		#  quoting it with 'literal' if lines are too long anyway,
-		#  not sure if Emitter.analyze_scalar can also provide useful info here
-		style = dumper.pyaml_string_val_style
-		if not style:
-			style = 'plain'
-			if '\n' in data or not data or data == '-' or data[0] in '!&*[' or '#' in data:
-				style = 'literal'
-				if '\n' in data[:-1]:
-					for line in data.splitlines():
-						if len(line) > dumper.best_width: break
-					else: style = '|'
-
-		return yaml.representer.ScalarNode('tag:yaml.org,2002:str', data, style=style)
-
-for str_type in {bytes, unicode}:
-	UnsafePrettyYAMLDumper.add_representer(
-		str_type, UnsafePrettyYAMLDumper.represent_stringish )
-
-UnsafePrettyYAMLDumper.add_representer(
-	type(None), lambda s,o: s.represent_scalar('tag:yaml.org,2002:null', '') )
-
-def add_representer(*args, **kws):
-	PrettyYAMLDumper.add_representer(*args, **kws)
-	UnsafePrettyYAMLDumper.add_representer(*args, **kws)
-
-
-def dump_add_vspacing(buff, vspacing):
-	'Post-processing to add some nice-ish spacing for deeper map/list levels.'
-	if isinstance(vspacing, int):
-		vspacing = ['\n']*(vspacing+1)
-	buff.seek(0)
-	result = list()
-	for line in buff:
-		level = 0
-		line = line.decode('utf-8')
-		result.append(line)
-		if ':' in line or re.search(r'---(\s*$|\s)', line):
-			while line.startswith('  '):
-				level, line = level + 1, line[2:]
-			if len(vspacing) > level and len(result) != 1:
-				vspace = vspacing[level]
-				result.insert( -1, vspace
-					if not isinstance(vspace, int) else '\n'*vspace )
-	buff.seek(0), buff.truncate()
-	buff.write(''.join(result).encode('utf-8'))
-
-
-def dump_all(data, *dump_args, **dump_kws):
-	return dump(data, *dump_args, multiple_docs=True, **dump_kws)
-
-def dump( data, dst=unicode, safe=False, force_embed=False, vspacing=None,
-		string_val_style=None, sort_dicts=True, multiple_docs=False, **pyyaml_kws ):
-	buff = io.BytesIO()
-	Dumper = PrettyYAMLDumper if safe else UnsafePrettyYAMLDumper
-	Dumper = ft.partial( Dumper,
-		force_embed=force_embed, string_val_style=string_val_style, sort_dicts=sort_dicts )
-	if not multiple_docs: data = [data]
-	else: pyyaml_kws.setdefault('explicit_start', True)
-	yaml.dump_all( data, buff, Dumper=Dumper,
-		default_flow_style=False, allow_unicode=True, encoding='utf-8', **pyyaml_kws )
-
-	if vspacing is not None:
-		dump_add_vspacing(buff, vspacing)
-
-	buff = buff.getvalue()
-	if dst is bytes: return buff
-	elif dst is unicode: return buff.decode('utf-8')
-	else:
-		try: dst.write(b'') # tests if dst is unicode- or bytestream
-		except: dst.write(buff.decode('utf-8'))
-		else: dst.write(buff)
-
-def dumps(data, **dump_kws):
-	return dump(data, dst=bytes, **dump_kws)
-
-def pprint(*data, **dump_kws):
-	dst = dump_kws.pop('file', dump_kws.pop('dst', sys.stdout))
-	if len(data) == 1: data, = data
-	dump(data, dst=dst, **dump_kws)
-
-p, _p = pprint, print
-print = pprint # pyaml.print() won't work without "from __future__ import print_function"