From fee79c6ec7cb5ea186d067cc3740754c8d907cf5 Mon Sep 17 00:00:00 2001 From: Kobe Date: Fri, 30 May 2025 12:57:25 +0200 Subject: [PATCH] Documentation in room files py --- routes/__pycache__/room_files.cpython-313.pyc | Bin 38323 -> 42402 bytes routes/room_files.py | 192 ++++++++++++++++++ 2 files changed, 192 insertions(+) diff --git a/routes/__pycache__/room_files.cpython-313.pyc b/routes/__pycache__/room_files.cpython-313.pyc index e79742c6852fe7fb29aef3b82803ca7fca53ea6e..95da95da0931c37753a1ab2b1a18947cf3ab9a9b 100644 GIT binary patch delta 6837 zcmb_geQ+Da6~EOfaF#Vj;zTJ~f z=j5CrP$j<8?!Nc-{odEURpEKhldpT~J_-aR0Y1KO?3n)7y^qv2=Wp=}!Z|?}h#(`` zGl=3I;)#nyjC+YU?jyc<6{(8*i666daj-gGLu%p@k@(mT zyQKpro>tOH#x)6=U_GM}zGPq{o0!ImfwP&Et|UQx7f$LY()M5$bmEh0N;Ua65R}I{ znNreP&Qb^DN)BysLQk9OylHgfQP8P`PMgi7ICcZW?z5U2Fj*RLSY6mK6#|w6G)$OD6l2;lAXlMV zk_OcUJfJFOmZ-)~X%qKQ$q1aKYy@s*hsHQDttRp_24m4vNtNIP0WpAuvvDW!J<2j2 zwvK`^)hRqSsi-HY&yYIRyZ>Rq3xxt!Q(HX&rWD*3zj~KlZvS@Pl4(Qog|IJ zILgABMKyD;nu>AoO2W)4Da#!e2=IeWAm$}g2lGQD!=JT2tC|WE%NcpVq|I)rV0xeT z)NOXl26CQ(05R8O5B&AVuK;zrnys4U_@t3*gK?G6hb=@L}07t|f64_KNM~ z@pqsf0|b^GY>`t*BPuvPUE(oJvJ>}JHfpnWDswpZk|_3{3hsjg#^`{@qVRD@SW#E_ zzCVKUxqnOhAvR{PX6=^967aN%!K4JzkEOMdQ4`vvmT<-s7{tPK1rE!|B@|3|tWO*V z%*+fd3TGT*44j7=!NIZY8fOuPqks(9huHU$2`Z^)OL4Ktgs!K+cqFSbFgAb+a~B>^ zSe4PiNaTcOsM08Xwfb~$kXdHfvP_du9in&Fyq(XzTrrHoy$>dZ`kPcOyA$?d(E9wh~?L`T0M-5xx`!1Z!) zMR0pP{kF82&z+U_r&NVGk%uUloRy@B1;`bvc4Am&WvU0N5M(PX8c^M*RbvS*&RlZX zFpKq)AO?rYx8YRKu(%ClzB?GrvAaY&YI}oIOx+f)?%zP&VBxOXxYr*^`{hWwnqH`H zqKgeR^o{yqv008#9E_kAn2pdw!M$QD%$y1K0d@75Z={FbnhVptCmYW;Y(j0cyI~D# zr!SmrqLU3r#K>3`z3@q~HyPrG! z+7fwb60_K4kx`O1NnG&5aK4@^pma39e zxNGG)goXK0R6BqbKNg}`P^$#f9bS@0N??|lvysL9hK=a zKn~?t-C>fr$Jv+V!~Fo%Uob`ata6Ew0pPdS!5Af5Ks%ul!kP*=cUgTd?2JZGpvZuV zhy!hcybWS$m$llAGI)vpwCk^dT7YZ3#?$0uj+w51u)grlrdppE8k6WN5cxH$Iw;;6 zLtz@~p;ki{!p3?PnbTv|Ko?o`6=3cLmFr_2q*AQ1NC0{9hJwCB9C4 z4FLbV^=$~^m$n^3flh|AvlPV4w}7*bsz>V!BR7mn`P@@*DDp@v#W7gP*5dyX&pnp7 zD-kh38(5}(3YQh0x$%BafG{jx(Mm|b5-P;^|HAJJ$ncLg53X5VSN0GVj_j~}B?x0a zxn2&+aATy02RGy!bB|S$cQ%_cHE2*vC4ryTtb=0hl6H^!`GVST!F*@yfnlp)l(W}1 zfJE;b90s?&IrtC?{D?t)6&}!QGy~KqciDFj&Ui)tn2%n}grJNEXwS$tKJJ?fdE{z( zYNRt?lRGELrGAe&6DonD@Ujz%x%(QBL3kRLJk9MmS{jy#mP)yuRZOrVWFXf;qR)-2 z5{F`bif6*~4Dr$TMt&3c1H;+mz*+cetm&H1m0%WVEv|5NUi~fiw~}1`_0y|?qYm)OfzG_UQFAs-k zTH7C}*?CwHloe28yd#+2sD(udc;DF-q91BUd_I_s(kC`F(z}i~p;~Gl-;`gG`yRjK zu%4)_=Vd8+4VHs!n1UPAQbAXXf}8AW>o9t`Em|T*A}7H6WF8))F%P+o4Nk*jh>nvM z`quHE2j-bYzg)3sv~XeOHPP>ZPSXRO=1aQOY5qhX7Dd^^J54XlM(Aw|jr7(`r|5&( zGrFUQ|QFq%SY!vdh>{Ne~@= zOkjq!epk>YAVgUw!aD9HH@~H6>|%*4ydyn_$T2_<<$0VaDDWi1{wE82sPKl7_4-A? zEduT*<}KXQ^TVQ77CCMopZ#EdA4HkRF+VlmNXHf;KHz|vxrMnBZCI>3u=MaJl|9tKle<|wdC&6YfOiEy=Ci>9HBR+AgYGfxg?NQoz>NJdMDs>9p#_=0C()#^M_esTqF7Vz$I>v|&XqL$E|6L%DdqG4 zM~S0Kau)hWJ)K(kEbX)mCvEu>!5ec6yesTai<-Xv@EpYa?$g^)U>C!lv>e!4_{!J6 z>XEko(LX+()Dz?51@9xfP)9#l2L20%3A9BKA#~Bxh`fK_D4;P!N6)TNFIEW+t&ev- zTm9nEH-quTK(R^)v@X_MstPxGE(j|xbxUZ=rRF-c_Y#)SVRWf^1?nia3!eJlqtKfu zbRpb%UOj*N1^9;cyp8HFdTu~%ABln|$R2x(UKkcL^jEZQU|ifyhtIV&??-5tz0?OwY@!(V(C^T;$Zj-J5qTplvWem;w&l%h zQL3^w0BdZb7)K8EyUu6NPjU74a`oF$yS>#urbIg^vE|XWP_IKhzy-tNG(Glcd$&YDuCI17~V&<^` delta 2534 zcmZuxYitx%6uxI>_TAatc6WC6)fWh53#AXJfR)yY0i2p`VOmgH&?o`|Ry!-DMro@t zh4L`U!NiCXL@Frpl`&C+QPgNcP%Ii15_}M2j0SZm{?~J-?RI|jW^(VG`fJ9URVu!(GsD{t4EToo}ZY;;%K zM?4Xn6TC>kr=hjM8V>MjkX;M}F%upnU}<4pZ~+HY8~7;@G6xDZ$;G-oI>Ylyk4UAC zM|Y_Z$5ADQ567Cs1nq?TRXiK36j`?yVK{*`!!c}7Be+;qA&G5jxhvJ-UVS5e(i_2H zbsaEVwU?qJew5-VNMl*NJW<@)OiAt0;i`x6w;GTIcUq^*dl*O|h zZDw-KK9HAlvd^ZDvdH{n?KUFsaM2ft9vqOduWO-ge)4=&&^`Eh*IdDy#Xajwgp3E@ z=~M8d^_S$0oF+C!lQF;AaJQQjU%mfVkRRjde-o&Ad9zodyLw{#_wq>&yiXeQx4r+t zBXp7Gr5*tJBaS8}!t8Gm%DDs&>vrj^+l__2v4aCXe0WI0#vONvv`OWo(8?hdKittM z^3n?TEBMF`1uJ@0DvqY!PVnO4-g42`A>p;5D1J*j46AomfgjiJtV#s3#!gaX^wHFw z5sWq5I6xD&^j(pE=9*SIG~xaSi_F}k?~0_0(ovPR?V8Z#Mtzqi3brm4L;_U&dRL<; z*{YhU^u2V=We20UwSO6Y+3Cmk`s3in(f%G6qoQ8O|J&ffT3*lt^`!gNfo7jC`x+Sc zjO$65gM%wUW>hM<-^N9G(SP8C`S_FP#fjEx9qJK9TSE%lha#BTQ;fmgGwl1~&86+G zBIBQN%t;g=SI{1gw~I7z$e$dCYa=9Qxjpe!Rs zdRXpW>K97{fS*}AE;&|ScO{&7e%?v%`&}2p+MxVPL1NH1CMhvtlogH52dEu$OVBu0 z0B|RaxkV_p{P@hVRJ00G*F`3T`P67hWLg{W<72HWWVj3R$n9WBe8VbXLg)vGUV!MR z(r{+WnRTP|25lE1bWJFN+4+D~6hO8$2OCFHD{q2^Jkm@E*;XGosOG)h`}P)_s>!BW z0IR2x-$D_5!`e#1(rOa6Phram;~Umu{QH$uGy>^-q9#is)2hVc/files', methods=['GET']) @login_required def list_room_files(room_id): + """ + List all files in a room's directory. + + Args: + room_id (int): ID of the room to list files from + + Returns: + JSON response containing list of files with their metadata + """ room = Room.query.get_or_404(room_id) if not user_has_permission(room, 'can_view'): abort(403) @@ -170,6 +240,16 @@ def upload_room_file(room_id): @room_files_bp.route('//files/', methods=['GET']) @login_required def download_room_file(room_id, filename): + """ + Download a file from a room. + + Args: + room_id (int): ID of the room containing the file + filename (str): Name of the file to download + + Returns: + File download response or error message + """ room = Room.query.get_or_404(room_id) if not user_has_permission(room, 'can_download'): abort(403) @@ -187,6 +267,16 @@ def download_room_file(room_id, filename): @room_files_bp.route('//files/', methods=['DELETE']) @login_required def delete_file(room_id, filename): + """ + Delete a file from a room (moves to trash). + + Args: + room_id (int): ID of the room containing the file + filename (str): Name of the file to delete + + Returns: + JSON response indicating success or error + """ room = Room.query.get_or_404(room_id) if not user_has_permission(room, 'can_delete'): abort(403) @@ -209,6 +299,15 @@ def delete_file(room_id, filename): @room_files_bp.route('//folders', methods=['POST']) @login_required def create_room_folder(room_id): + """ + Create a new folder in a room. + + Args: + room_id (int): ID of the room to create folder in + + Returns: + JSON response indicating success or error + """ room = Room.query.get_or_404(room_id) if not user_has_permission(room, 'can_upload'): abort(403) @@ -271,6 +370,15 @@ def create_room_folder(room_id): @room_files_bp.route('//rename', methods=['POST']) @login_required def rename_room_file(room_id): + """ + Rename a file or folder in a room. + + Args: + room_id (int): ID of the room containing the file/folder + + Returns: + JSON response indicating success or error + """ room = Room.query.get_or_404(room_id) # Allow rename if user can upload or delete if not (user_has_permission(room, 'can_upload') or user_has_permission(room, 'can_delete')): @@ -326,6 +434,15 @@ def rename_room_file(room_id): @room_files_bp.route('//download-zip', methods=['POST']) @login_required def download_zip(room_id): + """ + Download multiple files as a zip archive. + + Args: + room_id (int): ID of the room containing the files + + Returns: + ZIP file download response + """ room = Room.query.get_or_404(room_id) if not user_has_permission(room, 'can_view'): abort(403) @@ -356,6 +473,15 @@ def download_zip(room_id): @room_files_bp.route('//search', methods=['GET']) @login_required def search_room_files(room_id): + """ + Search for files in a room by name. + + Args: + room_id (int): ID of the room to search in + + Returns: + JSON response containing matching files + """ room = Room.query.get_or_404(room_id) if not user_has_permission(room, 'can_view'): abort(403) @@ -379,6 +505,15 @@ def search_room_files(room_id): @room_files_bp.route('//move', methods=['POST']) @login_required def move_room_file(room_id): + """ + Move a file or folder to a different location within a room. + + Args: + room_id (int): ID of the room containing the file/folder + + Returns: + JSON response indicating success or error + """ room = Room.query.get_or_404(room_id) if not user_has_permission(room, 'can_move'): abort(403) @@ -424,6 +559,15 @@ def move_room_file(room_id): @room_files_bp.route('//folders', methods=['GET']) @login_required def list_room_folders(room_id): + """ + List all folders in a room. + + Args: + room_id (int): ID of the room to list folders from + + Returns: + JSON response containing list of folder paths + """ room = Room.query.get_or_404(room_id) if not user_has_permission(room, 'can_view'): abort(403) @@ -446,6 +590,15 @@ def list_room_folders(room_id): @room_files_bp.route('//star', methods=['POST']) @login_required def toggle_star(room_id): + """ + Toggle the starred status of a file. + + Args: + room_id (int): ID of the room containing the file + + Returns: + JSON response indicating success and new starred status + """ room = Room.query.get_or_404(room_id) if not user_has_permission(room, 'can_view'): abort(403) @@ -479,6 +632,15 @@ def toggle_star(room_id): @room_files_bp.route('//starred', methods=['GET']) @login_required def get_starred_files(room_id): + """ + Get all starred files in a room. + + Args: + room_id (int): ID of the room to get starred files from + + Returns: + JSON response containing list of starred files + """ room = Room.query.get_or_404(room_id) if not user_has_permission(room, 'can_view'): abort(403) @@ -512,6 +674,12 @@ def get_starred_files(room_id): @room_files_bp.route('/starred', methods=['GET']) @login_required def get_all_starred_files(): + """ + Get all starred files across all accessible rooms. + + Returns: + JSON response containing list of all starred files + """ # Get all rooms the user has access to if current_user.is_admin: rooms = Room.query.all() @@ -555,6 +723,12 @@ def get_all_starred_files(): @room_files_bp.route('/trash', methods=['GET']) @login_required def get_trash_files(): + """ + Get all deleted files from accessible rooms. + + Returns: + JSON response containing list of deleted files + """ # Get all rooms the user has access to if current_user.is_admin: rooms = Room.query.all() @@ -614,6 +788,15 @@ def get_trash_files(): @room_files_bp.route('//restore', methods=['POST']) @login_required def restore_file(room_id): + """ + Restore a deleted file from trash. + + Args: + room_id (int): ID of the room containing the deleted file + + Returns: + JSON response indicating success or error + """ room = Room.query.get_or_404(room_id) # Check for delete permission instead of view permission if not user_has_permission(room, 'can_delete'): @@ -644,6 +827,15 @@ def restore_file(room_id): @room_files_bp.route('//delete-permanent', methods=['POST']) @login_required def delete_permanent(room_id): + """ + Permanently delete files from trash (admin only). + + Args: + room_id (int): ID of the room containing the files to delete + + Returns: + JSON response indicating success or error + """ # Only allow admin users to permanently delete files if not current_user.is_admin: abort(403)