atst/atst/routes/workspaces.py
2018-08-28 13:00:00 -04:00

104 lines
3.2 KiB
Python

from flask import (
Blueprint,
render_template,
request as http_request,
g,
redirect,
url_for,
)
from atst.domain.exceptions import UnauthorizedError
from atst.domain.workspaces import Workspaces
from atst.domain.projects import Projects
from atst.forms.new_project import NewProjectForm
from atst.forms.new_member import NewMemberForm
from atst.domain.authz import Authorization
from atst.models.permissions import Permissions
bp = Blueprint("workspaces", __name__)
@bp.context_processor
def workspace():
workspace = None
if "workspace_id" in http_request.view_args:
try:
workspace = Workspaces.get(
g.current_user, http_request.view_args["workspace_id"]
)
except UnauthorizedError:
pass
def user_can(permission):
if workspace:
return Authorization.has_workspace_permission(
g.current_user, workspace, permission
)
return False
return {"workspace": workspace, "permissions": Permissions, "user_can": user_can}
@bp.route("/workspaces")
def workspaces():
workspaces = Workspaces.get_many(g.current_user)
return render_template("workspaces.html", page=5, workspaces=workspaces)
@bp.route("/workspaces/<workspace_id>/projects")
def workspace_projects(workspace_id):
workspace = Workspaces.get(g.current_user, workspace_id)
return render_template("workspace_projects.html", workspace=workspace)
@bp.route("/workspaces/<workspace_id>")
def show_workspace(workspace_id):
return redirect(url_for("workspaces.workspace_projects", workspace_id=workspace_id))
@bp.route("/workspaces/<workspace_id>/members")
def workspace_members(workspace_id):
workspace = Workspaces.get(g.current_user, workspace_id)
return render_template("workspace_members.html", workspace=workspace)
@bp.route("/workspaces/<workspace_id>/reports")
def workspace_reports(workspace_id):
return render_template("workspace_reports.html", workspace_id=workspace_id)
@bp.route("/workspaces/<workspace_id>/projects/new")
def new_project(workspace_id):
workspace = Workspaces.get_for_update(g.current_user, workspace_id)
form = NewProjectForm()
return render_template("workspace_project_new.html", workspace=workspace, form=form)
@bp.route("/workspaces/<workspace_id>/projects/new", methods=["POST"])
def update_project(workspace_id):
workspace = Workspaces.get_for_update(g.current_user, workspace_id)
form = NewProjectForm(http_request.form)
if form.validate():
project_data = form.data
Projects.create(
workspace,
project_data["name"],
project_data["description"],
project_data["environment_names"],
)
return redirect(
url_for("workspaces.workspace_projects", workspace_id=workspace.id)
)
else:
return render_template(
"workspace_project_new.html", workspace=workspace, form=form
)
@bp.route("/workspaces/<workspace_id>/members/new")
def new_member(workspace_id):
workspace = Workspaces.get(g.current_user, workspace_id)
form = NewMemberForm()
return render_template("member_new.html", workspace=workspace, form=form)