import json import warnings import click import uvicorn from sqlmodel import Session from app.db import engine from app.models.confluence_site import ConfluenceSiteConfig from app.models.jira_site import JiraSite from app.models.confluence_site import ConfluenceSite from app.models.common import DeploymentType from app.tasks.triggers import create_ticket_to_kb_issue_case_task @click.group(context_settings={"max_content_width": 150}) def cli(): pass @cli.command() @click.option("--host", default="127.0.0.1", help="Host, default=127.0.0.1") @click.option("--port", default=7000, help="Port, default=7000") def runserver(host, port): warnings.warn( "This command will start the server in development mode, do not use it in production." ) uvicorn.run( "app.api_server:app", host=host, port=port, reload=True, log_level="debug" ) @cli.command() @click.option("--name", default="Jira Site", help="Name of the Jira site.") @click.option( "--deployment-type", type=click.Choice(["cloud", "data-center"], case_sensitive=False), default="CLOUD", help="Deployment type, choose between 'cloud' or 'data-center'.", ) @click.option("--host", required=True, help="Host of the Jira site.") @click.option("--bot-user-id", required=True, help="Bot user ID for the Jira site.") @click.option( "--bot-user-token", required=True, help="Bot user token for the Jira site." ) @click.option( "--config", required=True, help="JSON string for the Jira site configuration." ) def add_jira_site(name, deployment_type, host, bot_user_id, bot_user_token, config): with Session(engine) as session: site = JiraSite( name=name, deployment_type=DeploymentType(deployment_type), host=host, bot_user_id=bot_user_id, bot_user_token=bot_user_token, config=json.loads(config), ) session.add(site) session.commit() @cli.command() @click.option("--site-id", default="Jira Site ID", help="ID of the Jira site.") @click.option("--bot-user-id", required=True, help="Bot user ID for the Jira site.") @click.option( "--bot-user-token", required=True, help="Bot user token for the Jira site." ) def update_jira_site_token(site_id, bot_user_id, bot_user_token): with Session(engine) as session: jira_site = session.get(JiraSite, site_id) jira_site.bot_user_id = bot_user_id jira_site.bot_user_token = bot_user_token session.add(jira_site) session.commit() @cli.command() @click.option("--name", default="Jira Site", help="Name of the Jira site.") @click.option( "--deployment-type", type=click.Choice(["cloud", "data-center"], case_sensitive=False), default="CLOUD", help="Deployment type, choose between 'cloud' or 'data-center'.", ) @click.option("--host", required=True, help="Host of the Jira site.") @click.option("--bot-user-id", required=True, help="Bot user ID for the Jira site.") @click.option( "--bot-user-token", required=True, help="Bot user token for the Jira site." ) @click.option( "--config", required=True, help="JSON string for the Jira site configuration." ) def add_confluence_site( name, deployment_type, host, bot_user_id, bot_user_token, config ): with Session(engine) as session: site = ConfluenceSite( name=name, deployment_type=DeploymentType(deployment_type), host=host, bot_user_id=bot_user_id, bot_user_token=bot_user_token, config=ConfluenceSiteConfig.model_validate(json.loads(config)) if config else None, ) session.add(site) session.commit() @cli.command() @click.option("--jira-site-id", required=True, type=int, help="The id of the Jira site") @click.option( "--jira-issue-key", required=True, help="The key of the Jira issue to generate the case for", ) def create_kb_issue_case(jira_site_id: int, jira_issue_key: str): create_ticket_to_kb_issue_case_task(jira_site_id, jira_issue_key) if __name__ == "__main__": cli()