m DEc@sdZdkZdkZdkZdklZdklZdZdZdZ dei i fdYZ d e fd YZ d e fd YZdS( sParser for ZConfig schemas.N(sinfo(surlcCs/t||i}tii|i||i S(N( t SchemaParsertloadertresourceturltparsertxmltsaxtparsetfilet_schema(RRR((t-/data/zmath/zope/lib/python/ZConfig/schema.pyt parseResourcescCs/t||i|}tii|i |dS(N( tComponentParserRRRtschemaRRRRR(RRR R((R tparseComponentscCs,t|tdo | dSn| SdS(Nui(t isinstancetobttype(R((R t_srepr$s t BaseParserc BsWtZd7Zd8Zhddd d d ddd d g<ddd d d g<ddd d d g<ddd g<dd d g<dd d g<dd d g<dd dg<d d dg<d d dg<d d dg may be used for each element(R"R,RR(R9RC(R"RC((R tcharacters_descriptionscCs||id_dS(Ni(RCR"R,R(R"RC((R tcharacters_examplescCs||id_dS(Ni(RCR"R,R(R"RC((R tcharacters_metadefaultscCs|iddi}|iddi}|iddi}|p|p|idn|o|o|idn|o|o|idnti |i |}ti |\}}|o|idn|i i|}x|iD]}|ii|i|qWn}tii|o|id n|i|}|i i||}|ii|p!|ii||i|ndS( NtsrcRGtpackageRs)import must specify either src or packages-import may only specify one of src or packages#import may not specify file and srcs1import src many not include a fragment identifiers%file may not include a directory part(R4R%RDRtpkgRR"R9RturljoinR-t urldefragtfragmentR$tloadURLR t gettypenamestnR taddtypeRstostpathtdirnameR\tschemaComponentSourcet hasComponentt addComponentt loadComponent(R"R4RRRRR R((R t start_imports2 !cCsV|ii|}t|i||i}zti i |i |Wd|i XdS(N( R"R$t openResourceRtrR R RRRRRtclose(R"RRR((R R7s cCsdS(N((R"((R t end_import?sc Cs~|id}|p|idn|i|}|i||ido|i|d}|i i |}|i o|idn|i ||\}} }|i i|||| |} n4|i |\}} }|i i||| |} |idoT|i|d}|i i |}|i p|idn|i| n|ii| dS(NR8s-sectiontype name must not be omitted or emptytextendss*sectiontype cannot extend an abstract typet implementss3type specified by implements is not an abstracttype(R4R%R8R"R9RQRYR7tbasenameR RsR_t isabstractRgRbRcRetderiveSectionTypetsectinfotcreateSectionTypetifnamet interfacet addsubtypeR,R;( R"R4RbR8ReRRR_RRcR((R tstart_sectiontypeBs*  " cCs|i|iidS(N(R"RZR,tpop(R"((R tend_sectiontype]s c Cs|i|}|i|}|i|odpd}|i|dd\}}}|o| o|i dnt i|p|||d||}|idi|||ii|dS(NiiRRus9attribute must be specified if section name is '*' or '+'i(R"RtR4RRRRORmRpRwRyR8RzR9Rnt SectionInfoRR,t addsectionR;( R"R4R8RpRzRORRyR((R t start_sectionascCs|iidS(N(R"R,R(R"((R t end_sectionnsc Cs|i|} |i|\}}|i|dd\}}}|djo|i dn|i |}ti|p|| ||||}|idi|||ii|dS(NRRuRvs1multisection must specify '*' or '+' for the namei(RuRv(R"RtR4RRrRpRqRwRyR8RzR9RRRORnRRR,RR;( R"R4R8RpRqRORzRRyR((R tstart_multisectionqs cCs|iidS(N(R"R,R(R"((R tend_multisection}scCsi|id}|p|idn|i|}ti|}|i i ||i i |dS(NR8s.abstracttype name must not be omitted or empty( R4R%R8R"R9RQRnt AbstractTypetabstypeR RR,R;(R"R4RR8((R tstart_abstracttypescCs|iidS(N(R"R,R(R"((R tend_abstracttypescCs|i|d\}}}}|i|odpd}t i |||||}|i doB|o|i dn|it|di|in|djo|in|idi||ii|dS(NRiiRs(required key cannot have a default valueRvi(R"R{R4R8ReRORzRmRpRntKeyInfoRR7R9RRXRDRBtfinishR,taddkeyR;(R"R4R8RpReRzROR((R t start_keys cCsH|ii}|idjo%|i|idi|indS(NRvi(R"R,RRR8tcomputedefaultRbR(R"R((R tend_keysc Cs|ido|idn|i|d\}}}}|i |\}}t i ||||||}|idi||ii|dS(NRsBdefault values for multikey must be given using 'default' elementsRi(R4R7R"R9R{R8ReRORzRrRpRqRnt MultiKeyInfoRR,RR;( R"R4R8RpReRzRORRq((R tstart_multikeys cCsH|ii}|idjo|i|idin|idS(NRvi(R"R,RRR8RRbR(R"R((R t end_multikeyscCs>y|i|SWn&tj o}|i|dnXdS(Ni(R"R&tsRVR`R9(R"RR`((R RQscCs>y|i|SWn&tj o}|i|dnXdS(Ni(R"R'RRVR`R9(R"RR`((R R scCsN|idj o:|ii|_|ii|_|ii|_ n|S(N( R"R*R(RMR`tcolnoRLtlinenoRNR(R"R`((R t initerrors cCs|iti|dS(N(R"RtZConfigt SchemaErrortmessage(R"R((R R9s(s descriptions metadefaultsexamplesdefault(simportRs sectiontypeskeysmultikeyssections multisection(/t__name__t __module__R>R=R6R/R1RARERJRKRBRRRYRZR\R(RaRgRmRrRtR{RwRRRRRRRRRRRRRRRRRRRRQR RR9(((R R,sX                                RcBsBtZeidZdZddZdZdZdZ RS(NR cCs2ti|||||_g|_g|_dS(N( RR/R"RRtextending_parsert_extending_parsert_base_keytypest_base_datatypes(R"RRR((R R/s  c CsA|i||i|}|i|\}} }|i djo+t i || |||i |i|_n|i i|_|ig|_|idoB|di}|ix]|D]U}ti|i |}ti|\}}|o|idn|i|qW|ioX|id oG|id}x7|idD]$}||j o|idqMqMWn|ioX|id oG|id}x7|idD]$} | |j o|idqqWqn||i_| |i_||i_|i dj o*|i ii ||i ii |ndS( NRs5schema extends many not include a fragment identifierRbiis\base schemas have conflicting keytypes, but no keytype was specified in the extending schemaRes^base schemas have conflicting datatypes, but no datatype was specified in the extending schema(!R"RYR4RRRORgRbRcReRR(Rnt SchemaTypeR-R#R R,R7tsplittsourcestreverseRRRRRR9t extendSchemaRtktRtdtR;( R"R4RReRbRRRORRRc((R t start_schemasH         cCsSt|i||}|ii|}ztii |i |Wd|i XdS(N( RR"R$RRRRRRRRR(R"RRR((R Rs cCs<|id=|i pt|i|i ptdS(Ni(R"R,tAssertionErrorRZR+(R"((R t end_schemas  (sschema( RRRR=R:R(R/RRR(((R Rs    8 R cBsltZeid ZdZdZdZdZdZdZ dZ dZ d Z d Z RS( NRcCs ti|||||_dS(N(RR/R"RRR t_parent(R"RRR ((R R/$scCs"|io||id_ndS(Ni(R"R,RCR(R"RC((R R(s cCs!|idti||dS(NR(R"t_check_not_toplevelRRR4(R"R4((R R,s cCs!|idti||dS(NR(R"RRRR4(R"R4((R R0s cCs!|idti||dS(NR(R"RRRR4(R"R4((R R4s cCs!|idti||dS(NR(R"RRRR4(R"R4((R R8s cCs|i|_|i|dS(N(R"RR RYR4(R"R4((R tstart_component<s cCs|idS(N(R"RZ(R"((R t end_component@scCs,|ip|id||ifndS(Ns)cannot define top-level %s in a schema %s(R"R,R9twhatR:(R"R((R RCs (s component(RRRR=R:R/RRRRRRRR(((R R s         (t__doc__Rtxml.saxRRRnRR RRRtContentHandlerRRR ( RRnRRRRRR RR R((R t?s        S