Skip to content

Commit

Permalink
953 Add array_columns to Table._meta (#954)
Browse files Browse the repository at this point in the history
* add `TableMeta.array_columns`

* fix black warning
  • Loading branch information
dantownsend committed Mar 15, 2024
1 parent 51f58a6 commit 1b0f9b3
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
20 changes: 14 additions & 6 deletions piccolo/table.py
Expand Up @@ -78,6 +78,7 @@ class TableMeta:
columns: t.List[Column] = field(default_factory=list)
default_columns: t.List[Column] = field(default_factory=list)
non_default_columns: t.List[Column] = field(default_factory=list)
array_columns: t.List[Array] = field(default_factory=list)
email_columns: t.List[Email] = field(default_factory=list)
foreign_key_columns: t.List[ForeignKey] = field(default_factory=list)
primary_key: Column = field(default_factory=Column)
Expand Down Expand Up @@ -267,6 +268,7 @@ def __init_subclass__(
columns: t.List[Column] = []
default_columns: t.List[Column] = []
non_default_columns: t.List[Column] = []
array_columns: t.List[Array] = []
foreign_key_columns: t.List[ForeignKey] = []
secret_columns: t.List[Secret] = []
json_columns: t.List[t.Union[JSON, JSONB]] = []
Expand Down Expand Up @@ -304,6 +306,7 @@ def __init_subclass__(

if isinstance(column, Array):
column._setup_base_column(table_class=cls)
array_columns.append(column)

if isinstance(column, Email):
email_columns.append(column)
Expand Down Expand Up @@ -337,6 +340,7 @@ def __init_subclass__(
columns=columns,
default_columns=default_columns,
non_default_columns=non_default_columns,
array_columns=array_columns,
email_columns=email_columns,
primary_key=primary_key,
foreign_key_columns=foreign_key_columns,
Expand Down Expand Up @@ -809,9 +813,11 @@ def is_unquoted(arg):
# If unquoted, dump it straight into the query.
query = ",".join(
[
args_dict[column._meta.name].value
if is_unquoted(args_dict[column._meta.name])
else "{}"
(
args_dict[column._meta.name].value
if is_unquoted(args_dict[column._meta.name])
else "{}"
)
for column in self._meta.columns
]
)
Expand Down Expand Up @@ -995,9 +1001,11 @@ def _process_column_args(
Convert any string arguments to column instances.
"""
return [
cls._meta.get_column_by_name(column)
if (isinstance(column, str))
else column
(
cls._meta.get_column_by_name(column)
if (isinstance(column, str))
else column
)
for column in columns
]

Expand Down
12 changes: 12 additions & 0 deletions tests/table/test_metaclass.py
Expand Up @@ -5,6 +5,7 @@
from piccolo.columns.column_types import (
JSON,
JSONB,
Array,
Email,
ForeignKey,
Varchar,
Expand Down Expand Up @@ -132,6 +133,17 @@ class MyTable(Table):

self.assertEqual(MyTable._meta.email_columns, [MyTable.column_a])

def test_arry_columns(self):
"""
Make sure ``TableMeta.array_columns`` are setup correctly.
"""

class MyTable(Table):
column_a = Array(Varchar())
column_b = Varchar()

self.assertEqual(MyTable._meta.array_columns, [MyTable.column_a])

def test_id_column(self):
"""
Makes sure an id column is added.
Expand Down

0 comments on commit 1b0f9b3

Please sign in to comment.