Spaces:
Sleeping
Sleeping
| 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() | |