Ë ud�’Œ!ņãó|—dZddlZddlZddlZddlmZddlmZdZGd„de«Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zy)z7 This module contains various shared helper functions. éN)Úioctl)ÚPIPEz3/sys/module/zfs/parameters/zfs_dmu_offset_next_synccó—eZdZdZy)ÚErrorz;A class for all the other exceptions raised by this module.N)Ú__name__Ú __module__Ú __qualname__Ú__doc__©óú9/usr/lib/python3.12/site-packages/bmaptool/BmapHelpers.pyrrs„ÙEàr rcód—|dk(ry|dkrd|zSdD]}|dz}|dksŒd||fzcSd|d fzS) z3Transform size in bytes into a human-readable form.éz1 byteiz%d bytes)ÚKiBÚMiBÚGiBÚTiBg�@iz%.1f %sÚEiBr )ÚsizeÚmodifiers r Ú human_sizer%sY€à ˆq‚yØà ˆc‚zؘDÑ Ð ã0ˆØ �‰ˆØ �$‹;Ø  hÐ/Ñ/Ò /ð1𠘘e�}Ñ $Ð$r cót—t|d«\}}t|d«\}}d}|rd|z}|r|d|zz }|d|zzS)z1Transform time in seconds to the HH:MM:SS format.é<Úz%dh z%dm z%.1fs)Údivmod)ÚsecondsÚminutesÚhoursÚresults r Ú human_timer 5sW€ä ¨Ó,Ñ€Wˆgܘg rÓ*Ñ€UˆGà €F٠ؘ%‘ˆÙØ�&˜7Ñ"Ñ"ˆà �G˜gÑ%Ñ %Ð%r cóT— t|dtjdd««}tjd|«d}|s t d«‚ |S#t$rR}t j |j««}t|d«r |j}n t d«‚Yd}~|Sd}~wwxYw)zl Return block size for file object 'file_obj'. Errors are indicated by the 'IOError' exception. éÚIrzget 0 bsize by FIGETBSZ ioctlÚ st_blksizezUnable to determine block sizeN) rÚstructÚpackÚunpackÚIOErrorÚosÚfstatÚfilenoÚhasattrr$)Úfile_objÚ binary_dataÚbsizeÚerrÚstats r Úget_block_sizer2Cs¢€ð <ܘH a¬¯©°S¸!Ó)<Ó=ˆ Ü— ‘ ˜c ;Ó/°Ñ2ˆÙÜÐ9Ó:Ð :ðð €Løô ò<Ü�x‰x˜Ÿ™Ó)Ó*ˆÜ �4˜Ô &Ø—O‘O‰EäÐ:Ó;Ð ;ó ð €Lûð <ús‚AA Á B'ÁAB"Â"B'cóX—tjdjtj«D]w}tjj |j d«|«}tjj|«sŒRtj|tj«sŒwyy)zn This is a helper function which check if the external program 'name' is available in the system. ÚPATHÚ"TF) r)ÚenvironÚsplitÚpathsepÚpathÚjoinÚstripÚisfileÚaccessÚX_OK)Únamer9Úprograms r Úprogram_is_availablerAYsk€ô — ‘ ˜6Ñ"×(Ñ(¬¯©Ö4ˆÜ—'‘'—,‘,˜tŸz™z¨#›°Ó5ˆÜ �7‰7�>‰>˜'Õ "¤r§y¡y°¼"¿'¹'Õ'BÙð5ð r cóŽ—tjj|«}tjddd|gt t ¬«}|j «\}}d}|rT|j«}t|«dk\r6|djdd«}t|«dk\r|dj«}|std|›d |›d |›�«‚|S) z'Return the file system type for 'path'.Údfz-PTz--)ÚstdoutÚstderrNr"rz-failed to find file system type for path at 'z&' Here is the 'df -PT' output stdout: z stderr: ) r)r9ÚrealpathÚ subprocessÚPopenrÚ communicateÚ splitlinesÚlenr7Úlowerr)r9ÚabspathÚprocrDrEÚftypeÚlinesÚfieldss r Úget_file_system_typerRgs¿€ô�g‰g×јtÓ$€GÜ × Ñ ˜T 5¨$°Ð8ÄÌdÔ S€DØ×%Ñ%Ó'�N€FˆFð €EÙ Ø×!Ñ!Ó#ˆÜ ˆu‹:˜Š?ؘ1‘X—^‘^ D¨!Ó,ˆFÜ�6‹{˜aÒØ˜q™ Ÿ™Ó)�á Ýò’V™Vð %ó ð ð €Lr cóJ—t}tjj|«sy t |d«5}t |j ««dk(cddd«S#1swYyxYw#t$r}td|›d|›�«‚d}~wt$r}td|›d|›�«‚d}~wwxYw)z0Return if hosts zfs configuration is compatible.FÚrrNzcannot open zfs param path 'z': z$invalid value read from param path ') ÚZFS_COMPAT_PARAM_PATHr)r9r<ÚopenÚintÚreadliner(rÚ ValueError)r9Úfobjr0s r Úis_zfs_configuration_compatibler[‚s…€ô !€DÜ �7‰7�>‰>˜$Ô ØðQÜ �$˜Œ_ Ü�t—}‘}“Ó'¨1Ñ,÷�_Š_ûä òIݺTÁ3ÐGÓHÐHûÜ òQÝÂTÉ3ÐOÓPÐPûðQús@¨ A&´AÁ A&ÁA#ÁA&Á#A&Á& B"Á/B B" BÂB"có8—t|«}|dk(r t«Sy)z*Return if paths file system is compatible.ÚzfsT)rRr[)r9Úfstypes r Úis_compatible_file_systemr_’s!€ô" $Ó '€FØ �‚Ü.Ó0Ð0Ø r )r r)r%rGÚfcntlrrrUÚ Exceptionrrr r2rArRr[r_r r r ÚrbsTðñ"ó Û ÛÝÝðNÐô ˆIô ò %ò &òò, òò6 Qó r