From b8ad57fc05f4879dc861a86e975a478b1783da12 Mon Sep 17 00:00:00 2001 From: Stefano Zacchiroli Date: Thu, 2 Nov 2017 17:52:04 +0100 Subject: [PATCH] docs: integrate swh-lister tutorial originally appeared on the Software Heritage blog at https://www.softwareheritage.org/2017/03/24/list-the-content-of-your-favorite-forge-in-just-a-few-steps/ by Avi Kelman Closes T762 --- docs/images/new_base.png | Bin 0 -> 77777 bytes docs/images/new_bitbucket_lister.png | Bin 0 -> 5612 bytes docs/images/new_github_lister.png | Bin 0 -> 6675 bytes docs/images/old_github_lister.png | Bin 0 -> 30902 bytes docs/index.rst | 11 +- docs/tutorial.rst | 357 +++++++++++++++++++++++++++ 6 files changed, 365 insertions(+), 3 deletions(-) create mode 100644 docs/images/new_base.png create mode 100644 docs/images/new_bitbucket_lister.png create mode 100644 docs/images/new_github_lister.png create mode 100644 docs/images/old_github_lister.png create mode 100644 docs/tutorial.rst diff --git a/docs/images/new_base.png b/docs/images/new_base.png new file mode 100644 index 0000000000000000000000000000000000000000..2a2e3fcc4dda8b5a193e9ce7f123cdf47b31c234 GIT binary patch literal 77777 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%0D!l zp|F3zef{UpPT+nF@1eR+5_*mVotWind;u*fDfzJJo;V$$f`L}COxtg$V!g*Ps!0PI zILSvn6$lO48*u4#8=v3<3(9(;-_3)Afe03vn9S>E{>wHT^L10K980*l%zt16i8^OG z0gvq~Qzdt>rg=g$l|gAOqsD5g!wEg)zMm2sw zp4WX^-`U>w{P~1b!``U=;qm&wyBTSBz^9)n7|Yt32eOPTvvVh)@8Z-t-eNV%`Ma}0 z$dId%^oGn!%ZT>Ae@RUh8C!i*(@kC1#lAPO4UEPqPZ@==i7}pKbf{Gio%uj+TFN+& zBuH5lUfA<&2{2YvB*RV{De_ zW}<)!yz2^~nFT7u)1e^Zx3Id$Tj$AA+EPS}GCDWftFpsJVRvy8uSSq-Y56o;uilbmT6KiC3%u}ew^@R zT^Af$KO#jb@;l$n16|R^bF*I`dT5*9r5~X_LE@B)sq1>m@S(@u`tri{8U%Uo-UgTi z-;&Mx9Hz3Msn7R{ssuK%xw2Tuc3U?su2uloWE5%b`Zs!ua+~iaUga-=J~YGlKr1T?*NoQGtJ*aH z+>@W!i2wRHcg`ixe?vBu6@p_7*lxgicJypW#toS4?e($WW#S5l5kyYx&?m$d#OIR| z6xH*k{Ad`-)@@y~B}LpE3gFkueq0MNbTc9?TbYJg*--gGiW%BKxs><#BmdV& zKJoQ_FW0i|ioPO4N3?q+1-*v~gxTo*IQ*C#Xjn4b}JUaQjF3TW0ABL%Bdsqk?Is%I!Qz{ zX*c-(gc!w%j8T=zY!AIuf>vR;%6_Go;^{WsOHasF-nj4?GH^T}i1V4#x@1*ebC@}; zsQjd@uT{ZvnGU2c{?Sp6YUljBpaq+FK|4akR;FWs6CuEy%`CRV{VLnyG*XKBP7xn( zSQF1_IZJ!_>yr&VcUZu?eFA7k6TAvat5R_L^wcS0V*Pc+9krQqWUU2KpyThg>zBWk z@8|4#gIRPYw+5dgZUOuqU}u#WV%S%a05MN5w(|G#sv@C%aPBR^Tz$I>lED#5 zFb;Xc-So7T-25MWik=$O@*P-QEAW)=%l{{z-PD>Moec{7oV*9R7aN5a-dRs{vx=bl z@Y37+d8PXyTu|ERzcfqM0AUwX0jPuVZesOW{Jm&IdV3Qt+H7>x{U0LlQbt}M|MC6B zV@6<>R_UkDWpl*4TV7=s`yPUC6GOT}K%wya);*QvSFvF2kU>MKeSKlbf01-A8HC1G z5qfPJcZ%hbZjlaMM?(?yiIS0pzC;x63h^3N-f#9!c)HV(f)d3lZ%xv;R~DGhXyTF| za!m+VX_?-$_x-TG_2Gqn`QVfeI{`rK=>us&!ewwtNhV&S7&*V_<%nB^HxJd2N3pym zl25V_76*yC=?H!ci{majO%^?tj~*y4t2-w#%i`Cl7%OWDP4d-GCmZ8JQQXA8B9d63 zN;aG<(4Dlgu+UKv%Jf~ztn@wJ%H}G-*HTJf!G50wgVaBG=jQvMPn{oBWlw*#Mr>d? zk-0LQSO60&gFGo7Scvu(s(QgT=>Afm@>36!j!niuV|f0uR7Mg}5ag7sfym?jY~j58 zCHRp?e0P*Bt%!jP_h1cxpNrfg1|~7v)WBh@R|zUTzMS+csA>Fb}l8Q z3y?55G5@m2@k;i;zV>nOsOG>D1nlCClhjDR;ROak()6nka0@iE12;ztA1HSu|`ucC>9H*z-x6Pcgj!zqfUrO~TGgzss?E5H1HfuU0|vdg&XoqMie zzd=1RcQZm9;tYz^vl9iViM9WBZft&M@CWfZ1(Nc=th-Oil`U|z_`aCIb z0XUo*#X`Hp{r>WD^)6Z%d z7M?my(y-RGv|-_UV;?M~!~{lX#(26TM^NcClg7`owLMM}LOij&B9L^HS4OzrM^{ZQ z3q+sFxxJX^vY^)3N_gO2AM+1-a@;j7F8fO%t(BgJXV@!Xy|+f@Xr?w?|CemDWyK&m?@sp70#I&me!CTBQ36N^=3l`Py) zyuNelPZ_Oydg@N<^N|8=UDEBiwH!h|cZWiI)qEtF6Zrp1JJkkr2fkcH5#i|7aJ z_USB_=;A+O%kHoULA3~I8nb@NNL42#nKYjW%~IB#U?2`H3w1%^egnWH1!B@(pICpF zZ%Q)LH1J<7g2f+{SzAcXMYY-sh)$QmISxc#2|rPh4n1htYpl+5MGQKUda^~doyGV3 z;<8-euIzE;nX$6fO0d#QZY4XgFpT-2#x^i){mkv9c+TpqJd({1_d$-g;+^z$v{4$+ z3v`|n`@xgyl!8Ku*pBp_2nh-Cz({*u_y0J$*~t&m@UU#y#VI5fp}+4dPQyiQrt9+= zr~OM$?tU#UBO~Lopx8KCFQvxYH2NIh@F$=pryA7gTt@#%^u!uw`sZa$86#-0L-L*2S}js0fFCxeuDBHR$>_* zc9{)b+Gqq3rSYd=aO>CImf+@YiTUv%7CV>rg#@7X9&7Yx()?s~49tM)WQQuk^*UP& zXljZo^FI^k*6qc~Jl-i)SN+Y*6{S=RWw8+bF32PKbl~dtOY&8xdzS7Pylb3pL4HqYqYf9Pg7-VB(BOs_t7*9So!G&UE*bRkdBH_h^ z$(TYbtdY=YQ0N{B5%i=GO+@M5wMK`BaMW$s4 zt>i;~1clSPTsGe4bmmgq+XmP+Zj=hrkwkG4mNCzI7imcC@J@;VfK+{38xtZX-&*bN z>%)F*2YT{2AQuBro2#co{a=xfsbq2mRuX&wkm41A>?O8^7r4vRAkePx=JHdu&XW}t z`Rgd8Vc?K;qA0hu2{rf1{!vnp660zU1tQ_ET9fhM!6gqB)vlJQ&I@z31hL}JpV{GW zgqbAHW*ic>x12)Abbwq{%x8=pQ@l$XHkuVP2ZUTK6>M*NqS6(CK9Bf0{&KM9t=qkz z+CF4WPg6XAzNHu$^#XuYG5M;t;THQi4axQd9wY77 z)1wsiM(Zu}c=FxJ)i)dzn|h3PP)snDPCE_1^nY@=n@F4r8v z&+;yBCghq#${-~q1LzMEc1y5OK7yZN37Rnfuj{Kff*7x}ClmRfTz?ElENIDaTticS zd3tzcYTj=&P8i{pG~CH5UM0x{(N&VqPZvM^^g)^v_m7Et#CAMGkc7Jt()5n5LcZZE z-f+nG0*&&%|DXY1=c2DLhR3yqL2;%pZ7yH<``?6<$xNeAcX6+8!w~nj6DxNjv++Wo zYdq^)$}SQuolZ%9Cesvb-hNr5$#0DT(OyM79ExO5EgC+vZGQa@u7|DNH!CG5=(a5i zANaBr){rg{V?CXyGKNm&ls{OiKX#`rnFCedE#~ z^FyW;-{pi%PWL#T9LHLTJ#mjhGyNq%8}yU9n+FT5I*f34^V@bs<g9hs4k3x-*k_<0_zGNan5xMsz93i^F_DwJN5vw+0#S@w8!@8Or zc@H!b%;YE&{tI!v>zK?g&V>k=SZmfu%we$$&59u`C0SgFbz(YhoaU5+gnA%PjgAuk ztGAhS5mn!x4$5IM^8en$Wc_Pm;X!YxYoHP>RC}cv6!G8^4_4hgys>wx@-L3cxYIKD zjL+%sm*WsqCbrown^f8LYjx&t0X5*H+ff&OKpT(2BIImkRTFvUY7eQL}>-e{J>X z!2@#rpkM6eir6ZMnEvptZ?*~d4NwUM_-)OFB)6dr(<;Fn=PV4}P7r?tFTBaqz zmu=q{_;z8Wl7=&-JY$i{kAs(4BKOi{#bORMZ4>cwz4B&(WwDR&wb>(BXi@jo&%Z{J z>-KONdjIJB<>t)*$BnGsAj@%CRLR^HQ$@}FU}_ptqFEAoq0W^~bZg$or)*;;YfKHh zt-5LQBA}^&!VV`g6t%XzT<}a_e4T8X$>h?lZ-wO|T+EUOHS8>63iRk`NxDuyX*zXbN@ZXqj6HVp?_NgF1c19zJe#8;{`{!`Kgvl60<169mNrIoYQH1DRqC*2)jYUlwCo0lQC%-VsG_?@ zxj^3scy{l-EUyR?29&F^vjItYZb)#~oACaKRvoI&|CBJ0ervuQBPj4@(All09C=O@+3eP%j>Kp5&?{ceIF)KNBd-#`EAN7$2Z;wcXu)NRRu(p}ywmNlKnQ5^h?z0}d;AyqItOTlc7^zv2%m ztDb|x5}tOr>;4a?V>Tmka_NFm}24x_R6(P~h=?D~>Ha>9-xyIi8Th4Xau7amP zYorMyib`Rfh1<>+Cvq*pneSON?||4>_@&PoF6R!ao zz`pF`JffE8_>5O1xIg)^S~_1R37)MW9LvPmc>KHRpT)&JhQRH14v^?DdZo=jfRhWs zv_T&gS{Z>E+5@^r2b-H9Ufw|@60nuh8Dv=53*k`Uo?LpK=2Rbkk47t2m&-49!-~&5 zdv5MoQ8r#2?b9gX&VJve$4gq`S`FeoFO(WJ6rP1#R{e+YN{5blg|m~L#jAy_#vQhD z#02&sUp)Ts%4Z=?piRWD=P7W70LE2nud52itg{x%Q zY$K@=XIz+#1}yt5-(QGp#tdiZ5mMb}80ZoMzJfjfB1VJkeqG2679V%Mq$Iz7Z+eI* z_jr4X|Hs9R{vqzrd7G<{J2WNbGsYkoKv}u?W&y}_0T>!yUw-QIFTk$DiVC#lnA(?_ z>7-c@&)?_o2_y6GQCibge8eqmP!{g-6}#Y#NBeU7ewBX;=eMu}>C zasJ9?g0l7_PFZzWKy7b3WmQv0Px%uT)`Me}7xH?9`c_;& z-|^hOPkx(TmH52-CmZir;=%0>!W(fDbXHryaIg(TDbSZ-BbV(zm;-t`GqOSSULIfq zKR-V&q4)5!E^;aZ{e*Llb&=2q_;*5=epjSny|_{ja1E@H@!%eP2eDg}R2i7!nqXvl zle6MyMwae+mp$pb4)WPT7EP;CkMFVPml#*-{YLc+b1#y^DQUH;5(5- z@i72hwy=;O0;opAq|fO_yuG~_fo=Ufl9)i#RmNa$!%iybaCi@S!<>h`_MKFTY2j7= zNK6yK_0?0JW6%s`?D5}AFNH5cl)YD@2K+&eTo znh(*3fl-+D=DDep9d_R{z!4G10vT}5n^en(Dh2f$`xoyUZ>`lh(FF&2Qs=B*69vy0 zQk1WIt14#>{ikN4wi0|VwLM5BFvqvSjUCsJ!FA}>bMTY-cvN{?EONuM#k7-b6#NR+ zGsm=XRJ@9b(g5Iv-2KV z&|x^x7`pA}D!A=ty$eaGgzQa+bGmh)jBNblmjlYwdry_ri%gCS*SW^rPWI6>ctsze}|0Sl#Tl^%qeG68_g`x zAS)b^ZsBo%H$>#?x>G>iiPdSJ+rb_HOAs07EwCV`J8yy5)p!<|cs;l=9cRPsqo`Gkp^QXP6 z1I&WA^NFUfB^OH_1J4rNqdAgCqwwc`|33WuH1Iz1gJpQ-5$x>gvgd`*L3eMEH7CEm zk;_+KXPiAxqM`%Af zN>YAeX{P+#in(^ANu)-epv*jZaD(sL1tX6iK>zXdRfqR1b8+aDc8W~At#MJ)7%;8N zt*zl!P`mgs72Bq{F9GcBCHW(r1L1e2-W!CcZn7J5!3ql5{Z<3!@3a9HhD7oi^7d_8 zYtGfHH7O!lRiGT3QPs|0{`DK6qcG3)a1iAFP4<@QBXqRzW$DxirR9L5=a6jBR4XP5 zne*IL21N>w!+w{s${-iRqzgA2riRe7vM0WRW^yiUe2K2U zR+4iSQ1iQA6$JY^72at%V|6Qe$_A`9RKI^riZ`^LcMn&REpXaUkQ3J&@@#OHv9}9A zQE3H^}#TRZe zOl)c+fD6IuU)HvqYXGC_q3~_&$Uqh|B_jqgXZvEtKwGFK@`R|iT{50PGP#*G2qu;d zjI9s{3*kKgHuCVQ53~j*G#as_KGfvoEb0F@uF|2)ccoKp`A1RNxGJB2)xGz>9PObl zkVIEWi!rB?vCaRaD0cO6@X7xCRn(*?R<%;kNa%5IFM6LNk@Bu^@tKfml1@IoC3H;n zd~eRS(b%XL-qSDgLNGCyn3BB_9jJGC=;yS}r3vCLzoT>CN#k7iLZhzt7|PK=@Jo!+yXg zZD4$PT9n->T+&?P%JYWFS#Hwd&y${B%iS%9**)f!jI) zMPo=I0tGPfr+?#$_TRYD(CIHhf^ZxGSKw$e*7SQ)qL*DL^XTrkF){QL22T`Au>Tx? z3(n1$$}_L5t(A5E`vQ=ZZE~J_z$yb4Q&B?dd~o*==eXZ=X%bVJVjF+Gd~(a5tbF-A z<&b}86kRK1L%Vp~M@0qQ^U)8NkXf7v&F@93Uvjb2utHNf?t{X>NDi&nX!*1IuePl? zEA`E_N1jtlS3!+NbS)UAnG2FY&OrjcuFD0po4)iWdkZBl)^5WsRr|y7Q;JO4i|FDfnZ8kS`3mf}^ty0jO#3XtQjsQ!| zd-X~Y@q4~|cLtCW_-NvWZ4{Fu##fgA8#E4m@4w*J73NaLOT7-x{Wfb6#gbAW0YGeFPkuZ z?kO`v?*>QimLoIcPnFHBZYG<(P9-ISCjbKsdYs6V+`9es;FP%EV>_VlkfU#{4%;I# z2%+1FE18|3i|Ev2VMX~BqRR((k6I*QEQ{exKz3Wr*X7+Hz{T!yjXb~v956XCCM_a% z5v_26TDy)>x=EQ6*}APQ2wF*4)s!pd#tMf`%R9ON7mz`v$t$6}0t*4&%l`9;N{PIV z!8hl7&z?Pl+>=UeWoE6d1e7#$`urH;_kuJ)hM-6gPhT>VyLSQmhAD zMNug8jKOz+03M%dnMy|ll|^oD*aXd=`@8wa7Z7Es8L|sD#M)jgGJGpcyLg~kRG22N zu~?lWBU`KkJc**e+Ezp!(Lyd{CC-m3`aC$1xe_ZLEedbw?eTDe5L57$6J-O(54^Eg zG}dv_flj5jQ&*}^@KTWh5aE&OUsRWD)pEV7q9zOWV_BJ=8G5g)(6 z{MuAGCaGf#1 zAHk)CbW&^_jb8?6*xMUaPKk%3ZSft`t@#%wug@R1@V<7L_P`Xi0>X|!yugBQS6l;D z7`+$XO{Hkc*b8S_SXwqa&3FLBb0fZVz*Q_hKE9))BR-zwXSld}xCmg_nmD%g6=2X( z)a5Wsz0Z|=w+$@AO0I8QrZ!(cfCi(Fi8+|QaiL`ApM&qJUp@}Ebr>g{WDDR>z0l&xCFuKOA{2{IncGGjk{K2L>|_HOe9(Sz z`Qe0^R=~+=To7l!%DJPYVz*irKi4dK2@Vc7NYCo1;)GGy6nyO=90y4IA3rPlwT?82 zu{`(dfqf68f?^Q9MX+lg)-!alsp~Bq@B(u}E6i*hwKO%IdluZxpI&3%D`t8OKN)ib zc$TFad49{0w0Z*5n(K2y-wTxYPY&Ld1U{Uc?Uia;uDw&~Xhu|z-mTUaB1%W^d=6fC zS94R(u%61gU(-_+n&&mtKYFP`fu-nhxiSh@Dz)1l`vX8tBp*xy&NONQEfKJaV>Dnp z81K42X-ym}qQmo440D7%?A9k@_fLZN8DjkO`JazZxskZKj;Hag?`}XfcfltwSkLrj zwr?=sP?t&z`{r)8L2X?K$2vnG-8^p(nm1q6M9p(3^=|@q0{H4;cP1q-Z((NUKF!Ae z_gR3>Qn;3+m&?SEBCkapoq?`&N@*}=WexLIIP35Fth#}&Ud7{~qisM|JMe5`Q>nTZ zZZI>Nr;W@}FPSzZJwzaSzwV^TB`;Xj*}HtdmecZ%3J#try%YO+3ak>pyx%kSy_*i5 zy6w0Rx4kW!`|sgZR(q_yi0M7+k=;HA3`zKH1_Sk9Kc`pHh&NVK8w9SP>$he6l>YGm ztFhR+o^4!5FSwOgkRR#iVlk&_;Gnayv9X%F|Gzhi&!fP8X)TJs;3;}Ht1}yD$m&tg zj0rAJ3nu&8T4Y*YzdG8xAO+kb#In>aqrt#?8gMqlaXc7?tUBJVv}0&KL8H}k?Ehy> z+spzVHk@<^tOwn8>Z^$PY~o~>7N`8}-bN)4vgQ&#Kzo62N3(5W5QfXDKW*V6$Kb_; zMON_nknguKiR0vnf)B z1F7qImeX+yc&|qMzYY-{OM>^7jZO49rsCnm=J4)}H zfAB=6e|*M`#XGnIQSiUdM`SP8nJ6wdGgDlI=|6w)+#k^g?7@>1hPjl!F-{{v)a B=ve>& literal 0 HcmV?d00001 diff --git a/docs/images/new_bitbucket_lister.png b/docs/images/new_bitbucket_lister.png new file mode 100644 index 0000000000000000000000000000000000000000..7c491bb334ade968272a0f960ca45f899fdbf508 GIT binary patch literal 5612 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 Q_6-_PSxc!>!6Nj30II+zSO5S3 literal 0 HcmV?d00001 diff --git a/docs/images/old_github_lister.png b/docs/images/old_github_lister.png new file mode 100644 index 0000000000000000000000000000000000000000..65398a04b88ed85a56e547cfd8df3695a018733a GIT binary patch literal 30902 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 +of this article appeared on the Software Heritage blog) + +Back in November 2016, Nicolas Dandrimont wrote about structural code changes +`leading to a massive (+15 million!) upswing in the number of repositories +archived by Software Heritage +`_ +through a combination of automatic linkage between the listing and loading +scheduler, new understanding of how to deal with extremely large repository +hosts like `GitHub `_, and activating a new set of +repositories that had previously been skipped over. + +In the post, Nicolas outlined the three major phases of work in Software +Heritage's preservation process (listing, scheduling updates, loading) and +highlighted that the ability to preserve the world's free software heritage +depends on our ability to find and list the repositories. + +At the time, Software Heritage was only able to list projects on +GitHub. Focusing early on GitHub, one of the largest and most active forge in +the world, allowed for a big value-to-effort ratio and a rapid launch for the +archive. As the old Italian proverb goes, "Il meglio è nemico del bene," or in +modern English parlance, "Perfect is the enemy of good," right? Right. So the +plan from the beginning was to implement a lister for GitHub, then maybe +implement another one, and then take a few giant steps backward and squint our +eyes. + +Why? Because source code hosting services don't behave according to a unified +standard. Each new service requires dedicated development time to implement a +new scraping client for the non-transferable requirements and intricacies of +that service's API. At the time, doing it in an extensible and adaptable way +required a level of exposure to the myriad differences between these services +that we just didn't think we had yet. + +Nicolas' post closed by saying "We haven't carved out a stable API yet that +allows you to just fill in the blanks, as we only have the GitHub lister +currently, and a proven API will emerge organically only once we have some +diversity." + +That has since changed. As of March 6, 2017, the Software Heritage **lister +code has been aggressively restructured, abstracted, and commented** to make +creating new listers significantly easier. There may yet be a few kinks to iron +out, but **now making a new lister is practically like filling in the blanks**. + +Fundamentally, a basic lister must follow these steps: + +1. Issue a network request for a service endpoint. +2. Convert the response into a canonical format. +3. Populate a work queue for fetching and ingesting source repositories. + +Steps 1 and 3 are generic problems, so they can get generic solutions hidden +away in base code, most of which never needs to change. That leaves us to +implement step 2, which can be trivially done now for services with clean web +APIs. + +In the new code we've tried to hide away as much generic functionality as +possible, turning it into set-and-forget plumbing between a few simple +customized elements. Different hosting services might use different network +protocols, rate-limit messages, or pagination schemes, but, as long as there is +some way to get a list of the hosted repositories, we think that the new base +code will make getting those repositories much easier. + +First let me give you the 30,000 foot view… + +The old GitHub-specific lister code looked like this (265 lines of Python): + +.. figure:: images/old_github_lister.png + +By contrast, the new GitHub-specific code looks like this (34 lines of Python): + +.. figure:: images/new_github_lister.png + +And the new BitBucket-specific code is even shorter and looks like this (24 lines of Python): + +.. figure:: images/new_bitbucket_lister.png + +And now this is common shared code in a few abstract base classes, with some new features and loads of docstring comments (in red): + +.. figure:: images/new_base.png + +So how does the lister code work now, and **how might a contributing developer +go about making a new one** + +The first thing to know is that we now have a generic lister base class and ORM +model. A subclass of the lister base should already be able to do almost +everything needed to complete a listing task for a single service +request/response cycle with the following implementation requirements: + +1. A member variable must be declared called ``MODEL``, which is equal to a + subclass (Note: type, not instance) of the base ORM model. The reasons for + using a subclass is mostly just because different services use different + incompatible primary identifiers for their repositories. The model + subclasses are typically only one or two additional variable declarations. + +2. A method called ``transport_request`` must be implemented, which takes the + complete target identifier (e.g., a URL) and tries to request it one time + using whatever transport protocol is required for interacting with the + service. It should not attempt to retry on timeouts or do anything else with + the response (that is already done for you). It should just either return + the response or raise a ``FetchError`` exception. + +3. A method called ``transport_response_to_string`` must be implemented, which + takes the entire response of the request in (1) and converts it to a string + for logging purposes. + +4. A method called ``transport_quota_check`` must be implemented, which takes + the entire response of the request in (1) and checks to see if the process + has run afoul of any query quotas or rate limits. If the service says to + wait before making more requests, the method should return ``True`` and also + the number of seconds to wait, otherwise it returns ``False``. + +5. A method called ``transport_response_simplified`` must be implemented, which + also takes the entire response of the request in (1) and converts it to a + Python list of dicts (one dict for each repository) with keys given + according to the aforementioned ``MODEL`` class members. + +Because 1, 2, 3, and 4 are basically dependent only on the chosen network +protocol, we also have an HTTP mix-in module, which supplements the lister base +and provides default implementations for those methods along with optional +request header injection using the Python Requests library. The +``transport_quota_check`` method as provided follows the IETF standard for +communicating rate limits with `HTTP code 429 +`_ which some hosting services +have chosen not to follow, so it's possible that a specific lister will need to +override it. + +On top of all of that, we also provide another layer over the base lister class +which adds support for sequentially looping over indices. What are indices? +Well, some services (`BitBucket `_ and GitHub for +example) don't send you the entire list of all of their repositories at once, +because that server response would be unwieldy. Instead they paginate their +results, and they also allow you to query their APIs like this: +``https://server_address.tld/query_type?start_listing_from_id=foo``. Changing +the value of 'foo' lets you fetch a set of repositories starting from there. We +call 'foo' an index, and we call a service that works this way an indexing +service. GitHub uses the repository unique identifier and BitBucket uses the +repository creation time, but a service can really use anything as long as the +values monotonically increase with new repositories. A good indexing service +also includes the URL of the next page with a later 'foo' in its responses. For +these indexing services we provide another intermediate lister called the +indexing lister. Instead of inheriting from :class:`SWHListerBase +`, the lister class would inherit +from :class:`SWHIndexingLister +`. Along with the +requirements of the lister base, the indexing lister base adds one extra +requirement: + +1. A method called ``get_next_target_from_response`` must be defined, which + takes a complete request response and returns the index ('foo' above) of the + next page. + +So those are all the basic requirements. There are, of course, a few other +little bits and pieces (covered for now in the code's docstring comments), but +for the most part that's it. It sounds like a lot of information to absorb and +implement, but remember that most of the implementation requirements mentioned +above are already provided for 99% of services by the HTTP mix-in module. It +looks much simpler when we look at the actual implementations of the two +new-style indexing listers we currently have… + +This is the entire source code for the BitBucket repository lister:: + + # Copyright (C) 2017 the Software Heritage developers + # License: GNU General Public License version 3 or later + # See top-level LICENSE file for more information + + from urllib import parse + from swh.lister.bitbucket.models import BitBucketModel + from swh.lister.core.indexing_lister import SWHIndexingHttpLister + + class BitBucketLister(SWHIndexingHttpLister): + PATH_TEMPLATE = '/repositories?after=%s' + MODEL = BitBucketModel + + def get_model_from_repo(self, repo): + return {'uid': repo['uuid'], + 'indexable': repo['created_on'], + 'name': repo['name'], + 'full_name': repo['full_name'], + 'html_url': repo['links']['html']['href'], + 'origin_url': repo['links']['clone'][0]['href'], + 'origin_type': repo['scm'], + 'description': repo['description']} + + def get_next_target_from_response(self, response): + body = response.json() + if 'next' in body: + return parse.unquote(body['next'].split('after=')[1]) + else: + return None + + def transport_response_simplified(self, response): + repos = response.json()['values'] + return [self.get_model_from_repo(repo) for repo in repos] + +And this is the entire source code for the GitHub repository lister:: + + # Copyright (C) 2017 the Software Heritage developers + # License: GNU General Public License version 3 or later + # See top-level LICENSE file for more information + + import time + from swh.lister.core.indexing_lister import SWHIndexingHttpLister + from swh.lister.github.models import GitHubModel + + class GitHubLister(SWHIndexingHttpLister): + PATH_TEMPLATE = '/repositories?since=%d' + MODEL = GitHubModel + + def get_model_from_repo(self, repo): + return {'uid': repo['id'], + 'indexable': repo['id'], + 'name': repo['name'], + 'full_name': repo['full_name'], + 'html_url': repo['html_url'], + 'origin_url': repo['html_url'], + 'origin_type': 'git', + 'description': repo['description']} + + def get_next_target_from_response(self, response): + if 'next' in response.links: + next_url = response.links['next']['url'] + return int(next_url.split('since=')[1]) + else: + return None + + def transport_response_simplified(self, response): + repos = response.json() + return [self.get_model_from_repo(repo) for repo in repos] + + def request_headers(self): + return {'Accept': 'application/vnd.github.v3+json'} + + def transport_quota_check(self, response): + remain = int(response.headers['X-RateLimit-Remaining']) + if response.status_code == 403 and remain == 0: + reset_at = int(response.headers['X-RateLimit-Reset']) + delay = min(reset_at - time.time(), 3600) + return True, delay + else: + return False, 0 + +We can see that there are some common elements: + +* Both use the HTTP transport mixin (:class:`SWHIndexingHttpLister + `) just combines + :class:`SWHListerHttpTransport + ` and + :class:`SWHIndexingLister + `) to get most of the + network request functionality for free. + +* Both also define ``MODEL`` and ``PATH_TEMPLATE`` variables. It should be + clear to developers that ``PATH_TEMPLATE``, when combined with the base + service URL (e.g., ``https://some_service.com``) and passed a value (the + 'foo' index described earlier) results in a complete identifier for making + API requests to these services. It is required by our HTTP module. + +* Both services respond using JSON, so both implementations of + ``transport_response_simplified`` are similar and quite short. + +We can also see that there are a few differences: + +* GitHub sends the next URL as part of the response header, while BitBucket + sends it in the response body. + +* GitHub differentiates API versions with a request header (our HTTP transport +mix-in will automatically use any headers provided by an optional +request_headers method that we implement here), while BitBucket has it as part +of their base service URL. BitBucket uses the IETF standard HTTP 429 response +code for their rate limit notifications (the HTTP transport mix-in +automatically handles that), while GitHub uses their own custom response +headers that need special treatment. + +* But look at them! 58 lines of Python code, combined, to absorb all + repositories from two of the largest and most influential source code hosting + services. + +Ok, so what is going on behind the scenes? + +To trace the operation of the code, let's start with a sample instantiation and +progress from there to see which methods get called when. What follows will be +a series of extremely reductionist pseudocode methods. This is not what the +code actually looks like (it's not even real code), but it does have the same +basic flow. Bear with me while I try to lay out lister operation in a +quasi-linear way…:: + + # main task + + ghl = GitHubLister(lister_name='github.com', + api_baseurl='https://github.com') + ghl.run() + +⇓ (SWHIndexingLister.run):: + + # SWHIndexingLister.run + + identifier = None + do + response, repos = SWHListerBase.ingest_data(identifier) + identifier = GitHubLister.get_next_target_from_response(response) + while(identifier) + +⇓ (SWHListerBase.ingest_data):: + + # SWHListerBase.ingest_data + + response = SWHListerBase.safely_issue_request(identifier) + repos = GitHubLister.transport_response_simplified(response) + injected = SWHListerBase.inject_repo_data_into_db(repos) + return response, injected + +⇓ (SWHListerBase.safely_issue_request):: + + # SWHListerBase.safely_issue_request + + repeat: + resp = SWHListerHttpTransport.transport_request(identifier) + retry, delay = SWHListerHttpTransport.transport_quota_check(resp) + if retry: + sleep(delay) + until((not retry) or too_many_retries) + return resp + +⇓ (SWHListerHttpTransport.transport_request):: + + # SWHListerHttpTransport.transport_request + + path = SWHListerBase.api_baseurl + + SWHListerHttpTransport.PATH_TEMPLATE % identifier + headers = SWHListerHttpTransport.request_headers() + return http.get(path, headers) + +(Oh look, there's our ``PATH_TEMPLATE``) + +⇓ (SWHListerHttpTransport.request_headers):: + + # SWHListerHttpTransport.request_headers + + override → GitHubLister.request_headers + +↑↑ (SWHListerBase.safely_issue_request) + +⇓ (SWHListerHttpTransport.transport_quota_check):: + + # SWHListerHttpTransport.transport_quota_check + + override → GitHubLister.transport_quota_check + +And then we're done. From start to finish, I hope this helps you understand how +the few customized pieces fit into the new shared plumbing. + +Now you can go and write up a lister for a code hosting site we don't have yet!