From 068899798e348af5a298903a1c6304e91732931d Mon Sep 17 00:00:00 2001 From: nmemmert <67961292+nmemmert@users.noreply.github.com> Date: Thu, 6 Nov 2025 14:22:43 -0500 Subject: [PATCH] Update --- README.md | 1 + __pycache__/pdf_renamer.cpython-313.pyc | Bin 64595 -> 64931 bytes pdf_renamer.py | 3 +- ubuntu-install.sh | 53 ++++++++++++++++++++---- 4 files changed, 48 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ad3f719..725df5c 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,7 @@ Users can choose their preferred login method on the login page. - **Processing Requirements**: All five pieces of student information must be present for the PDF to be processed - **Error Handling**: Files without the required information or with extraction errors will be skipped with detailed error messages - **Security**: All processing happens server-side with temporary file storage +- **File Storage**: Processed ZIP files are stored in the `processed/` folder within the application directory - **Limits**: Maximum upload size is limited to 500MB - **Output**: Creates a structured folder hierarchy within the downloaded ZIP (Episode/School/Grade/Gender) diff --git a/__pycache__/pdf_renamer.cpython-313.pyc b/__pycache__/pdf_renamer.cpython-313.pyc index 48d88f8c42d361ba2c1ab977f829b6d5f1df9aa9..6778704503cc25a76b78c5018afe21ce75d16d3a 100644 GIT binary patch delta 5331 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 B!JGg9 delta 4836 zcmbVPX>eQB71p(6d66y0F}CGhjmBBFd5iown2RqjU;Mq3}Xk(lTZEQI{LFO48s$StR4X$>Sr((( zW7JG#d5l^bqh={r#HcHx)Y5DvCq^wBw5=fPjUr+l$_LB)x3cfkxr6q>QpGk{Vl^mv z^+qLMDX0@lVM`)ZDn5$c;-t+w3SN*MDyWS*snq2gqM?S? z7=KNSzjgt?Eyk}`8ft~o*pi?$E#SAu_{}l>bqn|%QGP{Blt0*@w8kZ3o^(bftJ;)y zvX#KLNVa1M*{-N;MdyN3yOxmbj!AYeknCAPvL`0lyFhaN5|X_!$-Zbz$j=Q+NUo1c zuGzTY%uP#3_6_DKn_CAA26v`xfZI7|8C#Sqm8~racEgw$6OL{8e&Qdj>AQDs+tJhK z+PGs|--iD1YvvQFq5}Pyx0vgx2%!QmXC4+-e02G$#9c%v4_{pVsL@=_ygEFS(<|EX zZ#hMI3K8`533tF1aEC$~_*`pXm}uT`R&JY^j>xmpw+S4HFvx52&j5QEu3^~Aa4o@u zMi}C?n?N^DxI-i3^+6+T>~=eR+0t4VC*CCe4{jrvF}#^mc+xxP{m~lqzp~tRvSto_ zMP_v5I`A`_MW|R@*p2UHm!P%4j?WYp;dovSzF(Mv+Y739#ylk_rGL`XC7gs&Hu%+E z)x$m#_#SrT@0KRJq^bAvZ(U?U9xN{&HztF@arinD4d5lIS^T`T1k+0__+h~+Y3l7o zCgP!%cH&q0CMFueM<$M=QWUv`Yf-?g1-W?V%PClHtKJ<8+@ci6?w zp2oiyv)z`Gw|9N%{CL2=U__qpBK088^Ce5B8Gu;#QgRw8a@qK_JyI9ZBz0qjt%R0f_z5Xdpb&Yzw8XP0R^LVMMMX2H0m5&)a zWnefXx^T%E@~O!gP)8$!g~Q}9!%_Mb88R|;@kSWH(wY)8e+a-z+*ngAR-sn&sOUl4 z>Wz*3m_QSOZrbPf`1B;z13veJ1}#iWoB~fs)02nYK}}M7S$sX>>XshX)H6oiTD_;T3kJZ~}YrzNbyq}E1? zOh;>-*o(f_wPFB&-0Cv(OocsYZo4t-30^))pqoJ((+=}+4gerOMIifLOdQ$>}V0954$?cg@S5lk9Y_l=xoZC zFGm~ewlj1xT!$ZYmQDBYlHUb6vgL%7GfYky+48b6Wt+&7m30TFSmQK92Z3&$45)5; zWX>?9n<>WNZTCRG$Yu0a;j3$)YFl(sfUDGYd{IaNBRE&bgg_lfF+4PI*G( zM0kS@WEETFSs%+|O!64GOdF8l@1vE&D9?h=nEDAp zyo;G~k>PWKKcUC{qL{!vHnSTu)8(D4H!%Nvu1NhuXzc`BdYNe?vW790^Ky__FfOo%)1}+#>;YlKubrJZr*fUc^qsujOn<&C}XPomVXg>0qCxFKXJ#@ltSbJzCO|F4MTZK3j z{>kBY60YKeKpsN@gM}f5frkPl6Hw|mkTPr}SeSI(;#MbUibl@gLfm8c>dij#WAiPK zr_ZqZCL+=REJDj{Ujb7V>O%*g%J4JXH`_~k56?a7a6^XNk_}Yud(K6yZJ7b-h{rR zrTv$9na>BA8Il-M7z_k@>Ii7m^Qy}o0@+`45fie~c}5@1*d6ftsnu0Gr@z$>0^d41 zAWYbL?9@8;ii$pskFrp=yGHyzSz(-3N5Xtld8tz&k0{dL8Gh4Jk8cof;?CpyMMC(w z<1d)Y*h4*OObbb2IhoSg^LWPAn$WFAFIgYvy5dHv;c3}8%XE#OhNa4EmG~N zOx(fHgDXz0-XtT^#C!ROmGbHu0^Lk6isn{f4^yPmTq=RmyF zcj(MqbM>`Eru48pNIw@R8<;O49ox@2s4Pa$ZK;(ZOn{89P|}m#0S|Xd5PYQmA-;aj zM)p2B_k>s`Q=80(%B*JLvw!KHX2W_S_4z~)WD9&%bRwOeMt132M+Sj!s~fp1n`sp^ z&EGrnw?VS%pYm}fK#-Up(HDB~77~~-{3qF9D?K?qH~n(%%3Ce?-Iu1wze_KDF6zGM zABi8#yV5^wS2eFjMQ0CAj_@EDo%DLYrFQQ|4n8L^aBn17P4jSo{}8YQ!N9vl;diI{{yKB}@sr>D6=Q$SuNyx~XWp zmv|H{ncN%rEa{A#B?~O*))D_iKweR1ZjmuKzDz@`k-m?Ln9qNB{vTfrcd(j_0DoLYdXYb=U|K%dE##w~2sG5R$Q52YUIdeKl2{{5$Vf=MN%{{gGrcY*)_ diff --git a/pdf_renamer.py b/pdf_renamer.py index d6b6007..f52a563 100644 --- a/pdf_renamer.py +++ b/pdf_renamer.py @@ -11,7 +11,8 @@ from PyPDF2 import PdfReader from authlib.integrations.flask_client import OAuth app = Flask(__name__) -app.config['UPLOAD_FOLDER'] = tempfile.mkdtemp() +app.config['UPLOAD_FOLDER'] = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'processed') +os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) app.config['MAX_CONTENT_LENGTH'] = 500 * 1024 * 1024 # 500MB limit app.secret_key = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production') diff --git a/ubuntu-install.sh b/ubuntu-install.sh index bff6654..df264a2 100644 --- a/ubuntu-install.sh +++ b/ubuntu-install.sh @@ -7,6 +7,21 @@ set -e echo "Starting installation of PDF Renamer Flask App..." +# Check if already installed +if systemctl is-active --quiet pdf-renamer 2>/dev/null; then + echo "WARNING: PDF Renamer service is already running." + echo "This will reinstall/update the application." + echo "Press Ctrl+C to cancel or Enter to continue..." + read -r || exit 1 +fi + +# Check if running with sudo +if [ "$EUID" -ne 0 ]; then + echo "ERROR: This script must be run with sudo privileges" + echo "Usage: sudo ./ubuntu-install.sh" + exit 1 +fi + # Update system packages echo "Updating system packages..." sudo apt update && sudo apt upgrade -y @@ -17,8 +32,25 @@ sudo apt install -y python3 python3-pip python3-venv nginx git # Clone the repository (replace with your actual repo URL if different) echo "Cloning the repository..." -git clone https://gitlab.com/trbc-dev/pdf-rename-sort.git -cd pdf-rename-sort +# Check if we're already in the repository directory +if [ -d ".git" ]; then + echo "Already in repository directory, skipping clone..." +else + # Try HTTPS first, fallback to SSH if available + if git clone https://gitlab.com/trbc-dev/pdf-rename-sort.git 2>/dev/null; then + echo "Cloned via HTTPS" + cd pdf-rename-sort + elif git clone git@gitlab.com:trbc-dev/pdf-rename-sort.git 2>/dev/null; then + echo "Cloned via SSH" + cd pdf-rename-sort + else + echo "ERROR: Could not clone repository. Please check:" + echo "1. Repository URL is correct" + echo "2. SSH keys are configured (for SSH clone)" + echo "3. Internet connection is working" + exit 1 + fi +fi # Create virtual environment and install dependencies echo "Setting up Python virtual environment..." @@ -34,6 +66,10 @@ mkdir -p static # Copy logo if it exists in repo, otherwise you'll need to add it # cp path/to/trbc-logo-full.png static/ # Uncomment and adjust if needed +# Get the current user (fallback to ubuntu if not detected) +CURRENT_USER=${USER:-ubuntu} +echo "Installing for user: $CURRENT_USER" + # Create systemd service file echo "Creating systemd service..." sudo tee /etc/systemd/system/pdf-renamer.service > /dev/null <