majuna/app/brm/static.py

78 lines
3.3 KiB
Python
Raw Normal View History

from typing import Optional, Union
from werkzeug.datastructures import FileStorage
from app.extensions import db
from app.models.base import Group
from app.models.cloud import CloudAccount
from app.models.mirrors import StaticOrigin
def create_static_origin(
description: str,
group_id: int,
storage_cloud_account_id: int,
source_cloud_account_id: int,
source_project: str,
auto_rotate: bool,
matrix_homeserver: Optional[str],
keanu_convene_path: Optional[str],
keanu_convene_logo: Optional[FileStorage],
keanu_convene_color: Optional[str],
clean_insights_backend: Optional[Union[str, bool]],
db_session_commit: bool = False,
) -> StaticOrigin:
"""
Create a new static origin.
:param description: The description of the new static origin.
:param group_id: The ID for the origin group to add this new static origin to.
:param storage_cloud_account_id: The ID for the cloud account to deploy this new static origin to.
:param source_cloud_account_id: The ID for the cloud account used to interact with the web sources.
:param source_project: The path for the source project, e.g. the GitLab project path.
:param auto_rotate: Whether to automatically rotate this domain when it is detected to be blocked.
:param matrix_homeserver: The domain name for the Matrix homeserver to proxy to.
:param keanu_convene_path: The path to serve the Keanu Convene application from.
:param clean_insights_backend: The domain name for the Clean Insights backend to proxy to.
:param db_session_commit: Whether to add the new StaticOrigin to the database session and commit it.
:returns: StaticOrigin -- the newly created StaticOrigin
:raises: ValueError, sqlalchemy.exc.SQLAlchemyError
"""
static_origin = StaticOrigin()
if isinstance(group_id, int):
group = Group.query.filter(Group.id == group_id).first()
if group is None:
raise ValueError("group_id must match an existing group")
static_origin.group_id = group_id
else:
raise ValueError("group_id must be an int")
if isinstance(storage_cloud_account_id, int):
cloud_account = CloudAccount.query.filter(CloudAccount.id == storage_cloud_account_id).first()
if cloud_account is None:
raise ValueError("storage_cloud_account_id must match an existing provider")
static_origin.storage_cloud_account_id = storage_cloud_account_id
else:
raise ValueError("storage_cloud_account_id must be an int")
if isinstance(source_cloud_account_id, int):
cloud_account = CloudAccount.query.filter(CloudAccount.id == source_cloud_account_id).first()
if cloud_account is None:
raise ValueError("source_cloud_account_id must match an existing provider")
static_origin.source_cloud_account_id = source_cloud_account_id
else:
raise ValueError("source_cloud_account_id must be an int")
static_origin.update(
source_project,
description,
auto_rotate,
matrix_homeserver,
keanu_convene_path,
keanu_convene_logo,
keanu_convene_color,
clean_insights_backend,
False
)
if db_session_commit:
db.session.add(static_origin)
db.session.commit()
return static_origin