Fix PyInstaller compatibility issues

- Fixed import error for get_persistent_directories (renamed to get_config_directory)
- Fixed TypeError with classmethod call during class definition
- Added config directory support to directory utilities
- Enhanced configuration loading with proper function structure
- Ensured all persistent directories are created during setup
parent 034ce1c1
......@@ -122,6 +122,29 @@ def get_data_directory(custom_path=None):
return base_dir / "data"
def get_config_directory(custom_path=None):
"""
Get the config directory for configuration files.
Args:
custom_path (str, optional): Custom path override
Returns:
Path: Config directory path
"""
if custom_path:
return Path(custom_path)
# Check environment variable first
env_path = os.environ.get('MBETTER_CONFIG_DIR')
if env_path:
return Path(env_path)
# Use platform-appropriate persistent directory
base_dir = get_platform_persistent_dir()
return base_dir / "config"
def ensure_directory_exists(directory_path, description="directory"):
"""
Ensure a directory exists, creating it if necessary.
......@@ -204,6 +227,11 @@ def setup_persistent_directories(config_class=None):
"data directory"
)
directories['config'] = ensure_directory_exists(
get_config_directory(),
"config directory"
)
# Create subdirectories for uploads
directories['fixtures'] = ensure_directory_exists(
directories['uploads'] / "fixtures",
......
......@@ -7,9 +7,9 @@ def load_persistent_config():
# Import persistent directory utilities
try:
from app.utils.directories import get_persistent_directories
directories = get_persistent_directories()
config_path = os.path.join(directories['config'], 'mbetterd.conf')
from app.utils.directories import get_config_directory
config_dir = get_config_directory()
config_path = os.path.join(str(config_dir), 'mbetterd.conf')
if os.path.exists(config_path):
print(f"Loading configuration from persistent directory: {config_path}")
......@@ -56,6 +56,7 @@ try:
get_uploads_directory,
get_logs_directory,
get_data_directory,
get_config_directory,
setup_persistent_directories,
is_pyinstaller
)
......@@ -110,8 +111,37 @@ class Config:
'data': os.path.join(base_dir, 'data')
}
# Initialize persistent directories using helper function
@staticmethod
def _init_persistent_dirs():
"""Initialize persistent directories"""
if PERSISTENT_DIRS_AVAILABLE:
try:
uploads_dir = get_uploads_directory()
logs_dir = get_logs_directory()
data_dir = get_data_directory()
config_dir = get_config_directory()
return {
'uploads': str(uploads_dir),
'logs': str(logs_dir),
'data': str(data_dir),
'config': str(config_dir)
}
except Exception as e:
import logging
logging.warning(f"Failed to get persistent directories: {e}")
# Fallback to current directory structure
base_dir = os.path.dirname(os.path.abspath(__file__))
return {
'uploads': os.path.join(base_dir, 'uploads'),
'logs': os.path.join(base_dir, 'logs'),
'data': os.path.join(base_dir, 'data'),
'config': os.path.join(base_dir, 'config')
}
# File Upload Configuration - Use persistent directories
_persistent_dirs = _get_persistent_directories()
_persistent_dirs = _init_persistent_dirs.__func__()
UPLOAD_FOLDER = get_config_value('UPLOAD_FOLDER', _persistent_dirs['uploads'])
MAX_CONTENT_LENGTH = int(get_config_value('MAX_CONTENT_LENGTH', str(2 * 1024 * 1024 * 1024))) # 2GB for large ZIP files
ALLOWED_FIXTURE_EXTENSIONS = {'csv', 'xlsx', 'xls'}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment