a B:f=K@sTddlZddlZddlZddlZddlZddlZzddlmZWney^ddl mZYn0ddl Z z ddl m Z m Z ddlmZWn.eyddlm Z m Z ddlmZYn0ddlZddlZddlZddlZddlZdMddZdd ZGd d d eZd ZdZd dddddddddddddddddddddddddZgdZdNddZdd Zd!d"Z dOd#d$Z!d%d&Z"d'd(Z#d)d*Z$d+d,Z%d-d.Z&d/d0Z'd1d2Z(Gd3d4d4e)Z*ed5d6d7ed8d9d7ed:d;d7Gdd?Z,d@dAZ-GdBdCdCeZ.GdDdEdEeZ/dFdGZ0dHdIZ1GdJdKdKej2Z3e4dLkrPe5dS)QN)Sequence)URLError HTTPError)urlparseTcsHdfdd}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|SN)getattrselfattribute_name1/usr/lib64/python3.9/site-packages/lsm/_common.pygetter.sz default_property..gettercst||dSrsetattr)r valuer r rsetter1sz default_property..setterNcst||Srr)cls)namepropr r decorator6s z#default_property..decorator)property)rZ allow_setdocrrrr )r rrrdefault_property%s   rcCs$t|trttjt|t|trxt|}d|vr\d|vrHttjdd|vr\ttjdt dt ttj |z*t jrt|t jrttj dt|WntyYn0tjrt|trttjt|t|tj rttjt|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)) isinstancerLsmError ErrorNumberPLUGIN_AUTH_FAILEDstrrNETWORK_CONNREFUSEDNETWORK_HOSTDOWNerror traceback format_exc NETWORK_ERRORsslZCertificateErrorAttributeErrorsixPY3ConnectionErrorsocket PLUGIN_BUGtype)expZdescZ stack_tracer r rcommon_urllib2_error_handler=s>         r/c@s*eZdZdZd ddZddZddZdS) 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|SttjddS)zJ Called each time an attribute is requested of the object zUnsupported operationN)hasattrr1 functoolspartial_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_nameargskwargsr r rr7szProxy._present)N)__name__ __module__ __qualname____doc__r3r9r7r r r rr0gs r0z/var/run/lsm/ipciiii@Bi@iʚ;llJ)l lI5llNZo)BKiBZKBKkMiBZMBMmGiBZGBGgTiBZTBTtPiBZPBPpEiBZEBEe)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_CONSfloat)sizeZhumanunitsZkey_namer r rshs  rYcCs t|dS)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 rsize_bytes_2_size_humansrZcCsttdtj}||}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) recompileXmatchgroupintupperreplacerUrV)Z size_humanZregex_size_humanZ regex_matchZ size_bytesZnumberrXr r rsize_human_2_size_bytess     rdc Cszi}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] }||dvrttj 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. schemenetlocporthostusernameN parametersz&uri missing "%s" or is in invalid formzuri missing query parameter %szuri invalid: reason: %s) rrerfrghostnameriuri_parametersrrINVALID_ARGUMENT ValueErrorr)uriZrequiresZrequired_paramsrcurver r r uri_parsesB        rtcCsP|jr|j}n|jr(td|dj}niS|rHtdd|dDSiSdS)Nzhttp:r[cSsg|]}|dqS)=)split).0partr r r Iz"uri_parameters..&)querypathrdictrv)ror|r r rrl:srlcCsDztjdd}Wnty*t}Yn0||d|S)NF)Zusedforsecurityzutf-8)hashlibmd5 ExceptionupdateencodeZ hexdigest)rMhr r rrQs  rcCs"tjr||St|t|SdSr)r(r)ra)abr r rint_div\srcGsddd|DS)NcSsg|] }t|qSr )r)rwrSr r rryirzz$params_to_string..)join)r:r r rparams_to_stringhsrcCs0|dD] }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)rvlensyslog)levelZprgmsglr r rpost_msgvsrcGs$ttjtjtjdt|dSNr) rrZLOG_ERRosr}basenamesysargvrrr r rr"sr"cGs(tr$ttjtjtjdt |dSr) LOG_VERBOSErrZLOG_INFOrr}rrrrrr r rinfosrc@seZdZdZdS) SocketEOFzL Exception class to indicate when we read zero bytes from a socket. N)r<r=r>r?r r r rrsrcodez Error code)rrz Error messagedatazOptional error datac@seZdZdddZddZdS)rNcOs.tj|g|Ri|||_||_||_dS)z, Class represents an error. N)rr3_codeZ_msg_data)r rmessagerr:r;r r rr3szLsmError.__init__cCs@t|j}|jdur.|jr.d||j|jfSd||jfSdS)Nz%s: %s Data: %sz%s: %s )rerror_number_to_strrrr)r Z error_no_strr r r__str__s   zLsmError.__str__)N)r<r=r>r3rr r r rrs rcCs|||||dS)zC Used for gathering additional information about an error. domainr exceptiondebug debug_datar rr r raddl_error_datas rcCs`|d}d|dd}t|rJt|}|ddD]}t||}q8ntd}t||}|S)zn Given a class name it returns the class, caller will then need to run the constructor to create. .Nr@__main__)rvrr __import__r) class_namepartsmodulerGcompr r r get_classs  rc@seZdZdZdZdZdZdZdZdZ 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[ 24e}i,i-i3i7i^iiiiiiiicCs:ttjD]"}tj||krd||fSqd|S)Nz%s(%d)zUNKNOWN_ERROR_NUMBER(%d))listr_LOCALSkeys)Zerror_noZ error_strr r rrszErrorNumber.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_FREElocalsr staticmethodrr r r rrs^rc@seZdZdZdZdZdS) JobStatusr@r[N)r<r=r>Z INPROGRESSZCOMPLETEZERRORr r r rrsrcCst|trvt|ts,td|tt|ft|dkrT|D]}t||d|q.outer..inner)r5wraps)rrr)rrouterKszreturn_requires..outerr )rrr rrreturn_requiresAs rc@s$eZdZddZddZddZdS) TestCommoncCsdSrr r r r rsetUphszTestCommon.setUpc Csz tWn4ty>}z|t|tWYd}~n d}~00ztdddWnHty}z0||jdko|jdko|jdkWYd}~n d}~00tddddd}||ddko|ddko|ddko|ddko|ddkdS) N ZMessageZDatarrrrr)rZ assertTruerrrrrr)r rSZedr r r test_simpleks( &    zTestCommon.test_simplecCsdSrr r r r rtearDownszTestCommon.tearDownN)r<r=r>rrrr r r rrfsrr)TN)F)NN)NN)6rrZunittestr\rrcollections.abcr ImportError collectionsrZ urllib.errorrr urllib.parserZurllib2r5r#r(r&r+rr/objectr0ZUDS_PATHrrUrTrYrZrdrtrlrrrrr"rrrrrrrrrrZTestCaserr<mainr r r rs   *) ) 2       R%