Arch/init_app.py

187 lines
5.8 KiB
Python

#!/usr/bin/env python
"""
Script de inicialización para el Sistema de Gestión de Documentos ARCH.
Crea la estructura inicial de directorios y archivos necesarios.
"""
import os
import json
import bcrypt
from datetime import datetime
import pytz
def main():
"""Función principal de inicialización."""
print("Inicializando Sistema de Gestión de Documentos ARCH...")
# Crear estructura de directorios
print("Creando estructura de directorios...")
create_directory_structure()
# Inicializar archivos JSON
print("Inicializando archivos de datos...")
initialize_json_files()
print("\nSistema inicializado correctamente!")
print("\nPuede iniciar la aplicación con el comando:")
print(" flask run")
print("\nCredenciales de acceso por defecto:")
print(" Usuario: admin")
print(" Contraseña: admin123")
print("\nNOTA: Cambie la contraseña después del primer inicio de sesión.")
def create_directory_structure():
"""Crear la estructura de directorios necesaria."""
# Directorios principales
dirs = [
'storage',
'storage/logs',
'storage/schemas',
'storage/users',
'storage/filetypes',
'storage/projects',
]
for directory in dirs:
os.makedirs(directory, exist_ok=True)
print(f" Creado: {directory}")
def initialize_json_files():
"""Inicializar archivos JSON con datos por defecto."""
# Índices
indices = {
"max_project_id": 0,
"max_document_id": 0
}
save_json('storage/indices.json', indices)
# Usuarios
admin_password = bcrypt.hashpw("admin123".encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
users = {
"admin": {
"nombre": "Administrador",
"username": "admin",
"email": "admin@ejemplo.com",
"password_hash": admin_password,
"nivel": 9999,
"idioma": "es",
"fecha_caducidad": None,
"empresa": "ARCH",
"estado": "activo",
"ultimo_acceso": datetime.now(pytz.UTC).isoformat()
}
}
save_json('storage/users/users.json', users)
# Tipos de archivo
filetypes = {
"pdf": {
"extension": "pdf",
"descripcion": "Documento PDF",
"mime_type": "application/pdf",
"tamano_maximo": 20971520 # 20MB
},
"txt": {
"extension": "txt",
"descripcion": "Documento de texto",
"mime_type": "text/plain",
"tamano_maximo": 5242880 # 5MB
},
"zip": {
"extension": "zip",
"descripcion": "Archivo comprimido",
"mime_type": "application/zip",
"tamano_maximo": 104857600 # 100MB
},
"docx": {
"extension": "docx",
"descripcion": "Documento Word",
"mime_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"tamano_maximo": 20971520 # 20MB
},
"xlsx": {
"extension": "xlsx",
"descripcion": "Hoja de cálculo Excel",
"mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"tamano_maximo": 20971520 # 20MB
},
"dwg": {
"extension": "dwg",
"descripcion": "Dibujo AutoCAD",
"mime_type": "application/acad",
"tamano_maximo": 52428800 # 50MB
}
}
save_json('storage/filetypes/filetypes.json', filetypes)
# Esquemas
schemas = {
"ESQ001": {
"codigo": "ESQ001",
"descripcion": "Proyecto estándar",
"fecha_creacion": datetime.now(pytz.UTC).isoformat(),
"creado_por": "admin",
"documentos": [
{
"tipo": "pdf",
"nombre": "Manual de Usuario",
"nivel_ver": 0,
"nivel_editar": 5000
},
{
"tipo": "dwg",
"nombre": "Planos Técnicos",
"nivel_ver": 0,
"nivel_editar": 5000
},
{
"tipo": "zip",
"nombre": "Archivos Fuente",
"nivel_ver": 1000,
"nivel_editar": 5000
},
{
"tipo": "xlsx",
"nombre": "Datos y Cálculos",
"nivel_ver": 0,
"nivel_editar": 1000
}
]
},
"ESQ002": {
"codigo": "ESQ002",
"descripcion": "Documentación técnica",
"fecha_creacion": datetime.now(pytz.UTC).isoformat(),
"creado_por": "admin",
"documentos": [
{
"tipo": "pdf",
"nombre": "Especificaciones Técnicas",
"nivel_ver": 0,
"nivel_editar": 5000
},
{
"tipo": "pdf",
"nombre": "Manual de Mantenimiento",
"nivel_ver": 0,
"nivel_editar": 5000
},
{
"tipo": "pdf",
"nombre": "Certificaciones",
"nivel_ver": 0,
"nivel_editar": 9000
}
]
}
}
save_json('storage/schemas/schema.json', schemas)
def save_json(file_path, data):
"""Guardar datos en archivo JSON con formato."""
with open(file_path, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f" Inicializado: {file_path}")
if __name__ == '__main__':
main()