VWED_server/data/models/script_file.py

67 lines
2.9 KiB
Python
Raw Normal View History

2025-09-12 16:15:13 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
脚本文件数据模型
管理脚本文件的内容版本和元数据
"""
from sqlalchemy import Column, Integer, String, DateTime, Text, Boolean, ForeignKey
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from .base import Base
class VWEDScriptFile(Base):
"""脚本文件模型"""
__tablename__ = 'vwed_script_file'
id = Column(Integer, primary_key=True, autoincrement=True, comment='文件ID')
project_id = Column(Integer, ForeignKey('vwed_script_project.id'), nullable=False, comment='所属项目ID')
file_name = Column(String(255), nullable=False, comment='文件名')
file_path = Column(String(500), nullable=False, comment='文件相对路径')
file_type = Column(String(20), nullable=False, default='python', comment='文件类型: python, text, json等')
content = Column(Text, comment='文件内容')
size = Column(Integer, default=0, comment='文件大小(字节)')
encoding = Column(String(20), default='utf-8', comment='文件编码')
is_directory = Column(Boolean, default=False, comment='是否为目录')
is_executable = Column(Boolean, default=False, comment='是否可执行')
has_boot_function = Column(Boolean, default=False, comment='是否包含boot函数')
status = Column(String(20), nullable=False, default='active', comment='文件状态: active, deleted')
created_by = Column(String(100), comment='创建者')
created_at = Column(DateTime, nullable=False, default=func.now(), comment='创建时间')
updated_at = Column(DateTime, nullable=False, default=func.now(), onupdate=func.now(), comment='更新时间')
# 关联关系
project = relationship("VWEDScriptProject", backref="files")
def __repr__(self):
return f"<VWEDScriptFile(id={self.id}, name='{self.file_name}', path='{self.file_path}')>"
def to_dict(self):
"""转换为字典格式"""
return {
'id': self.id,
'project_id': self.project_id,
'file_name': self.file_name,
'file_path': self.file_path,
'file_type': self.file_type,
'content': self.content,
'size': self.size,
'encoding': self.encoding,
'is_directory': self.is_directory,
'is_executable': self.is_executable,
'has_boot_function': self.has_boot_function,
'status': self.status,
'created_by': self.created_by,
'created_at': self.created_at.isoformat() if self.created_at else None,
'updated_at': self.updated_at.isoformat() if self.updated_at else None,
}
@property
def full_path(self):
"""获取完整文件路径"""
if self.project and self.project.project_path:
return f"{self.project.project_path}/{self.file_path}"
return self.file_path