distribusi-verse/verse/upload.py

94 lines
3.3 KiB
Python

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 CurrentDistribusi
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 (InvalidRequestError, DataError, InterfaceError, DatabaseError):
db.session.rollback()
uploadform.sitename.errors.append("Something went wrong!")
flash("Something went wrong!", "danger")
except IntegrityError:
db.session.rollback()
uploadform.sitename.errors.append(
"distribusi name already exists!"
)
flash("distribusi name already exists!", "warning")
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 = CurrentDistribusi()
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
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