from __future__ import print_function,absolute_import,division,unicode_literals _C='comment' _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__=_C;style='|' def __new__(A,value,anchor=_A):return ScalarString.__new__(A,value,anchor=anchor) PreservedScalarString=LiteralScalarString class FoldedScalarString(ScalarString): __slots__='fold_pos',_C;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)