hoghoghi2 / setup.py
Really-amin's picture
Update setup.py
dcdf7c1 verified
#!/usr/bin/env python3
"""
Startup Script for Iran Legal Dashboard
======================================
Ensures proper initialization and debugging
"""
import os
import sys
import sqlite3
import logging
from pathlib import Path
# Setup logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def check_environment():
"""Check if running environment is properly configured"""
logger.info("🔍 Checking environment...")
# Check current directory
cwd = os.getcwd()
logger.info(f"📁 Current working directory: {cwd}")
# Check for required files
required_files = ['app.py', 'requirements.txt']
src_required_files = ['src/streamlit_app.py'] if os.path.exists('src') else []
all_required = required_files + src_required_files
missing_files = []
for file in all_required:
if not os.path.exists(file):
missing_files.append(file)
if missing_files:
logger.error(f"❌ Missing required files: {missing_files}")
return False
logger.info("✅ All required files found")
return True
def setup_database():
"""Setup database with proper permissions"""
logger.info("🗄️ Setting up database...")
# Try different database paths
db_paths = [
"/tmp/iran_legal.db",
"./iran_legal.db",
"data/iran_legal.db"
]
for db_path in db_paths:
try:
# Ensure directory exists
db_dir = os.path.dirname(db_path)
if db_dir and not os.path.exists(db_dir):
os.makedirs(db_dir, exist_ok=True)
# Test database connection
with sqlite3.connect(db_path, timeout=10) as conn:
conn.execute("SELECT 1")
logger.info(f"✅ Database accessible at: {db_path}")
return db_path
except Exception as e:
logger.warning(f"⚠️ Cannot access {db_path}: {e}")
continue
logger.error("❌ No accessible database path found")
return None
def check_permissions():
"""Check write permissions for critical directories"""
logger.info("🔐 Checking permissions...")
test_dirs = ["/tmp", ".", "./data", "./src"]
results = {}
for test_dir in test_dirs:
if os.path.exists(test_dir):
try:
test_file = os.path.join(test_dir, "test_write.tmp")
with open(test_file, 'w') as f:
f.write("test")
os.remove(test_file)
results[test_dir] = True
logger.info(f"✅ {test_dir} - Writable")
except Exception as e:
results[test_dir] = False
logger.warning(f"❌ {test_dir} - Not writable: {e}")
else:
results[test_dir] = None
logger.info(f"ℹ️ {test_dir} - Does not exist")
return results
def verify_imports():
"""Verify all required imports work"""
logger.info("📦 Verifying imports...")
required_modules = [
'streamlit',
'pandas',
'plotly',
'requests',
'bs4',
'sqlite3',
'json',
'hashlib',
'datetime'
]
failed_imports = []
for module in required_modules:
try:
__import__(module)
logger.info(f"✅ {module} - OK")
except ImportError as e:
failed_imports.append(module)
logger.error(f"❌ {module} - Failed: {e}")
if failed_imports:
logger.error(f"❌ Failed imports: {failed_imports}")
logger.info("💡 Run: pip install -r requirements.txt")
return False
return True
def create_sample_data(db_path):
"""Create sample data for testing"""
logger.info("📝 Creating sample data...")
try:
with sqlite3.connect(db_path) as conn:
# Check if data already exists
cursor = conn.execute("SELECT COUNT(*) FROM documents")
doc_count = cursor.fetchone()[0]
if doc_count > 0:
logger.info(f"ℹ️ Database already has {doc_count} documents")
return True
# Create sample document
conn.execute("""
INSERT INTO documents (title, content, source, category, ai_score, keywords, file_size, language)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""", (
"نمونه سند حقوقی",
"این یک نمونه سند حقوقی برای تست سیستم است که شامل محتوای آزمایشی می‌باشد.",
"سیستم تست",
"قانون",
0.75,
'["نمونه", "حقوق", "تست"]',
150,
"fa"
))
# Create sample scraped item
conn.execute("""
INSERT INTO scraped_items (id, url, title, content, domain, rating_score, word_count, status)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""", (
"sample_001",
"https://dastour.ir/sample",
"نمونه محتوای حقوقی",
"این یک نمونه محتوای حقوقی جمع‌آوری شده از وب است.",
"dastour.ir",
0.80,
25,
"completed"
))
conn.commit()
logger.info("✅ Sample data created successfully")
return True
except Exception as e:
logger.error(f"❌ Failed to create sample data: {e}")
return False
def main():
"""Main startup function"""
logger.info("🚀 Starting Iran Legal Dashboard initialization...")
# Check environment
if not check_environment():
logger.error("❌ Environment check failed")
return False
# Check permissions
check_permissions()
# Verify imports
if not verify_imports():
logger.error("❌ Import verification failed")
return False
# Setup database
db_path = setup_database()
if not db_path:
logger.error("❌ Database setup failed")
return False
# Create sample data
create_sample_data(db_path)
logger.info("✅ Initialization completed successfully!")
logger.info("🎉 Ready to run: streamlit run app.py")
return True
if __name__ == "__main__":
success = main()
if not success:
sys.exit(1)