Skip to content

Commit 527dd3b

Browse files
authored
server_onupdate cannot be a function. improve tests (#160)
1 parent 5981639 commit 527dd3b

File tree

4 files changed

+53
-30
lines changed

4 files changed

+53
-30
lines changed

sqlalchemy-stubs/sql/schema.pyi

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ _CP = TypeVar("_CP", bound=Computed)
5656
_ID = TypeVar("_ID", bound=Identity)
5757

5858
_ServerDefaultType = Union[FetchedValue, str, TextClause, ColumnElement[_T]]
59-
_ServerOnUpdateType = Union[FetchedValue, FunctionElement]
6059

6160
class SchemaItem(SchemaEventTarget, visitors.Visitable):
6261
__visit_name__: str = ...
@@ -145,7 +144,7 @@ class Column(DialectKWArgs, SchemaItem, ColumnClause[_TE]):
145144
nullable: bool = ...
146145
default: Optional[Any] = ...
147146
server_default: Optional[_ServerDefaultType[_TE]] = ...
148-
server_onupdate: Optional[_ServerOnUpdateType] = ...
147+
server_onupdate: Optional[FetchedValue] = ...
149148
index: Optional[bool] = ...
150149
unique: Optional[bool] = ...
151150
system: bool = ...
@@ -172,7 +171,7 @@ class Column(DialectKWArgs, SchemaItem, ColumnClause[_TE]):
172171
onupdate: Optional[Any] = ...,
173172
primary_key: bool = ...,
174173
server_default: Optional[_ServerDefaultType[Any]] = ...,
175-
server_onupdate: Optional[_ServerOnUpdateType] = ...,
174+
server_onupdate: Optional[FetchedValue] = ...,
176175
quote: Optional[bool] = ...,
177176
unique: Optional[bool] = ...,
178177
system: bool = ...,
@@ -193,7 +192,7 @@ class Column(DialectKWArgs, SchemaItem, ColumnClause[_TE]):
193192
onupdate: Optional[Any] = ...,
194193
primary_key: bool = ...,
195194
server_default: Optional[_ServerDefaultType[Any]] = ...,
196-
server_onupdate: Optional[_ServerOnUpdateType] = ...,
195+
server_onupdate: Optional[FetchedValue] = ...,
197196
quote: Optional[bool] = ...,
198197
unique: Optional[bool] = ...,
199198
system: bool = ...,
@@ -216,7 +215,7 @@ class Column(DialectKWArgs, SchemaItem, ColumnClause[_TE]):
216215
onupdate: Optional[Any] = ...,
217216
primary_key: bool = ...,
218217
server_default: Optional[_ServerDefaultType[_TE]] = ...,
219-
server_onupdate: Optional[_ServerOnUpdateType] = ...,
218+
server_onupdate: Optional[FetchedValue] = ...,
220219
quote: Optional[bool] = ...,
221220
unique: Optional[bool] = ...,
222221
system: bool = ...,
@@ -238,7 +237,7 @@ class Column(DialectKWArgs, SchemaItem, ColumnClause[_TE]):
238237
onupdate: Optional[Any] = ...,
239238
primary_key: bool = ...,
240239
server_default: Optional[_ServerDefaultType[_TE]] = ...,
241-
server_onupdate: Optional[_ServerOnUpdateType] = ...,
240+
server_onupdate: Optional[FetchedValue] = ...,
242241
quote: Optional[bool] = ...,
243242
unique: Optional[bool] = ...,
244243
system: bool = ...,

test/files/column_server_default.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from sqlalchemy import Boolean
2+
from sqlalchemy import Column
3+
from sqlalchemy import DateTime
4+
from sqlalchemy import FetchedValue
5+
from sqlalchemy import Integer
6+
from sqlalchemy import literal_column
7+
from sqlalchemy import text
8+
from sqlalchemy import true
9+
from sqlalchemy.orm import registry
10+
from sqlalchemy.sql import functions as func
11+
12+
reg: registry = registry()
13+
14+
15+
@reg.mapped
16+
class A:
17+
__tablename__ = "a"
18+
19+
b = Column(Boolean, nullable=False, server_default=true())
20+
c = Column(DateTime, server_default=func.now(), nullable=False)
21+
22+
# EXPECTED_MYPY: Cannot infer type argument 1 of "Column"
23+
d = Column(Boolean, server_default=func.now(), nullable=False)
24+
25+
e = Column(DateTime, server_default="now()")
26+
f = Column(DateTime, server_default=text("now()"))
27+
g = Column(DateTime, server_default=FetchedValue())
28+
h = Column(Boolean, server_default=literal_column("false", Boolean))
29+
30+
# overload 1: (__name: str, *args, ...)
31+
overload1: int = Column(
32+
"name", server_default=FetchedValue(), nullable=False
33+
)
34+
# overload 2: (*args, ...)
35+
Column(server_default="now()", nullable=False)
36+
# overload 3: (__name: str, __type: _TE, *args, ...)
37+
overload3 = Column(
38+
"name", Integer, server_default=text("now()"), nullable=False
39+
)
40+
# overload 4: (__type: _TE, *args, ...)
41+
overload4 = Column(
42+
Integer, server_default=literal_column("42", Integer), nullable=False
43+
)

test/files/column_server_default_ticket_81.py

Lines changed: 0 additions & 19 deletions
This file was deleted.

test/files/column_server_onupdate.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from sqlalchemy import Column
2+
from sqlalchemy import FetchedValue
23
from sqlalchemy.orm import registry
3-
from sqlalchemy.sql import functions as func
44
from sqlalchemy.types import Integer
55

66
reg: registry = registry()
@@ -11,10 +11,10 @@ class ColumnServerOnUpdateArgument:
1111
__tablename__ = "onupdate"
1212

1313
# overload 1: (__name: str, *args, ...)
14-
overload1: int = Column("name", server_onupdate=func.now(), nullable=False)
14+
overload1: int = Column("name", server_onupdate=FetchedValue(), nullable=False)
1515
# overload 2: (*args, ...)
16-
Column(server_onupdate=func.now(), nullable=False)
16+
Column(server_onupdate=FetchedValue(), nullable=False)
1717
# overload 3: (__name: str, __type: _TE, *args, ...)
18-
overload3 = Column("name", Integer, server_onupdate=func.now(), nullable=False)
18+
overload3 = Column("name", Integer, server_onupdate=FetchedValue(), nullable=False)
1919
# overload 4: (__type: _TE, *args, ...)
20-
overload4 = Column(Integer, server_onupdate=func.now(), nullable=False)
20+
overload4 = Column(Integer, server_onupdate=FetchedValue(), nullable=False)

0 commit comments

Comments
 (0)