From 4b699e4931206586fc3fa2e6e36fb7c67528dbeb Mon Sep 17 00:00:00 2001 From: varun Date: Tue, 8 Sep 2026 01:51:30 +0530 Subject: [PATCH] Fix schema generate ignoring UUID column defaults --- piccolo/apps/schema/commands/generate.py | 10 +++++-- tests/apps/schema/commands/test_generate.py | 30 +++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/piccolo/apps/schema/commands/generate.py b/piccolo/apps/schema/commands/generate.py index d4e94ef16..5a5f59a6e 100644 --- a/piccolo/apps/schema/commands/generate.py +++ b/piccolo/apps/schema/commands/generate.py @@ -370,7 +370,9 @@ def __add__(self, value: OutputSchema) -> OutputSchema: $""", re.VERBOSE, ), - UUID: None, + UUID: re.compile( + r"^(?Pgen_random_uuid|uuid_generate_v4|uuidv7)\(\)$" + ), Serial: None, ForeignKey: None, } @@ -431,7 +433,11 @@ def get_column_default( elif column_type is JSON or column_type is JSONB: return json.loads(value["value"]) elif column_type is UUID: - return uuid.uuid4 + return ( + defaults.uuid.UUID7() + if value["value"] == "uuidv7" + else uuid.uuid4 + ) elif column_type is Date: return ( date.today diff --git a/tests/apps/schema/commands/test_generate.py b/tests/apps/schema/commands/test_generate.py index 0de085e65..e7b42f2f7 100644 --- a/tests/apps/schema/commands/test_generate.py +++ b/tests/apps/schema/commands/test_generate.py @@ -2,6 +2,7 @@ import ast import asyncio +import uuid from typing import cast from unittest import TestCase from unittest.mock import MagicMock, patch @@ -10,15 +11,18 @@ from piccolo.apps.schema.commands.generate import ( OutputSchema, generate, + get_column_default, get_output_schema, ) from piccolo.columns.base import Column from piccolo.columns.column_types import ( + UUID, ForeignKey, Integer, Timestamp, Varchar, ) +from piccolo.columns.defaults.uuid import UUID7 from piccolo.columns.indexes import IndexMethod from piccolo.schema import SchemaManager from piccolo.table import Table, create_db_tables_sync @@ -322,3 +326,29 @@ def test_exception(self, create_table_class_from_db_mock: AsyncMock): "Exception occurred while generating `mega_table` table: Test", exception_messages, ) + + +class TestGetColumnDefaultUUID(TestCase): + def test_gen_random_uuid(self): + self.assertIs( + get_column_default(UUID, "gen_random_uuid()", "postgres"), + uuid.uuid4, + ) + + def test_uuid_generate_v4(self): + self.assertIs( + get_column_default(UUID, "uuid_generate_v4()", "postgres"), + uuid.uuid4, + ) + + def test_uuidv7(self): + self.assertIsInstance( + get_column_default(UUID, "uuidv7()", "postgres"), UUID7 + ) + + def test_unrecognised_default(self): + self.assertIsNone( + get_column_default( + UUID, "(md5((random())::text))::uuid", "postgres" + ) + )