SQL = '''SELECT mbt.id, mbt.summary, mbt.version, mbtt.steps_to_reproduce, mbtt.additional_information, notes.notes, revisions.revision_values FROM mantis_bug_table mbt LEFT JOIN mantis_bug_text_table mbtt ON mbt.id = mbtt.id LEFT JOIN ( SELECT mbn.bug_id, GROUP_CONCAT( mbnt.note ORDER BY mbn.date_submitted SEPARATOR '\n---\n' ) AS notes FROM mantis_bugnote_table mbn JOIN mantis_bugnote_text_table mbnt ON mbnt.id = mbn.bugnote_text_id GROUP BY mbn.bug_id ) notes ON notes.bug_id = mbt.id LEFT JOIN ( SELECT bug_id, GROUP_CONCAT(value ORDER BY id SEPARATOR ',') AS revision_values FROM mantis_bug_revision_table GROUP BY bug_id ) revisions ON revisions.bug_id = mbt.id WHERE mbt.id = %s; '''
pool = None
asyncdefinit_db(): global pool pool = await aiomysql.create_pool( host="12.12.254.242", port=3306, user="root", password="eve-ng", db="bugtracker", charset="utf8mb4", minsize=1, maxsize=30 )
asyncdefclose_db(): global pool if pool: pool.close() await pool.wait_closed()
asyncdefget_bug_by_id(bug_id): asyncwith pool.acquire() as conn: asyncwith conn.cursor(aiomysql.DictCursor) as cursor: await cursor.execute(SQL,(bug_id,)) row = await cursor.fetchone() ifnot row: returnNone return format_(row)
defformat_(sql_data): defextract(text): ifnot text: return'', '' r = re.search(r'问题原因分析[::]\s*(.*?)[。*\n]', text) f = re.search(r'修改方案描述[::]\s*(.*?)[。*\n]', text) return (r.group(1) if r else''), (f.group(1) if f else'')
from fastapi import FastAPI from fastapi.staticfiles import StaticFiles from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager from util.db_tool import init_db, close_db, get_bug_by_id from loguru import logger import uvicorn