diff --git a/backend/plugin/code_generator/plugin.toml b/backend/plugin/code_generator/plugin.toml index 071db61d..a32c0d8d 100644 --- a/backend/plugin/code_generator/plugin.toml +++ b/backend/plugin/code_generator/plugin.toml @@ -1,6 +1,6 @@ [plugin] summary = '代码生成' -version = '0.0.4' +version = '0.0.5' description = '生成通用业务代码' author = 'wu-clan' diff --git a/backend/plugin/code_generator/templates/python/model.jinja b/backend/plugin/code_generator/templates/python/model.jinja index 054922b1..50f82881 100644 --- a/backend/plugin/code_generator/templates/python/model.jinja +++ b/backend/plugin/code_generator/templates/python/model.jinja @@ -1,10 +1,21 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +{% set DECIMAL_TYPES = ['DECIMAL', 'NUMERIC', 'MONEY', 'NUMMULTIRANGE', 'NUMRANGE'] %} +{% set MYSQL_TYPES = ['BIT', 'ENUM', 'LONGBLOB', 'LONGTEXT', 'MEDIUMBLOB', 'MEDIUMINT', 'MEDIUMTEXT', 'SET', +'TINYBLOB', 'TINYINT', 'TINYTEXT', 'YEAR'] %} +{% set POSTGRESQL_TYPES = ['ARRAY', 'BIT', 'BYTEA', 'CIDR', 'CITEXT', 'DATEMULTIRANGE', 'DATERANGE', 'DOMAIN', 'ENUM', +'HSTORE', 'INET', 'INT4MULTIRANGE', 'INT4RANGE', 'INT8MULTIRANGE', 'INT8RANGE', 'INTERVAL', 'JSONB', 'JSONPATH', +'MACADDR', 'MACADDR8', 'MONEY', 'NUMMULTIRANGE', 'NUMRANGE', 'OID', 'REGCLASS', 'REGCONFIG', 'TSMULTIRANGE', 'TSQUERY', +'TSRANGE', 'TSTZMULTIRANGE', 'TSTZRANGE', 'TSVECTOR'] %} {% if default_datetime_column %} from datetime import datetime - {% endif %} +{% if model_types|select('in', DECIMAL_TYPES)|first %} +from decimal import Decimal +{% endif %} +{% if 'Uuid' in model_types or 'UUID' in model_types %} from uuid import UUID +{% endif %} import sqlalchemy as sa @@ -31,14 +42,9 @@ class {{ class_name }}({% if default_datetime_column %}Base{% else %}DataClassBa {%- endif %} = mapped_column( {%- if model.type in ['NVARCHAR', 'String', 'Unicode', 'VARCHAR'] -%} sa.String({{ model.length }}) - {%- elif database_type == 'mysql' and model.type in ['BIT', 'ENUM', 'LONGBLOB', 'LONGTEXT', 'MEDIUMBLOB', - 'MEDIUMINT', 'MEDIUMTEXT', 'SET', 'TINYBLOB', 'TINYINT', 'TINYTEXT', 'YEAR'] -%} + {%- elif database_type == 'mysql' and model.type in MYSQL_TYPES -%} mysql.{{ model.type }}() - {%- elif database_type == 'postgresql' and model.type in [ - 'ARRAY', 'BIT', 'BYTEA', 'CIDR', 'CITEXT', 'DATEMULTIRANGE', 'DATERANGE', 'DOMAIN', 'ENUM', 'HSTORE', 'INET', - 'INT4MULTIRANGE', 'INT4RANGE', 'INT8MULTIRANGE', 'INT8RANGE', 'INTERVAL', 'JSONB', 'JSONPATH', 'MACADDR', - 'MACADDR8', 'MONEY', 'NUMMULTIRANGE', 'NUMRANGE', 'OID', 'REGCLASS', 'REGCONFIG', 'TSMULTIRANGE', 'TSQUERY', - 'TSRANGE', 'TSTZMULTIRANGE', 'TSTZRANGE', 'TSVECTOR'] -%} + {%- elif database_type == 'postgresql' and model.type in POSTGRESQL_TYPES -%} {%- else -%} sa.{{ model.type }}() {%- endif -%}, default= diff --git a/backend/plugin/code_generator/utils/code_template.py b/backend/plugin/code_generator/utils/code_template.py index 898bcb57..24022a1f 100644 --- a/backend/plugin/code_generator/utils/code_template.py +++ b/backend/plugin/code_generator/utils/code_template.py @@ -95,6 +95,7 @@ class GenTemplate: 'permission': str(business.table_name.replace('_', ':')), 'database_type': settings.DATABASE_TYPE, 'models': models, + 'model_types': [model.type for model in models], }