Spaces:
Running
Running
from app import create_app, db | |
from app.models import Country, Case, InterrogationSession, GeneratedQuestion, InterrogationResponse, Report, CaseStatus | |
import random | |
from datetime import datetime, timedelta | |
app = create_app() | |
# --- Helper function to generate random names --- | |
def generate_random_name(): | |
first_names = ["Aaliyah", "Aarav", "Beatrix", "Bodhi", "Cassian", "Clara", "Declan", "Elara", "Felix", "Fiona", "Gideon", "Hazel", "Jasper", "Juniper", "Kai", "Luna", "Milo", "Nora", "Orion", "Ophelia", "Phoenix", "Quinn", "Rowan", "Seraphina", "Silas", "Stella", "Theodore", "Violet", "Xavier", "Zara"] | |
last_names = ["Abe", "Chen", "Da Silva", "El-Sayed", "Fernandez", "Garcia", "Ivanov", "Jones", "Kim", "Kowalski", "Li", "Martinez", "Müller", "Nguyen", "Okafor", "Patel", "Popescu", "Rossi", "Santos", "Schmidt", "Singh", "Smith", "Tanaka", "Tremblay", "Van Der Berg", "Williams", "Wilson", "Yamamoto", "Zhang", "Zimmerman"] | |
return f"{random.choice(first_names)} {random.choice(last_names)}" | |
# --- Helper function to generate random text --- | |
def generate_random_text(length=100): | |
words = ["lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", "sed", "do", "eiusmod", "tempor", "incididunt", "ut", "labore", "et", "dolore", "magna", "aliqua"] | |
return " ".join(random.choice(words) for _ in range(length // 5)).capitalize() + "." | |
# --- Function to populate the database --- | |
def populate_database(): | |
with app.app_context(): | |
db.drop_all() # Clear existing data | |
db.create_all() # Create tables | |
# 1. Populate Countries | |
countries_data = [ | |
# GCC | |
{"name": "Saudi Arabia", "region": "GCC"}, | |
{"name": "UAE", "region": "GCC"}, | |
{"name": "Qatar", "region": "GCC"}, | |
{"name": "Bahrain", "region": "GCC"}, | |
{"name": "Oman", "region": "GCC"}, | |
{"name": "Kuwait", "region": "GCC"}, | |
# EU | |
{"name": "Germany", "region": "EU"}, | |
{"name": "France", "region": "EU"}, | |
{"name": "Italy", "region": "EU"}, | |
{"name": "Spain", "region": "EU"}, | |
# African Countries | |
{"name": "South Africa", "region": "Africa"}, | |
{"name": "Nigeria", "region": "Africa"}, | |
{"name": "Kenya", "region": "Africa"}, | |
# North America | |
{"name": "USA", "region": "North America"}, | |
{"name": "Canada", "region": "North America"}, | |
# Indian Subcontinent | |
{"name": "India", "region": "Indian Subcontinent"}, | |
{"name": "Pakistan", "region": "Indian Subcontinent"}, | |
{"name": "Bangladesh", "region": "Indian Subcontinent"}, | |
{"name": "Sri Lanka", "region": "Indian Subcontinent"}, | |
# East Asia | |
{"name": "China", "region": "East Asia"}, | |
{"name": "Japan", "region": "East Asia"}, | |
] | |
created_countries = {} | |
for country_data in countries_data: | |
country = Country(name=country_data["name"], region=country_data["region"]) | |
db.session.add(country) | |
created_countries[country_data["name"]] = country | |
db.session.commit() | |
print("Countries populated.") | |
# 2. Populate Sample Cases | |
case_types = ["Fraud", "Theft", "Cybercrime", "Assault", "Homicide", "Drug Trafficking"] | |
all_countries = Country.query.all() | |
if not all_countries: | |
print("No countries found, cannot create cases.") | |
return | |
cases = [] | |
for i in range(10): # Create 10 sample cases | |
case = Case( | |
case_id_display=f"C-2024{str(i+1).zfill(4)}", | |
case_type=random.choice(case_types), | |
suspect_name=generate_random_name(), | |
profile_details=generate_random_text(150), | |
evidence_summary=generate_random_text(200), | |
status=random.choice(list(CaseStatus)), | |
country_context=random.choice(all_countries) # Assign a random country for context | |
) | |
db.session.add(case) | |
cases.append(case) | |
db.session.commit() | |
print(f"{len(cases)} Cases populated.") | |
# 3. Populate Interrogation Sessions, Questions, Responses, and Reports for each case | |
for case_obj in cases: | |
# Create an interrogation session | |
session = InterrogationSession( | |
case_id=case_obj.id, | |
session_date=datetime.utcnow() - timedelta(days=random.randint(1, 30)), | |
summary_notes=generate_random_text(100) | |
) | |
db.session.add(session) | |
db.session.commit() # Commit session to get its ID | |
# Create generated questions for the session | |
question_categories = ["Identity & Timeline", "Evidence Confrontation", "Alibi Verification", "Psychological Pressure"] | |
for _ in range(random.randint(5, 12)): # 5 to 12 questions per session | |
question = GeneratedQuestion( | |
interrogation_session_id=session.id, | |
question_text=generate_random_text(50) + "?", | |
category=random.choice(question_categories) | |
) | |
db.session.add(question) | |
db.session.commit() # Commit question to get its ID | |
# Create a response for the question | |
response_tags = ["evasiveness", "contradiction", "alibi failure", "confession hint", "cooperative"] | |
response = InterrogationResponse( | |
generated_question_id=question.id, | |
response_text=generate_random_text(80), | |
tags=",".join(random.sample(response_tags, random.randint(0,2))) | |
) | |
db.session.add(response) | |
db.session.commit() | |
# Create a report for the case | |
report = Report( | |
case_id=case_obj.id, | |
llm_json_output='{"summary": "' + generate_random_text(100) + '", "findings": "' + generate_random_text(150) + '"}', | |
report_content_summary=generate_random_text(250), | |
recommendations=generate_random_text(120), | |
report_country_context=case_obj.country_context # Use the same country as the case for the report | |
) | |
db.session.add(report) | |
db.session.commit() | |
print("Interrogation Sessions, Questions, Responses, and Reports populated.") | |
print("Database populated successfully!") | |
if __name__ == "__main__": | |
populate_database() | |