From 7bcc102f1b0515b67c5b1486560c4c78578ff112 Mon Sep 17 00:00:00 2001 From: MrWaradana Date: Wed, 4 Feb 2026 17:26:22 +0700 Subject: [PATCH] Refactor attribute access for clarity and robustness, and enhance subprocess command execution by using a list for arguments. --- src/__pycache__/exceptions.cpython-311.pyc | Bin 7492 -> 7437 bytes .../__pycache__/service.cpython-311.pyc | Bin 41581 -> 41416 bytes src/equipment/service.py | 10 +++++----- src/exceptions.py | 5 ++--- src/modules/equipment/Prediksi.py | 12 ++++++------ .../__pycache__/Prediksi.cpython-311.pyc | Bin 50593 -> 50384 bytes src/modules/plant/run.py | 12 ++++++++++-- src/plant_fs_transaction_data/router.py | 2 +- src/plant_fs_transaction_data/service.py | 2 +- src/uploaded_file/router.py | 2 +- 10 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/__pycache__/exceptions.cpython-311.pyc b/src/__pycache__/exceptions.cpython-311.pyc index 7d640202233d987df0160c50a164d1772cc8afb0..ceda2ab59c7eb33cd8786b437229754ef95dd049 100644 GIT binary patch delta 443 zcmX?N)oaDOoR^o20SM$In==hJ^3LJ3_`t-#FrA@<5hMx$H4G_?%YdS*ffxdc*lQTF z;41PMQoFL_lnFtw>HSD9OyvD~g>QCoRjExw%HVlo80VU10x#0Z5?} J4wHFgEdZJoZM^^h delta 440 zcmeCRI%37UoR^o20SFG}@??5%*yaUkOB7P9T2O>B?gfob+1QFhoJ;cl;K_0lp z86TgVlUQ6FA73O5lClF5lNX9vGrCQ_E2hZkJ^8;_FjpK?&Q# WC@sfmyTJYf1CT-|oF-qDu>b&XZghYE diff --git a/src/equipment/__pycache__/service.cpython-311.pyc b/src/equipment/__pycache__/service.cpython-311.pyc index 83de7cf5bdae46315b14395d3c8c9fb7f0539ec5..9559c6373c5bfa7f025fb4521588aaa5e2c1f75d 100644 GIT binary patch delta 1957 zcmZ{kdu&s66vyxB*E=H8 zIZ=WIaiGV?BtG_!Jc1@H_n%>iJPPtiz$y@Qh!YbNBTkkX)J+Ng&TT7{;7#r)=l4C| z-|u&R_nv!4PN+^tROY>Avq9k3rL0%hwGNnDb5)-i<@LG48c^esf|?#(D8rXQ2D&=H ztLe6cGB%THiD_}w8dt4JYGz!`Oj5JrYF3guSt?JA1tDa4j_&3by7NPNrVHtP_9V3+ zuIAsZZg)%b6JtRLyVrm>1vfj(VF7w^*)qdnE}!Rjut|Qp`~y`_dBs6@xb~u{Bx))-x@1%> zq&P?Qg2UP0O{zU=vJd8w`Y=~r?tL|+7Di2lgC0_CTrGC(Q&yN3HBB2-R>i>eMhV9p)qIIT>im_A|lDuFtdEhcOu zP-C$#v8tgcvyX>ETEC~Y&Ch%!zeCuLn;LS&uPKaRf5TiDmajEDA;KkeE~;Mk4e8$! zHWADOWiMJRwsi`RhSb5X0J}nwG1%sBTP>|x!#V@^RutP64=u_`S2p~f7P(A_;LnRH z;ks;Fd`xS)l#m<|4QW$8oN| z$Y`Li$o=CPR^Ys%wu9CdnP$Kc*Xxlk)^&H$KxFugIiK$6dW8>29hh zLgQva0iN&O0xn#-a|6`MXLnA~>Th%1sbaPG>s#}oUViND0TqnnFYo5S1RDCD6qT;n zg-v~)9{PQ-BLrnf`VQF~!Ue)G;W}Z2aFd`s3+1WksF1a!6;f2hF{Ekj?DVr*8rKu( eLu4}uGdU*o)qzfLm%nW`^YAPPa^-s!DgOddYTmK{ delta 2108 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 P(;I()CG~I5>=*wJt1e^E delta 2639 zcmZuz4Nz3q6@K@^8{Qh1z%Jf>Sc7kc z{ER8h)asncgh_NnlQGQ5B#>tl6H}}FEf{UGQ<`>YNR#Pbe%drM8QYmmJJWl1*;rJd|Qu2#D^YeM^3yU3VX58BTbiOjNt z2`6+(Ugd`+IDKy!6M&3+q35vE?#`LA0~+H=nS-0q%~8bNEgvL!l8lZLgWP z*JwZPJ;b+M^fzzie%ZLGIUr2dxR^YpcQAR%>qI$VYOax{Y6O&n1m)U{yw$#QoiJ^7 z?OZKPuNHT%gW%CMJTJn5qtE9n#+=`oGZ18M=?wmTwA`mt^;F92zdpO`F%soQCAjo# z0qlJYI)0cmEE{j={AM=Ukeewtf6}NLW#bX<6rp)aUXJBB*`yj@;AHbz;UY_jOSzVWpTVth zqn91t=A?PqoK}@B8T7z4)d-8nn(hDVs7*C2>9)Xe)tZ~)TWlBpzgd*nVO_FhLp~ny zRfJmzw;2R@`ZmhHVz6LNuq)e}2zA8e2t1s;;TNj83PYpib;T&2!69J; z7j_SzltjoRVJ00j>G}b3ZZxUY?u-r*G6N@H35xp$9m6DdnG2FSMPznMZP3ALf3EKQ z=M^8}Azkf;TVpk4F-heI9ieZGRYIRp@GV(tvY@hAgC3oc8+5?qHD0|+1|6LukajP0 zz3yfOc=6RDNv9H4Vi-HN4bFt@@P}#p`BN|ae3!$^cF!ie@$t#Fq+PWPyD>cY__ctwFvoLTrw4r6+RWbE zr%9!@yP8am6qoI}C-cDh;iUGul(&asb%U16`^iVziRs zw0q0Edy7Wiz9#gW+bXyl8&@!#u#`4daTApUlJ{Oax zbgLLnlje2oXD&c?OWa(AsXZXfZF04j2{-jR#@s9u8FMorF!>$Hzq>?OFoZ(rS18n% zzqdD55;@!(g@)@VtQcb89_q#T+8}*BpM0);c6~L`V*s=c+!Nm^&TK;sS`;B*lwTXR SvI^AO6=|Sx?TLv!{C@%Q(yaji diff --git a/src/modules/plant/run.py b/src/modules/plant/run.py index 0ade782..2180cf7 100644 --- a/src/modules/plant/run.py +++ b/src/modules/plant/run.py @@ -276,8 +276,16 @@ else: # Mapping dari kolom Excel ke nama kolom database sesuai gambar 2 libreoffice_path = "soffice" # Sesuaikan dengan lokasi di Linux/Windows -command = f'"{libreoffice_path}" --headless --convert-to xlsx {file_ref} --outdir {ROOT_DIR}/hasil' -subprocess.run(command, shell=True, check=True) +command = [ + libreoffice_path, + "--headless", + "--convert-to", + "xlsx", + file_ref, + "--outdir", + f"{ROOT_DIR}/hasil", +] +subprocess.run(command, check=True) print("recalculate OK") diff --git a/src/plant_fs_transaction_data/router.py b/src/plant_fs_transaction_data/router.py index ec735d8..c67c34c 100644 --- a/src/plant_fs_transaction_data/router.py +++ b/src/plant_fs_transaction_data/router.py @@ -58,7 +58,7 @@ async def import_fs_charts( updated, missing = await update_fs_charts_from_matrix( db_session=db_session, payload=payload, - updated_by=getattr(current_user, "user_id", None) if current_user else None, + updated_by=current_user.user_id if current_user else None, ) msg = "Data imported successfully." diff --git a/src/plant_fs_transaction_data/service.py b/src/plant_fs_transaction_data/service.py index 16ce785..957c0c4 100644 --- a/src/plant_fs_transaction_data/service.py +++ b/src/plant_fs_transaction_data/service.py @@ -21,7 +21,7 @@ def _resolve_user_id(user: Optional[CurrentUser]) -> Optional[str]: if user is None: return None # UserBase guarantees user_id - return getattr(user, "user_id", None) + return user.user_id async def get( diff --git a/src/uploaded_file/router.py b/src/uploaded_file/router.py index 2c81054..53d9625 100644 --- a/src/uploaded_file/router.py +++ b/src/uploaded_file/router.py @@ -137,7 +137,7 @@ async def delete_uploaded_file(db_session: DbSession, uploaded_file_id: str): ) # Attempt to delete the file on disk if a file_url is present - file_url = getattr(uploaded_file, "file_url", None) + file_url = uploaded_file.file_url if file_url: try: # file_url is stored like "/uploads//"