From 4ed572b308bb28a94727f2a661df4ae70c9de694 Mon Sep 17 00:00:00 2001 From: Chaoran Yang Date: Thu, 21 Mar 2019 04:51:37 +0000 Subject: [PATCH 1/3] add py_binary rule for console_scripts --- src/piprules/bazel.py | 64 ++++++++++++++++++++++++++++- tools/compile_pip_requirements.par | Bin 458809 -> 459031 bytes tools/create_pip_repository.par | Bin 5992683 -> 5995004 bytes 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/piprules/bazel.py b/src/piprules/bazel.py index 4e4c31d..860e14d 100644 --- a/src/piprules/bazel.py +++ b/src/piprules/bazel.py @@ -42,11 +42,20 @@ def library_dependencies(self): for req in self.distribution.requires() ) + @property + def console_entry_points(self): + return self.distribution.get_entry_map("console_scripts").keys() + def generate(self): self._create_base_package_build_file() for data_directory in self._find_data_directories(): - _DataPackageGenerator(self.base_package_path, data_directory).generate() + _DataPackageGenerator(self.base_package_path, + data_directory).generate() + + entry_points = self.console_entry_points + if entry_points: + self._generate_bin_build_file() def _create_base_package_build_file(self): # Files with spaces in the name must be excluded @@ -69,12 +78,63 @@ def _create_base_package_build_file(self): ) """).lstrip().format( name=self.library_name, - deps=_create_string_list(dep.label for dep in self.library_dependencies), + deps=_create_string_list( + dep.label for dep in self.library_dependencies), ) with open(self.base_package_build_file_path, mode="w") as build_file: build_file.write(contents) + def _generate_bin_build_file(self): + contents = "".join([ + textwrap.dedent(""" + py_binary( + name = "{rule}", + srcs = ["bin/{entry_point}.py"], + deps = [":{library_name}"], + visibility = ["//visibility:public"], + ) + """).lstrip().format( + rule="bin-" + ep if ep == self.library_name else ep, + entry_point=ep, + package_name=self.base_package_name, + library_name=self.library_name, + ) for ep in self.console_entry_points + ]) + + # Create bin directory + dirname = os.path.join(self.base_package_path, "bin") + os.makedirs(dirname, exist_ok=True) + + # Generate scripts + from setuptools.command.install_scripts import install_scripts + from setuptools.dist import Distribution + dist = Distribution({ + "name": self.distribution.key, + "version": self.distribution.version, + "entry_points": { + 'console_scripts': [ + str(val) for _, val in + self.distribution.get_entry_map("console_scripts").items() + ] + } + }) + dist.script_name = "setup.py" + cmd = install_scripts(dist) + cmd.install_dir = dirname + cmd.ensure_finalized() + cmd.run() + + # Add .py suffix. Bazel py_binary rule requires it + for f in os.listdir(dirname): + if not f.endswith(".py"): + fullname = os.path.join(dirname, f) + os.rename(fullname, fullname + ".py") + + # Generate build file + with open(self.base_package_build_file_path, mode="a") as build_file: + build_file.write(contents) + def _find_data_directories(self): return glob.glob(self.data_source_pattern) diff --git a/tools/compile_pip_requirements.par b/tools/compile_pip_requirements.par index 15c63742e3f0c6df88c1db5e6614faf0f2171a1c..4434cbda7828bb01911cc67586aa2261e5343b82 100755 GIT binary patch delta 1684 zcmaJ>ZA?>V6uzam$MR9cjbX7Jy(kks-xl*Z%Y@K}8DV_j;S9Wkzy$ zFdH4iur_U(eo9#H2~D2H@OkazhN~$Yr<{D*9%Yd&spj4o?HcXjMsc4|;gqV~omW-nXQ>PzeyfX^9gui(~gTXY71@p#O2fCNAVGJrLOWB)vX$>-ZCyEs74JkN_yohs{3=g|Bj{UaQwHs+Fy4QXPrxr9v$S6?k?~Wom7I*H zdHgm@XTe}5Xb5j-m|Lp|0{vlLe@L~z|ld4nA;>$mW@!||i9vlkeU9*r)U;RinzB>yJvX0vn%Y=bhwsLD< z#MC*cCE*&gHsbj?$RYT5fg)_gv17a*b@OZ!JY|?W54%YX9Z*ygUYLhmg6$WTq{(O* z(&_QZJZvFuAd*YDsEfh9Pgs^4L(9&q(I23R%-+*Qj{L^`u)}@bDqK*5&djS^Ns#p) zp9JdnKOJN{`<)d~W2GHFK0^7F_r2!Xl@XIwX9N5&2a?p~*+k1hC3f5JqXn>FAP1ZNU}`phC&3C3<$q4Fg0K_Ns|+!xkPy#fXtTx5v`?W#X*%=4HLVi(4h kU}*^QY5D)c!yzc7v>WrvEeUAGEm;IRF3v delta 1516 zcmZ`(ZETZO6z~x?maK=Go6!6owZ9&o?LddUr?#~4{sYRvbFeHJdJ)|<1Sl?g#$+HZf^Dm5=6k) z%1rs1^$}}=``?IOSy&_Jf9!j+VklRoV(STc*jm<`u1VL(-Qdi9u3_uOXX`xGo9f(K z8tmStR|0!{yLT4a?A}(dt#=xX8k5)Wd)3k$um`*?7GINPQN;eXM&L<0PY%Y&Am4u+=$?S}EdFC=Eyd##;3O#aGnj#+6X2js zD~uwRWQ#_0PV!XoZMc0B)|1j*FXGV#(S+YkLIDL1)}t^5MbvQ}=G^AaGdnnip4E_q zZ!4U*U*Uee&0Fn1$l!}qTKW2;-h=LV|JH-^`l7uL~q`prTp&|;a$?x(h1vY&s>e(%^#}q%q zxUFPu{)Smb^qdou@abu;W?oddj%nVu-yXoL(>!0^ABt*^K`A9TRf0V+nu5JCUey@~ zgU^t#b``UXcrgxoG=D@zI^#V3jfKL#I5@~T$u;L(PO$T-IjF~;8m$i3-Q}^?w-llM zF03NIW1pkp9`)c)1zzLu1rmb4D?;u8>S4z{9vd8GTsF>L*8&bHTyIRtXPE&fUA!|B z@XHuv;TtosLN5u|OF_jxWAx?1?PFl#vu?~-bX)C?d7ns-e3EDgsf4o*9GC?&UT{Jh zZkgpJ)I6qeiC1I5uNCJ@E+*7cSZTT9QalBj_;Up;9H^lOn!lV{dg4A$`BxS9PrM}q zW>x7Pt&+F&A{?-*k{l7p- F{sWDE3Zei2 diff --git a/tools/create_pip_repository.par b/tools/create_pip_repository.par index da2bdf67b66530bc5799e95525b58bf10b01e159..babe7de87de1a75d68d36d12b4fdb6f96b4636c7 100755 GIT binary patch delta 11052 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 OBffXKr<@b;T=^fuQ1)K{ delta 9664 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 From e10edff5be8b7fce303e647a69863af4d114fd13 Mon Sep 17 00:00:00 2001 From: Chaoran Yang Date: Thu, 16 May 2019 18:59:02 +0000 Subject: [PATCH 2/3] add 'main' attribute for py_binary rule --- src/piprules/bazel.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/piprules/bazel.py b/src/piprules/bazel.py index 860e14d..148d232 100644 --- a/src/piprules/bazel.py +++ b/src/piprules/bazel.py @@ -93,6 +93,7 @@ def _generate_bin_build_file(self): srcs = ["bin/{entry_point}.py"], deps = [":{library_name}"], visibility = ["//visibility:public"], + main = "bin/{entry_point}.py", ) """).lstrip().format( rule="bin-" + ep if ep == self.library_name else ep, From 611a26d9b064bb0df8b7a3113fee66118811a8c9 Mon Sep 17 00:00:00 2001 From: Chaoran Yang Date: Thu, 16 May 2019 19:19:14 +0000 Subject: [PATCH 3/3] update binary --- tools/create_pip_repository.par | Bin 5995004 -> 5995051 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/create_pip_repository.par b/tools/create_pip_repository.par index babe7de87de1a75d68d36d12b4fdb6f96b4636c7..4a7c5ad01d16d6033ebf4282160902a1d5ab312e 100755 GIT binary patch delta 8188 zcmY*e30M@z)^)mtVP=3CRsq?O#Q|ghSp;QK0xqbaBG9FPYs4r5L6pQ7_ZUrFk~ZFG z@)S*;ar+g6W^p0rX`YEI=Din9;t~^=7&qJ!eH#5wceOJ5edoh-?yXx@w{BNe_dL3D zUD$m0y3n*Y($z2X_JAvX9Xcq8?LfKyafs;p7Rt5J84jo-t z75D16s=C^S^6Dv-Rds*sR^1R9L-D^+yM{36Yv7Oflh!A;0yQxodJI!00;zvfM6g52nE7`EeEFEgxx=%6PRD7=WvP#_vXmqQpW&qQ zZ&I=l(54Vyc}j(zHs}!jqETltJqysmk#7Aa1(4aKGtsPi*uVcx^3xqv)DrQBFdc<_ zqw}G2VLErJzam*h(*RA{eML$WN07!Wzf0-ja6gq7j6{hAaaXHC#k+;!x#Dn=D(#&s!PxNGC2^}5tum^hb{$Q!U6 z+sw)7&4PjE-9W>)TDWpTF^@XQ$&{0VGyQlS-Dls#qV@Wf%dg#(5_C6c`%P)6cs)T> za@dIi+oU8hYp2F0w@E2t&MA$xw4uQ`y45BP*7c?ATT&600DppI=_O}M>VkDSHKU{b z%0HMvYwt)t)O1VIlk06MT{t)2PMLUHN)Q|u*(rN(W89ZkDoU8VZ<0w_1gl_Mr3#d_ zs-qJv>W+Tq-@*FtqsBW@vGC*f+`V5IW6ho;7kW$5fcVG z(A&k1oymL;(_B}~nLMM)Ov!}^JNusGCl30XDhJWtds4hEiEiGLio}L^N2O&DjsHWk ziJb>=CjUIeNSBm}fAGbz!L9 zKIxl6xifnpr3mvPI9VE@ccNVnkjyy=Tv?o;H;~K!p!jC+fcY;QdBB?gq0hU+x!;rF zdOdyZjiFpP{9Hc{N4SIK2m*Z{42K@Adi&~@$o5bgCTzUK{XTk#C;gQ+-q({l4{~{g z&d=Q9LfKRk6}clw>Z9j+DSgCSZ+Rpo3T7Rhe7%8&%wre z?y$Aq$%Qujg?=*UbLHA!Qg_{23VAFI73vOfZOLO)=FVR@`Smf1@_sqh=$JRfKEYP? zZ7nB9Y7ItSCkMYX*!T9^cZx%pob`%{&OSkB75`BMs{W5bPxG%ymUnZQpRn@>Reg6Z z>n{9tP5FNm{X@q*sBfFWK5vy&tz*$NtIeR+zlDl)Xl=Qrv=}As&>6{1$GXyE9ZMA| z9B7%q!fB+y;&tV;RA5Yu%`npTCsHVxMV2a-_tn^xzD5^n5SdkcyF`<|5m~a}Shu1h zD;96m8)@x)S8uBB$a;#k)7qJVW==C2=#9&$wZqel_WR+rr*3W2jBXU|fZ*S~>dNCl za-y@Zx;oMfMK7MI>H+e|Stj+Apz{vQPi&sA%2D*O35%cX2+6gBS&0zxZh+Z9e{)3J z1ih*RP%pjNgML(`-Z7dqFvjdf{oT+wJ>6_Swh`&=9(t-uN3a_fxCN9lXWFJ`uHpxS zxre-ONk{pmCED5YNRKgGYB#x2o)bFMGtGIy94}fAMK^*@II$t33w93-H$cvu>&gc* z%76&VrZ!i zsHxGJInrQfl+Om5?aWHV!#{D0?6<(o`}c7{&`@_b-XPZ9%}66$5TnyHF3HCi7-*ZK zcpcE3f)BWPk*h1DH~(mtI?9XRu+St$zSq-T4Y#5f;`UJ1<)kZmX|3WiAwWkuSLN=? zjfrL$C%!kF{GR9GuJ~95eF0aNyRk&!-^~gMqI1n2ZoIk-?g){3NR{Qk zzvadQkAtc!qgn23xG?524^Va4!;_322wCq#=RH^_sz^8M<LLats=E|26&sTWHS zM!d|)7B2)$r1M^En6P&V-SWoXRPN1^gurE-w0NUJx>K7s8zD5^SG2BFAbJ^SRwouK zrioq@@|I^HWi9tKD!PesE3q_pI$_z)PHHzA{T*%W<$mM+qfUi>CEEA9)AA3?|&=ol}!Phb@2xa zkpnr4kpqo1(;uB2xS>hMZv^V8RgoM91amLTfM7j^1VG9?9>S%U0x+Q;D?=6LOJ4-A zIN_R^ZUtg8#y}hkdptR*2t?|0hO0!rztWYy4#bA@DYXS+rw-MHqk_VNC{7n{p)w_x z3xkl$r9!*zNQZ-z@jJFl4)W;_3=|WL@syeDWU4lWJJ48xxse>qd_~z^HAYguk%)XL z7?t}v=|b3W(Nq~hx`h!DG%JK9iKS23*$~!8%%99{a>Z&r9g0B9QK1;qjw(&wv)Y?> zg`)2zuV_JB!ceas3n?p%RiKvFhOsi;dn>xIa@~5W=z@)C-OVUvp1AhhjB-(~SytV2 zatmjp#adfeI-hF|mH)5NAa`DCpjaz9+!c-v>r?DZGuJwjQv^EQk)f%L>kL#8fzg`> z+9~@ZkgLMipDAWCc16I{NCXVs_)JEzM`Ha3{bZ;79LZ9|qwZE^JXXqyLg<>V8e1QQ zuy=A*W>Z31#jo=<+rF;MfyQ^mv-4wFyObjSdzzKLnr2N@reqbPW?PkA(u)epqaDaL z+iIejivH14-4f08v~{-Ck&Y?)zm{nJ&{M@5OEp#zjZN^i7S2}0V8h=L&AN+8CDCeh zDCy$Ba!!=4Jn6+4MB88|IZ#u1v@`8e^c7>f@lidBLEL>G#BsK-EzThC+h9^k(kia~ zN|PI7S#L4#h`m$&Mw|lOkl}@=;_SEXO{eUe(9wA4Wb*JY(_dBhb<)CM^OUh4>r5dE6ST$vJG{IwuweS$H zHQ^SkxNJVgT_Tfk(v3aAN!5vXlX|74gevv@97FF=n|ccjY(sKa%lq1*}yiywRjEn|OMQ#^$7;I(?ftlmFgqq*F;q!PhN` z_SJH!MRSiy#o={`My0ZWLbo2&l*)z($JD<8a^ns?MfJdJOg$At0M+!sYF zZdwY3EKd!T*X-0T+z%I|*mvar26v#zX{bowMH>588ZOFPmuPI)k`xnlOIIG7Uo@#9 z9g`}1sIf!o*zabAQDHAsqJK{uzRSZoX$()*-uB+;iKSm3%jNw&aU#4sRVDJC&$UAB zF(=jj5R<5&7b_HQEmPcr>G85uY`?uQ-^ArSO6GC|56r;0F8lUS=Sh_rEJ=5P)@0!J zaBd+LWU>(X=q?xK`-g?1R`sxt-;V}o;><~2ueCjxi5>6-|1>31C-TTb{_6Xr@eQCX zi`jI;X=xUop?wEwSr#UGf32XI@}+t+Mwte(do~0 zJ?+g#s@!ngWiuv}sedD>_0x2Vy!$H?E$xlz?P*s#(_f16$wS3Ik_!5;TtSYe?Kv!h zTKeD(XLT_r{yBJHD=RsfQQ6a(=I7v0iKC_*Hb(r-zn3zEaCzWYPW-;$l-$d{47w(( z4gs|I1?>4f3p94&1?1q<7d4iWixXgGO)pyOmJuO8{-=o=bCLVBT1^Q);Kl3TClAwp zr(HHuQ*AF3Rp-Hb&2-JXY`>W<`XWh(#C&JEk%yO-Q}3&`NQ&r-+e5P(W%p-+blfu| zfPQkro8OuSxNqr;Iy&I_%+`%|dO+^d5Axh-RhA1{Txn82ByQGZE^KKr(mqA7&F2l% z=VzG6t3OiIN?H9`snG3r#Slg<{aK0-|Bw^E0Vw6lzc{HGfSScQq049Ca=}3Z{dWMG zf3PAS7vEnC6giAu&ByBAT%Z!U;u|CVl#fn}wsNa=AhQX#4stScAa0#9Z6C-=MVmg0 zW}nFnr7V4xfl>z{Pj6Z^>3wUKNs%nHZV=LXBTmyF$7MOu6~*;bKQ75<4!Kdk!B8Gb zS#(9pLiN-#e>1*`+x=TZdj_*S-AU?Lzy|2vrh)=iBpUB#lclJ41RX2D8kam}F@@Ny zLW_DUww}sSVHF3Is4RgV7os*kl2jH?%bIMsLd0W~uMNQ{i_0|qXgv0%D~gmhR+Vg| zo)K9?5$oG|n)LL5@TYHvq7I@~a9yt6>Oz-CU$%eY75cLh#QS`XDz7L-QFfopT?WlX?5a}a@AbKPw7ns} zGcBEqQK%nvn{t`6TkLb$`f}A%uSPU%U6toT=8O177b9VM#`oKe9%S2WGw~b2Y6&^C zt+qD?$Fm5x-XX&&Vx*Z}d$Pa0d=nCJeq8m!_M{rd8G$Bkq;V$%SPDNfJVf}a@G&~7x)i@8Rw{3H8|8faW8x5kU-__c#Tj*Ow`Xfe@j!#7EpwZY>4pQN0d@QT0X}6f@%xE~L zlP1NE!IQ1~Ok=OTl;=!uOvl_m9E0Jx?AG+a-34a;dHn_R5c`E3Zyv(O*Ly57y0u1S zRyuiI@}SSgB1E5gs+3H|ap*RFvC5)p^f*jz<_8+vHx7d+S+BA%Dyu?esvm|^#v?+| zE={-X8e-yKqTf;US$j0yJSERSKaEHDUSDg{ps(SY{30a3Z!~Go6fE)*MOyibCY^l| zJJ*+gXsq>*A$rP~fM?LXGlf**z^NXMw}>SZaF?>--PT@lr0WxKBDiEI@?at0b>*)= zEvdxet6#*4WzkS0U9ChsZ+weY%t331>M3m^hHxlv7%#m!6Y+L&e2~UY4H~9xIlD`S z*{At*iQ-Y@Pt6acPSp1$On>}1O{yL@%#jwngs8I{R4Is7k3a?dph){0ij;=o6g>&d zp>epv0;zry>n7$j;?AJ#8Uq`P4Rly>c<)0^@|cX{f7fP>O_+>C4c@1*FDBz`^Q@rk zD$FUMqQr%~s&D|FqO2<1qE;A7dDJz=QWu(bSGjH_mD*3HUy|mrr~K(cM^3?v)~9HC z`4n^>l&-O;bi`51;e_I4&eC*4HA~U0q3mi_DE?!vCN@>03~T3U?A3W_YN^4*b}rVW zmc^y6w5t{sUSES~k=r!gwyo4cEsE>V=2FUTE)6G3Em-&t&7s?lQYWfVB-4L1Y0(($ zGl*psf=<$j)Ky_5!DFO5@vnY7Tjsd!Oordd;2Um^bn z&7R6U>FiWgZbTb-)U*ELohXUUM@hlTZ;Mv(XoAYTs5L<{(h)^+Ezu;`X?Pg>KV<_; z@UvF^Rdi7^4YRpWp?Q5c4JEN}j6_?b%7 delta 8218 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 VfHfcEPmk^kiNPW2vVgno{{fG