From 7921b4283f97bde6a8ac346d8c412b3e83ce8fca Mon Sep 17 00:00:00 2001 From: hanfi <ccc@spahan.ch> Date: Thu, 2 Jan 2025 21:13:30 +0100 Subject: [PATCH] add some python helpers --- c3devices/__init__.py | 10 +++++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 448 bytes c3devices/__pycache__/install.cpython-312.pyc | Bin 0 -> 2330 bytes c3devices/install.py | 36 ++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 c3devices/__init__.py create mode 100644 c3devices/__pycache__/__init__.cpython-312.pyc create mode 100644 c3devices/__pycache__/install.cpython-312.pyc create mode 100644 c3devices/install.py diff --git a/c3devices/__init__.py b/c3devices/__init__.py new file mode 100644 index 0000000..8634386 --- /dev/null +++ b/c3devices/__init__.py @@ -0,0 +1,10 @@ +from ppadb.device import Device +from ppadb.client import Client as AdbClient +from os import makedirs + +INVENTORY_PATH = './inventory' +CACHE_PATH = './apps' + +_client = AdbClient() +makedirs(INVENTORY_PATH, exist_ok=True) +makedirs(CACHE_PATH, exist_ok=True) diff --git a/c3devices/__pycache__/__init__.cpython-312.pyc b/c3devices/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9eca224b983ab97cea5a3dac81adf12e67c4416 GIT binary patch literal 448 zcmX@j%ge>Uz`*eRW^(#J1_p-5APx+(KpCIY7#J9)Go&!2Fy=7iGDa~ng4j$sOu5Wa zEMPWs4r?x36dNN$3QH7w3TqSx6GJM?YN+-oP9}y_wp8{Mwl(alnIM9U3}7)1RIy49 zP0p7f1)7Yv*j!S}GLut5Ea#le)VvZ+##<b@iP@<snMK7_+<N+%d1a}2CHX~_Rcw0t zi3J74As`j06`92)@%h<)nq0Sd3JMZalJru*1{E<gFfhP`lEEexfjoGN(=jCpV#6(_ z{Nf^3kTO0`zc5$75dWaa_yETck6T>Mj?Nyg5H@=}ME6RD&mgD%($UYz&rQ`YE=bHs z%+pUchFDjO#EOs4%*!l^kJl@xyv1RYo1apelWJEa$iTqB$iTo*Y|OyG@PV0;k?}5r z{9Oi}yA0wF1mzm|Zt#jWa6RM_?$&N#zsbPSA-6!~DuX(RB{d`E8iR5XKLY~;0CZ+| AA^-pY literal 0 HcmV?d00001 diff --git a/c3devices/__pycache__/install.cpython-312.pyc b/c3devices/__pycache__/install.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40bb414e96938318ae19af24a859ff9cdb8d7b2c GIT binary patch literal 2330 zcmX@j%ge>Uz`#&<D>>bcg@NHQhy%l{P{!v31_p-d3@HpLj5!Rsj8TlaOi@g^%u&pY z3@J=0%sDK%tWm6BHcJj$E_)O^n9Z8Q5yg?hmdcsNl)~P^62+CykiweAl){n9oysZ6 zz`&5gnaY&LlET%(8pTt|s>%J5k%56hllc~Vd~!}^YF^1LHkZ`0%;eNtT+WWp9<K2L zjv*c|K~B<Syv3GToR*oBs>yhZ*C{ozv?MdFG$%N}w7~BcdqHAyc4B&JGRQQLY7k~; zU|?WoU|{&1!36S230y9Pv4&wa6G#aI10zETNDY{i#R8^Kh!mz8hS>}$%yXGnL-p4( zmVitKtEyql;s7&Hh!hr>>9tHXOj+D0l3-2>>l!wgd06Gy*KpvK=Y+|oaDhU#mKn)+ z+%?Q8JSn_u_*O&xL&%Rc%qje91YmA9WvFGTVaehJI~0Xj4dpR1l<-5D3?%|E7ATa! zVI?@1B}E9yG}aoHEMb@`1f3$hMg-;y7lv2`28LR;8rCdPgbEm|1|C+73`qVI1^W>m zk3C8(44k0!%8-H-yD4B1m}^k<^TKRL5fwvD8<h;o42BHFjO9#>43P|s42%ptnib5E z4CRa%;<^xVO>w_l94Yzbc{%xsDOCy?B_##LR{HvBx+z8ZnJIetMd|vfdHT@gTC9JI zQNM~iqa-&+uOP9gIJM{&TTWt0YH^7s<1MDllqw0RLfx{|qT<Z_JYAT{pxlt0lUQ6F ze~U5k7E4A^YT7Msm}F*N`YlF<TMU|vx0qA&QbItAi%W`96LWvD=p`0p-(o6H%4ASr z04d-~&M3{xjxWxvO1;IXcZ&;VMrw*C_bt|fqRhOKTO38Hg{7&*CB?Ux(^E@|Kq>wf zOG#=)$t{+&%)FFa0!4|L#i{XW`9<-?C5a`a#kW}U3sUonKt;(dp3IWeqWI+eyb@6E zW-TwuEJ@X5FXCiiU;r6hT#%nvoO+9;IKQ-@2$be-F&5ooOuNMjc2_Ydrzt?dFKzvd z{M=Oi;)2AC#610E;}mc~QH;dO%quQQ%*oL!sJz7+5A#WUVnKG1HUk3#$gE-pMh1ok zhC58`9b6OKuQ18n;T7$V>5RD`W3wZChv$L73sUZvc|965?r@4tsF+?mv35c3Wloa@ zl^fjr{g$1UGdMadFLNti=T^JOt#(1r;{vzZWp2;w+<q6i{Z15L<_^9P5_OR~x<L(O z1Mh^g8N~~Vt}<!eVdrnJX{?#xw!q{nyT%H~8!W8XS;Q`~h+SckxWmaiMQQ@i496Mi zGa?tHT;S7Q5pspoXhY%+VUg)}6YW-nOt8BqY}BE8gM+i5y_0<cYY*QY4&ILB2}##D zBtNn;h!}roX5cdZ&dR`{`GtppnWKZLMH6H{&xG`=Omg438Murua2ovrE4aX}@vB&c zfq~(Wn7WGw^C4R^7a7*WCLAsr%tvHcT~s-bD6)gt8mumc?6)|e>96<}8zi)oq1g?b zH9-LiDm*{`0aq1>tXadD1ri4<LJ+Xx1Ci}&7_&fW1fc}Xf~l)zs$p<pi1lM&sAaBU zu3;);EN1NCK-iMPSi_8zu|ci@>n{N%P%vvYLkd$3GpJyi%L22tn7agCAlJYPbw-97 zMr=hMezO=EdIDG&Dj76c{Hl2JQd3hDpeeA3hk=2iNE}qPu@}jJk~(jCYDs)?YEfol zPJCYeE#92W;*xk+=oW$84$dy%gnEk|YK$gJkq*cpU62W!P{Gs`aONon74D#%QKSWu z6@bbj%rs_TU;w$GxR?Q!<k_xs$Xw)*xy&JVg-QMfpU8DSrHgz@m-$p0G;a$^Hl*L+ z7MhTGiCg{-8+V7_4EHN+DtGuq=5S4@Szx#ze1YeRkPD(lSNM$YaEMMwzrrDRgN>&> zuQ3lz!BsZnkK7DGQlCLlpvhY#0`dVUITV3h4EE(M_WWYKg2a*xu*YvPCl#B3OO+y7 zkXM+CONt=jzyb=TB9KQ`G8CDB%mMqA!zMRBr8FniuE>f3RD&}x6x%T{FnnNUWMsV0 zpm~u&^DcwbT?X0P4E!J1cp2qqD1T<)Wt9J*z@VwUBjh6k2cyZ1lm*5!Ge3Zs8{EEt HD6sheG9V3Y literal 0 HcmV?d00001 diff --git a/c3devices/install.py b/c3devices/install.py new file mode 100644 index 0000000..4a10106 --- /dev/null +++ b/c3devices/install.py @@ -0,0 +1,36 @@ +from . import _client, Device, CACHE_PATH +from os.path import isfile +from bs4 import BeautifulSoup +import requests + + +def _download_apk(package:str): + print("download", package) + response = requests.get(f"https://f-droid.org/en/packages/{package}/") + soup = BeautifulSoup(response.text, 'html.parser') + latest = soup.find(id="latest").find(class_="package-version-download").find("a")["href"] + print("downloading", latest, " ",end="") + with requests.get(latest, stream=True) as r: + r.raise_for_status() + with open(f"{CACHE_PATH}/{package}.apk", "wb") as f: + for chunk in r.iter_content(chunk_size=8192): + f.write(chunk) + print(".",end="") + print("") + print("downloaded", package) + + +def install_packages(packages:list[str]=[], device: Device = None): + print(device.get_serial_no()) + installed = device.list_packages() + for package in packages: + if not package in installed: + print('need install', package) + if not (isfile(f'{CACHE_PATH}/{package}.apk')): + _download_apk(package) + device.install(f'{CACHE_PATH}/{package}.apk') + +if __name__ == '__main__': + with open('packages.txt') as p: + for line in p: + print(line) -- GitLab