Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions piccolo/apps/schema/commands/generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,9 @@ def __add__(self, value: OutputSchema) -> OutputSchema:
$""",
re.VERBOSE,
),
UUID: None,
UUID: re.compile(
r"^(?P<value>gen_random_uuid|uuid_generate_v4|uuidv7)\(\)$"
),
Serial: None,
ForeignKey: None,
}
Expand Down Expand Up @@ -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
Expand Down
30 changes: 30 additions & 0 deletions tests/apps/schema/commands/test_generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import ast
import asyncio
import uuid
from typing import cast
from unittest import TestCase
from unittest.mock import MagicMock, patch
Expand All @@ -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
Expand Down Expand Up @@ -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"
)
)
Loading