51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
from io import BytesIO
|
|
|
|
from flask import request, render_template, redirect, url_for, flash
|
|
from flask_login import current_user, login_required
|
|
from flask_wtf import FlaskForm
|
|
from flask_wtf.file import FileField
|
|
from wtforms import StringField, validators
|
|
|
|
from app import s3
|
|
from app.developer.base import developer_bp
|
|
from app.extensions import db
|
|
from app.log import LOG
|
|
from app.models import Client, File
|
|
from app.utils import random_string
|
|
|
|
|
|
class NewClientForm(FlaskForm):
|
|
name = StringField("Name", validators=[validators.DataRequired()])
|
|
icon = FileField("Icon")
|
|
home_url = StringField("Home Url")
|
|
|
|
|
|
@developer_bp.route("/new_client", methods=["GET", "POST"])
|
|
@login_required
|
|
def new_client():
|
|
form = NewClientForm()
|
|
|
|
if request.method == "POST":
|
|
if form.validate():
|
|
client = Client.create_new(form.name.data, current_user.id)
|
|
client.home_url = form.home_url.data
|
|
db.session.commit()
|
|
|
|
if form.icon.data:
|
|
file_path = random_string(30)
|
|
file = File.create(path=file_path)
|
|
|
|
s3.upload_from_bytesio(file_path, BytesIO(form.icon.data.read()))
|
|
|
|
db.session.commit()
|
|
LOG.d("upload file %s to s3", file)
|
|
|
|
client.icon_id = file.id
|
|
db.session.commit()
|
|
|
|
flash("New client has been created", "success")
|
|
|
|
return redirect(url_for("developer.client_detail", client_id=client.id))
|
|
|
|
return render_template("developer/new_client.html", form=form)
|