Files
LifeFaq/app/services/__pycache__/image_service.cpython-312.pyc

85 lines
9.7 KiB
Plaintext
Raw Normal View History

2024-12-29 04:34:54 +01:00
<EFBFBD>
2024-12-30 23:20:54 +01:00
Osg1<00><00>x<00>ddlZddlmZddlmZddlmZddlmZmZm Z ddl
2024-12-30 20:47:04 +01:00
m Z Gd<07>d<08>Z Gd <09>d
<EFBFBD>Z y) <0B>N)<01>Path)<01> HTTPException)<01> FileResponse)<03> APIRouter<65>Request<73>FastAPI)<01>Imagec<00><><00>eZdZd d<02>Zedefd<04><04>Zedefd<05><04>Zedefd<06><04>Zedefd<07><04>Z edefd<08><04>Z
d <09>Z d
<EFBFBD>Z y) <0C> FileHandlerNc<00>.<00>||_||_||_y<00>N)<03>filename<6D>category<72>
image_type)<04>selfrrrs <20>A/home/hjess/PycharmProjects/LifeFaq/app/services/image_service.py<70>__init__zFileHandler.__init__ s<00><00><1A>$<24>-<2D><1A>$<24>-<2D><1E>$<24>/<2F><00>returnc<00>T<00>d}|j|j|j<00><02>S)Nz!data/{category}/images/{filename}<7D>rr<00><03>formatrr)r<00>src_paths r<00>src_filezFileHandler.src_files"<00><00> 0<>(<28> <11><1F><1F>T<EFBFBD>]<5D>]<5D>t<EFBFBD>}<7D>}<7D><1F> N<>Nrc<00>T<00>d}|j|j|j<00><02>S)Nz/images/{category}/{filename}rr<00>r<00>base_urls r<00> dest_filezFileHandler.dest_files"<00><00> ,<2C>(<28> <11><1F><1F>T<EFBFBD>]<5D>]<5D>t<EFBFBD>}<7D>}<7D><1F> N<>Nrc<00>j<00>d}|j|j|j|j<00><02>S)N<>0static/images/{category}/{image_type}/{filename}<7D>rrr)rrrrrs r<00> dest_filenamezFileHandler.dest_filenames+<00><00> ?<3F>(<28> <11><1F><1F>T<EFBFBD>]<5D>]<5D><14><1F><1F>]a<>]j<>]j<><1F> l<>lrc<00><><00>d}t|j|j|j|j<00><02><00>}|j
dk7r|j d<03>}t|<02>S)Nr!r"z.webp)rrrrr<00>suffix<69> with_suffix<69>str)rr<00>paths r<00>dest_filename_webpzFileHandler.dest_filename_webp sU<00><00> ?<3F>(<28> <0A>x<EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>=<3D>=<3D>t<EFBFBD><EFBFBD><EFBFBD>cg<63>cp<63>cp<63><EFBFBD>r<> t<>$<24> <09>[<5B>[<5B>G<EFBFBD><1B>
<0E>
<1A>
<1A>G<EFBFBD>
%<25>4<EFBFBD> <0C>T<EFBFBD><19>rc<00>T<00>d}|j|j|j<00><02>S)Nz%static/images/{category}/{image_type})rr)rrrrs r<00> dest_pathzFileHandler.dest_path(s"<00><00> 4<>(<28> <11><1F><1F>T<EFBFBD>]<5D>]<5D><14><1F><1F><1F> R<>Rrc <00><><00>d|j<00>d|j<00>d|j<00>d|j<00>d|j<00>d|j
2024-12-29 04:34:54 +01:00
<00>d<07> S)NzFileHandler(
filename='z',
category='z',
image_type='z',
src_file='z',
dest_file='z',
dest_filename='z'
2024-12-30 20:47:04 +01:00
))rrrrrr#<00>rs r<00>__str__zFileHandler.__str__-sj<00><00><12><16>-<2D>-<2D><1F>!<12><16>-<2D>-<2D><1F>!<14><18>O<EFBFBD>O<EFBFBD>$<24>%<12><16>-<2D>-<2D><1F>!<13><17>><3E>><3E>"<22>#<17><1B>)<29>)<29>*<2A>+<07> <08> rc <00><00>tjd<01>D<00>cgc]A}tjjtjj d|<02><00>r|<02><02>C}}|D]}d|<04>d<02>|vs d|<04>d<03>|vs<01>|cSycc}w)Nzdata/<2F>/<2F>\)<05>os<6F>listdirr(<00>isdir<69>join)r<00> file_path<74>name<6D>
categoriesrs r<00> get_categoryzFileHandler.get_category9s<><00><00><17>J<EFBFBD>J<EFBFBD><07>)<29><04>)<29>D<EFBFBD><08>g<EFBFBD>g<EFBFBD>m<EFBFBD>m<EFBFBD>R<EFBFBD>W<EFBFBD>W<EFBFBD>\<5C>\<5C>7<EFBFBD>D<EFBFBD>2<>4<><08>)<29> <0A><04> <1D>h<EFBFBD> <09>(<28><1A>1<EFBFBD>o<EFBFBD><19>"<22><02>8<EFBFBD>*<2A>B<EFBFBD>&7<>9<EFBFBD>&D<> <13>O<EFBFBD><1D>
2024-12-29 18:12:24 +01:00
2024-12-30 20:47:04 +01:00
<0E><>s<00>AA<)NNN) <0A>__name__<5F>
__module__<EFBFBD> __qualname__r<00>propertyr'rrr#r)r+r.r9<00>rrr r
s<><00><00><1F>  <0B>O<01>s<EFBFBD>O<01> <0B>O<01> <0B>O<01><03>O<01> <0B>O<01> <0B>m<01>C<EFBFBD>m<01> <0B>m<01> <0B><13><13><13> <0B><13> <0B>S<01><03>S<01> <0B>S<01>
2024-12-30 23:20:54 +01:00
<04> rr c<00><><00>eZdZdefd<02>Zd<03>Zdedefd<06>Zd<07>Z ded ed
2024-12-29 04:34:54 +01:00
efd <0B>Z
2024-12-30 23:20:54 +01:00
dd e de de de fd<10>Zdejd e de de fd<12>Zded ed
2024-12-29 04:34:54 +01:00
efd<13>Z
2024-12-30 23:20:54 +01:00
ddeded
edede de dedefd<16>Zy )<19> ImageService<63>appc<00><><00>t<00>|_||_|jjj|_|j <00>yr )r<00>routerrA<00>state<74> IMAGE_SIZES<45> _add_routes)rrAs rrzImageService.__init__Ks4<00><00><19> <0B>$<24>+<2B> <10>$<24>(<28><19>X<EFBFBD>X<EFBFBD>^<5E>^<5E>/<2F>/<2F>$<24><12><06><12><12>rc <00>@<00>dj|jj<00>D<00><01>cgc] \}}|<01>d|<02><00><03><02>c}}<01>}dj|jj<00>D<00><01>cgc]\}}|<01>d|d<00>d|d<00><00><05><02>c}}<01>}d|<03>d|<04><00>Scc}}wcc}}w) z=
2024-12-29 04:34:54 +01:00
Provides a string representation of the class instance.
<09>
z: z: width=<3D>widthz , height=<3D>heightz<Class:ImageService Base Paths:z Image Sizes:
2024-12-30 20:47:04 +01:00
)r5<00>
base_paths<EFBFBD>items<6D> image_sizes)r<00>key<65>value<75>base_paths_str<74>image_sizes_strs rr.zImageService.__str__Us<><00><00><18>9<EFBFBD>9<EFBFBD>(,<2C><0F><0F>(=<3D>(=<3D>(?<3F>@<40>(?<3F>*<2A>#<23>u<EFBFBD>s<EFBFBD>e<EFBFBD>2<EFBFBD>e<EFBFBD>W<EFBFBD><15>(?<3F>@<40><04>.<2E><19>I<EFBFBD>I<EFBFBD><1B>&<26>&<26>,<2C>,<2C>.<2E><05>.<2E>
2024-12-29 04:34:54 +01:00
<EFBFBD><03>U<EFBFBD> <0B>e<EFBFBD>8<EFBFBD>E<EFBFBD>'<27>N<EFBFBD>#<23>9<EFBFBD>U<EFBFBD>8<EFBFBD>_<EFBFBD>,=<3D>><3E>.<2E><05><04>/<2F> +<2B>><3E>*:<3A>/<2F>/<2F>IZ<49> [<5B>[<5B><>A<01><>s <00>B
<EFBFBD>*B
2024-12-30 20:47:04 +01:00
rrc <00><><00>|jjj}||vr(td|<01>dt |j <00><00><00><00><04><00>||S)a
2024-12-29 04:34:54 +01:00
Retrieve the width and height for a given image type from the app state.
Args:
request (Request): FastAPI request object.
image_type (str): The type of the image (e.g., 'thumbnails').
Returns:
dict: A dictionary with 'width' and 'height'.
2024-12-30 20:47:04 +01:00
zInvalid image type: z. Must be one of )rArDrE<00>
ValueError<EFBFBD>list<73>keys)rrrMs r<00>get_image_sizezImageService.get_image_sizedsS<00><00><15><08><08><0E><0E>*<2A>*<2A>+<2B><0F>{<7B>"<22> <13>+<2B>J<EFBFBD><<3C>7H<37><14>{<7B>O_<4F>O_<4F>Oa<4F>Ic<49>Hd<48>e<> g<>g<> <14>Z<EFBFBD> <20> rc<00>`<00>|jjd|jdgt<00><03>y)Nz#/image/{category}/{type}/{filename}<7D>GET)<02>methods<64>response_class)rC<00> add_api_route<74> get_imagerr-s rrFzImageService._add_routesvs+<00><00><06>+<2B>+<2B><1B><1B>(<28><07>><3E>><3E> <11>7<EFBFBD><1E> <1C>rr<00>typerc<00><00>FK<00>|j|||<03>}t|<04>S<00>w)zB
2024-12-29 04:34:54 +01:00
Retrieve an image file from the specified category and type.
2024-12-30 20:47:04 +01:00
<09><02> _resolve_pathr<00>rrr]rr6s rr\zImageService.get_image~s'<00><00><><00><13> <20> <20><18>4<EFBFBD><18>:<3A>)<29> <15>i<EFBFBD> <20> <20><><00>!Nr6rIrJc<00><><00>tjj|j<00>sRt j
2024-12-29 04:34:54 +01:00
|j <00>5}t|j <00>|j||||<03>ddd<00>yt j
2024-12-30 20:47:04 +01:00
|j<00>5}|j|k7s|j|k7r |r|j||||<03> ddd<00>y ddd<00>y#1swYyxYw#1swYyxYw)NTF) r2r(<00>existsr#r <00>openr<00>print<6E> _resize_imagerIrJ)rr6rIrJ<00> overwrite<74>imgs r<00>validate_imagezImageService.validate_image<67>s<><00><00> <0B><17><17><1E><1E><19>0<>0<> 2<> <0A>
2024-12-29 04:34:54 +01:00
<EFBFBD>
<EFBFBD>I<EFBFBD>&<26>&<26>(<28>C<EFBFBD> <09>)<29>
<1C>
<1C><1D><08><16><16><03>Y<EFBFBD><05>v<EFBFBD>7<> )<29> <0F> <0C>z<EFBFBD>z<EFBFBD>9<EFBFBD>*<2A>*<2A>,<2C><03> <09>i<EFBFBD>i<EFBFBD>5<EFBFBD><18>C<EFBFBD>J<EFBFBD>J<EFBFBD>&<26>0<><10> <09><17><17><13>i<EFBFBD><15><06>8<> <10> -<2D>,<2C>0<>-<2D>
<0E> )<29> <0F><>,<2C>
2024-12-30 20:47:04 +01:00
<0E>s<00> *C$<03>6C0<03>$C-<07>0C9ric<00>:<00>|j||ftjj<00>}t j
|j d<01><02>|j|j<00>|j|jdd<04><05>t|j<00>y)NT)<01>exist_ok<6F>WEBP<42>Z)r<00>quality) <0B>resizer <00>
Resampling<EFBFBD>LANCZOSr2<00>makedirsr+<00>saver#r)rf)rrir6rIrJ<00> resized_imgs rrgzImageService._resize_image<67>ss<00><00><13>
2024-12-29 04:34:54 +01:00
<EFBFBD>
2024-12-30 23:20:54 +01:00
<EFBFBD>U<EFBFBD>F<EFBFBD>O<EFBFBD>U<EFBFBD>-=<3D>-=<3D>-E<>-E<>G<>+<2B><04>+<2B>+<2B>i<EFBFBD>!<21>!<21>T<EFBFBD>2<> <0A><12><12>I<EFBFBD>+<2B>+<2B>-<2D> <0A><12><12>I<EFBFBD>0<>0<>6<EFBFBD>R<EFBFBD><12>Q<><07> <09>$<24>$<24>%rc<00><00>FK<00>|j|||<03>}t|<04>S<00>wr r_ras rr\zImageService.get_image<67>s%<00><00><><00><12> <20> <20>(<28>D<EFBFBD>(<28><<3C>)<29> <15>y<EFBFBD> "<22>"<22>rb<00>alt<6C> css_classc<00>4<00>|j|<02>}|xs|jd<01>}|xs|jd<02>}t|||<03><03>} |j| ||d<04><05>d| j<00>d|<04>d<08>}
|r |
d |<05>d<08>z }
|r |
d
|<06>d<08>z }
|r |
d |<07>d<08>z }
|
d z }
|
S) zS
2024-12-29 04:34:54 +01:00
Generate an HTML <img> tag with default sizes if dimensions are not provided.
2024-12-30 23:20:54 +01:00
rIrJr"T)rIrJrhz <img src="/z" alt="<22>"z width="z height="z class="<22>>)rV<00>getr rjr)) rrrrrwrIrJrx<00> default_sizer6<00>tags r<00> image_tagzImageService.image_tag<61>s<><00><00> <16>$<24>$<24>j<EFBFBD>1<>,<2C>
2024-12-29 04:34:54 +01:00
<0F>
2024-12-29 18:12:24 +01:00
.<2E><<3C>#<23>#<23>W<EFBFBD>.<2E>%<25> <11> 1<>\<5C>%<25>%<25>x<EFBFBD>1<>&<26><19>X<EFBFBD>:<3A>QY<51>Z<>)<29><06><15><15>y<EFBFBD>%<25>v<EFBFBD>4<EFBFBD><15>Q<>
2024-12-30 20:47:04 +01:00
<15>i<EFBFBD>2<>2<>3<>7<EFBFBD>3<EFBFBD>%<25>q<EFBFBD>A<>#<23>
2024-12-29 04:34:54 +01:00
<EFBFBD><06>H<EFBFBD>U<EFBFBD>G<EFBFBD>1<EFBFBD>
<1D><1D>3<EFBFBD> <0B><06>I<EFBFBD>f<EFBFBD>X<EFBFBD>Q<EFBFBD>
2024-12-30 23:20:54 +01:00
<1F><1F>3<EFBFBD><0E><06>H<EFBFBD>Y<EFBFBD>K<EFBFBD>q<EFBFBD>
!<21>!<21>3<EFBFBD><05><13>*<2A>#<23> <0C>*r)NNNT)<04>NNN)r:r;r<rrr.r'<00>dictrVrFr\r <00>int<6E>boolrjr rgrr>rrr@r@Is<><00><00><15><07><15> \<01>!<21>c<EFBFBD>!<21>d<EFBFBD>!<21>$<04>!<21>S<EFBFBD>!<21><03>!<21>s<EFBFBD>!<21> <0E>K<EFBFBD> <0E>C<EFBFBD> <0E>S<EFBFBD> <0E>mq<6D> <0E>&<26>e<EFBFBD>k<EFBFBD>k<EFBFBD>&<26>k<EFBFBD>&<26>#<23>&<26>WZ<57>&<26>#<23>S<EFBFBD>#<23><03>#<23>s<EFBFBD>#<23>ae<01>15<31> <0A>s<EFBFBD> <0A><03> <0A>s<EFBFBD> <0A><13> <0A>Z]<5D> <0A><1B> <0A>-0<> <0A>:=<3D> rr@)r2<00>pathlibr<00>fastapir<00>fastapi.responsesrrrr<00>PILr r r@r>rr<00><module>r<>s1<00><01> <09><18>!<21>*<2A>/<2F>/<2F><15><<0E><<0E>~k <0A>k r