From a477fc3a7e612ff4c5d89f3b43e2826b8c90f3b8 Mon Sep 17 00:00:00 2001 From: Vince Buffalo Date: Tue, 22 Aug 2023 10:18:41 -0700 Subject: [PATCH] new tests, new logo --- README.md | 1 + logo.png | Bin 0 -> 18218 bytes src/lib.rs | 1 + src/lib/api/figshare.rs | 10 +++++++--- src/lib/data.rs | 30 +++++++++++++++++++++++++++--- 5 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 logo.png diff --git a/README.md b/README.md index 468c820..1347556 100644 --- a/README.md +++ b/README.md @@ -129,5 +129,6 @@ it's on the remote, this should prompt an error. - wrap git, do something like `scf clone` that pulls in Git repo. - recursive pulling. + - check no external file; add tests diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..10b35bf416a4b36c75be7241dcdceb492444cfa4 GIT binary patch literal 18218 zcmY(q1ymeO&?vf#2Pe3@B)Hq+4#C~s-5r)-NpN>}cY;HLL-1e=!QEkTeSG)+_rCXf z&P-KTmvr~(In&cs^<70t1`U}A82|vF$;nEp0RTYJcU&9^;r&U+ih=tMfbMEC;(*#o zlEe2(n5B-Km7*fx^E-|NfCqjA!2ZYbegS|)0Qmof0|4?s;{S`Q0U7>>2L=F$v<1NZ z50BnE{IAHq-|y1@17Y)l|F6b;nE%5K6wQbIKR7`AKQW4jF^+fe!9`Zr9RNVV{_h3? zGP4QZwdvYw=y>QTei1Ntc4RTNa5l4K@o{wdPYM9?5qL)(Ej>&rd>kE|+y#7usQwp+ zz&rjQnU#v-f3bMj3sLDPs!&KcyIE53u&}YPQ3)ecP*8x}EUX07B&GjH{JkbbW#i%D zBEZV(?d{Ft&B@~IX3fgZ&(F`w#=*+L!Tip_?C$I2Vd}%|AUzi>Azc~MYwEwXKV*Stf|EDwmd!+x1`aV=)WDx8Boi<@)LZeMY06-KV zCn=`k13b<705+0JIaf|xo6T8kJU^TyYivOL-O~a7#_)p*Ia(k#lyTdg9ARd7g9VB( zK!_uyYAp(sN~ouf5*1%c!W`*w&RI)iI)AHr%Bgc+?=dcem6Mgt+qv!j=`>%V?pgJ^ zULjC+bPM^^NHUO=^SIclT}Q(1McPGOe{Nat^J3tYGgWJ*B75b$)-!kJSF)hjdirfF zg(1*c$_~;xM|aIyzg#4bdbuuo*@+WXd3SVP@`Vpw0A=|i7AB_VwQhg?JmE_2f5T!xBNC9vG=otrtm5t2h@kgBaeejPQRK%R%i!jY zq}oo`^4`=_N3ZK?2?tp@OWD?1)25dO*Am4k#+D(tdn`(0TP-K&mZV2?%}gL=%vV1f zUb}p3z)-N*0iDwlS zRW?q`!+ldhi28ja{FG!%0C?=AS>do;RX$p~g@eJXGQePP(hai4yfWTAEp$Cvnz0z4Y~vaCJzU_n zS|O@t>-~KM2Oh=K&5xg0$vO#Z%+S)C<}G#)ryVceFB~TtfiY1DyGFe6RiEQ|>K|{p zjaejeaBRX<&YYzQfvASh8eHd=@5sJw4~os|`Gg3}ap?{2`-bcq!{@ga@^`H?ja{8o zn@V||4R8=^rRM!8aDm|e?J_TOTxd|IvTx3!W%0gVFviuT-pvlX{pky}I$o?Zo`!Rm z{sIEP$s)G>>gOK)`W2?CwzgFQL+Ed;@S{x@pQ{-_WJ?0^tCuHqf_EiJS=jb{ihxMl zQi#`D)jFoe_rLK^%8O!=cSSJ!avsahczG6AV*TRjRr&-Yo39u1B6tL~~X<8xF6 zAQ3mj>53OysU?074|YX~)Wk%F(;U+PN0}y4JzY{5Z$Ki^$2*lfdkO$W3gKs+U^4wR z6MT{GL8BQ=S3gzfDweaN_Q)LI-y>Z1qa@W~xC_XqjtGolQOaEv(ua=CQDn3Xk()nS z#FVGU*%i3R+a({}-zd`pwLi}I&RAVt6>h40%^w3dV44ag(=Z?JK!$uI5icos-oh9gg@6WJ|LKw$Ke1j`jYQyyXEH$uII6X z`Z1mTXA(2+*;gC-%hWeNOK;)b?#CtMiR}p{V#|l_CpfPf!Pey@ZiV6i9Q~@Gge0Nx zX9?qz6l-ionQkL2^hXaMpxZ6@PCUl&;!BJo(~et*R7K6bXDwuVxA{;x zYcfW_9fKm%2Tv|3dSohNCD7;d-|3&?GT%jQ{8@|b%X*$Gk7RJnWm#b2r?>c?5~3A+ z5@&yd&`rkT2~@I0f_sE+m(0CJY15XLt@Co`5t2lYZSNvEMUVlcyRu_)1R?~Z7cXLG zwU*zAetl&gpa13`t{Qu+ZO9c@t4o(VD}OZu@p5XieW_|x=H+#4$vW1CND_)b)F6p= z%RHwxO>$D94w8rY@lL_&42|K-ajaM6`j5|~D6J59cl(q3S>aYqQ*OeIs9qZ*yk2E^ zWVm4))G#qrLP9b?z!z*kfk~2;QCW366pH6ck%G;KAv)VnU^g`~WLj!j3F49^ zZ#cfk04iu`N=k~?%gy4-)$aJIIr)=LIxo%SD>Bsxp2!xr44()AA`v@j*k5QXldAq9 zqaxF?&YI768z<&JpZ0L|HJ9s|`gdE7xzd^kA92xA7M6WC3~83}ob4NxwWFJU6wbyw zd9NS@QpV#)#eNn@2XkRu_*n%|fk3`7v3IT>Z2@ ziB`<2GL%l(T{FLeCU-oI5Ve+>+M|rrlclbC!zw@-cT4PLUrc&5I-TPf8%h^Q7i1Q5 zIV2a*(sjzd|B^t&_xkcCaJD*oEN7cf0tWU=f+=HshJG1rWb?a6Z|+))JS}HSoNaHtfezWx1-m7!KgSC7zU zPB8v_PO~ng&|Q&3dut?++3)AFkL?#uQ!)|nGlB9wxSZlZAN@y=E`xpxIi2 zrZk@1$A~_WU|0L{%~NE=#l#!n92LCqhsRNY$BGbmo)WI9F$)~k?1*h`0 z@#nQvyFNXx+tT)qjuS9pu*CghTwOhZPY5-vcF8#zCb~71m5qqx0c<+oS-UQNGu2Ht zeDeO=CqbRGvG(wiol19_0X>W@pkfZx6K)?%$6M^bF97$FljSl_8Em==Pnv66JBw5u z^DIR%6Q5pu4QbWQOxFwejMbwnF>BS*IYN<6R3kxg>L0)N#v?l?=ykEFm1tayX*+J$ z4*mUXoUpehIQ3?kVe@DuzkA?vd}Wn4$O52;1b2~*c1p2u)vVAotvcry3O{JYr#XiQ z!qrvYmG1*1x*}^8aO23+OJ2YGQTobglTwFsT=b~tc|~V=?FS@yF5<|=|LiKAuQggR ziyW1bqVD}$4eWj3IDK7AR`XvRP$Sk!B(XU|1kR;6gkPp}wD|5E7sqg6MFv+HHt{u&@#w7Y&%Ue=XvKd{C+M6-%E}T4A z*I8M1HgI|UFNPS=BuJKFDwSEkx~E4tIrJ)@v>$`NVz{x9qkn#+46DssIC-VcFx4=} zxI*_6T;IO>={K@eaSvLsvzux-PB;jt1IPDCRS+Kc1Hf1_IEULtZBLi=eVw1W5to?q zQdiI<7{m5kwGT&sCjLm~?;kgOL!N__{ijtn%dpwE-PACs!Yc(ehuE=b)j_KwV0vT? zo`<4$iSCBfVs1=kIXYz9;R?(SGxYTWq^-Zi0uJz<i6qm$P~$vBJHrqhtxJTm8iPrx-B38$W+bQYB=A66olr;tO_@ zf$(0>-+Fk=b&MHVqpR)6QlK$Vo)z`utQrFd6OnVa%bPy!V&2pg!_R){)G+>W!%-6D z^F^-IPwJ&%=!d33Lu3AD?fa0XDPjBG$N4((vZ26%oGKwQYXRO(YU${D796 zljP!S9p}BAST9?Tr!u36BKOh&&-x=Veu}&tD&G!ZD|^%<^ylpZ<_GbONup_s>8GTk z@RsfCy73Hbv}*J$?H8&)EVzl1@F%LHh9!uAfVX0y2+Q}E+m3sGGJXvr)ev8Cgk_Ng z2c+LHL4&)azEV;xY&BLO7dtX7tvT$cp#CI|eMx>4HJwiXwsC1|7L=n{9>tJto1O!- zFsPM1HefBWFj+VvQI^SNwSPUAC^2t7$fxov<{18T_OZ$1Sg+ImaQiliTN#3)c*RUp zJ7xjXCAOuRIAf20W>X*I=xKGs_-8@bs_8&Tje}?aDm>n>RF@c^|&q4s!gmN6<3-MmrjZ_;pE@l z?KbA^7%=#a?TfdI^-|Q{UEh_j*TUTTM*=y{Nq|2h+3IyFs~uF{|GKS;*;y(u>@|nV z62`?GNNa^EEo4nQs5FjEg_#Y9V8oy^P(?dg(Er1+G}b+JVdX8sbNQ$>vczV9La9*~ zY(I(Zo&8o;@ZiiNbA^^n5sAF~IfX&%k7! z7UhYQ!nd`T-w>Wo({6AcCFqNpMs@zs_LI3TPjhUop%`kPZ(wwt^itlvRFBx()xemf3BRE7+ILYfD% zwUMJDp~BcPXta<6Sdnxq3*Bh=zdfy!gK5ye4$!mcFIy$BIfTs3~UREuwuBWzTMNU`JZ?5I4rRVzCA-v zujiC84&{zrg=+G;&3T)-SIk=!YK+lgky>=&d>rhXmv`rR>SdK?ox#6V)E)g*V*s*F zY^t4SBWzjwx6*>r&|vs(!A>)NSw~0P`Yila^E@MA8P@7SX$5nTT9x$ujI(;bH5P!H z*%=pBBUS7O9LTkGAWTrsTg(pnA>zB7qU(ySmBfGD0MuElf&8FpaHp|uIa9E%zAX9 z;FA%dcs6NB+}l?mZ``ECb}Sy7PK8q$JY$@=YG~Daf*jl}oovoA)e(kDM^JeM;pc>E zF|-`C4&Ly1+89r$AA}Eo6W%2`P{0CP3Z#&Iou=2kX%cK9ve+ELBd+6aRcXBBzvmv| zyX>duUFJ>Y3QM6LmUZ8`g9}BLQ6FLAANXcOm8dB@PErUf@kf2@rb6n*>$cbpEvj3f zCFmn|Ys7PtX6g=Rkp{d^IRGFdUoK?mvHsF)BrQ;F>~AMPkq^UXy3zJ{RMkICKtTzT zvyp>EL~njN>twzEz_AKdI_a9(0?hvkMT~5hxxe3ZO$um_6QK@{7?=*l5GD{k`@vXS z&u%^hXOxR??d?|@06-6L!IF1{m@?ll1mPC+mhaXu0Wg`w)|ceB_bgqIRu17 zfMb5lw6Fa@M62cL^N}|P@l;)2rJpXV2%X=sN@O;*P!+Nf-PJU2bxTe>V1pRhreSD| zn2}=IxzMgbS|JPFKfI~ft4V8}DAm$}A3~>C?L!e}bqJVX$++Y6?=Vf7h_CvR*TqqV z&*q5Q2U)9xt?HwN(nHaSleydDQs}gFL6F*iY>Rk89Wz0JtNYcxqSME*?&Q0?2A+Ru zioO&DF&%v*qHsy?RVTHRi8@_cn<+fKa$2}}R;YVjmd3sQIS(^tv8?LzwN-}f(ey{s zIEVKsOsD5DjG#d(^oAX9)0Rws&BPxU?6UfavW=H0Mg1uyQWET5z7=3?7!`O?XMeJQ zZ||@fVO2FxLLw;vyylZtehD|m%`p_(4f?jXr-Xxv&Z<64OZuHtl4!Ocns;t&y{-eX z8MYU8?gCdze_T9v$wo-y+t|d}A09(DTGOIDVv_=?x`&Ps(D!MHBdd5Lh{9{UP(+Kn zK(Zu*&V)IDB5E-D`u*l+_O|bDSmtDY z-qc6ew}0nBi+1+*O_@n$Hvx&h56~S#qk$Om3m4(h`!H%0>sdeFgvDTut}nSfLCOJF zg-iy@dBXpkx^J{PUv5`~{9@fT>gwig80ZwMRP-eF^JrpblRGjd*UAQ@t@gIk_wCem zexjq1hA!X}*(6&B>L&?(u4yt5ODp;)UWS{g`nGA;CUJipdVhYeuMI(D*cdg;V`8aalX72CWbjwh@P#$$r}4wgua-mSM@2U zvL7BAeQOJ#VO}5)@(pz^ID3%Vk)kSNb&T?<3_)m)a$oAL1&RsmFEyC=Pv34vlA}uq z3pgd(tb%`4)%9c=(k4b@_af44VDKNr;|Cz!SzpkAlm>ub2*o*>tX?>wsjlKtFzF-o zF)|>Q#ewZ_*bjZMMuu3IT_9Hq+L%anGFEFM)`)q6#Gt2@bx5^tlf&O~)q>TF*rcE9 z_&=G{w>2Wa{8a=wg#yeRjJ_K}pKDC{h(c6A(vX%T;}?^rJ@nq-fk7U%*gt}Qm0ZX5 zs?hMyk{0->dqFm8q_q8St!d0DH@AO!`Wu}%zny39C)pb{V&^`FC^E*oH-k-!0A=Pe zGJzk{a)O9Ds1PLykKq#K^2;Fp9*uT>*wW(zqpV zkj{d+E^46-%m@??Opo@to|;=D7gRp|cvo^%h)kJiAEx^Ck8!a|@!QPj205E^BWQl*C&Zb<@Fi+kj z?DyV7ojaPc6sxj${RsG?W)qvNFELow$}&?|#l`*$=9EwF64Fs|%PkZeNn<{IK3}x+ zg^QB7OT-^I zpIL%?uT@`SxPI+)ivLDVc_3`(4D`Mx4SVkArCau>k zLF~wbDkfu9h`2$;6X5 zHKu1}yuESw?rm+IfnF5-vkJqL^S(gtz43)wL*j@CfMGU(dSO+d?@NvVw~k0dm>CGb zH-aJzK*rnBHu4=j>w->VA~@#`evc3r&?>Ih|2bJ%Rn>1UdT4m=r~Nk`PD7`8`2d)a zNFkdG##yk8CLKAnj3C^#^f`CKM!*1L8OsBr9z?76F92=nEAG=_h<2bsdf0^R)i%W9LEu^&l=%7{@o^NJLsob)# z)c#VYV;i&%;IAd=!faOJ5skM>GU?0u1@p%M5N?aVZVPnCXLN_7bMqIPmR>r2SZqYD z99_`4)HS8`^S)VeI=eF>*bysls%O?DFR*1M2vobolB@e^*mk0%eB-q-XJ4ppA+o`~ z2f*Dd5**LJ9oeS#jIR0^X@wE*MW|c6J)<=Jyahk!y#!k~zgz-2KesHnQB5pih;6%s zd)nkC#V$h9!zblj4rwo&E1Cx)%hgk!%F*XoG+9rzN}%)8wB^!>aTq!5-2+C=2Yl*3z%+$fc_qK4J>kldf=ZsAn^voOl`nT;bCByY`|fj zOge6U=&&F;JM;+$r#H9R;uc9Hs|+Le{~&Y($M>AX_TY1|=xPjWNB=2>_de6VO@0a3 zHprqy`P{Eb4vCO`l<3(7=dBvBu;iJ%1^pf5DduxSp_;s;wq8n~rM$g;;9W8e52bR9 zLu7}+$-t1h#hv8=ik5v1_{8t#DJDFO6g-si3>>jSTi?Ep)FvNgdLS;;v@wJ=0a&J( z8Yy1(&Z-$?EkwVCaqAYS(t0o}Qq`YJz(?b}2Q}VnaAfCJKW_mqmL2I}6334L`<3NX^ zf7O)Su^*NXR105jS#!ut#G+si4hZC6NDls9TGuM(1YC^{ZQhMG2Px}uiHf4tQ`J>g ze$L``HX@*-2S$5@m4tkl8o^Nclj3}^0i&vnQP00B zP?x-pf18`8w{wfKB{ z*+`EY|Dbb&y+*hzL40gZADeAk*3ALQwOcmpZ~0uzjRY~0KcdJSpUXDc-n-~KE-4h1 z@U0i^wn!zIf?{#tif(SxH`{cze zKi+gx*;H2>Ffe3$AA7UBd#Q2ZpkgqWebhNjcK&PG-HS79JeI^{LcG3?$*Der=tt^j z%Nz=C?~rMD3PVS*L({g!-}Jfqf0Nz8-7hze68*6=E1XF^RrdO)b#5-gYQny@3VQ@& z!WFciMe?+W`ljYA6);&iG^+&=NMy$Npm}Ae4H(RIi)WmW4rJ~-0EK`(5u1m$$N34D z4dO>~=`EZImqcGdF8;kaK2DDvle0f!=H6GwPOEKSM)s~eQ*t{1I@_LKS5XHE&-{F+ zg$aW=5l2XeN4q$*J7c&4K440~Y90J4ISl zHA$Aa1Y?e zXc(rCevA%=o(k)l%Z$I2a9_VN{CG=oDmD%kZq=oL^Ci8Vi>Th_Hij_No2E~?2r6yH zcEq&*T5Y|jjCpR}v^Q;VK+PE^R-WPpHSDlBSK%N0v{}lr#;8fR*4N`%(jg3=rr4Iu zO@SG0cYA%^-N9H^scG>l`aX=3MG3g(V+r=XrO2w(#MuXxjk<-kGcgrWDb zUo@gLJ7b&LQQPjsD(;#rVbzo?*e6KDA17Zj!OOIM8KIH z8ilT|YS?>^?iL9|GRlJ#Ga@WHp-+1GzYf>o&GJ}C$wg6(Mo=CQkR1MI^~GI)99k)0 zM@=&xdNIpI?rL&bTX^(%PfRa4*U@~X`yQuY zvH8PEI>-HHBVu(gDyOH7?}y(mO=1#fpJ0ZYD&x?UGuFPT6Tqmyfid>IM{Rv3zL`Bi z89i?~Ys!5zs;H(FBkhD8!`7OmD>uDEHd)4)#Q7P92#4z)a+b@#HF43rLaykZ`jS(t zO)YXnXXL5{zD2s|giR$Q@V9YgUQ9LPDku6`K`@L|Bem#fUqVDtx2LTD#ax9&Y|)aP z1x*rbz6^{ezd)`hI>cYl_atU0YWPD_uL&m>Fe$Lx_1pPXRHM3|QD zf52c^J7?>WOrBtOC(nUdVpJ+wKpp;03&utsJJ~EnnJS@V^~P7 z6^5kmcbDDXK6|g}*~4RpP)k?UgKIF&vE9sSHb|(Jlz?;kDqt4@5Hi${MK2(P2;%oy zOIg5C?&PiOW=ej;@4c70zeN^KoS&c9C3K&UN&E0HyEU*&muGM-Kk?ZUZVzMLO1;pR zc!2n{^zyvvHS_JrjvDMEY@-u!dP>0D|6>l%5pXday^xXZPfhj@Pedrm{|^HpW44y< z&&>TDaSl#S#J$Z+PQkHsfScOeOoj<-$Z%o2&BTf$qp%l|Rq2hq84w~mlRwZX;?+n- z2jH3zqeElc`B9Jr3h8j{etHMCyW}Z zc_zXXY_R(o|H3=_N#ZxmrCuff)VBQ4Qii4swYbgsCeqjQ!53B|iw!~pg34IMk zPvP51SD$qC7p)k7wk}se#P%%PJ3*!P5iNZ;6#R!VcxDZbK{C-37Ym=N_on;99s1%a z_pZI9(kl~AYm`vW0o04KiMzBUfC0#dneY6v(5rFQmBrpy&#KBwdi^}7FkA_uk3|F#vl(Cp%aXD?xA zS#)Bof$4!Uy!%e`O=jE((RJY4zYL)K-Y4%!aX;FnZjH{Qe&RRZ4$NP%B|8P=kXFkc2pReYkUr3Hy5XcGJXrVH;TiLT{rL(b0Kl6rm zu^9PmhSx*Us(9iv8VANh9RU2&n7P|9p-nv2=-}rW8S+yN3?sU+G&oW6*M-s1+X6@l zk7!V!Z7uWPXkmv+@)zkWO?IC80jiATDd?D|)_3ttoBJ{}%+_ku4XnKlwaRrUsIl;~ zo2XW&X^+1ncCB1nTFJg-Hl3}drqqiiX0$Zg4kRd5Mk=j5yY{w zkRk6ft$Y0=17&6?v3*s$#vm3^`fhj-QAxFQ{o*3%PBLvnP*~ z=k15*vu)y2WPWP$g#HrRF6v8%8MdV- zor)gXlbw{!yFZ*t9}k2mL;q;;3t~+FjOcC@QmS?L-rkk(W&PdVpM-y`-e9o@BP#k) z0)Yste}xZdRE<^p{*GiCJ`*m2;oYNbV$+QLZ1L{d;4VHucr(rzKl3@$&i=iFMKc746~@wd&UVvGm8AXfaU0lbqg}HQ?!Pv$Tar zU9hZ}A3KTe*~-4$OLq654~B5AIg0PiU@_Mz$ZDmAYa*(-zzU8eQsc1`qkGiu?+iQ3 z4wWd13Xz)1=e|FTPORXe`wi*!<=VndITQz>YtJ#NE{UhwXTweBsDHUD!UOI;)eR{D-?aQih0< zx=WbBXn4F1>&PzhV6DHTMsd3AbKDHcnn;(9_5ND-&>mAQH%am@2K2BJ6@b~Z3l@hC z-Yv3Zt-(D`5dWY_;lk77h<6xC5j%6!N)Ut*85;2;0Q%eJ-{-zj7e1rW5v)e{CIu|dY^89Z^U0S9G^?W+bbfKq^f6WcJW8 zvO>K9^??eU8sVIVC0ZaLb(Q<}xXVi~ZT#_;0FC!#I9|U9XYkx_k7`;6+8fpvMs%pr z?;4ZzIT>8w+nU6f_I8b!tt4Q3sz$cxM?@7xl71wkn@9H2iA80IMJ4qu{s;WVgx35X z9hoi^@TOn*+lZ+zSI|kplKQrp-s|^iBFKoWx@zjC11cFKOnNgkd-a33J;DD z^gFXx=E9y4S4SObjp?P$>Frls9&OsHzZ|hP_Ag~Tu7nJqc;L~F+Q`1lNq@jJ8Ize6 zp`1D23*NNd`u%Ej?+d2P9f$dg(8#+FPq_PT~_Ad?~91!+mE3G zw2AHWDozRZ=UD)0^G9?6zEq=U$kIxj|HAMdj0h1ER8wIW!EIhs8$Rf=fOByt356}u z5*|QtKNPYRV+RJyk%VnMd_2qI18ls1=n&Gra}jXH(~{xs4{|?)ShrkB_xrhTmT}|w zl$EDAYKDLIltzrD%8%lal=O8hl|S?@@4lkNmH!)j@O;Yz`RO*Frl!_aKm0LXbqEhm^z4KHWkxBt;pO9$J}#J5sVi*R!j+}>2epR&hggX9XJo*y;p>ipgTCi z&)hrNRTUw`L%sA&1yF>0;&@@B%EO(d-9-A4#wH+W1_p7@A5y&8J_lS!mOR-G8}c zZgK~A%7EABU>=px1=QMbLp*8=>fBMcl{q$+J|`39Z*DQ1-Z#pM`dp%Tma>vA>stDH zRg1ca`}TP0&zl|oiFaGMC2f`NpMxjLHEPhSolQ*bhMkM1@VRvS$VXbkI@O>lBuUGW zE%dWvpjPwI3@wHj7w>IXibX5AUTsIsv94DobsvR3ZCUoztY0PPnn2Djt99A^IP=sR z(sr}J>^LM{Nonv?JtUX;wOm=3IYD717B-zMp{N(022WC25Qcz?VAb-&B+KP zt$|(#q>qoo6NPcsjX2G4TKz%tO`IeaaS#2|&TbvCn|$9Xv4%BWzSV!lhrz|dW8OE? zpBqrE9)V=d5*PEK9M-GDimZ;2ZI@7l$btCw%)3`mzxRSV_*ULRAcUOwD7KzU+$mVQ ziycBpOtD&uCRt|D+NWF^s(v3)*W7T(Aua04{2A_KhTK6DT7+1&#KdIjoIs=8R}qj2v)iEgc;B`YF~f#ypiBh&%$!RiXVE)g$^Vd z6#cUwYxbY;AIdxUwcIqG9ho2%fgbSTLzJI5k6syyMO3rM#7m3_r;UR{-PD~Z!exar zkO*Sq?USH=U$8V|L!ReiMR4W4|IdPcqf34UY56idCnfR&(&3alyqovDT_f&yA*#Vk z`*{dzpRBFUWNNi!;-%@ejDsHt?YR<}ji!8^E(M=&KSpV?{I)O$OYT4sRbTSJ4idnwq9R@wu#y7}B&9 z0)c-|4kPhmN(dBq5UBRVb*H`SIai!YY;&$l>RbHJf7i#T50KaJcM$3G|F*Iru83L5g!h18 zuzQTfs?}R>QqIEE)#;ininyh87g<;^3>y<`S01S8{U+L)gyvX;D98n;+R({P102u?q$cdxI$BIOcrW>e??MD~9ULZ2=R(^nln_L}$?ymv0`nSD4a%S59T+4P9N9?L;|y;+~AI zg3TgZ9N|r3nbRII}?r7be=l19_-CTuu!u#M;Z0-E-bxI^`Z>kU~&EKL;@d z1v7-&bF38MjmshRWv=RHMhkRPU(6&a=D zJ$uM{%l4XmSq#5;fn8o@5nnsqit>tL%s6Wc{S7sTZt7}nGR6-KfOP6Qry109rjsG% ze9dNboaglGoK)%Af0-X7#+Rp{;PaFlQO+~-)v!J(j-;`1$|7tSOz(KIw9?fY8KwRU-JXebEin|it38VdK(+o56=#bA!* zgd$qYbE%dWI|oV-73sY%3d8>_hE zc{bBuui+jNAd94Ocz;`@b1lg92e3(i_ESc_N`e#4P5w?h>)U*2)+K{7yCQ9BTMCIHI|C$p!c!NTjLl%)+pv(`gu3fmca+s5z^G zo|!rz>QfovtAveXL^hAVP7w8(hneW5-{x5EUa13{)FkqOcNz&4~hM9n^#$o8eWDD%RLROj_1Dc^G#weZKL|7b4g0-cm zNtD$#&XLjG$?@I6ABEGDJ#Nzv1VJvREk_MSoSXMkuEm355kMFjp5b7F%=O@C!Kt30 z9Vt_#n5#WMe3#*QE1iO7`BiO=Os>~~BDmU@K(l8;$O5v=S?mI2?Fb)sw{wXAAi&Fd zAD+l?jzXV3=Gd3$G7}@>yGZ(P{cPcLtnoPc#fK1F=K_OF%@%Y~xIzj5e*T=%3lqAuB>U&!YZCKaNv2W? zJdsI+2q?W&2K|guhbmGMeX&|DH|ldaF1_{mpv+4ltemOFfYIYTF48YH=|C*W&1^TU z7{Eq;(zz1-MH@Q6!$1_nF%tcI5@%45!_jvh*aW&7>P`m`wUVc2i=pps%I$=65GQ~k zt4Mrj&>eke&n4(jQ-k`SaC{?z9g{nP#lmcnLjczfwIdO~$R2+0^DgU3T+nq9TY#n0 zWZo}CH~uy+-S`A*rTrXlqjbdg=3v5};NQvM;V39rB)}&^AM5g-y>B*llU|o>3nmry zt$-r!M~j}q*ursBEcP{gOMS3`K{`XJG_9TGQMEb;`m_fKu~BKJ6DglAK6FANuf~vW z+{u=$_MixcRP9%*(#mCbNxe$1I*UA}uV&AWM)!nFe^HUg;A&ch!9!EugqgM?`q^ zdmn3V=S#${;>_6?2|lmmqBUdIsjZ{NMZAHU(=PQ67)g?lkE2hNA^l^0s0f@3!=!~S zZ7sp_;v|8ggG@BT%vDx7jLlnnpYkWzidPur*6H5c=7QT9O*F54d$ikiJ-fR?txz~B zbM{INgF7M37dgK)&*GWNflr0%&H*_bmTII@`1P8QNR#(b3Tf+ax!(K(qH5P47-ObRTv@ zf3|8Xzsiog)SQg8jZ8rs2}V%TEXWal4|QuiA7vgJBK*8T>+X4*?r(=BO}TA_N$<;obL_k5C&DJqnpd0fza-pMuXz>$iHI~WpT(KU2WpT zVYg8{=RXfqv_B6R=M3vnSA8Nv$i!l;>J0OOA(&3!pUdDM{-Cn4D@ZVqcX|X7OX76@ zrXx3VL9q1^0TYJneK$4#Use+lc7QASFIof_+0+lZ0Aj65Ht&5jE=96;=XG4B`A9*} zG!LOwKVm)1#yysa(#MRYTyog&NzhHQb^zC^<;M4+=r1j^d}EQy8?v(A9}(HInR)@%c&R zorYO$j3xnyUf7B04}K}ul4KW2++3muG88{E01Oj}VMgOiBLi{corSe&A4}TF>eA+M zmVKq^HMj#~OKxxYQ14J2fZAlXx42;iYE6go&Xs!BriB6_{GTNBvdCI(9wYF{2#&EwfJP8zFpLbJ1TlJ}PG9Z>*t5*YXHJ#Q&(y4w5NCHddu#lOCW& z+i~3{GPt(5dwbLo9wncim_oJRHrT!#S)Uu;b|H;R3)s86e7s;2nG@|w@X_&}lyial zgKd=)pfG$JQ$m^6*#<$ulbje)!%+LJ%WTf!+7U~a+}xq5Fu?~;mbHr?P%-mZ`-w|y zSF&Wn`u+BOh1}Jo++8o5B2z!n8a&KDJZAVT!~B!1GRaPe)XLuFoxTzLV(bHL5}9tg zmi%-!K@QqDgj5}OvF?|Uq?%pTg(VIn+Yepxv z3{h__?ZJI=#QZ;mW%k{kPIt^Jl5Np=x?sKZvfXFDv8*WTZ0%=(T;pef(P6Rv{%z1R z5iF{N<04)Txdp^QX_kax$0RZWk+K&yH6vKY-H&^3HhF<5V^RRApLp& z-~Lt{Ob!0cA;?7on4UYq4e1!=!e2^Q-R*aaA;zdO(z%KZe3}%)szC%`{8$Wd!Tned_)-to1d4kBF4v-5xNH%jT)Zd5o&4dPLPei*ZjIQX z*tZ_*drjbTsx#^qu<-(r5s^ug>BjJ9A}%d1 zK?^Hxj9qGG_e?NlBzCIPY5=;>^)%+SRcPmUOK*-pz$Mt9TIlK|f#{;0We*4x>&Zs+ z84!cn=+lf)#9s19-F0g!+sdRUqVcmafHaSo7aGUp0Iet59n z+4<*+d$5Q10N}yi0^Y*q_s)+N#b&L(Noo>Q02%-gE%66G_(7OE14Ibl7vz8o2!7=& zUkTfHkvHM5he*px78aCLqLLgHVg+i6Y~W< zmdXJrJOc>#HjxjY2Ur8b$OG*TfC1VJ;}1Xl@ZkHnFXZ0a^|Ckl_W4FC=R*`tp>YFAx#Rj{_YmX$2BYkv6S;UdF| z3jd%xaUGZdnB4^#AAWOoV1*~L@X1g6^`9-Rix&^5x?H zRt)a}z_;RC?I}~v8USCgur8TR3;2!-bCI~f__tF$-mcF04)O^Cw)*GWC=U3$N_Q|n?*YJr`RyNs zWp@Ci=y%+4hh2aD^ue4h+LrhQJ(2pxjj+Xnd?9`QG=wXVul!Jpj0?3e)o*0PIF3^+b7V)j%8s zndAHMkAG}cvc3X1U0GfML57)FS=ng?jSHZ`ahauQtk_`wkZ=z80d{C|04E^F2clTw z2Kb>>GGA9wQIVbd^PzQGjl<992$S)Ui{)}`{=mne(mn@}#`9ng>jA)ny#*Yk<&T3P z-$VZX_rD+9V*s#R^MYPgfQ`@1VJra<0Utn#aNKO-00=*Tm2^DwC2qte4M&>x>G^SX z;6uY>`5x<)9WJ}7_gx#tFcyQ@LQ^E+6sdjRlYdDA`R>{J5|IsgU64wl2s zpFcmi$`BcV*%bk59Pr?PCx>fjg!%LMGk?A-{s14u`e2;3FSy`>Fi(iF1RzAaBo80{ z;y&a1Ad+tnbzK8J0N8c?^gKNXY5*_-EO0%+IC9G^w*)}JCy-~%$90DQIKU{4x_TCm zPdsD+(8wDD3HhIO)>+0!=Z6g&7Pi8=;)*MR)(I#Q4=s}+IN@lA-OVqa_rZAG1AqtP zTkk1zry6h&#QJ;DMHkt7-}~Mk@C!B7y+1tw*u8q{iFFXvfPLCvYJv2UsvbfuDushAkC!cKW5W_X(`H;rJnw2VSpuiep0P*UpuMU=J zf4;ji9gOjN0PtXZ>pf-evIdd>!j|)Y|NGzVi6@>2)>||%{PY-V`Wzh$Nym{!fE7Kt z+%?bxfVu0Y=gC1{0}e7?4On||U%>!@cF0hfb+-TxK*&%OD=z>UCkHz$#au%St8tyd zmyiQ@8bHt~uJL(T^6c{6fB*eKmP; String { - BASE_URL.to_string() + FIGSHARE_BASE_URL.to_string() } #[derive(Debug, Serialize, Deserialize, PartialEq)] @@ -262,7 +262,7 @@ impl FigShareAPI { auth_keys }; let token = auth_keys.get("figshare".to_string())?; - let base_url = base_url.unwrap_or(BASE_URL.to_string()); + let base_url = base_url.unwrap_or(FIGSHARE_BASE_URL.to_string()); Ok(FigShareAPI { base_url, article_id: None, @@ -275,6 +275,10 @@ impl FigShareAPI { self.token = token; } + pub fn get_base_url(&self) -> String { + self.base_url.clone() + } + async fn issue_request(&self, method: Method, endpoint: &str, data: Option>) -> Result { let mut headers = HeaderMap::new(); diff --git a/src/lib/data.rs b/src/lib/data.rs index 4c36e84..60d7017 100644 --- a/src/lib/data.rs +++ b/src/lib/data.rs @@ -478,7 +478,6 @@ pub struct DataCollection { /// interacting with the data manifest (including remotes). impl DataCollection { pub fn new() -> Self { - Self { files: HashMap::new(), remotes: HashMap::new(), @@ -575,6 +574,9 @@ impl DataCollection { } } + // Register the remote + // + // This can overwrite existing entries. pub fn register_remote(&mut self, dir: &String, remote: Remote) -> Result<()> { self.validate_remote_directory(dir)?; self.remotes.insert(dir.to_string(), remote); @@ -1011,7 +1013,11 @@ impl DataCollection { #[cfg(test)] mod tests { - use super::DataFile; + use crate::lib::api::figshare::{FIGSHARE_BASE_URL,FigShareAPI, self}; + use crate::lib::remote::Remote; + use crate::lib::test_utilities::check_error; + + use super::{DataFile, DataCollection, DataCollectionMetadata}; use std::path::Path; use std::io::Write; use tempfile::NamedTempFile; @@ -1125,6 +1131,24 @@ mod tests { } - // ==== Data Collection Tests + #[test] + fn test_register_remote_figshare() { + let mut dc = DataCollection::new(); + + let dir = "data/supplement".to_string(); + let result = FigShareAPI::new("Test remote", None); + assert!(result.is_ok(), "FigShareAPI::new() resulted in error!"); + let figshare = result.unwrap(); + assert!(figshare.get_base_url() == FIGSHARE_BASE_URL, "FigShareAPI.base_url is not correct!"); + dc.register_remote(&dir, Remote::FigShareAPI(figshare)).unwrap(); + + // check that it's been inserted + assert!(dc.remotes.contains_key(&dir), "Remote not registered!"); + + // Let's check that validate_remote_directory() is working + let figshare = FigShareAPI::new("Another test remote", None).unwrap(); + let result = dc.register_remote(&dir, Remote::FigShareAPI(figshare)); + check_error(result, "already tracked"); + } }