forked from crunk/distribusi-verse
crunk
3 years ago
8 changed files with 176 additions and 75 deletions
@ -0,0 +1,136 @@ |
|||
import os |
|||
import zipfile |
|||
from flask_login import current_user |
|||
from flask import ( |
|||
render_template, |
|||
redirect, |
|||
url_for, |
|||
) |
|||
from sqlalchemy.exc import ( |
|||
IntegrityError, |
|||
InvalidRequestError, |
|||
DataError, |
|||
InterfaceError, |
|||
DatabaseError, |
|||
) |
|||
from app import db |
|||
|
|||
from usermodel import User |
|||
from distribusimodel import Distribusis |
|||
|
|||
# UserPengguna |
|||
from statuspengguna.helper import ( |
|||
IsZipUploaded, |
|||
IsCssSelected, |
|||
CurrentDistribusi, |
|||
IsDistribusiLive, |
|||
DistribusiLimitReached, |
|||
) |
|||
|
|||
from distribusiselector import SelectorVisible |
|||
|
|||
# Forms! |
|||
from forms.uploadform import UploadForm |
|||
from forms.distribusiform import DistribusiForm |
|||
from forms.themeform import ThemeForm |
|||
from forms.publicthemeform import PublicThemeForm |
|||
from forms.selectorform import SelectorForm |
|||
|
|||
from distribusisinfo import DistribusisInfo |
|||
|
|||
# Tada! |
|||
from distribusi.cli import build_argparser |
|||
from distribusi.distribusi import distribusify |
|||
|
|||
|
|||
def DistribusiWorkflow(): |
|||
distribusiform = DistribusiForm() |
|||
current_distribusi = CurrentDistribusi() |
|||
user = User.query.filter_by(email=current_user.email).first() |
|||
distribusi = Distribusis.query.filter_by( |
|||
distribusiname=current_distribusi |
|||
).first() |
|||
|
|||
if distribusiform.validate_on_submit(): |
|||
userfolder = os.path.join("stash", distribusi.distribusiname) |
|||
cssfile = GetCssFile(distribusi) |
|||
UnzipDistribusiFiles(distribusi, userfolder) |
|||
RunDistribusi(userfolder, cssfile) |
|||
SetDistribusiToVisible(distribusi, user) |
|||
DeleteCssFile(cssfile) |
|||
return redirect(url_for("index")) |
|||
|
|||
return RenderDistribusiTemplate(distribusiform, current_distribusi) |
|||
|
|||
|
|||
def UnzipDistribusiFiles(distribusi, userfolder): |
|||
zipfilename = "{}.zip".format(distribusi.distribusiname) |
|||
unzipfile = os.path.join(userfolder, zipfilename) |
|||
|
|||
if os.path.exists(unzipfile): |
|||
with zipfile.ZipFile(unzipfile, "r") as zip_ref: |
|||
zip_ref.extractall(userfolder) |
|||
# after extracting all files remove zip file. |
|||
if os.path.exists(unzipfile): |
|||
os.remove(os.path.join(userfolder, zipfilename)) |
|||
|
|||
|
|||
def GetCssFile(distribusi): |
|||
cssfile = "" |
|||
cssfolder = os.path.join( |
|||
"themes/userthemes", distribusi.distribusiname |
|||
) |
|||
for filename in os.listdir(cssfolder): |
|||
if filename.endswith(".css"): |
|||
cssfile = os.path.join(cssfolder, filename) |
|||
return cssfile |
|||
|
|||
|
|||
def RunDistribusi(userfolder, cssfile): |
|||
parser = build_argparser() |
|||
args = parser.parse_args(["-s", cssfile]) |
|||
distribusify(args, userfolder) |
|||
|
|||
|
|||
def SetDistribusiToVisible(distribusi, user): |
|||
try: |
|||
distribusi.visible = True |
|||
user.currentdistribusi = None |
|||
db.session.commit() |
|||
except (InvalidRequestError, DataError, InterfaceError, DatabaseError): |
|||
db.session.rollback() |
|||
distribusiform.submit.errors.append("Unknown error occured!") |
|||
|
|||
|
|||
def DeleteCssFile(cssfile): |
|||
if os.path.exists(cssfile): |
|||
os.remove(cssfile) |
|||
|
|||
|
|||
def RenderDistribusiTemplate(distribusiform, current_distribusi): |
|||
uploadform = UploadForm() |
|||
themeform = ThemeForm() |
|||
publicthemeform = PublicThemeForm() |
|||
publicthemeform.publicthemes.choices = DistribusisInfo.publicthemes() |
|||
selectorform = SelectorForm() |
|||
selectorform.distribusis.choices = DistribusisInfo.userdistribusinames() |
|||
selectorvisible = SelectorVisible() |
|||
|
|||
files_uploaded = IsZipUploaded(current_distribusi) |
|||
distribusi_live = IsDistribusiLive(current_distribusi) |
|||
css_selected = IsCssSelected(current_distribusi) |
|||
limit_reached = DistribusiLimitReached() |
|||
template = render_template( |
|||
"distribusi.html", |
|||
uploadform=uploadform, |
|||
distribusiform=distribusiform, |
|||
themeform=themeform, |
|||
publicthemeform=publicthemeform, |
|||
selectorform=selectorform, |
|||
files_uploaded=files_uploaded, |
|||
distribusi_live=distribusi_live, |
|||
css_selected=css_selected, |
|||
selectorvisible=selectorvisible, |
|||
limit_reached=limit_reached, |
|||
) |
|||
return template |
Loading…
Reference in new issue