import os import shutil from flask import flash from flask_login import current_user from sqlalchemy.exc import (DatabaseError, DataError, IntegrityError, InterfaceError, InvalidRequestError) from app import db from distribusiselector import SelectCurrentDistribusi from forms.uploadform import UploadForm from models.distribusimodel import Distribusis from models.usermodel import User from statuspengguna.helper import UserHelper 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) if os.path.exists(newuserfolder): 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