45 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from flask_sqlalchemy import SQLAlchemy
 | 
						|
from config import item_attributes  # Import the configuration
 | 
						|
from sqlalchemy import Enum, Integer, String, Date, Column
 | 
						|
from config import sql_conf
 | 
						|
 | 
						|
db = SQLAlchemy()
 | 
						|
 | 
						|
# Dynamically create the Asset model
 | 
						|
def create_asset_model():
 | 
						|
    """
 | 
						|
    Dynamically creates the Asset model based on the configuration in item_attributes.
 | 
						|
    """
 | 
						|
    attrs = {
 | 
						|
        '__tablename__': sql_conf.SQL_TABLE,  # Table name
 | 
						|
        '__init__': lambda self, **kwargs: self.__dict__.update(kwargs),  # Constructor
 | 
						|
        '__repr__': lambda self: f"<Asset {getattr(self, next(attrib for attrib, config in item_attributes.items() if config.primary))}>"  # Representation
 | 
						|
    }
 | 
						|
 | 
						|
    for attrib, config in item_attributes.items():
 | 
						|
        # Determine the column type based on the configuration
 | 
						|
        if config.html_input_type == "text":
 | 
						|
            column_type = String(50)
 | 
						|
        elif config.html_input_type == "date":
 | 
						|
            column_type = Date
 | 
						|
        elif config.html_input_type == "select":
 | 
						|
            column_type = Enum(*config.options)
 | 
						|
        elif config.html_input_type == "number":
 | 
						|
            column_type = Integer
 | 
						|
 | 
						|
        # Define the column with additional properties
 | 
						|
        attrs[attrib] = Column(
 | 
						|
            column_type,
 | 
						|
            primary_key=config.primary,
 | 
						|
            unique=config.unique,
 | 
						|
            nullable=not config.required,
 | 
						|
            default=config.default_val,
 | 
						|
            comment=config.comment
 | 
						|
        )
 | 
						|
 | 
						|
    # Create the Asset class dynamically
 | 
						|
    Asset = type('Asset', (db.Model,), attrs)
 | 
						|
    return Asset
 | 
						|
 | 
						|
# Create the Asset model
 | 
						|
Asset = create_asset_model() |