U Dx` @sndZddlmZddlZddlmZddlmZm Z ddl m Z ddl m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%ddl m&Z&eZe'd d e'd d e'd de'dde'ddGdddeZ(GdddeZ)e(dd e(dd gZ*e)deee)deee)dde)ddgZ+GdddeZ,dS) z File manifest ) MimeTypesN) Serialisable)StringSequence) fromstring)ARC_COREARC_CONTENT_TYPES ARC_WORKBOOKARC_APP ARC_THEME ARC_STYLEARC_SHARED_STRINGS EXTERNAL_LINK THEME_TYPE STYLES_TYPEXLSXXLSMXLTMXLTXWORKSHEET_TYPE COMMENTS_TYPESHARED_STRINGS DRAWING_TYPE CHART_TYPECHARTSHAPE_TYPECHARTSHEET_TYPE CONTYPES_NSACTIVEXCTRLVBA)tostringzapplication/xmlz.xmlz8application/vnd.openxmlformats-package.relationships+xmlz.relsz$application/vnd.ms-office.vbaProjectz.binz8application/vnd.openxmlformats-officedocument.vmlDrawingz.vmlz image/x-emfz.emfc@s$eZdZdZeZeZddZdS) FileExtensionDefaultcCs||_||_dSN) Extension ContentType)selfr$r%r'B/tmp/pip-target-zr53vnty/lib/python/openpyxl/packaging/manifest.py__init__9szFileExtension.__init__N)__name__ __module__ __qualname__tagnamerr$r%r)r'r'r'r(r!2sr!c@s$eZdZdZeZeZddZdS)OverridecCs||_||_dSr#PartNamer%)r&r0r%r'r'r(r)EszOverride.__init__N)r*r+r,r-rr0r%r)r'r'r'r(r.>sr.Zrelsxml/z/docProps/core.xmlz:application/vnd.openxmlformats-package.core-properties+xmlz/docProps/app.xmlzEapplication/vnd.openxmlformats-officedocument.extended-properties+xmlcseZdZdZeeddZeeddZdZdZ dddZ e d d Z e d d Z fd dZddZddZddZddZddZddZddZZS)ManifestZTypesT) expected_typeuniquez[Content_Types].xml)r"r.r'cCs |st}||_|st}||_dSr#) DEFAULT_TYPESr"DEFAULT_OVERRIDEr.)r&r"r.r'r'r(r)as zManifest.__init__cCsdd|jDS)NcSsg|] }|jqSr')r0.0partr'r'r( osz&Manifest.filenames..)r.)r&r'r'r( filenamesmszManifest.filenamescCs"dd|jD}ddt|DS)z\ Map content types to file extensions Skip parts without extensions cSsh|]}tj|jdqS))ospathsplitextr0r8r'r'r( xsz&Manifest.extensions..cSs*g|]"}|r|ddtjd|fqS)NT) mimetypes types_map)r9extr'r'r(r;ysz'Manifest.extensions..)r.sorted)r&extsr'r'r( extensionsrszManifest.extensionscs\dd|jD}|jD]&\}}||krt||}|j|qtt|}|dt|S)zR Custom serialisation method to allow setting a default namespace cSsg|] }|jqSr')r$)r9tr'r'r(r;sz$Manifest.to_tree..xmlns) r"rHr!appendsuperr3to_treesetr)r&defaultsrEmimetree __class__r'r(rM|s  zManifest.to_treecCs |jD]}|j|krdSqdS)zF Check whether a particular content type is contained TNr.r%r& content_typerIr'r'r( __contains__s  zManifest.__contains__cCs,zt||WStk r&YdSXdS)z, Find specific content-type N)nextfindall StopIteration)r&rVr'r'r(findsz Manifest.findccs |jD]}|j|kr|VqdS)z> Find all elements of a specific content-type NrTrUr'r'r(rYs  zManifest.findallcCs t|j|jd}|j|dS)zZ Add content object to the package manifest # needs a contract... r/N)r.r?Z mime_typerK)r&objctr'r'r(rKszManifest.appendcCs>|||||j|d||jt|dS)z/ Write manifest to the archive )r<N)rK _write_vba_register_mimetypesnamelistwritestrr?r rM)r&archiveworkbookr'r'r(_writes  zManifest._writecCsP|D]F}tj|d}|sqtjd|}t|dd|}|j|qdS)zT Make sure that the mime type for all file extensions is registered r=TrBN)r>r?r@rCrDr!r"rK)r&r<fnrErPZfer'r'r(r_szManifest._register_mimetypescCs^|jrZt|jt}t|}|j}|jD],}|jt t t fkrBq,|j|kr,|j |q,dS)zI Add content types from cached workbook when keeping VBA N) Z vba_archiverreadrr3Z from_treer<r.r0rrrrK)r&rcnodeZmfr<overrider'r'r(r^s   zManifest._write_vba)r'r')r*r+r,r-rr!r"r.r?Z __elements__r)propertyr<rHrMrWr[rYrKrdr_r^ __classcell__r'r'rRr(r3Ws(           r3)-__doc__rCros.pathr>Z!openpyxl.descriptors.serialisablerZopenpyxl.descriptorsrrZopenpyxl.xml.functionsrZopenpyxl.xml.constantsrrr r r r r rrrrrrrrrrrrrrrrrrr add_typer!r.r6r7r3r'r'r'r(s0   l