Jayscallcenter / modules /system_check.py
jjmandog's picture
Create modules/system_check.py
5c2a9f0 verified
# SYSTEM CHECK MODULE
import os
import importlib
import sys
import logging
from pathlib import Path
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger('system_check')
def check_module_imports():
"""Check if all required modules can be imported"""
required_modules = [
"gradio", "numpy", "pandas", "matplotlib", "soundfile",
"scipy", "librosa", "plotly", "torch", "twilio", "pydub"
]
optional_modules = [
"fairseq", "pyworld", "parselmouth", "onnxruntime",
"transformers", "tqdm", "requests", "cachetools"
]
results = {
"required": {},
"optional": {},
"all_required_available": True
}
# Check required modules
for module_name in required_modules:
try:
importlib.import_module(module_name)
results["required"][module_name] = True
logger.info(f"βœ… Required module available: {module_name}")
except ImportError:
results["required"][module_name] = False
results["all_required_available"] = False
logger.error(f"❌ Required module {module_name} not available!")
# Check optional modules
for module_name in optional_modules:
try:
importlib.import_module(module_name)
results["optional"][module_name] = True
logger.info(f"βœ… Optional module available: {module_name}")
except ImportError:
results["optional"][module_name] = False
logger.warning(f"⚠️ Optional module {module_name} not available.")
return results
def check_file_permissions():
"""Check if required directories are writable"""
# Import here to avoid circular imports
try:
from modules.utils import DATA_DIR, CONFIG_DIR, LOGS_DIR
dirs_to_check = [DATA_DIR, CONFIG_DIR, LOGS_DIR]
results = {}
for directory in dirs_to_check:
# Create directory if it doesn't exist
os.makedirs(directory, exist_ok=True)
readable = os.access(directory, os.R_OK)
writable = os.access(directory, os.W_OK)
results[directory] = {
"exists": os.path.exists(directory),
"readable": readable,
"writable": writable
}
if not os.path.exists(directory):
logger.warning(f"⚠️ Directory doesn't exist: {directory}")
elif not writable:
logger.error(f"❌ Directory not writable: {directory}")
else:
logger.info(f"βœ… Directory writable: {directory}")
except ImportError:
logger.error("❌ Could not import directory paths from utils module")
results = {"error": "Could not import paths"}
return results
def run_system_check():
"""Run all system checks"""
logger.info("πŸ” Running system checks...")
results = {
"modules": check_module_imports(),
"environment": {
"is_huggingface": os.environ.get('SPACE_ID') is not None,
"python_version": sys.version,
"working_directory": os.getcwd()
}
}
# Only check file permissions after we've verified modules
if results["modules"]["all_required_available"]:
results["permissions"] = check_file_permissions()
# Log environment info
logger.info(f"Environment: {'Hugging Face' if results['environment']['is_huggingface'] else 'Local'}")
logger.info(f"Python version: {results['environment']['python_version']}")
logger.info(f"Working directory: {results['environment']['working_directory']}")
return results