from flask_sqlalchemy import SQLAlchemy from config import item_attributes # Import the configuration from sqlalchemy import Enum, Integer, String, Date, Column 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__': 'asset_test', # Table name '__init__': lambda self, **kwargs: self.__dict__.update(kwargs), # Constructor '__repr__': lambda self: f"" # 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()