;ς Ύ˜@c@sΈdkZdkZdkZdkZeiƒZhZeiƒZhZdd„Zdd„Z d„Z d„Z gd„Z gd„Z gd „Zdd „Zd „Zd „ZdS( NscCs3d}|}t|d|ƒ}y |i}Wnt|ƒ}nXy |ƒ}WnnXt|dƒo±t|idƒoP||d|d}||d}|t |id|ƒ}||d}nt|d ƒo:|||d }||d}|t |i |ƒ}q+n|||d }|Sd S( sshowaqssaq_basesaq_selfs(s) s| \ s| s| s aq_parents N( srvalsselfsobjsgetattrsbasesidsstrshasattrsaq_selfsindentsshowaqs aq_parent(sselfsindentsobjsrvalsbasesid((sQ/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/class_utility.pysshowaq s0  icCsAyt||SWn*tj ot|ƒt||ƒSnXdS(sm listBaseMetaTypes(cl, reverse = 0) => list of strings List all base meta types for this class. N(s _BASEMETAsclsreversesKeyErrors_populateBaseMetaTypesslistBaseMetaTypes(sclsreverse((sQ/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/class_utility.pyslistBaseMetaTypes%s  cCsJyt|di|ƒSWn*tj ot|ƒt||ƒSnXdS(Ni(s _BASEMETAsclshas_keysmetasKeyErrors_populateBaseMetaTypessisBaseMetaType(smetascl((sQ/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/class_utility.pysisBaseMetaType3s  cCsΚy|ig}Wntj o g}nXx*|iD]}tt|dƒƒ|}q6Wh}x|D]}d||VsN(smaps objectItemss containers meta_types(s containers meta_types((sQ/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/class_utility.pys objectIdsSscCstd„t||ƒƒSdS(s cCs|dS(Ni(sx(sx((sQ/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/class_utility.pys[sN(smaps objectItemss containers meta_types(s containers meta_types((sQ/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/class_utility.pys objectValuesXscCs―t|ƒtfƒtgƒfjo |g}n| o|iƒSng}xV|iƒD]H\}}x9|D]1}t||i ƒo|i ||fƒPqnqnWq[W|SdS(sζ objectItems(container, meta_types = []) Same as a container's objectItem method, meta_types are scanned in the base classes too. Ie. all objects derivated from Folder will be returned by objectItem(x, ['Folder']) N( stypes meta_typess containers objectItemssretsidsobjsmtsisBaseMetaTypes __class__sappend(s containers meta_typessobjsretsmtsid((sQ/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/class_utility.pys objectItems]s%   cCs5yt||SWnt|ƒt||ƒSnXdS(s™ listBaseClasses(cl, reverse = 0) => list of classes List all the base classes of an object. When reverse is 0, return the self class first. When reverse is 1, return the self class last. WARNING : reverse is 0 or 1, it is an integer, NOT A BOOLEAN ! (optim issue) CACHE RESULTS WARNING : for optimization issues, the ORIGINAL tuple is returned : please do not change it ! N(s _BASECLASSESsclsreverses_populateBaseClassesslistBaseClasses(sclsreverse((sQ/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/class_utility.pyslistBaseClassesws  cCs>yt|di|ƒSWnt|ƒt||ƒSnXdS(sX isBaseClass(base, cl) => Boolean Return true if base is a base class of cl iN(s _BASECLASSESsclshas_keysbases_populateBaseClassess isBaseClass(sbasescl((sQ/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/class_utility.pys isBaseClassŽs  cCs§|g}x*|iD]}tt|dƒƒ|}qWh}x|D]}d||