Skip to content

Commit 3a52888

Browse files
committed
chore(views): Add typing annotations
1 parent 1bdfbc3 commit 3a52888

File tree

1 file changed

+84
-33
lines changed

1 file changed

+84
-33
lines changed

sqlalchemy_utils/view.py

Lines changed: 84 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
1+
from typing import Any, Dict, List, Optional, TYPE_CHECKING
2+
13
import sqlalchemy as sa
24
from sqlalchemy.ext import compiler
35
from sqlalchemy.schema import DDLElement, PrimaryKeyConstraint
46

57
from sqlalchemy_utils.functions import get_columns
68

9+
if TYPE_CHECKING:
10+
from sqlalchemy.engine.default import DefaultDialect
11+
from sqlalchemy.orm import Session
12+
from sqlalchemy.sql import Selectable
13+
from sqlalchemy.sql.compiler import SQLCompiler
14+
715

8-
def _prepare_view_identifier(dialect, view_name, schema=None):
16+
def _prepare_view_identifier(
17+
dialect: 'DefaultDialect',
18+
view_name: str,
19+
schema: Optional[str] = None,
20+
) -> str:
921
quoted_view_name = dialect.identifier_preparer.quote(view_name)
1022
if schema:
1123
return dialect.identifier_preparer.quote_schema(schema) + '.' + quoted_view_name
@@ -14,14 +26,23 @@ def _prepare_view_identifier(dialect, view_name, schema=None):
1426

1527

1628
class CreateView(DDLElement):
17-
def __init__(self, name, selectable, schema=None):
29+
def __init__(
30+
self,
31+
name: str,
32+
selectable: 'Selectable',
33+
schema: Optional[str] = None,
34+
):
1835
self.name = name
1936
self.selectable = selectable
2037
self.schema = schema
2138

2239

2340
@compiler.compiles(CreateView)
24-
def compile_create_view(element, compiler, **kw):
41+
def compile_create_view(
42+
element: 'CreateView',
43+
compiler: 'SQLCompiler',
44+
**kw: Any,
45+
) -> str:
2546
view_identifier = _prepare_view_identifier(
2647
compiler.dialect, element.name, element.schema
2748
)
@@ -32,14 +53,19 @@ def compile_create_view(element, compiler, **kw):
3253

3354

3455
class DropView(DDLElement):
35-
def __init__(self, name, schema=None, cascade=None):
56+
def __init__(
57+
self,
58+
name: str,
59+
schema: Optional[str] = None,
60+
cascade: Optional[bool] = None,
61+
):
3662
self.name = name
3763
self.schema = schema
3864
self.cascade = cascade
3965

4066

4167
@compiler.compiles(DropView)
42-
def compile_drop_view(element, compiler, **kw):
68+
def compile_drop_view(element: 'DropView', compiler: 'SQLCompiler', **kw: Any) -> str:
4369
view_identifier = _prepare_view_identifier(
4470
compiler.dialect, element.name, element.schema
4571
)
@@ -53,15 +79,25 @@ def compile_drop_view(element, compiler, **kw):
5379

5480

5581
class CreateMaterializedView(DDLElement):
56-
def __init__(self, name, selectable, schema=None, populate=None):
82+
def __init__(
83+
self,
84+
name: str,
85+
selectable: 'Selectable',
86+
schema: Optional[str] = None,
87+
populate: Optional[bool] = None,
88+
):
5789
self.name = name
5890
self.selectable = selectable
5991
self.schema = schema
6092
self.populate = populate
6193

6294

6395
@compiler.compiles(CreateMaterializedView)
64-
def compile_create_materialized_view(element, compiler, **kw):
96+
def compile_create_materialized_view(
97+
element: 'CreateMaterializedView',
98+
compiler: 'SQLCompiler',
99+
**kw: Any,
100+
) -> str:
65101
view_identifier = _prepare_view_identifier(
66102
dialect=compiler.dialect, view_name=element.name, schema=element.schema
67103
)
@@ -78,14 +114,23 @@ def compile_create_materialized_view(element, compiler, **kw):
78114

79115

80116
class DropMaterializedView(DDLElement):
81-
def __init__(self, name, schema=None, cascade=None):
117+
def __init__(
118+
self,
119+
name: str,
120+
schema: Optional[str] = None,
121+
cascade: Optional[bool] = None,
122+
):
82123
self.name = name
83124
self.schema = schema
84125
self.cascade = cascade
85126

86127

87128
@compiler.compiles(DropMaterializedView)
88-
def compile_drop_materialized_view(element, compiler, **kw):
129+
def compile_drop_materialized_view(
130+
element: 'DropMaterializedView',
131+
compiler: 'SQLCompiler',
132+
**kw: Any,
133+
) -> str:
89134
view_identifier = _prepare_view_identifier(
90135
dialect=compiler.dialect, view_name=element.name, schema=element.schema
91136
)
@@ -98,14 +143,14 @@ def compile_drop_materialized_view(element, compiler, **kw):
98143

99144

100145
def create_table_from_selectable(
101-
name,
102-
selectable,
103-
indexes=None,
104-
metadata=None,
105-
aliases=None,
106-
schema=None,
107-
**kwargs
108-
):
146+
name: str,
147+
selectable: 'Selectable',
148+
indexes: Optional[List[sa.Index]] = None,
149+
metadata: Optional[sa.MetaData] = None,
150+
aliases: Optional[Dict[str, str]] = None,
151+
schema: Optional[str] = None,
152+
**kwargs: Any,
153+
) -> sa.Table:
109154
if indexes is None:
110155
indexes = []
111156
if metadata is None:
@@ -131,16 +176,16 @@ def create_table_from_selectable(
131176

132177

133178
def create_materialized_view(
134-
name,
135-
selectable,
136-
metadata,
137-
indexes=None,
138-
aliases=None,
179+
name: str,
180+
selectable: 'Selectable',
181+
metadata: sa.MetaData,
182+
indexes: Optional[List[sa.Index]] = None,
183+
aliases: Optional[Dict[str, str]] = None,
139184
*,
140-
schema=None,
141-
populate=None,
142-
cascade_on_drop=None,
143-
):
185+
schema: Optional[str] = None,
186+
populate: Optional[bool] = None,
187+
cascade_on_drop: Optional[bool] = None,
188+
) -> sa.Table:
144189
""" Create a view on a given metadata
145190
146191
:param name: The name of the view to create.
@@ -197,13 +242,13 @@ def create_indexes(target, connection, **kw):
197242

198243

199244
def create_view(
200-
name,
201-
selectable,
202-
metadata,
245+
name: str,
246+
selectable: 'Selectable',
247+
metadata: sa.MetaData,
203248
*,
204-
schema=None,
205-
cascade_on_drop=None,
206-
):
249+
schema: Optional[str] = None,
250+
cascade_on_drop: Optional[str] = None,
251+
) -> sa.Table:
207252
""" Create a view on a given metadata
208253
209254
:param name: The name of the view to create.
@@ -267,7 +312,13 @@ def create_indexes(target, connection, **kw):
267312
return table
268313

269314

270-
def refresh_materialized_view(session, name, concurrently=False, *, schema=None):
315+
def refresh_materialized_view(
316+
session: 'Session',
317+
name: str,
318+
concurrently: bool = False,
319+
*,
320+
schema: Optional[str] = None,
321+
) -> None:
271322
""" Refreshes an already existing materialized view
272323
273324
:param session: An SQLAlchemy Session instance.

0 commit comments

Comments
 (0)