grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a B€:f=Kã@sTddlZddlZddlZddlZddlZddlZzddlmZWney^ddl mZYn0ddl Z z ddl m Z m Z ddlmZWn.ey¶ddlm Z m Z ddlmZYn0ddlZddlZddlZddlZddlZdMdd„Zdd „ZGd d „d eƒZd ZdZd dddddddddddddddddddddddddœZgd¢ZdNdd„Zdd „Zd!d"„Z dOd#d$„Z!d%d&„Z"d'd(„Z#d)d*„Z$d+d,„Z%d-d.„Z&d/d0„Z'd1d2„Z(Gd3d4„d4e)ƒZ*ed5d6d7�ed8d9d7�ed:d;d7�Gdd?„Z,d@dA„Z-GdBdC„dCeƒZ.GdDdE„dEeƒZ/dFdG„Z0dHdI„Z1GdJdK„dKej2ƒZ3e4dLk�rPe 5¡dS)QéN)ÚSequence)ÚURLErrorÚ HTTPError)ÚurlparseTcsHdˆ‰‡fdd„}‡fdd„}t||r,|ndd|ƒ‰‡‡fdd„}|S) zÄ Creates the get/set properties for the given name. It assumes that the actual attribute is '_' + name TODO: Expand this with domain validation to ensure the values are correct. Ú_cs t|ˆƒS©N)Úgetattr©Úself©Úattribute_name©ú1/usr/lib64/python3.9/site-packages/lsm/_common.pyÚgetter.sz default_property..gettercst|ˆ|ƒdSr©Úsetattr)r Úvaluer r rÚsetter1sz default_property..setterNcst|ˆˆƒ|Srr)Úcls)ÚnameÚpropr rÚ decorator6s z#default_property..decorator)Úproperty)rZ allow_setÚdocrrrr )r rrrÚdefault_property%s   rcCs$t|tƒrttjt|ƒƒ‚t|tƒrxt|ƒ}d|vr\d|vrHttjdƒ‚d|vr\ttjdƒ‚t dt   ¡ƒttj |ƒ‚z*t jr t|t jƒr ttj dt|ƒƒ‚Wnty´Yn0tjrÖt|tƒrÖttjt|ƒƒ‚t|tj ƒròttjt|ƒƒ‚t   ¡}t d|ƒttjd tt|ƒƒ|ƒ‚dS) Nz urlopen errorz Errno 111zConnection refusedz Errno 113z Host is downzUnexpected network error: zSSL Certificate error (%s)zUnexpected exception: zUnexpected exception (TYPE= %s))Ú isinstancerÚLsmErrorÚ ErrorNumberÚPLUGIN_AUTH_FAILEDÚstrrÚNETWORK_CONNREFUSEDÚNETWORK_HOSTDOWNÚerrorÚ tracebackÚ format_excÚ NETWORK_ERRORÚsslZCertificateErrorÚAttributeErrorÚsixÚPY3ÚConnectionErrorÚsocketÚ PLUGIN_BUGÚtype)ÚexpZdescZ stack_tracer r rÚcommon_urllib2_error_handler=s>  ÿ    ÿ   þr/c@s*eZdZdZd dd„Zdd„Zdd„ZdS) ÚProxyzQ Used to provide an unambiguous error when a feature is not implemented. NcCs ||_dS)z< Constructor which takes an object to wrap. N)Ú proxied_obj)r Úobjr r rÚ__init__oszProxy.__init__cCs*t|j|ƒrt |j|¡Sttjdƒ‚dS)zJ Called each time an attribute is requested of the object zUnsupported operationN)Úhasattrr1Ú functoolsÚpartialÚ_presentrrÚ NO_SUPPORT)r rr r rÚ __getattr__ys zProxy.__getattr__cOst|j|ƒ|i|¤ŽS)zQ Method which is called to invoke the actual method of interest. )rr1)r Z_proxy_method_nameÚargsÚkwargsr r rr7ˆszProxy._present)N)Ú__name__Ú __module__Ú __qualname__Ú__doc__r3r9r7r r r rr0gs r0z/var/run/lsm/ipcéiièii@Bi@iÊš;llJ)£l l�Iú5llÈNÎZo)ÚBÚKiBZKBÚKÚkÚMiBZMBÚMÚmÚGiBZGBÚGÚgÚTiBZTBÚTÚtÚPiBZPBÚPÚpÚEiBZEBÚEÚe)rQrNrKrHrErBFcCsRd}|rJtD](}|t|kr |tt|ƒ}|}q6q |s>d}d||fS|SdS)a  Convert size in bytes to human readable size The return string will follow IEC binary prefixes, e.g. '1.9 KiB' For size less than 1024, we do nothing but return the int we get. TODO: Need a expect to handle when size is not a int. int() might do. NrAz%.2f %s)ÚSIZE_CONS_CHK_LSTÚ SIZE_CONSÚfloat)ÚsizeZhumanÚunitsZkey_namer r rÚsh¸s  rYcCs t|dƒS)a Convert integer size in bytes to human readable size. We are following rules of IEC binary prefixes on size: http://en.wikipedia.org/wiki/Gibibyte The biggest of unit this function supported is PiB. The precision is 2 which means you will get '1.99 KiB' T)rY)rWr r rÚsize_bytes_2_size_humanÑsrZcCstt dtj¡}| |¡}d}|rl| d¡}| d¡}|s@t|ƒS| ¡}| dd¡}|tvrlt|t |ƒ}t|ƒS)aÑ Convert human readable size string into integer size in bytes. Following rules of IEC binary prefixes on size: http://en.wikipedia.org/wiki/Gibibyte Supported input size_human in these formats: '1.9KiB' # int(1024*1.9) '1 KiB' # 2**10 '1B' # 1 '2K' # 2*(2**10), treated as '2KiB' '2k' # 2*(2**10), treated as '2KiB' '2KB' # 2*(10**3) z¯ ^ ([0-9\.]+) # 1: number [ \t]* # might have space between number and unit ([a-zA-Z]*) # 2: units $ rr@éZIBZiB) ÚreÚcompileÚXÚmatchÚgroupÚintÚupperÚreplacerUrV)Z size_humanZregex_size_humanZ regex_matchZ size_bytesZnumberrXr r rÚsize_human_2_size_bytesßs ù    rdc CszÈi}t|ƒ}|jr|j|d<|jr.|j|d<|jr>|j|d<|jrN|j|d<|jr`|j|d<nd|d<t|ƒ|d<|rš|D]}||vr|ttj d|ƒ‚q||rÄ|D] }||dvr¢ttj d |ƒ‚q¢|WSt �y}z ttj d t |ƒƒ‚WYd}~n d}~00dS) zq Common uri parse method that optionally can check for what is needed before returning successfully. ÚschemeÚnetlocÚportÚhostÚusernameNÚ parametersz&uri missing "%s" or is in invalid formzuri missing query parameter %szuri invalid: reason: %s) rrerfrgÚhostnameriÚuri_parametersrrÚINVALID_ARGUMENTÚ ValueErrorr)ÚuriZrequiresZrequired_paramsÚrcÚuÚrÚver r rÚ uri_parsesB      þ ÿ ÿrtcCsP|jr|j}n|jr(td|dƒj}niS|rHtdd„| d¡DƒƒSiSdS)Nzhttp:r[cSsg|]}| d¡‘qS)ú=)Úsplit)Ú.0Úpartr r rÚ Ióz"uri_parameters..ú&)ÚqueryÚpathrÚdictrv)ror|r r rrl:srlcCsDztjdd�}Wnty*t ¡}Yn0| | d¡¡| ¡S)NF)Zusedforsecurityzutf-8)ÚhashlibÚmd5Ú ExceptionÚupdateÚencodeZ hexdigest)rMÚhr r rr€Qs  r€cCs"tjr||St|ƒt|ƒSdSr)r(r)ra)ÚaÚbr r rÚint_div\sr‡cGsd dd„|Dƒ¡S)NÚcSsg|] }t|ƒ‘qSr )r)rwrSr r rryirzz$params_to_string..)Újoin)r:r r rÚparams_to_stringhsrŠcCs0| d¡D] }t|ƒr t ||d|¡q dS)zà If a message includes new lines we will create multiple syslog entries so that the message is readable. Otherwise it isn't very readable. Hopefully we won't be logging much :-) Ú z: N)rvÚlenÚsyslog)ÚlevelZprgÚmsgÚlr r rÚpost_msgvsr‘cGs$ttjtj tjd¡t|ŽƒdS©Nr) r‘r�ZLOG_ERRÚosr}ÚbasenameÚsysÚargvrŠ©r�r r rr"�sÿr"cGs(tr$ttjtj tjd¡t |ŽƒdSr’) Ú LOG_VERBOSEr‘r�ZLOG_INFOr“r}r”r•r–rŠr—r r rÚinfo†sÿr™c@seZdZdZdS)Ú SocketEOFzL Exception class to indicate when we read zero bytes from a socket. N)r<r=r>r?r r r rršŒsršÚcodez Error code)rr�z Error messageÚdatazOptional error datac@seZdZddd„Zdd„ZdS)rNcOs.tj|g|¢Ri|¤Ž||_||_||_dS)z, Class represents an error. N)r�r3Ú_codeZ_msgÚ_data)r r›Úmessagerœr:r;r r rr3˜szLsmError.__init__cCs@t |j¡}|jdur.|jr.d||j|jfSd||jfSdS)Nz%s: %s Data: %sz%s: %s )rÚerror_number_to_strr›rœr�)r Z error_no_strr r rÚ__str__¡s   ÿzLsmError.__str__)N)r<r=r>r3r¡r r r rr“s rcCs|||||dœS)zC Used for gathering additional information about an error. ©ÚdomainrŽÚ exceptionÚdebugÚ debug_datar r¢r r rÚaddl_error_dataªs ûr§cCs`| d¡}d |dd…¡}t|ƒrJt|ƒ}|dd…D]}t||ƒ}q8ntdƒ}t||ƒ}|S)zn Given a class name it returns the class, caller will then need to run the constructor to create. Ú.Néÿÿÿÿr@Ú__main__)rvr‰rŒÚ __import__r)Ú class_nameÚpartsÚmodulerGÚcompr r rÚ get_class·s  r°c@sÎeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.e/ƒZ0e1d-d.„ƒZ2d/S)0rrr@r[éé é é é2é4éeé}éŒé�éŽé˜é™é é¡éÈéÉéÊéËéÌéÍéÎéÏéÐéÑéâéúéûi,i-i3i7i^i�i‘i’iöiþiÿiicCs:ttj ¡ƒD]"}tj||krd||fSqd|S)Nz%s(%d)zUNKNOWN_ERROR_NUMBER(%d))ÚlistrÚ_LOCALSÚkeys)Zerror_noZ error_strr r rr szErrorNumber.error_number_to_strN)3r<r=r>ZOKZLIB_BUGr,Z JOB_STARTEDZTIMEOUTZDAEMON_NOT_RUNNINGZPERMISSION_DENIEDZ NAME_CONFLICTZEXISTS_INITIATORrmZNO_STATE_CHANGEr r!r%Z NO_MEMORYr8Z IS_MASKEDZHAS_CHILD_DEPENDENCYZNOT_FOUND_ACCESS_GROUPZ NOT_FOUND_FSZ NOT_FOUND_JOBZNOT_FOUND_POOLZNOT_FOUND_FS_SSZNOT_FOUND_VOLUMEZNOT_FOUND_NFS_EXPORTZNOT_FOUND_GENERICZNOT_FOUND_SYSTEMZNOT_FOUND_DISKZ NOT_LICENSEDZNO_SUPPORT_ONLINE_CHANGEZNO_SUPPORT_OFFLINE_CHANGErZPLUGIN_IPC_FAILZPLUGIN_SOCKET_PERMISSIONZPLUGIN_NOT_EXISTZNOT_ENOUGH_SPACEZTRANSPORT_COMMUNICATIONZTRANSPORT_SERIALIZATIONZTRANSPORT_INVALID_ARGZLAST_INIT_IN_ACCESS_GROUPZUNSUPPORTED_SEARCH_KEYZEMPTY_ACCESS_GROUPZPOOL_NOT_READYZ DISK_NOT_FREEÚlocalsrÎÚ staticmethodr r r r rrËs^rc@seZdZdZdZdZdS)Ú JobStatusr@r[éN)r<r=r>Z INPROGRESSZCOMPLETEZERRORr r r rrÒsrÒcCsàt|tƒrvt|tƒs,td|tt|ƒƒfƒ‚t|ƒdkrT|D]}t||d|ƒq.outer..inner)r5Úwraps)rÚrÜ©rÛ)rÚrÚouterKszreturn_requires..outerr )rÛrßr rÞrÚreturn_requiresAs ràc@s$eZdZdd„Zdd„Zdd„ZdS)Ú TestCommoncCsdSrr r r r rÚsetUphszTestCommon.setUpc Csðz tƒ‚Wn4ty>}z| t|tƒ¡WYd}~n d}~00ztdddƒ‚WnHty˜}z0| |jdko€|jdko€|jdk¡WYd}~n d}~00tdddddƒ}| |ddkoè|ddkoè|ddkoè|ddkoè|ddk¡dS) Né ZMessageZDatar£rŽr¤r¥r¦)ršZ assertTruerrr›r�rœr§)r rSZedr r rÚ test_simpleks( &ÿ ÿ ÿ þ ýzTestCommon.test_simplecCsdSrr r r r rÚtearDownszTestCommon.tearDownN)r<r=r>rârärår r r rráfsrárª)TN)F)NN)NN)6rr“Zunittestr\r•r�Úcollections.abcrÚ ImportErrorÚ collectionsr×Z urllib.errorrrÚ urllib.parserZurllib2r5r#r(r&r+rr/Úobjectr0ZUDS_PATHr˜rUrTrYrZrdrtrlr€r‡rŠr‘r"r™r�ršrr§r°rrÒrÕràZTestCaserár<Úmainr r r rÚsœ   *)ç ) 2       R%