File: scalarstring.py

package info (click to toggle)
python-dynaconf 3.2.12-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,900 kB
  • sloc: python: 21,464; sh: 9; makefile: 4
file content (56 lines) | stat: -rw-r--r-- 2,394 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from __future__ import print_function,absolute_import,division,unicode_literals
_B=False
_A=None
from.compat import text_type
from.anchor import Anchor
if _B:from typing import Text,Any,Dict,List
__all__=['ScalarString','LiteralScalarString','FoldedScalarString','SingleQuotedScalarString','DoubleQuotedScalarString','PlainScalarString','PreservedScalarString']
class ScalarString(text_type):
	__slots__=Anchor.attrib
	def __new__(D,*E,**A):
		B=A.pop('anchor',_A);C=text_type.__new__(D,*E,**A)
		if B is not _A:C.yaml_set_anchor(B,always_dump=True)
		return C
	def replace(A,old,new,maxreplace=-1):return type(A)(text_type.replace(A,old,new,maxreplace))
	@property
	def anchor(self):
		A=self
		if not hasattr(A,Anchor.attrib):setattr(A,Anchor.attrib,Anchor())
		return getattr(A,Anchor.attrib)
	def yaml_anchor(A,any=_B):
		if not hasattr(A,Anchor.attrib):return
		if any or A.anchor.always_dump:return A.anchor
	def yaml_set_anchor(A,value,always_dump=_B):A.anchor.value=value;A.anchor.always_dump=always_dump
class LiteralScalarString(ScalarString):
	__slots__='comment';style='|'
	def __new__(A,value,anchor=_A):return ScalarString.__new__(A,value,anchor=anchor)
PreservedScalarString=LiteralScalarString
class FoldedScalarString(ScalarString):
	__slots__='fold_pos','comment';style='>'
	def __new__(A,value,anchor=_A):return ScalarString.__new__(A,value,anchor=anchor)
class SingleQuotedScalarString(ScalarString):
	__slots__=();style="'"
	def __new__(A,value,anchor=_A):return ScalarString.__new__(A,value,anchor=anchor)
class DoubleQuotedScalarString(ScalarString):
	__slots__=();style='"'
	def __new__(A,value,anchor=_A):return ScalarString.__new__(A,value,anchor=anchor)
class PlainScalarString(ScalarString):
	__slots__=();style=''
	def __new__(A,value,anchor=_A):return ScalarString.__new__(A,value,anchor=anchor)
def preserve_literal(s):return LiteralScalarString(s.replace('\r\n','\n').replace('\r','\n'))
def walk_tree(base,map=_A):
	A=base;from dynaconf.vendor.ruamel.yaml.compat import string_types as E,MutableMapping as G,MutableSequence as H
	if map is _A:map={'\n':preserve_literal}
	if isinstance(A,G):
		for F in A:
			C=A[F]
			if isinstance(C,E):
				for B in map:
					if B in C:A[F]=map[B](C);break
			else:walk_tree(C)
	elif isinstance(A,H):
		for(I,D)in enumerate(A):
			if isinstance(D,E):
				for B in map:
					if B in D:A[I]=map[B](D);break
			else:walk_tree(D)