You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.0 KiB
68 lines
2.0 KiB
from __future__ import absolute_import,print_function
|
|
_A='lazy_self'
|
|
from functools import partial
|
|
import re
|
|
from.compat import text_type,binary_type
|
|
if False:from typing import Any,Dict,Optional,List,Text;from.compat import StreamTextType
|
|
class LazyEval:
|
|
def __init__(A,func,*C,**D):
|
|
def B():B=func(*C,**D);object.__setattr__(A,_A,lambda:B);return B
|
|
object.__setattr__(A,_A,B)
|
|
def __getattribute__(B,name):
|
|
A=object.__getattribute__(B,_A)
|
|
if name==_A:return A
|
|
return getattr(A(),name)
|
|
def __setattr__(A,name,value):setattr(A.lazy_self(),name,value)
|
|
RegExp=partial(LazyEval,re.compile)
|
|
def load_yaml_guess_indent(stream,**N):
|
|
D=stream;B=None;from.main import round_trip_load as O
|
|
def K(l):
|
|
A=0
|
|
while A<len(l)and l[A]==' ':A+=1
|
|
return A
|
|
if isinstance(D,text_type):F=D
|
|
elif isinstance(D,binary_type):F=D.decode('utf-8')
|
|
else:F=D.read()
|
|
G=B;H=B;L=B;E=B;I=0
|
|
for C in F.splitlines():
|
|
J=C.rstrip();P=J.lstrip()
|
|
if P.startswith('- '):
|
|
M=K(C);L=M-I;A=M+1
|
|
while C[A]==' ':A+=1
|
|
if C[A]=='#':continue
|
|
H=A-I;break
|
|
if G is B and E is not B and J:
|
|
A=0
|
|
while C[A]in' -':A+=1
|
|
if A>E:G=A-E
|
|
if J.endswith(':'):
|
|
I=K(C);A=0
|
|
while C[A]==' ':A+=1
|
|
E=A;continue
|
|
E=B
|
|
if H is B and G is not B:H=G
|
|
return O(F,**N),H,L
|
|
def configobj_walker(cfg):
|
|
B=cfg;from configobj import ConfigObj as D;assert isinstance(B,D)
|
|
for A in B.initial_comment:
|
|
if A.strip():yield A
|
|
for C in _walk_section(B):
|
|
if C.strip():yield C
|
|
for A in B.final_comment:
|
|
if A.strip():yield A
|
|
def _walk_section(s,level=0):
|
|
H=level;G="'";F='\n';from configobj import Section as J;assert isinstance(s,J);D=' '*H
|
|
for A in s.scalars:
|
|
for B in s.comments[A]:yield D+B.strip()
|
|
C=s[A]
|
|
if F in C:I=D+' ';C='|\n'+I+C.strip().replace(F,F+I)
|
|
elif':'in C:C=G+C.replace(G,"''")+G
|
|
E='{0}{1}: {2}'.format(D,A,C);B=s.inline_comments[A]
|
|
if B:E+=' '+B
|
|
yield E
|
|
for A in s.sections:
|
|
for B in s.comments[A]:yield D+B.strip()
|
|
E='{0}{1}:'.format(D,A);B=s.inline_comments[A]
|
|
if B:E+=' '+B
|
|
yield E
|
|
for K in _walk_section(s[A],level=H+1):yield K |