From f8e143a2e63eb17ed3469a376f1af0b6d22a9cb4 2022-08-03 16:24:07 From: Edson Date: 2022-08-03 16:24:07 Subject: [PATCH] v2.9.2 :: Add 'upload_multiple_files_advance' function --- diff --git a/CKAN_JRO-master.tar.gz b/CKAN_JRO-master.tar.gz index 77750a6bdb27b0a6e9162f6dc719ea480e1f6cca..9553caa824dccc9526285170959b140acf3d81f2 100644 GIT binary patch delta 7183 zc$@(b9Ps1QGnP1iABzYGs-Ws(0{=rxK~7&vQco>yVRLk4axQdXascf;*>c;smU-4! z;L4Svcx}^KymV{YnfAm=$KCOAz1+TiJuVh4K{h)S$#9A7PNiyoW4>cPV5(;RWWHq1 z0l0vxsKs{DAuAP&ByezWaCU%zvY~AJc%t3ErP_!(FCOK8YV)h;Z@b;wjDO?vPG@tg z`-0rRc!JA!Jd&Xg>l4lOsI&1{^1rjQg?~FcTW#@gJEIGj{BN~8?H6S0Ddpd_Y|HUzVYzAVzf$>E zYW-j9|62cl*ZM!u|Ka_{lI4Fk{lDGqZP)t$o6-N>?X3Rq)%yQQ^nW+0|F^n5rCn?O zTL1sb!TbsWoa!(vC4x95AemZSecM{9Wd#_~;n`1NSC+s3Docd;Zq@Fq(vK@OPszG&I*GAaX#0mfUX;xSGu-`}^kLXz$&@{@y-+jMv%F z(QRzr(TFyh=%(&^j^>aDVqJUGqz*AOY!m*Y2K2zTT-}2)vIw+ECUgY9MwCEfuF_yo zPX~XyI5;~vKR7-kC#QqI!{4~Mb#kJ)7U}eV$vFewv~`sf+VGt%(&>s^!G_styGF}6dgsmo?bKr;-Z`BC7 zb$54D*_u)`8sPF`Y@qUy>E&1L&45j>B09Y+KAcG|j$R)e9}UjP{=wPF@zKG*y&EKd zMo=4~ED8^N+px5e%7h^EbmAMHZX1-nc7^xut#v2fG7%OY3>^xrE<6AcNfZEvq=^C} z>&}cYapN8hejXg2yc5}QrIX}_JKehtWk$O7JiEWKF#@%v(0gqH$Sc54(i#c%6H`XJ z(n@$qGSOV}gEkye*HukzLSOYWL{}7lg}4?7vSm|;L1?)$K8>;JCTk@ClHD|dRdH*~ zhDD}j1$j;x8kS32awy{`$EW9er)2NlPZviZ=EuM!hkG&l`}CR;YJSu~Fntrm5fmZ_ zB%u$cZuqwUqkdy6H`cXcQy53&Ld_gmAj57f#4e1uYq>Gdj!X_l@J1i&$k_3J(065M z&;?C)tvdwNl-TrPsgc-o{pMN9k>o)-P|*58tg3Lw`@nPjvX+lF92^urG9@_r20qx}BYl^8FS$ z)5e;k2eo2Euyc$_0G-&_w^(mMSG}hXyNON%AzbRH+6|25uCK)mx-u(&Bsqyg;vIlU z+($+Aab)ThF#llOTQb=NO8%+?58k;_QVJPlm!gFP!-o|A_kWN3P7Rk%E59K%Qnb4D z&G)Jcjt;!;fOndFZGa7i7nfJb$0L1+k3W4*J_g>vM$*G^3&V)eQ;#hZVYC|pi=wPK z0gno-=umK8Oja#X`d(mv=)Y>tjVsiN#xJQZuqL+}K|Ov0_5b?*E(IbKp8|h{Jr2Z= zIW55Y6HqcJmo9Td$Vhi>%S2BvY5AfXRw~!H;r06X=W#?5#r1G7@1vz4IJKLFWXADodJZ2Q$3!+fH4U?hIv{+bkjJdxlfC}TO794qU| zi@e@D8}!M^9tg=#faGBB^z~bkDzqZHs|+xZN5V>gUlK#kHX7g=73F=(FNYU@ zf62-#;J_O2qa~?-h>#-5SAe=$;%W*U#kTAgD=8O_OQkCw7teV}VjoD}4cJ8w6n`vK zq1f=haw`&_SRLIDshuL4x`vO{kDB4rHKIa?LF*~_NH@n;OU`RMst|ioD8z!N7f3RO z1}==M4uKjzRxywXeqyK+{PZ4dnk(*-pt!1tyX&Kk2baPuH}xTS6u_AJNBEnJO)yqD zJ^oqAm;aN!)4jvN`RVc5GPJ$^NZ8HlO6{wW?DlvY8oG4U!^Ou67`}X3O88q z&KhA{)rkdH(ZK+_EjgozP(xvrDe53Hjh9#$#hJH|DOgEd6WS6nkSy<(I<8ctY2xO? zl2=JQ2U%E|J8QcTclgLXV)N5ph zAS5pOV45dILyXzTY|2Y zoNGx2!4jo^aaYi~D3!ZKM8lV;m?Hu_x-Cf?lVpNG)kYtgTx87)BFqatx_t?8azg{- zek~TJfSP4CC#I|Ljwyd@OrQ+7t!@?DG^YW|5N~OQD64m#!3@=AXPVhz{NSo#cpHvu z|MDsvN%;A>5Gn*g#{^^u*|U_iujf7#8mA#n-C zwHz;{3`6$waY*B$h4D?w3j1<#gd-5}GNj&>qJhmaM=fS8{J=`c)nIV(2_Ym*htEw$ zKA$gK9kD{e zcw5eYh@x|HIpzT@jxNAJTv7mX1~t5m+?vR|$?{c6dqw<(nXRZ${y-p-IDiosmXxi= zTZNrqe6k4RxcM5;M>a*ZhAbs5mUGB|YQe}MrS~3?JehUmE<`r%h&;q{JZljv zQPZE`d;-c?W;|1}!|i`y)IT+`OtVk8Bif9d40t3sdCi2058vVM&jql-A;PLH!LiLV z?P3TLSMKMjZYWk1g)mMn2tWiI!hsZoAW8HSaR~pJABE(MVyw7BXi1FXaYd0vDyeFJ z2*Op>b!ioOuEnihb~M-7*vn*9Qq@o+0Fo^}g1HLgl2y5q8_VY3Obmt-=gP&!!F~(7 z5WBq?Ac1>=Q!blwie*Bl5_BPRrg4;;`UtqJDG^Q!0T4WqMC-z$BwVE6^OXhtD$oO_ zuK<5ZgtEbn_gYf()8{7P={p(N$_J5ufAuPe#K6y&6wYdeV=pN3obcC$;3Ev1`7D5D z7;2CN&oF%C&O7v@?tDuM3(&^CVLV8=p)n^}X~Z1>XEuU>k+^Uvm@sgEpx6s= zcx{%iN1Z&e98|`92;pI>&BbH)L_Ad(!cPg^*&qeKQGtiQ>)<_2$C-n6_6~i8k|;hV z|BMymv6`{sY$@n@!@?YUo))1ymAD}L+wgUN>Uxg*HQd`Gez-_D#p{ov2Q_=>omzSqbE*%(~8{@VJ@OC_`07n zhCg<=3Jia8Xv3Tbi>c$fCG<%mR{=x@#n`p0f?{&E1>1=0&wyqrm}Sk_h)$#i!EVmG za8U6zdj(!sIGNGUQ_hTJ9Ge1i<&ka5>V#r(P0_6Y&dNM&U2(E0J#x!`nsM^L646|f zEO499*rgD~-^q+M?qZzdqE{(pHRsG%Nw+Iae^qN7*Cfo;b{fPyo))hwYEL#6oD`@< zF|J#Tx4@{X$q-J=EJG8Ffx9UoRoK&vRHuN2b`K3V2P5Y%GQk4ar4}gXRtktLqqXmp z+nPPYU^HK`e)y`U;vkuftwUd{N zoH>h_OM|F-rH-+jdd$}(;`NE%#B5)R~ACUcC6nanwuL7 z%em3a;7gpvFd15gpzaj!Mg+!EPbw%C6+cg!8@~yiTvKN`gjxvSMWF6tq+mlj?|85e=oV`Jck6oY)}ihUjZeu##Zd`niGoj)(1_R`9WmEhROpZ6 zqZH0|R>(#P*rn1@QoPoge?pb#8hpTQ4A^I&kKiJN?t#m`V0A&MxML0U3(<@l{4Cc2 zhu6`+B!7W_)2Y;BU=$M`qtEx%cnugo1RtUCkLEtGFXKKiRgXV)b7=S@s)APg$Z~jv zU~Ee_m-6M^JbAW~oSV?a{}mJu%eqq?;>=n2fn{DQ zkyT+lm;L;u>^qf!XReZ|mAq@^=;Ba49h@CsoW34^oT-NgM`VMfp6&gk9K>Qti-P`# z!lL4?IUY}1BRepXOdp*D1uye}UFFMi(dAWXHN3)|SnvxW8-JAH0lfM0xAm8k^_L?_ zuG~bB!Yb|GU+@$1>R5|5teJ(_TnlYjA9V9?aIGI6uJ7-^k}9{5$D`3qRkp=`Q(7(Q z;HuProPl7OWJ4azYT$~Ti+PAjP&GR^9md@p=GK&r>eN=NsjsPch5pJ9z{699_>naL z4A!#bKLYiv(jQ~7OxYLvwhYM+;g!h!EEq4S(DRIGzJ!ohq>wVRwNp-(NJ4H{R@Ncj zEx6BlvNQvsDrv|Ng&h4DcXe6XF@pF+x-q7IZw1XL@cd)y#q5|rk5&v^@xT+0q-VMx zE=W#LHFiVA+3yM)Y|O&3xGWo>%BvExD&FzzemQSWAE;=6SoeidK|G4|(hONyzN?Ac zN=00|=Z>HLBzh^S+66_?|4v49huBtwA*os^TOQxS+!H5I}5;gMB@NT26X5rSvO zNWk)m?AIf@Zi~%iyRq+<*|=uWX~?gC&q;gKSyLdCivsJBk!AkhfBYwoqG3UK&w_~J zfe2H}^L$JaAaQIO4?^3gTexYWWc0Kyc_g6CY9Sm+X_05-mGv-Zw zFMYZjn{vLK$?Tx#rIXozvZZdq+STVRbP-F9#G}$ zSE>3q7)NZQJc*IvA6_wF9prsrpC-a6$i0>a;cTe~BddgXbKsR?_6o8e04@{vgd&oV z;Sz|D1u+Si1aQFB5UHB8n5u_(AC_VS|KtpluwKv4HA#o!i)WqX`7RZINdE*e<-Axd z8dJ{O?&2|JrIu^IXiUbqP|x%6L+{u1?(`y=7&RY`!N zz)Sq%;7*wMs9Z^tgmi9LOS!|(aaz*;@vlekj`#Kl`{0Sa8??@3VVV-Bt~tuNU-G9w zNvnJtD+qt7o&4aR?GKlKgw)UM5-Y;O6BYrUPYPg`H(gln%^vizsHbd<;*DpQ()nQi ze>&)#?e`+WC2Hq-b|^+uX*?&bvtp425SZ#L06{1ar9c|+ry96DD8BF?o_agd#obBn zZt=tX_7RJ^pfCuz zn==5sG@t&VV~+z)<%izDBmO_%1Gt~iZH{FD|Eg>8Ze~EkJI#3C$~ngCm+LtqGLS;KyF$7VFC;7N?&LEle zPQ`)VjX1!e2L4TM))#b^H7Bo;%tn6rRh*KycOQ~4&=+L@12l>$LviOBNjT~;I*0fA z0qicdgMkA@Xj`UBBh8W?x=fJFj^zzcF;>7EYK1T^CEqcBg6)&2HVM}3-coHu9e4MW zlsNfQ>gOB}`k9^Ci|}#<4__#O2smtapCtsQdc?U z&j#U>L^HO3=DJDAP9E4Co+-NQSz$cDoVr7Ri9g~^p_xAA2Mxnx-wb#0`+^czN%|~r zs}x+-pc)W58OhC>R_0wm(u4PcE8Lz1f`rE|H z&D5HYe0v)AIzT|!O^w}`I9Pdg-)M$#2=zj=6Jmsa$}|+~%uGw6^3rIUKuDl%;(0|H zr(rFT)@bP}6PXn*S#XuvY&czUH^9AO5YBfOPwkaDgO3^=@*84sx!&ntVJMS4m%7*h zh@-$k2t&yqtR`X2kq)fTNOmb7kF2v*SEB{vrghhn(SsbbW#i44zo{=L>dTS(@~!&v zPviNOZPRoE{OY;4w?ZEf%>pP8eSWsWK5FjJmW&s_3<-FFC@pN;08!sy{`Q%6lY^ zc9>6QIo7k1(Vm_O*$)De#73OB0j-b|Nibq6?ZA>pEcL_Y%(6ydeV2TU?9l9Gs~8gE#M>qx)+_GYsnvz-(`_9AoK- z1ZnD6eo{&5LX1lt(UpBR%S+CG!LV5lXihxhWZG#?$+?2d{(9%CBs1vV`krnm&ct&l zO;&2m_zB`lV@7ERT~WbG9UYv#9qd=hK2)Pkb)I|@3YG@%spdmonyvk0twNF?9dnm} z{5m)tka*fzsxbe~D;^!6lQ+i~NBhzXekmKu#*Zi3{acoafAJ_+n_oqLf7|WeX8aqU zcRHI}-52Ek#S>gU?g#|UFT0ap$<_UiOfdDb+u7dwervP0)9otX!H8`2dW{$L^{2mH z|FUnY{m zwZI^Gw6NT?_g|^}e-ZkBzq_5)|GirOKZ*YDX7zu&*8H{pkM#e^FF&mx9KAVSOfieYcu@BPStnThtu>+Rwsr#`E{=XVf-t4QSMv0K$zbGKCi%_O4d3?3 zq2_s(8@ybn6HPbzgg)@MKk7HOa${X9Hf_AqhtzZhc>B~HIyzsn5LBPf4kSI?f+9;m-Oa_eY$?tz^zfQecixKi`WhB(gDBQjan1b_Wv>Mf1Uq- zKKn1`|9jh;z3r_!|NqU~fBRwC@?ZA-*Jh`ew*On*di~#%Tq}f{LuN`d1fJJli20=;RVFiM_;Lr*eH{OVGziP;}GN`Zms;~O0ullO5`l_$` Rs;@uw_5ZuI^}Yb`005FXIN<;Q delta 6600 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 diff --git a/script/CKAN_JRO/jro_api.py b/script/CKAN_JRO/jro_api.py index 904c264..4681a0c 100755 --- a/script/CKAN_JRO/jro_api.py +++ b/script/CKAN_JRO/jro_api.py @@ -9,10 +9,10 @@ import zipfile import concurrent.futures import requests import json -import ast +import pathlib +import uuid from datetime import datetime from tqdm import tqdm -from six import string_types class JROAPI(): """ @@ -134,13 +134,107 @@ class JROAPI(): if not os.path.isfile(file_path): return 'File "%s" not exist' % (file_path) + + if not 'format' in self.dict: + self.str = ''.join(pathlib.Path(file_path).suffixes) + if len(self.str) > 0: + self.dict['format'] = self.str.upper()[1:] try: - return getattr(self.ckan.action, 'resource_create')(package_id=dataset_id, file_date=file_date, upload=open(file_path, 'rb'), voc_file_type=file_type, name=file_path.split(self.separator)[-1], **self.dict) + return getattr(self.ckan.action, 'resource_create')(package_id=dataset_id, file_date=file_date, upload=open(file_path, 'rb'), voc_file_type=file_type, name=pathlib.Path(file_path).name, **self.dict) except: _, exc_value, _ = sys.exc_info() return exc_value + + + def upload_multiple_files_advance(self, dataset_id, path_files, file_date, file_type, **kwargs): + ''' + FINALIDAD: + Funcion para subir multiples archivos al repositorio del ROJ. + + PARAMETROS DISPONIBLES: + CONSULTAR: "GUIA DE SCRIPT.pdf" + + ESTRUCTURA: + .upload_multiple_files_advance(dataset_id = , path_files = , file_date = , file_type = , param_1 = , ...) + ''' + self.list = ['package_id', 'upload', 'voc_file_type', 'name'] + + for key1, value1 in kwargs.items(): + if not key1 in self.list: + self.dict[key1] = value1 + + #---------------------------# + if not 'others' in kwargs: + self.dict['others'] = '' + else: + if isinstance(kwargs['others'], list): + self.dict['others'] = json.dumps(kwargs['others']) + #---------------------------# + + params_dict = {'upload':[], 'name':[]} + #---------------CASO : "path" or "path_list"-----------------# + if type(path_files) is list: + if len(path_files) != 0: + path_files.sort() + for u in path_files: + if os.path.isfile(u): + params_dict['upload'].append(open(u, 'rb')) + params_dict['name'].append(pathlib.Path(u).name) + else: + return 'File "%s" does not exist' % (u) + else: + return 'ERROR:: "path_list is empty"' + elif type(path_files) is str: + if os.path.isdir(path_files): + path_order = [f for f in os.listdir(path_files) if os.path.isfile(os.path.join(path_files, f))] + path_order.sort() + if path_order: + for name in path_order: + params_dict['upload'].append(open(os.path.join(path_files, name), 'rb')) + params_dict['name'].append(name) + else: + return "ERROR:: There aren't files in this directory" + else: + return 'ERROR:: Directory "%s" does not exist' % (path_files) + else: + return 'ERROR:: "path_files" must be a str or list' + #------------------------------------------------------------# + resource_extend = [] + files_dict = {} + for count, name in enumerate(params_dict['name']): + param_list = {"name": name, "file_date": file_date, "voc_file_type": file_type} + param_list.update(self.dict) + + if not 'format' in param_list: + format = ''.join(pathlib.Path(name).suffixes) + if len(format) > 0: + param_list['format'] = format.upper()[1:] + resource_extend.append(param_list) + files_dict['update__resources__-'+ str(len(params_dict['name'])-count) +'__upload'] = (name, params_dict['upload'][count]) + + #------------------------------------------------------------# + try: + uuid.UUID(str(dataset_id), version=4) + package_id_or_name = '"id": "' + str(dataset_id) + '"' + except ValueError: + package_id_or_name = '"name": "' + str(dataset_id) + '"' + #------------------------------------------------------------# + print('"{}" file(s) found >> uploading'.format(len(params_dict['name']))) + try: + result = self.ckan.call_action( + 'package_revise', + {'match': '{'+ str(package_id_or_name) +'}', 'update__resources__extend': json.dumps(resource_extend)}, + files=files_dict + ) + print('Uploaded file(s) successfully') + return result + except: + print('ERROR :: Use the "print" option for more information') + _, exc_value, _ = sys.exc_info() + return exc_value + def upload_multiple_files(self, dataset_id, path_files, date_files, type_files, **kwargs): ''' FINALIDAD: @@ -152,7 +246,10 @@ class JROAPI(): ESTRUCTURA: .upload_multiple_files(dataset_id = , path_files = or , date_files = or , type_files = or , param_1 = , ...) ''' - params_dict = {'upload':[], 'name':[]} #ADD FORMAT + + params_dict = {'upload':[], 'name':[]} + if not 'format' in kwargs: + params_dict.update({'format':[]}) #---------------CASO : "path" or "path_list"-----------------# if type(path_files) is list: if len(path_files) != 0: @@ -160,9 +257,15 @@ class JROAPI(): for u in path_files: if os.path.isfile(u): params_dict['upload'].append(open(u, 'rb')) - params_dict['name'].append(u.split(self.separator)[-1]) + params_dict['name'].append(pathlib.Path(u).name) + if not 'format' in kwargs: + format = ''.join(pathlib.Path(u).suffixes) + if len(format) > 0: + params_dict['format'].append(format.upper()[1:]) + else: + params_dict['format'].append('') else: - return 'File "%s" not exist' % (u) + return 'File "%s" does not exist' % (u) else: return 'ERROR:: "path_list is empty"' elif type(path_files) is str: @@ -173,10 +276,16 @@ class JROAPI(): for name in path_order: params_dict['upload'].append(open(os.path.join(path_files, name), 'rb')) params_dict['name'].append(name) + if not 'format' in kwargs: + format = ''.join(pathlib.Path(name).suffixes) + if len(format) > 0: + params_dict['format'].append(format.upper()[1:]) + else: + params_dict['format'].append('') else: - return 'ERROR:: Directory is empty' + return "ERROR:: There aren't files in this directory" else: - return 'ERROR:: Directory "%s" not exist' % (path_files) + return 'ERROR:: Directory "%s" does not exist' % (path_files) else: return 'ERROR:: "path_files" must be a str or list' #------------------------------------------------------------# @@ -217,7 +326,7 @@ class JROAPI(): if len(list(set(len_params_dict))) > 1: return 'ERROR:: All lists must be the same length: %s' % (len(params_dict['name'])) #------------------------------------------------------------# - + print('"{}" file(s) found >> uploading'.format(len(params_dict['name']))) for v in range(len(params_dict['name'])): try: send = {} @@ -227,11 +336,11 @@ class JROAPI(): send[key_no_dict] = value_no_dict self.list.append(getattr(self.ckan.action, 'resource_create')(**send)) - print('File "{}" was uploaded successfully'.format(params_dict['name'][v])) + print('File #{} :: "{}" was uploaded successfully'.format(v+1, params_dict['name'][v])) except: _, exc_value, _ = sys.exc_info() self.list.append(exc_value) - print('Error uploading "{}" file'.format(params_dict['name'][v])) + print('File #{} :: Error uploading "{}" file'.format(v+1, params_dict['name'][v])) return self.list #------------------------------------------------------------#