import os import shutil from flask import flash from flask_login import current_user from sqlalchemy.exc import ( IntegrityError, InvalidRequestError, DataError, InterfaceError, DatabaseError, ) from app import db from usermodel import User from distribusimodel import Distribusis from statuspengguna.helper import UserHelper from distribusiselector import SelectCurrentDistribusi from forms.uploadform import UploadForm def UploadNewDistribusi(uploadfolder): uploadform = UploadForm() if uploadform.validate_on_submit(): user = User.query.filter_by(email=current_user.email).first() try: newdistribusi = Distribusis( distribusiname=uploadform.sitename.data, userid=user.id, term=uploadform.term.data, course=uploadform.course.data, year=uploadform.academicyear.data, tags=uploadform.tags.data, ) user.currentdistribusi = uploadform.sitename.data db.session.add(newdistribusi) db.session.commit() except IntegrityError: db.session.rollback() uploadform.sitename.errors.append( "distribusi name already exists!" ) flash("distribusi name already exists!", "warning") return uploadform except (InvalidRequestError, DataError, InterfaceError, DatabaseError): db.session.rollback() uploadform.sitename.errors.append("Something went wrong!") flash("Something went wrong!", "danger") return uploadform SelectCurrentDistribusi(newdistribusi.distribusiname) zipfilename = "{}.zip".format(newdistribusi.distribusiname) zipfile = uploadform.zipfile.data zipfile.save(os.path.join(uploadfolder, zipfilename)) newuserfolder = os.path.join("stash", newdistribusi.distribusiname) if not os.path.exists(newuserfolder): os.mkdir(newuserfolder) copyzipfile = os.path.join(uploadfolder, zipfilename) shutil.copy(copyzipfile, newuserfolder) os.remove(os.path.join(uploadfolder, zipfilename)) return uploadform def UploadUpdatedFiles(uploadfolder): uploadform = UploadForm() if uploadform.validate_on_submit(): try: current_distribusi = UserHelper.current_distribusi() distribusi = Distribusis.query.filter_by( distribusiname=current_distribusi ).first() distribusi.term = uploadform.term.data distribusi.course = uploadform.course.data distribusi.year = uploadform.academicyear.data distribusi.tags = uploadform.tags.data distribusi.visible = False db.session.commit() except (InvalidRequestError, DataError, InterfaceError, DatabaseError): db.session.rollback() uploadform.sitename.errors.append("Something went wrong!") zipfilename = "{}.zip".format(distribusi.distribusiname) zipfile = uploadform.zipfile.data zipfile.save(os.path.join(uploadfolder, zipfilename)) newuserfolder = os.path.join("stash", distribusi.distribusiname) shutil.rmtree(newuserfolder) os.mkdir(newuserfolder) copyzipfile = os.path.join(uploadfolder, zipfilename) shutil.copy(copyzipfile, newuserfolder) os.remove(os.path.join(uploadfolder, zipfilename)) return uploadform