From 5774c239ad77ff19df55a0c82492d7508cc730ca Mon Sep 17 00:00:00 2001 From: retoor Date: Tue, 3 Dec 2024 21:45:26 +0100 Subject: [PATCH] Added thumnails. --- dist/rupload-1.3.37-py3-none-any.whl | Bin 5814 -> 6069 bytes dist/rupload-1.3.37.tar.gz | Bin 5187 -> 5547 bytes setup.cfg | 1 + src/rupload.egg-info/PKG-INFO | 1 + src/rupload.egg-info/requires.txt | 1 + src/rupload/app.py | 34 +++++++++++++++++++++++++-- 6 files changed, 35 insertions(+), 2 deletions(-) diff --git a/dist/rupload-1.3.37-py3-none-any.whl b/dist/rupload-1.3.37-py3-none-any.whl index a300158a54fa8f93bb0427875f1fb801ce521fa4..f21f4273b006cab7ea3040bdae76c4d50b7365dd 100644 GIT binary patch delta 4695 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 XQU5zL{}Jm$Z-IUX5Tjyd{bT$OM_QX& delta 4415 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 diff --git a/dist/rupload-1.3.37.tar.gz b/dist/rupload-1.3.37.tar.gz index 5e6a630c9c7b4af578697dcc91403c8cf6d9b548..f2b41762d7549b50ae0ec2786685c04ca3afa241 100644 GIT binary patch literal 5547 zcmV;c6;$dUiwFobZBJ(c|8jM3Y;R#?Eio=LE;BbSbYXG;?LBLE+cvWKTK)=@IeR0w z5=H9iXf5BmagzEp53lX?+M> zYsJRKu-onQ_xrtlP1m0ey8B(_kqm$N;76YA(pk&Ux>|SG{@v#PaM;IRW7ya8zv-Me zdc#h4Fc|a(zzdAdu-AV?`n#O}J_}uU3j_RI`hRH9B>$KEU-Ey+{{{a){rP3< zUw!@$dc8XS-|cq>CH~*jdxJ+r-{t&&p#1+e3+ar8wDk+~1Iu+rq@x+i8@gg65|0ff zO%j7dIgeH=>aRycq!S>FtsF(+()CB=jMFK8ZLt-#Y=Fcge^|M;J7eL$HOE$7StfG= z!1DU!LOEmqiY%W6t7XtFuGuH{36Sgka9ux}MP1uG?e4M%0 zPFDQb3c?Ygmb(l?ZwxRD9sZTmvAqEc$74eqXq|GZXW6!UttgMl**npGuSPO^EN>G}F2E=xq1qqi7paDr8VsVf*)EM%^JB4ac-&_*r zEG&m1L_iooylt(lkRlB^T;7Jj`Zs_Lp#p%`!auHKuK|P^`Bu2r$QccpC}{y+D?k*c z>jV}k2^^M2F0e9eP9rMNLynuLw^ay zj^iSLY;G;cHFO5?d?1n&7O0ItmW*Dl37rZ`KYmP39GJ|u%`2!F8u_rI9~n?2h!!!wD za*!#5Ap=y490%!jZH3FU@o`I{08<<{U+miTKL$8`v^`$`cL7jI`S9Vxlm<(sfRns$ zEiV;P72da6OE(A|fJ%OPdw%ie==JmZte)$KiOjS0rb|gNud4A_VNgVrF#v6jIbLkM0lIDgbX;C(|8`hWWPKRkhnPj%wk&rZ?6qTIIQxQ=56Z4p~4N$!xZQ z+MK}me%#Y=`u+!L&VLH~5A?qc`>!kQzn$2Boy`904D^1d+tqYw`8`zo@9g=}@$2W> zYWCIbzd^nIrw@DF{xdqmPH$kK{ns&i(*D~;kXDYga-@|btsH6PNGs>BYvsrw?LTS% zeb)Z#4|)TAU)p~U*Z%X?p6~t&f>aCLmAxDLPdB=Tu>XvHx5MXuf6(bm`)?QF{WP-d zSu0qBiM6^^{PsUFgJIeKX8;pY%Ku%+|5fY& zbgA%VpK393SDrGW^OsNQ4%qkSy*G`n=uJ| zQ}MXt(Ilt;2p6Py0X3hXe6!(T^i9d7=$pieD5-~*R71l`TqwgLV$M1he7kGg&>Cwec7$e4Hpel-D+B68rnTTmX<+LNuvn`Wvh}s+RoeMKICyD*qP_m5}_PnVS zH(KD9j}Zw%bOy*Ov5^Z2RLX``%kmYrXpD&Egy`ImC)x%~vA<=)_lqSZDyS#Q#SKfE zq2=n8dSmc6&4*fAUIU1@S1eN8MKUf{xe_{VhZ*MxRS&zONmHCKZ4tKBMN6%^HY5M;(}`k?$lUT04c`Mww!J8qE5zfj@#6hqbLx z(rPT2gWCexB%=oh+~m$G=smMpi!w34$FU86lM*nT)6w)2r>B5?N@Bm6 zv3hOI!sU3zt}K(a_)C*uPgvA$1tzuGSl6B=ph7FO*dw~Wwy=e04rp6*y0Yx`h^Wup$hVkJ-mq)6N#eIAS-FlIc+_NnFO)@J^lsLpWh`m@#) zhTX>z;Xf^E+r=y^>Mty3MD$`bbT>f5IerBryJ75Q$)A+;k(OwNK25C|GhMM6bwnK3 zVU;B{Y#118K+@aKk#0Vpm&gmvVt&h~Gb@6Y?|V1p^qW?&q%-##+C_Ta4Q3(!VoDo& zlf?hDe48+MbT+e`#fWtDGC)4qM!@&=zm=(X(~1-OdZE~-il(-#6?g2qCCc52ojfg# zssSo^cc)jbvFO&;)D1&-Rn??~xZQ5IvV)eLE$H+bbfN2QNxf%fc!JF+BtXe!Wi98f zzbe&p%cR1Xme}0PM<<|-R!%X`fSYOgI*1H?b5!D} zh33Op3|!lqk;kTKZXMbEGK^d&7=xNRP9q?*v#nkgJy0?2bbUB2&%8M8dI?OYx^=}F z|3z)$2qQm0jNHYr%-%wuI)NqnvfKce;N4&geMU?7>MqPj*ZYHM^%T+K{mUgF+vh^Q zwfpy-l-k^N!;MV605Uur*=!!(ePjv7dC-of{6Sl2AO|SvV+CMlT@kLDkJXe#$La%5UmAz8 z`hZg%AQ-vCT;X^aoP`^P-#=jn%f$xl{r=(9)fa)zi1<7b;4Aw1yBiR745tV)SzYnD94p24$H@tALj@CYg}0TY~|1mwR=*IWM`xDeQ_v8Q_lsQ3{&na>TVFjwMHu~!tdBe1Kf zusa&~C$<`_x!9$DzzyRKOJc6xV)7^Qqso(*T`UkA)OF=ZTO@0p`6u%8b{Ka9^<4(< z_1Az`%FF@3OaTY%Ud0PgE`Cf%zhL1+jKKys17pgs;tc}t#n`~3FL)fD2UD;kh3yE^ z+6TR-ku&$8-MoYbwki&_#vVUzL&OEqd~V$!u=j=Wq-vhCP@AQ=U%kz^g*C6p$2K!g zSKdb4HJffm23PsQm!m?mAc#gik2$l3;1)`b@*+J)Q$D*YNm{135^LyXdh=5%?n7=Y zP@*=6;kY5fiCIzV#`<~-05-a1df>wNGDNm{_Ly=NxMkG{L>P~b@)>0~n zlS7x#rbwFGV!=;BKHlcpbC#pHUbOdV@1G6`=`wLLoIo2ItR0iD94%pV+R3_60~H2_ zCk^A$<(YWNWI&vX!&KY8@U_7Z5gwjQ^8!`wMsdQo|2tNo#^?Mrn!k1Q7z{jdu;0Q1 z9PcONCWu#o1kn4JF z_D@=F9TU*vfQknpCKuU90`kPUqG)fXxoY5*dghD;p6di4^I<4O!MLaEO}@l4-hhZu z3T=&NK!G{p04XeK{t8ANJ~h(iNTtj$`A}vz(62$Bo#tEj0-0#mAYcyIZEGS*ZE0UN z@^XU>q2Xu}K;S6@Q<&cMty+CV-VbAnIbkrq@FUg~b(y#y`D+dmKanhLrwe?(pw)oj>#0GOQ8Ojr(Y4Ss%$~|6&QE|*vKyEiG zaz|*#%w~MD&WppauH0NRZ5QTLU25dmR%OR*8}c)(1e?|2teVsHXMe?$-RL%J^Kd3m z(Hk1MFLA4JY&K)AUHhO`l}A+_K~g(1h)fe^_B^ufb)Gy)hWLX~UWQeDHOUy%=P*Na z9rv2hE6`f#6w)Zj&D%V>!qB*vAWY~j8pYd`wUle`K@Kq*+asbDfPG(RxKgCIXp;KI z&7baOE(2Pp}!tgORW_39*6@xnez(z z#I2>4uxW2h=7r=JYDet3@4Nn2q)0j*DmyV(TOn7o-cz$BN;TK18ELa=8&kcADgn6J z%hmaWbT7#BW+LlfP_X(pdDj-?n^?I!!|BPZ#FgP>l|La<82MunEA)koHl&y>BTS>w z!4U(0_V!A70(!+7#Y*kPH7-wj?7g&eOGPSXxaG{)%~sPPvoMQh_trsJG+!&s-i*cj z_P7F6*(@ICo|TLlW@cSnIk94}wQdD_vC_z_tx$$;oHIi?R4khu9+CIuc=;Tru4hw| zHPpg7rP|C>sS-&3H3ucP=BPGv%@Ht?&m9>@hQIzA1SUw0WD&dxhVtH*n1&e^RTzFG z&LWN}{+7fhAE`3<&?2f5f@mYffJgZOf<7f8I$5sg$6YkkxE$K-sLW>Xqsxk#CNM_i zZcsL1lnj1U6V$^emDxlp+Wu;uvurdkt6oW=IC9pRyx=+m9{s`az}pC40)GB2_1A57 z!^|k;gmirppT;Z}rPPx00JW&C0n}O*9|*)>^&Ueq`HBJqD}JokM!1y8!)cQIp(|sR zpSgk=xKff^3W5PDi1c|EtGl>Y-PN_~zHU`9=M;+&i9cC|d)PR~TB`iQ#<}Mjhp=(s zZL25PxFW8ZW2FUAeqU2LZm&jXvx)CUU^HY6exFFG)Dni#z`0QyhD%-!?KL;@d2WCi zI14?*DJd^M7~g|4;pe zhc3ihHURL1w%t0>gw{c8p~ z^WCbIYIqwJtGsNZ`cjQAs&PR@FIO5nbEDGz(x#Sj&8x29*t}{ZzEb12P&aQQ+^NPj z+i=Pi|3^ean#{cT8kWkc8~V#~)zkeKyajn?5c3DzRh)1JOyJ9txm=k|RyHR~W*O$! zK4+WdGl`benP@!cJ?yki$eYF*S{{Dn@Fu|jP0nOQ$%NfBIWG`#_=IG#aQ6}>PA2^O zcd`{*9mNJQQt+#2Y4ZFxdH&nx`EO6<`EL(i|JT@J(ZbJz?XNNa?|1&&08IjU{+nF? zk^Fy`>p$`N&vN}o^8Y;lKmGY->*URgw_mjW)2qM#w-56_~uwjGtOdq|5PTj(6IaXmvRy>wYaDK)ve zLEelkZ$_3kBg>nS<;}?QX5_!_&B)UJllGsq|D^r5&Hg)o`|j-7^K&h{34go&x8?lT zzR@e%e;vKwA4>ag7a_Z0uXy#dlHLTV)SL;g)SMNpY@Q*hY`T>wTUQ#C&yBfU3a;iVE t0OkLee&qbD{5SNn{O=i3{_nE?<&2j>1{q|KL52qu{vWM^syzV6008`;DUSdE literal 5187 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 x`TwOaId7Ezy_)=3.7 install_requires = aiohttp==3.10.10 dataset==1.6.2 + pillow [options.packages.find] where = src diff --git a/src/rupload.egg-info/PKG-INFO b/src/rupload.egg-info/PKG-INFO index ea294cf..b2a3f81 100644 --- a/src/rupload.egg-info/PKG-INFO +++ b/src/rupload.egg-info/PKG-INFO @@ -9,6 +9,7 @@ Requires-Python: >=3.7 Description-Content-Type: text/markdown Requires-Dist: aiohttp==3.10.10 Requires-Dist: dataset==1.6.2 +Requires-Dist: pillow # RUpload diff --git a/src/rupload.egg-info/requires.txt b/src/rupload.egg-info/requires.txt index 15b74db..ef2e58b 100644 --- a/src/rupload.egg-info/requires.txt +++ b/src/rupload.egg-info/requires.txt @@ -1,2 +1,3 @@ aiohttp==3.10.10 dataset==1.6.2 +pillow diff --git a/src/rupload/app.py b/src/rupload/app.py index d655f5f..72b70f6 100644 --- a/src/rupload/app.py +++ b/src/rupload/app.py @@ -200,7 +200,8 @@ def create_images_html(url, image_paths): images_html = "" for image_path in image_paths: path = url.rstrip("/") + "/" + image_path.name - images_html += f'{image_path.name}\n' + thumbnail_path = url.rstrip("/") + "/thumbnail/" + image_path.name + images_html += f'{image_path.name}\n' return images_html @@ -267,6 +268,34 @@ async def handle_upload(request: web.Request): return web.Response(status=400, text="No file uploaded.") +async def handle_thumbnail(request: web.Request): + path = request.match_info["path"] + + safe_path = pathlib.Path(request.app.upload_path).joinpath(path) + + if not safe_path.exists(): + return web.Response(status=404, text="File not found.") + + if not safe_path.is_file(): + return web.Response(status=400, text="Invalid file type.") + + try: + pathlib.Path(safe_path).relative_to(request.app.upload_path) + except ValueError: + return web.Response(status=404, text="File not found.") + + thumbnail_path = pathlib.Path(safe_path).parent.joinpath(".thumbnail").joinpath(safe_path.name) + if not thumbnail_path.parent.exists(): + thumbnail_path.parent.mkdir(exist_ok=True,parents=False) + + if not thumbnail_path.exists(): + from PIL import Image + image = Image.open(safe_path) + image.thumbnail((200, 200)) + image.save(thumbnail_path) + + return web.FileResponse(thumbnail_path) + async def handle_index(request: web.Request): image_paths = get_images(request.app.upload_path) images_html = create_images_html( @@ -308,10 +337,11 @@ def create_app( ) pathlib.Path(upload_path).mkdir(parents=True, exist_ok=True) app.add_routes( - [ + [ web.get("/", handle_index), web.post("/upload", handle_upload), web.static("/", upload_path), + web.get("/uploads/thumbnail/{path:.*}", handle_thumbnail), web.static("/uploads", upload_path), ] )