Skip to content

Commit

Permalink
add Table._meta.email_columns (#610)
Browse files Browse the repository at this point in the history
  • Loading branch information
dantownsend authored Sep 1, 2022
1 parent ed93feb commit a6c8008
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
7 changes: 7 additions & 0 deletions piccolo/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
JSON,
JSONB,
Array,
Email,
ForeignKey,
Secret,
Serial,
Expand Down Expand Up @@ -69,6 +70,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)
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)
json_columns: t.List[t.Union[JSON, JSONB]] = field(default_factory=list)
Expand Down Expand Up @@ -216,6 +218,7 @@ def __init_subclass__(
foreign_key_columns: t.List[ForeignKey] = []
secret_columns: t.List[Secret] = []
json_columns: t.List[t.Union[JSON, JSONB]] = []
email_columns: t.List[Email] = []
primary_key: t.Optional[Column] = None
m2m_relationships: t.List[M2M] = []

Expand Down Expand Up @@ -249,6 +252,9 @@ def __init_subclass__(
if isinstance(column, Array):
column.base_column._meta._table = cls

if isinstance(column, Email):
email_columns.append(column)

if isinstance(column, Secret):
secret_columns.append(column)

Expand All @@ -275,6 +281,7 @@ def __init_subclass__(
columns=columns,
default_columns=default_columns,
non_default_columns=non_default_columns,
email_columns=email_columns,
primary_key=primary_key,
foreign_key_columns=foreign_key_columns,
json_columns=json_columns,
Expand Down
19 changes: 18 additions & 1 deletion tests/table/test_metaclass.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
from unittest import TestCase

from piccolo.columns import Secret
from piccolo.columns.column_types import JSON, JSONB, ForeignKey
from piccolo.columns.column_types import (
JSON,
JSONB,
Email,
ForeignKey,
Varchar,
)
from piccolo.table import Table
from tests.example_apps.music.tables import Band

Expand Down Expand Up @@ -76,6 +82,17 @@ class MyTable(Table):
MyTable._meta.json_columns, [MyTable.column_a, MyTable.column_b]
)

def test_email_columns(self):
"""
Make sure ``TableMeta.email_columns`` are setup correctly.
"""

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

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

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

0 comments on commit a6c8008

Please sign in to comment.