U o^ @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'u/private/var/folders/sd/whlwsn6x1_qgglc0mjv25_695qk2gl/T/pip-install-4zq3fp6i/openpyxl/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)Z 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))ospathsplitextr0r7r'r'r( xsz&Manifest.extensions..cSs*g|]"}|r|ddtjd|fqS)NT) mimetypes types_map)r8extr'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$)r8tr'r'r(r:sz$Manifest.to_tree..xmlns) r"rGr!appendsuperr3to_treesetr)r&defaultsrDmimetree __class__r'r(rL|s  zManifest.to_treecCs |jD]}|j|krdSqdS)zF Check whether a particular content type is contained TNr.r%r& content_typerHr'r'r( __contains__s  zManifest.__contains__cCs,zt||WStk r&YdSXdS)z, Find specific content-type N)nextfindall StopIteration)r&rUr'r'r(findsz Manifest.findccs |jD]}|j|kr|VqdS)z> Find all elements of a specific content-type NrSrTr'r'r(rXs  zManifest.findallcCs t|j|jd}|j|dS)zZ Add content object to the package manifest # needs a contract... r/N)r.r>Z mime_typerJ)r&objctr'r'r(rJszManifest.appendcCs>|||||j|d||jt|dS)z/ Write manifest to the archive )r;N)rJ _write_vba_register_mimetypesnamelistwritestrr>r rL)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<TrAN)r=r>r?rBrCr!r"rJ)r&r;fnrDrOZfer'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.r0rrrrJ)r&rbnodeZmfr;overrider'r'r(r]s   zManifest._write_vba)r'r')r*r+r,r-rr!r"r.r>Z __elements__r)propertyr;rGrLrVrZrXrJrcr^r] __classcell__r'r'rQr(r3Ws(           r3)-__doc__rBros.pathr=Z!openpyxl.descriptors.serialisablerZopenpyxl.descriptorsrrZopenpyxl.xml.functionsrZopenpyxl.xml.constantsrrr r r r r rrrrrrrrrrrrrrrrrrr add_typer!r.r5r6r3r'r'r'r(s0   l