from __future__ import print_function,absolute_import,division _A5='expected the empty value, but found %r' _A4='cannot find module %r (%s)' _A3='expected non-empty name appended to the tag' _A2='tag:yaml.org,2002:map' _A1='tag:yaml.org,2002:seq' _A0='tag:yaml.org,2002:set' _z='tag:yaml.org,2002:pairs' _y='tag:yaml.org,2002:omap' _x='tag:yaml.org,2002:timestamp' _w='tag:yaml.org,2002:binary' _v='tag:yaml.org,2002:float' _u='tag:yaml.org,2002:int' _t='tag:yaml.org,2002:bool' _s='tag:yaml.org,2002:null' _r='could not determine a constructor for the tag %r' _q='second' _p='minute' _o='failed to construct timestamp from "{}"' _n='decodebytes' _m='failed to convert base64 data into ascii: %s' _l='expected a mapping or list of mappings for merging, but found %s' _k='expected a mapping for merging, but found %s' _j=' Duplicate keys will become an error in future releases, and are errors\n by default when using the new API.\n ' _i='\n To suppress this check see:\n http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys\n ' _h='tag:yaml.org,2002:merge' _g=' Duplicate keys will become an error in future releases, and are errors\n by default when using the new API.\n ' _f='\n To suppress this check see:\n http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys\n ' _e='expected a sequence node, but found %s' _d='expected a scalar node, but found %s' _c='while constructing a Python module' _b='expected a single mapping item, but found %d items' _a='expected a mapping of length 1, but found %s' _Z='expected a sequence, but found %s' _Y='failed to decode base64 data: %s' _X='tag:yaml.org,2002:value' _W='found duplicate key "{}"' _V='found unhashable key' _U='found unacceptable key (%s)' _T='__setstate__' _S='tz_hour' _R='hour' _Q='ascii' _P='tag:yaml.org,2002:str' _O='utf-8' _N='expected a mapping node, but found %s' _M='tz_minute' _L='+-' _K='while constructing an ordered map' _J='tz_sign' _I='fraction' _H='.' _G=':' _F='0' _E='while constructing a mapping' _D='_' _C=True _B=False _A=None import datetime,base64,binascii,re,sys,types,warnings from.error import MarkedYAMLError,MarkedYAMLFutureWarning,MantissaNoDotYAML1_1Warning from.nodes import* from.nodes import SequenceNode,MappingNode,ScalarNode from.compat import utf8,builtins_module,to_str,PY2,PY3,text_type,nprint,nprintf,version_tnf from.compat import ordereddict,Hashable,MutableSequence from.compat import MutableMapping from.comments import* from.comments import CommentedMap,CommentedOrderedMap,CommentedSet,CommentedKeySeq,CommentedSeq,TaggedScalar,CommentedKeyMap from.scalarstring import SingleQuotedScalarString,DoubleQuotedScalarString,LiteralScalarString,FoldedScalarString,PlainScalarString,ScalarString from.scalarint import ScalarInt,BinaryInt,OctalInt,HexInt,HexCapsInt from.scalarfloat import ScalarFloat from.scalarbool import ScalarBoolean from.timestamp import TimeStamp from.util import RegExp if _B:from typing import Any,Dict,List,Set,Generator,Union,Optional __all__=['BaseConstructor','SafeConstructor','Constructor','ConstructorError','RoundTripConstructor'] class ConstructorError(MarkedYAMLError):0 class DuplicateKeyFutureWarning(MarkedYAMLFutureWarning):0 class DuplicateKeyError(MarkedYAMLFutureWarning):0 class BaseConstructor: yaml_constructors={};yaml_multi_constructors={} def __init__(self,preserve_quotes=_A,loader=_A): self.loader=loader if self.loader is not _A and getattr(self.loader,'_constructor',_A)is _A:self.loader._constructor=self self.loader=loader;self.yaml_base_dict_type=dict;self.yaml_base_list_type=list;self.constructed_objects={};self.recursive_objects={};self.state_generators=[];self.deep_construct=_B;self._preserve_quotes=preserve_quotes;self.allow_duplicate_keys=version_tnf((0,15,1),(0,16)) @property def composer(self): if hasattr(self.loader,'typ'):return self.loader.composer try:return self.loader._composer except AttributeError:sys.stdout.write('slt {}\n'.format(type(self)));sys.stdout.write('slc {}\n'.format(self.loader._composer));sys.stdout.write('{}\n'.format(dir(self)));raise @property def resolver(self): if hasattr(self.loader,'typ'):return self.loader.resolver return self.loader._resolver def check_data(self):return self.composer.check_node() def get_data(self): if self.composer.check_node():return self.construct_document(self.composer.get_node()) def get_single_data(self): node=self.composer.get_single_node() if node is not _A:return self.construct_document(node) def construct_document(self,node): data=self.construct_object(node) while bool(self.state_generators): state_generators=self.state_generators;self.state_generators=[] for generator in state_generators: for _dummy in generator:0 self.constructed_objects={};self.recursive_objects={};self.deep_construct=_B;return data def construct_object(self,node,deep=_B): if node in self.constructed_objects:return self.constructed_objects[node] if deep:old_deep=self.deep_construct;self.deep_construct=_C if node in self.recursive_objects:return self.recursive_objects[node] self.recursive_objects[node]=_A;data=self.construct_non_recursive_object(node);self.constructed_objects[node]=data;del self.recursive_objects[node] if deep:self.deep_construct=old_deep return data def construct_non_recursive_object(self,node,tag=_A): constructor=_A;tag_suffix=_A if tag is _A:tag=node.tag if tag in self.yaml_constructors:constructor=self.yaml_constructors[tag] else: for tag_prefix in self.yaml_multi_constructors: if tag.startswith(tag_prefix):tag_suffix=tag[len(tag_prefix):];constructor=self.yaml_multi_constructors[tag_prefix];break else: if _A in self.yaml_multi_constructors:tag_suffix=tag;constructor=self.yaml_multi_constructors[_A] elif _A in self.yaml_constructors:constructor=self.yaml_constructors[_A] elif isinstance(node,ScalarNode):constructor=self.__class__.construct_scalar elif isinstance(node,SequenceNode):constructor=self.__class__.construct_sequence elif isinstance(node,MappingNode):constructor=self.__class__.construct_mapping if tag_suffix is _A:data=constructor(self,node) else:data=constructor(self,tag_suffix,node) if isinstance(data,types.GeneratorType): generator=data;data=next(generator) if self.deep_construct: for _dummy in generator:0 else:self.state_generators.append(generator) return data def construct_scalar(self,node): if not isinstance(node,ScalarNode):raise ConstructorError(_A,_A,_d%node.id,node.start_mark) return node.value def construct_sequence(self,node,deep=_B): if not isinstance(node,SequenceNode):raise ConstructorError(_A,_A,_e%node.id,node.start_mark) return[self.construct_object(child,deep=deep)for child in node.value] def construct_mapping(self,node,deep=_B): if not isinstance(node,MappingNode):raise ConstructorError(_A,_A,_N%node.id,node.start_mark) total_mapping=self.yaml_base_dict_type() if getattr(node,'merge',_A)is not _A:todo=[(node.merge,_B),(node.value,_B)] else:todo=[(node.value,_C)] for(values,check)in todo: mapping=self.yaml_base_dict_type() for(key_node,value_node)in values: key=self.construct_object(key_node,deep=_C) if not isinstance(key,Hashable): if isinstance(key,list):key=tuple(key) if PY2: try:hash(key) except TypeError as exc:raise ConstructorError(_E,node.start_mark,_U%exc,key_node.start_mark) elif not isinstance(key,Hashable):raise ConstructorError(_E,node.start_mark,_V,key_node.start_mark) value=self.construct_object(value_node,deep=deep) if check: if self.check_mapping_key(node,key_node,mapping,key,value):mapping[key]=value else:mapping[key]=value total_mapping.update(mapping) return total_mapping def check_mapping_key(self,node,key_node,mapping,key,value): if key in mapping: if not self.allow_duplicate_keys: mk=mapping.get(key) if PY2: if isinstance(key,unicode):key=key.encode(_O) if isinstance(value,unicode):value=value.encode(_O) if isinstance(mk,unicode):mk=mk.encode(_O) args=[_E,node.start_mark,'found duplicate key "{}" with value "{}" (original value: "{}")'.format(key,value,mk),key_node.start_mark,_f,_g] if self.allow_duplicate_keys is _A:warnings.warn(DuplicateKeyFutureWarning(*args)) else:raise DuplicateKeyError(*args) return _B return _C def check_set_key(self,node,key_node,setting,key): if key in setting: if not self.allow_duplicate_keys: if PY2: if isinstance(key,unicode):key=key.encode(_O) args=['while constructing a set',node.start_mark,_W.format(key),key_node.start_mark,_f,_g] if self.allow_duplicate_keys is _A:warnings.warn(DuplicateKeyFutureWarning(*args)) else:raise DuplicateKeyError(*args) def construct_pairs(self,node,deep=_B): if not isinstance(node,MappingNode):raise ConstructorError(_A,_A,_N%node.id,node.start_mark) pairs=[] for(key_node,value_node)in node.value:key=self.construct_object(key_node,deep=deep);value=self.construct_object(value_node,deep=deep);pairs.append((key,value)) return pairs @classmethod def add_constructor(cls,tag,constructor): if'yaml_constructors'not in cls.__dict__:cls.yaml_constructors=cls.yaml_constructors.copy() cls.yaml_constructors[tag]=constructor @classmethod def add_multi_constructor(cls,tag_prefix,multi_constructor): if'yaml_multi_constructors'not in cls.__dict__:cls.yaml_multi_constructors=cls.yaml_multi_constructors.copy() cls.yaml_multi_constructors[tag_prefix]=multi_constructor class SafeConstructor(BaseConstructor): def construct_scalar(self,node): if isinstance(node,MappingNode): for(key_node,value_node)in node.value: if key_node.tag==_X:return self.construct_scalar(value_node) return BaseConstructor.construct_scalar(self,node) def flatten_mapping(self,node): merge=[];index=0 while index[0-9][0-9][0-9][0-9])\n -(?P[0-9][0-9]?)\n -(?P[0-9][0-9]?)\n (?:((?P[Tt])|[ \\t]+) # explictly not retaining extra spaces\n (?P[0-9][0-9]?)\n :(?P[0-9][0-9])\n :(?P[0-9][0-9])\n (?:\\.(?P[0-9]*))?\n (?:[ \\t]*(?PZ|(?P[-+])(?P[0-9][0-9]?)\n (?::(?P[0-9][0-9]))?))?)?$',re.X) def construct_yaml_timestamp(self,node,values=_A): if values is _A: try:match=self.timestamp_regexp.match(node.value) except TypeError:match=_A if match is _A:raise ConstructorError(_A,_A,_o.format(node.value),node.start_mark) values=match.groupdict() year=int(values['year']);month=int(values['month']);day=int(values['day']) if not values[_R]:return datetime.date(year,month,day) hour=int(values[_R]);minute=int(values[_p]);second=int(values[_q]);fraction=0 if values[_I]: fraction_s=values[_I][:6] while len(fraction_s)<6:fraction_s+=_F fraction=int(fraction_s) if len(values[_I])>6 and int(values[_I][6])>4:fraction+=1 delta=_A if values[_J]: tz_hour=int(values[_S]);minutes=values[_M];tz_minute=int(minutes)if minutes else 0;delta=datetime.timedelta(hours=tz_hour,minutes=tz_minute) if values[_J]=='-':delta=-delta data=datetime.datetime(year,month,day,hour,minute,second,fraction) if delta:data-=delta return data def construct_yaml_omap(self,node): omap=ordereddict();yield omap if not isinstance(node,SequenceNode):raise ConstructorError(_K,node.start_mark,_Z%node.id,node.start_mark) for subnode in node.value: if not isinstance(subnode,MappingNode):raise ConstructorError(_K,node.start_mark,_a%subnode.id,subnode.start_mark) if len(subnode.value)!=1:raise ConstructorError(_K,node.start_mark,_b%len(subnode.value),subnode.start_mark) key_node,value_node=subnode.value[0];key=self.construct_object(key_node);assert key not in omap;value=self.construct_object(value_node);omap[key]=value def construct_yaml_pairs(self,node): A='while constructing pairs';pairs=[];yield pairs if not isinstance(node,SequenceNode):raise ConstructorError(A,node.start_mark,_Z%node.id,node.start_mark) for subnode in node.value: if not isinstance(subnode,MappingNode):raise ConstructorError(A,node.start_mark,_a%subnode.id,subnode.start_mark) if len(subnode.value)!=1:raise ConstructorError(A,node.start_mark,_b%len(subnode.value),subnode.start_mark) key_node,value_node=subnode.value[0];key=self.construct_object(key_node);value=self.construct_object(value_node);pairs.append((key,value)) def construct_yaml_set(self,node):data=set();yield data;value=self.construct_mapping(node);data.update(value) def construct_yaml_str(self,node): value=self.construct_scalar(node) if PY3:return value try:return value.encode(_Q) except UnicodeEncodeError:return value def construct_yaml_seq(self,node):data=self.yaml_base_list_type();yield data;data.extend(self.construct_sequence(node)) def construct_yaml_map(self,node):data=self.yaml_base_dict_type();yield data;value=self.construct_mapping(node);data.update(value) def construct_yaml_object(self,node,cls): data=cls.__new__(cls);yield data if hasattr(data,_T):state=self.construct_mapping(node,deep=_C);data.__setstate__(state) else:state=self.construct_mapping(node);data.__dict__.update(state) def construct_undefined(self,node):raise ConstructorError(_A,_A,_r%utf8(node.tag),node.start_mark) SafeConstructor.add_constructor(_s,SafeConstructor.construct_yaml_null) SafeConstructor.add_constructor(_t,SafeConstructor.construct_yaml_bool) SafeConstructor.add_constructor(_u,SafeConstructor.construct_yaml_int) SafeConstructor.add_constructor(_v,SafeConstructor.construct_yaml_float) SafeConstructor.add_constructor(_w,SafeConstructor.construct_yaml_binary) SafeConstructor.add_constructor(_x,SafeConstructor.construct_yaml_timestamp) SafeConstructor.add_constructor(_y,SafeConstructor.construct_yaml_omap) SafeConstructor.add_constructor(_z,SafeConstructor.construct_yaml_pairs) SafeConstructor.add_constructor(_A0,SafeConstructor.construct_yaml_set) SafeConstructor.add_constructor(_P,SafeConstructor.construct_yaml_str) SafeConstructor.add_constructor(_A1,SafeConstructor.construct_yaml_seq) SafeConstructor.add_constructor(_A2,SafeConstructor.construct_yaml_map) SafeConstructor.add_constructor(_A,SafeConstructor.construct_undefined) if PY2: class classobj:0 class Constructor(SafeConstructor): def construct_python_str(self,node):return utf8(self.construct_scalar(node)) def construct_python_unicode(self,node):return self.construct_scalar(node) if PY3: def construct_python_bytes(self,node): try:value=self.construct_scalar(node).encode(_Q) except UnicodeEncodeError as exc:raise ConstructorError(_A,_A,_m%exc,node.start_mark) try: if hasattr(base64,_n):return base64.decodebytes(value) else:return base64.decodestring(value) except binascii.Error as exc:raise ConstructorError(_A,_A,_Y%exc,node.start_mark) def construct_python_long(self,node): val=self.construct_yaml_int(node) if PY3:return val return int(val) def construct_python_complex(self,node):return complex(self.construct_scalar(node)) def construct_python_tuple(self,node):return tuple(self.construct_sequence(node)) def find_python_module(self,name,mark): if not name:raise ConstructorError(_c,mark,_A3,mark) try:__import__(name) except ImportError as exc:raise ConstructorError(_c,mark,_A4%(utf8(name),exc),mark) return sys.modules[name] def find_python_name(self,name,mark): A='while constructing a Python object' if not name:raise ConstructorError(A,mark,_A3,mark) if _H in name: lname=name.split(_H);lmodule_name=lname;lobject_name=[] while len(lmodule_name)>1: lobject_name.insert(0,lmodule_name.pop());module_name=_H.join(lmodule_name) try:__import__(module_name);break except ImportError:continue else:module_name=builtins_module;lobject_name=[name] try:__import__(module_name) except ImportError as exc:raise ConstructorError(A,mark,_A4%(utf8(module_name),exc),mark) module=sys.modules[module_name];object_name=_H.join(lobject_name);obj=module while lobject_name: if not hasattr(obj,lobject_name[0]):raise ConstructorError(A,mark,'cannot find %r in the module %r'%(utf8(object_name),module.__name__),mark) obj=getattr(obj,lobject_name.pop(0)) return obj def construct_python_name(self,suffix,node): value=self.construct_scalar(node) if value:raise ConstructorError('while constructing a Python name',node.start_mark,_A5%utf8(value),node.start_mark) return self.find_python_name(suffix,node.start_mark) def construct_python_module(self,suffix,node): value=self.construct_scalar(node) if value:raise ConstructorError(_c,node.start_mark,_A5%utf8(value),node.start_mark) return self.find_python_module(suffix,node.start_mark) def make_python_instance(self,suffix,node,args=_A,kwds=_A,newobj=_B): if not args:args=[] if not kwds:kwds={} cls=self.find_python_name(suffix,node.start_mark) if PY3: if newobj and isinstance(cls,type):return cls.__new__(cls,*args,**kwds) else:return cls(*args,**kwds) elif newobj and isinstance(cls,type(classobj))and not args and not kwds:instance=classobj();instance.__class__=cls;return instance elif newobj and isinstance(cls,type):return cls.__new__(cls,*args,**kwds) else:return cls(*args,**kwds) def set_python_instance_state(self,instance,state): if hasattr(instance,_T):instance.__setstate__(state) else: slotstate={} if isinstance(state,tuple)and len(state)==2:state,slotstate=state if hasattr(instance,'__dict__'):instance.__dict__.update(state) elif state:slotstate.update(state) for(key,value)in slotstate.items():setattr(instance,key,value) def construct_python_object(self,suffix,node):instance=self.make_python_instance(suffix,node,newobj=_C);self.recursive_objects[node]=instance;yield instance;deep=hasattr(instance,_T);state=self.construct_mapping(node,deep=deep);self.set_python_instance_state(instance,state) def construct_python_object_apply(self,suffix,node,newobj=_B): if isinstance(node,SequenceNode):args=self.construct_sequence(node,deep=_C);kwds={};state={};listitems=[];dictitems={} else:value=self.construct_mapping(node,deep=_C);args=value.get('args',[]);kwds=value.get('kwds',{});state=value.get('state',{});listitems=value.get('listitems',[]);dictitems=value.get('dictitems',{}) instance=self.make_python_instance(suffix,node,args,kwds,newobj) if bool(state):self.set_python_instance_state(instance,state) if bool(listitems):instance.extend(listitems) if bool(dictitems): for key in dictitems:instance[key]=dictitems[key] return instance def construct_python_object_new(self,suffix,node):return self.construct_python_object_apply(suffix,node,newobj=_C) Constructor.add_constructor('tag:yaml.org,2002:python/none',Constructor.construct_yaml_null) Constructor.add_constructor('tag:yaml.org,2002:python/bool',Constructor.construct_yaml_bool) Constructor.add_constructor('tag:yaml.org,2002:python/str',Constructor.construct_python_str) Constructor.add_constructor('tag:yaml.org,2002:python/unicode',Constructor.construct_python_unicode) if PY3:Constructor.add_constructor('tag:yaml.org,2002:python/bytes',Constructor.construct_python_bytes) Constructor.add_constructor('tag:yaml.org,2002:python/int',Constructor.construct_yaml_int) Constructor.add_constructor('tag:yaml.org,2002:python/long',Constructor.construct_python_long) Constructor.add_constructor('tag:yaml.org,2002:python/float',Constructor.construct_yaml_float) Constructor.add_constructor('tag:yaml.org,2002:python/complex',Constructor.construct_python_complex) Constructor.add_constructor('tag:yaml.org,2002:python/list',Constructor.construct_yaml_seq) Constructor.add_constructor('tag:yaml.org,2002:python/tuple',Constructor.construct_python_tuple) Constructor.add_constructor('tag:yaml.org,2002:python/dict',Constructor.construct_yaml_map) Constructor.add_multi_constructor('tag:yaml.org,2002:python/name:',Constructor.construct_python_name) Constructor.add_multi_constructor('tag:yaml.org,2002:python/module:',Constructor.construct_python_module) Constructor.add_multi_constructor('tag:yaml.org,2002:python/object:',Constructor.construct_python_object) Constructor.add_multi_constructor('tag:yaml.org,2002:python/object/apply:',Constructor.construct_python_object_apply) Constructor.add_multi_constructor('tag:yaml.org,2002:python/object/new:',Constructor.construct_python_object_new) class RoundTripConstructor(SafeConstructor): def construct_scalar(self,node): A='\x07' if not isinstance(node,ScalarNode):raise ConstructorError(_A,_A,_d%node.id,node.start_mark) if node.style=='|'and isinstance(node.value,text_type): lss=LiteralScalarString(node.value,anchor=node.anchor) if node.comment and node.comment[1]:lss.comment=node.comment[1][0] return lss if node.style=='>'and isinstance(node.value,text_type): fold_positions=[];idx=-1 while _C: idx=node.value.find(A,idx+1) if idx<0:break fold_positions.append(idx-len(fold_positions)) fss=FoldedScalarString(node.value.replace(A,''),anchor=node.anchor) if node.comment and node.comment[1]:fss.comment=node.comment[1][0] if fold_positions:fss.fold_pos=fold_positions return fss elif bool(self._preserve_quotes)and isinstance(node.value,text_type): if node.style=="'":return SingleQuotedScalarString(node.value,anchor=node.anchor) if node.style=='"':return DoubleQuotedScalarString(node.value,anchor=node.anchor) if node.anchor:return PlainScalarString(node.value,anchor=node.anchor) return node.value def construct_yaml_int(self,node): width=_A;value_su=to_str(self.construct_scalar(node)) try:sx=value_su.rstrip(_D);underscore=[len(sx)-sx.rindex(_D)-1,_B,_B] except ValueError:underscore=_A except IndexError:underscore=_A value_s=value_su.replace(_D,'');sign=+1 if value_s[0]=='-':sign=-1 if value_s[0]in _L:value_s=value_s[1:] if value_s==_F:return 0 elif value_s.startswith('0b'): if self.resolver.processing_version>(1,1)and value_s[2]==_F:width=len(value_s[2:]) if underscore is not _A:underscore[1]=value_su[2]==_D;underscore[2]=len(value_su[2:])>1 and value_su[-1]==_D return BinaryInt(sign*int(value_s[2:],2),width=width,underscore=underscore,anchor=node.anchor) elif value_s.startswith('0x'): if self.resolver.processing_version>(1,1)and value_s[2]==_F:width=len(value_s[2:]) hex_fun=HexInt for ch in value_s[2:]: if ch in'ABCDEF':hex_fun=HexCapsInt;break if ch in'abcdef':break if underscore is not _A:underscore[1]=value_su[2]==_D;underscore[2]=len(value_su[2:])>1 and value_su[-1]==_D return hex_fun(sign*int(value_s[2:],16),width=width,underscore=underscore,anchor=node.anchor) elif value_s.startswith('0o'): if self.resolver.processing_version>(1,1)and value_s[2]==_F:width=len(value_s[2:]) if underscore is not _A:underscore[1]=value_su[2]==_D;underscore[2]=len(value_su[2:])>1 and value_su[-1]==_D return OctalInt(sign*int(value_s[2:],8),width=width,underscore=underscore,anchor=node.anchor) elif self.resolver.processing_version!=(1,2)and value_s[0]==_F:return sign*int(value_s,8) elif self.resolver.processing_version!=(1,2)and _G in value_s: digits=[int(part)for part in value_s.split(_G)];digits.reverse();base=1;value=0 for digit in digits:value+=digit*base;base*=60 return sign*value elif self.resolver.processing_version>(1,1)and value_s[0]==_F: if underscore is not _A:underscore[2]=len(value_su)>1 and value_su[-1]==_D return ScalarInt(sign*int(value_s),width=len(value_s),underscore=underscore) elif underscore:underscore[2]=len(value_su)>1 and value_su[-1]==_D;return ScalarInt(sign*int(value_s),width=_A,underscore=underscore,anchor=node.anchor) elif node.anchor:return ScalarInt(sign*int(value_s),width=_A,anchor=node.anchor) else:return sign*int(value_s) def construct_yaml_float(self,node): def leading_zeros(v): lead0=0;idx=0 while idx2:seqtyp.yaml_end_comment_extend(node.comment[2],clear=_C) if node.anchor: from dynaconf.vendor.ruamel.yaml.serializer import templated_id if not templated_id(node.anchor):seqtyp.yaml_set_anchor(node.anchor) for(idx,child)in enumerate(node.value): if child.comment:seqtyp._yaml_add_comment(child.comment,key=idx);child.comment=_A ret_val.append(self.construct_object(child,deep=deep));seqtyp._yaml_set_idx_line_col(idx,[child.start_mark.line,child.start_mark.column]) return ret_val def flatten_mapping(self,node): def constructed(value_node): if value_node in self.constructed_objects:value=self.constructed_objects[value_node] else:value=self.construct_object(value_node,deep=_B) return value merge_map_list=[];index=0 while index2:maptyp.yaml_end_comment_extend(node.comment[2],clear=_C) if node.anchor: from dynaconf.vendor.ruamel.yaml.serializer import templated_id if not templated_id(node.anchor):maptyp.yaml_set_anchor(node.anchor) last_key,last_value=_A,self._sentinel for(key_node,value_node)in node.value: key=self.construct_object(key_node,deep=_C) if not isinstance(key,Hashable): if isinstance(key,MutableSequence): key_s=CommentedKeySeq(key) if key_node.flow_style is _C:key_s.fa.set_flow_style() elif key_node.flow_style is _B:key_s.fa.set_block_style() key=key_s elif isinstance(key,MutableMapping): key_m=CommentedKeyMap(key) if key_node.flow_style is _C:key_m.fa.set_flow_style() elif key_node.flow_style is _B:key_m.fa.set_block_style() key=key_m if PY2: try:hash(key) except TypeError as exc:raise ConstructorError(_E,node.start_mark,_U%exc,key_node.start_mark) elif not isinstance(key,Hashable):raise ConstructorError(_E,node.start_mark,_V,key_node.start_mark) value=self.construct_object(value_node,deep=deep) if self.check_mapping_key(node,key_node,maptyp,key,value): if key_node.comment and len(key_node.comment)>4 and key_node.comment[4]: if last_value is _A:key_node.comment[0]=key_node.comment.pop(4);maptyp._yaml_add_comment(key_node.comment,value=last_key) else:key_node.comment[2]=key_node.comment.pop(4);maptyp._yaml_add_comment(key_node.comment,key=key) key_node.comment=_A if key_node.comment:maptyp._yaml_add_comment(key_node.comment,key=key) if value_node.comment:maptyp._yaml_add_comment(value_node.comment,value=key) maptyp._yaml_set_kv_line_col(key,[key_node.start_mark.line,key_node.start_mark.column,value_node.start_mark.line,value_node.start_mark.column]);maptyp[key]=value;last_key,last_value=key,value if merge_map:maptyp.add_yaml_merge(merge_map) def construct_setting(self,node,typ,deep=_B): if not isinstance(node,MappingNode):raise ConstructorError(_A,_A,_N%node.id,node.start_mark) if node.comment: typ._yaml_add_comment(node.comment[:2]) if len(node.comment)>2:typ.yaml_end_comment_extend(node.comment[2],clear=_C) if node.anchor: from dynaconf.vendor.ruamel.yaml.serializer import templated_id if not templated_id(node.anchor):typ.yaml_set_anchor(node.anchor) for(key_node,value_node)in node.value: key=self.construct_object(key_node,deep=_C) if not isinstance(key,Hashable): if isinstance(key,list):key=tuple(key) if PY2: try:hash(key) except TypeError as exc:raise ConstructorError(_E,node.start_mark,_U%exc,key_node.start_mark) elif not isinstance(key,Hashable):raise ConstructorError(_E,node.start_mark,_V,key_node.start_mark) value=self.construct_object(value_node,deep=deep);self.check_set_key(node,key_node,typ,key) if key_node.comment:typ._yaml_add_comment(key_node.comment,key=key) if value_node.comment:typ._yaml_add_comment(value_node.comment,value=key) typ.add(key) def construct_yaml_seq(self,node): data=CommentedSeq();data._yaml_set_line_col(node.start_mark.line,node.start_mark.column) if node.comment:data._yaml_add_comment(node.comment) yield data;data.extend(self.construct_rt_sequence(node,data));self.set_collection_style(data,node) def construct_yaml_map(self,node):data=CommentedMap();data._yaml_set_line_col(node.start_mark.line,node.start_mark.column);yield data;self.construct_mapping(node,data,deep=_C);self.set_collection_style(data,node) def set_collection_style(self,data,node): if len(data)==0:return if node.flow_style is _C:data.fa.set_flow_style() elif node.flow_style is _B:data.fa.set_block_style() def construct_yaml_object(self,node,cls): data=cls.__new__(cls);yield data if hasattr(data,_T):state=SafeConstructor.construct_mapping(self,node,deep=_C);data.__setstate__(state) else:state=SafeConstructor.construct_mapping(self,node);data.__dict__.update(state) def construct_yaml_omap(self,node): omap=CommentedOrderedMap();omap._yaml_set_line_col(node.start_mark.line,node.start_mark.column) if node.flow_style is _C:omap.fa.set_flow_style() elif node.flow_style is _B:omap.fa.set_block_style() yield omap if node.comment: omap._yaml_add_comment(node.comment[:2]) if len(node.comment)>2:omap.yaml_end_comment_extend(node.comment[2],clear=_C) if not isinstance(node,SequenceNode):raise ConstructorError(_K,node.start_mark,_Z%node.id,node.start_mark) for subnode in node.value: if not isinstance(subnode,MappingNode):raise ConstructorError(_K,node.start_mark,_a%subnode.id,subnode.start_mark) if len(subnode.value)!=1:raise ConstructorError(_K,node.start_mark,_b%len(subnode.value),subnode.start_mark) key_node,value_node=subnode.value[0];key=self.construct_object(key_node);assert key not in omap;value=self.construct_object(value_node) if key_node.comment:omap._yaml_add_comment(key_node.comment,key=key) if subnode.comment:omap._yaml_add_comment(subnode.comment,key=key) if value_node.comment:omap._yaml_add_comment(value_node.comment,value=key) omap[key]=value def construct_yaml_set(self,node):data=CommentedSet();data._yaml_set_line_col(node.start_mark.line,node.start_mark.column);yield data;self.construct_setting(node,data) def construct_undefined(self,node): try: if isinstance(node,MappingNode): data=CommentedMap();data._yaml_set_line_col(node.start_mark.line,node.start_mark.column) if node.flow_style is _C:data.fa.set_flow_style() elif node.flow_style is _B:data.fa.set_block_style() data.yaml_set_tag(node.tag);yield data if node.anchor:data.yaml_set_anchor(node.anchor) self.construct_mapping(node,data);return elif isinstance(node,ScalarNode): data2=TaggedScalar();data2.value=self.construct_scalar(node);data2.style=node.style;data2.yaml_set_tag(node.tag);yield data2 if node.anchor:data2.yaml_set_anchor(node.anchor,always_dump=_C) return elif isinstance(node,SequenceNode): data3=CommentedSeq();data3._yaml_set_line_col(node.start_mark.line,node.start_mark.column) if node.flow_style is _C:data3.fa.set_flow_style() elif node.flow_style is _B:data3.fa.set_block_style() data3.yaml_set_tag(node.tag);yield data3 if node.anchor:data3.yaml_set_anchor(node.anchor) data3.extend(self.construct_sequence(node));return except:pass raise ConstructorError(_A,_A,_r%utf8(node.tag),node.start_mark) def construct_yaml_timestamp(self,node,values=_A): B='t';A='tz' try:match=self.timestamp_regexp.match(node.value) except TypeError:match=_A if match is _A:raise ConstructorError(_A,_A,_o.format(node.value),node.start_mark) values=match.groupdict() if not values[_R]:return SafeConstructor.construct_yaml_timestamp(self,node,values) for part in[B,_J,_S,_M]: if values[part]:break else:return SafeConstructor.construct_yaml_timestamp(self,node,values) year=int(values['year']);month=int(values['month']);day=int(values['day']);hour=int(values[_R]);minute=int(values[_p]);second=int(values[_q]);fraction=0 if values[_I]: fraction_s=values[_I][:6] while len(fraction_s)<6:fraction_s+=_F fraction=int(fraction_s) if len(values[_I])>6 and int(values[_I][6])>4:fraction+=1 delta=_A if values[_J]: tz_hour=int(values[_S]);minutes=values[_M];tz_minute=int(minutes)if minutes else 0;delta=datetime.timedelta(hours=tz_hour,minutes=tz_minute) if values[_J]=='-':delta=-delta if delta: dt=datetime.datetime(year,month,day,hour,minute);dt-=delta;data=TimeStamp(dt.year,dt.month,dt.day,dt.hour,dt.minute,second,fraction);data._yaml['delta']=delta;tz=values[_J]+values[_S] if values[_M]:tz+=_G+values[_M] data._yaml[A]=tz else: data=TimeStamp(year,month,day,hour,minute,second,fraction) if values[A]:data._yaml[A]=values[A] if values[B]:data._yaml[B]=_C return data def construct_yaml_bool(self,node): b=SafeConstructor.construct_yaml_bool(self,node) if node.anchor:return ScalarBoolean(b,anchor=node.anchor) return b RoundTripConstructor.add_constructor(_s,RoundTripConstructor.construct_yaml_null) RoundTripConstructor.add_constructor(_t,RoundTripConstructor.construct_yaml_bool) RoundTripConstructor.add_constructor(_u,RoundTripConstructor.construct_yaml_int) RoundTripConstructor.add_constructor(_v,RoundTripConstructor.construct_yaml_float) RoundTripConstructor.add_constructor(_w,RoundTripConstructor.construct_yaml_binary) RoundTripConstructor.add_constructor(_x,RoundTripConstructor.construct_yaml_timestamp) RoundTripConstructor.add_constructor(_y,RoundTripConstructor.construct_yaml_omap) RoundTripConstructor.add_constructor(_z,RoundTripConstructor.construct_yaml_pairs) RoundTripConstructor.add_constructor(_A0,RoundTripConstructor.construct_yaml_set) RoundTripConstructor.add_constructor(_P,RoundTripConstructor.construct_yaml_str) RoundTripConstructor.add_constructor(_A1,RoundTripConstructor.construct_yaml_seq) RoundTripConstructor.add_constructor(_A2,RoundTripConstructor.construct_yaml_map) RoundTripConstructor.add_constructor(_A,RoundTripConstructor.construct_undefined)