sqlspec 0.13.1__py3-none-any.whl → 0.16.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of sqlspec might be problematic. Click here for more details.

Files changed (185) hide show
  1. sqlspec/__init__.py +71 -8
  2. sqlspec/__main__.py +12 -0
  3. sqlspec/__metadata__.py +1 -3
  4. sqlspec/_serialization.py +1 -2
  5. sqlspec/_sql.py +930 -136
  6. sqlspec/_typing.py +278 -142
  7. sqlspec/adapters/adbc/__init__.py +4 -3
  8. sqlspec/adapters/adbc/_types.py +12 -0
  9. sqlspec/adapters/adbc/config.py +116 -285
  10. sqlspec/adapters/adbc/driver.py +462 -340
  11. sqlspec/adapters/aiosqlite/__init__.py +18 -3
  12. sqlspec/adapters/aiosqlite/_types.py +13 -0
  13. sqlspec/adapters/aiosqlite/config.py +202 -150
  14. sqlspec/adapters/aiosqlite/driver.py +226 -247
  15. sqlspec/adapters/asyncmy/__init__.py +18 -3
  16. sqlspec/adapters/asyncmy/_types.py +12 -0
  17. sqlspec/adapters/asyncmy/config.py +80 -199
  18. sqlspec/adapters/asyncmy/driver.py +257 -215
  19. sqlspec/adapters/asyncpg/__init__.py +19 -4
  20. sqlspec/adapters/asyncpg/_types.py +17 -0
  21. sqlspec/adapters/asyncpg/config.py +81 -214
  22. sqlspec/adapters/asyncpg/driver.py +284 -359
  23. sqlspec/adapters/bigquery/__init__.py +17 -3
  24. sqlspec/adapters/bigquery/_types.py +12 -0
  25. sqlspec/adapters/bigquery/config.py +191 -299
  26. sqlspec/adapters/bigquery/driver.py +474 -634
  27. sqlspec/adapters/duckdb/__init__.py +14 -3
  28. sqlspec/adapters/duckdb/_types.py +12 -0
  29. sqlspec/adapters/duckdb/config.py +414 -397
  30. sqlspec/adapters/duckdb/driver.py +342 -393
  31. sqlspec/adapters/oracledb/__init__.py +19 -5
  32. sqlspec/adapters/oracledb/_types.py +14 -0
  33. sqlspec/adapters/oracledb/config.py +123 -458
  34. sqlspec/adapters/oracledb/driver.py +505 -531
  35. sqlspec/adapters/psqlpy/__init__.py +13 -3
  36. sqlspec/adapters/psqlpy/_types.py +11 -0
  37. sqlspec/adapters/psqlpy/config.py +93 -307
  38. sqlspec/adapters/psqlpy/driver.py +504 -213
  39. sqlspec/adapters/psycopg/__init__.py +19 -5
  40. sqlspec/adapters/psycopg/_types.py +17 -0
  41. sqlspec/adapters/psycopg/config.py +143 -472
  42. sqlspec/adapters/psycopg/driver.py +704 -825
  43. sqlspec/adapters/sqlite/__init__.py +14 -3
  44. sqlspec/adapters/sqlite/_types.py +11 -0
  45. sqlspec/adapters/sqlite/config.py +208 -142
  46. sqlspec/adapters/sqlite/driver.py +263 -278
  47. sqlspec/base.py +105 -9
  48. sqlspec/{statement/builder → builder}/__init__.py +12 -14
  49. sqlspec/{statement/builder/base.py → builder/_base.py} +184 -86
  50. sqlspec/{statement/builder/column.py → builder/_column.py} +97 -60
  51. sqlspec/{statement/builder/ddl.py → builder/_ddl.py} +61 -131
  52. sqlspec/{statement/builder → builder}/_ddl_utils.py +4 -10
  53. sqlspec/{statement/builder/delete.py → builder/_delete.py} +10 -30
  54. sqlspec/builder/_insert.py +421 -0
  55. sqlspec/builder/_merge.py +71 -0
  56. sqlspec/{statement/builder → builder}/_parsing_utils.py +49 -26
  57. sqlspec/builder/_select.py +170 -0
  58. sqlspec/{statement/builder/update.py → builder/_update.py} +16 -20
  59. sqlspec/builder/mixins/__init__.py +55 -0
  60. sqlspec/builder/mixins/_cte_and_set_ops.py +222 -0
  61. sqlspec/{statement/builder/mixins/_delete_from.py → builder/mixins/_delete_operations.py} +8 -1
  62. sqlspec/builder/mixins/_insert_operations.py +244 -0
  63. sqlspec/{statement/builder/mixins/_join.py → builder/mixins/_join_operations.py} +45 -13
  64. sqlspec/{statement/builder/mixins/_merge_clauses.py → builder/mixins/_merge_operations.py} +188 -30
  65. sqlspec/builder/mixins/_order_limit_operations.py +135 -0
  66. sqlspec/builder/mixins/_pivot_operations.py +153 -0
  67. sqlspec/builder/mixins/_select_operations.py +604 -0
  68. sqlspec/builder/mixins/_update_operations.py +202 -0
  69. sqlspec/builder/mixins/_where_clause.py +644 -0
  70. sqlspec/cli.py +247 -0
  71. sqlspec/config.py +183 -138
  72. sqlspec/core/__init__.py +63 -0
  73. sqlspec/core/cache.py +871 -0
  74. sqlspec/core/compiler.py +417 -0
  75. sqlspec/core/filters.py +830 -0
  76. sqlspec/core/hashing.py +310 -0
  77. sqlspec/core/parameters.py +1237 -0
  78. sqlspec/core/result.py +677 -0
  79. sqlspec/{statement → core}/splitter.py +321 -191
  80. sqlspec/core/statement.py +676 -0
  81. sqlspec/driver/__init__.py +7 -10
  82. sqlspec/driver/_async.py +422 -163
  83. sqlspec/driver/_common.py +545 -287
  84. sqlspec/driver/_sync.py +426 -160
  85. sqlspec/driver/mixins/__init__.py +2 -13
  86. sqlspec/driver/mixins/_result_tools.py +193 -0
  87. sqlspec/driver/mixins/_sql_translator.py +65 -14
  88. sqlspec/exceptions.py +5 -252
  89. sqlspec/extensions/aiosql/adapter.py +93 -96
  90. sqlspec/extensions/litestar/__init__.py +2 -1
  91. sqlspec/extensions/litestar/cli.py +48 -0
  92. sqlspec/extensions/litestar/config.py +0 -1
  93. sqlspec/extensions/litestar/handlers.py +15 -26
  94. sqlspec/extensions/litestar/plugin.py +21 -16
  95. sqlspec/extensions/litestar/providers.py +17 -52
  96. sqlspec/loader.py +423 -104
  97. sqlspec/migrations/__init__.py +35 -0
  98. sqlspec/migrations/base.py +414 -0
  99. sqlspec/migrations/commands.py +443 -0
  100. sqlspec/migrations/loaders.py +402 -0
  101. sqlspec/migrations/runner.py +213 -0
  102. sqlspec/migrations/tracker.py +140 -0
  103. sqlspec/migrations/utils.py +129 -0
  104. sqlspec/protocols.py +51 -186
  105. sqlspec/storage/__init__.py +1 -1
  106. sqlspec/storage/backends/base.py +37 -40
  107. sqlspec/storage/backends/fsspec.py +136 -112
  108. sqlspec/storage/backends/obstore.py +138 -160
  109. sqlspec/storage/capabilities.py +5 -4
  110. sqlspec/storage/registry.py +57 -106
  111. sqlspec/typing.py +136 -115
  112. sqlspec/utils/__init__.py +2 -2
  113. sqlspec/utils/correlation.py +0 -3
  114. sqlspec/utils/deprecation.py +6 -6
  115. sqlspec/utils/fixtures.py +6 -6
  116. sqlspec/utils/logging.py +0 -2
  117. sqlspec/utils/module_loader.py +7 -12
  118. sqlspec/utils/singleton.py +0 -1
  119. sqlspec/utils/sync_tools.py +17 -38
  120. sqlspec/utils/text.py +12 -51
  121. sqlspec/utils/type_guards.py +482 -235
  122. {sqlspec-0.13.1.dist-info → sqlspec-0.16.2.dist-info}/METADATA +7 -2
  123. sqlspec-0.16.2.dist-info/RECORD +134 -0
  124. sqlspec-0.16.2.dist-info/entry_points.txt +2 -0
  125. sqlspec/driver/connection.py +0 -207
  126. sqlspec/driver/mixins/_csv_writer.py +0 -91
  127. sqlspec/driver/mixins/_pipeline.py +0 -512
  128. sqlspec/driver/mixins/_result_utils.py +0 -140
  129. sqlspec/driver/mixins/_storage.py +0 -926
  130. sqlspec/driver/mixins/_type_coercion.py +0 -130
  131. sqlspec/driver/parameters.py +0 -138
  132. sqlspec/service/__init__.py +0 -4
  133. sqlspec/service/_util.py +0 -147
  134. sqlspec/service/base.py +0 -1131
  135. sqlspec/service/pagination.py +0 -26
  136. sqlspec/statement/__init__.py +0 -21
  137. sqlspec/statement/builder/insert.py +0 -288
  138. sqlspec/statement/builder/merge.py +0 -95
  139. sqlspec/statement/builder/mixins/__init__.py +0 -65
  140. sqlspec/statement/builder/mixins/_aggregate_functions.py +0 -250
  141. sqlspec/statement/builder/mixins/_case_builder.py +0 -91
  142. sqlspec/statement/builder/mixins/_common_table_expr.py +0 -90
  143. sqlspec/statement/builder/mixins/_from.py +0 -63
  144. sqlspec/statement/builder/mixins/_group_by.py +0 -118
  145. sqlspec/statement/builder/mixins/_having.py +0 -35
  146. sqlspec/statement/builder/mixins/_insert_from_select.py +0 -47
  147. sqlspec/statement/builder/mixins/_insert_into.py +0 -36
  148. sqlspec/statement/builder/mixins/_insert_values.py +0 -67
  149. sqlspec/statement/builder/mixins/_limit_offset.py +0 -53
  150. sqlspec/statement/builder/mixins/_order_by.py +0 -46
  151. sqlspec/statement/builder/mixins/_pivot.py +0 -79
  152. sqlspec/statement/builder/mixins/_returning.py +0 -37
  153. sqlspec/statement/builder/mixins/_select_columns.py +0 -61
  154. sqlspec/statement/builder/mixins/_set_ops.py +0 -122
  155. sqlspec/statement/builder/mixins/_unpivot.py +0 -77
  156. sqlspec/statement/builder/mixins/_update_from.py +0 -55
  157. sqlspec/statement/builder/mixins/_update_set.py +0 -94
  158. sqlspec/statement/builder/mixins/_update_table.py +0 -29
  159. sqlspec/statement/builder/mixins/_where.py +0 -401
  160. sqlspec/statement/builder/mixins/_window_functions.py +0 -86
  161. sqlspec/statement/builder/select.py +0 -221
  162. sqlspec/statement/filters.py +0 -596
  163. sqlspec/statement/parameter_manager.py +0 -220
  164. sqlspec/statement/parameters.py +0 -867
  165. sqlspec/statement/pipelines/__init__.py +0 -210
  166. sqlspec/statement/pipelines/analyzers/__init__.py +0 -9
  167. sqlspec/statement/pipelines/analyzers/_analyzer.py +0 -646
  168. sqlspec/statement/pipelines/context.py +0 -115
  169. sqlspec/statement/pipelines/transformers/__init__.py +0 -7
  170. sqlspec/statement/pipelines/transformers/_expression_simplifier.py +0 -88
  171. sqlspec/statement/pipelines/transformers/_literal_parameterizer.py +0 -1247
  172. sqlspec/statement/pipelines/transformers/_remove_comments_and_hints.py +0 -76
  173. sqlspec/statement/pipelines/validators/__init__.py +0 -23
  174. sqlspec/statement/pipelines/validators/_dml_safety.py +0 -290
  175. sqlspec/statement/pipelines/validators/_parameter_style.py +0 -370
  176. sqlspec/statement/pipelines/validators/_performance.py +0 -718
  177. sqlspec/statement/pipelines/validators/_security.py +0 -967
  178. sqlspec/statement/result.py +0 -435
  179. sqlspec/statement/sql.py +0 -1704
  180. sqlspec/statement/sql_compiler.py +0 -140
  181. sqlspec/utils/cached_property.py +0 -25
  182. sqlspec-0.13.1.dist-info/RECORD +0 -150
  183. {sqlspec-0.13.1.dist-info → sqlspec-0.16.2.dist-info}/WHEEL +0 -0
  184. {sqlspec-0.13.1.dist-info → sqlspec-0.16.2.dist-info}/licenses/LICENSE +0 -0
  185. {sqlspec-0.13.1.dist-info → sqlspec-0.16.2.dist-info}/licenses/NOTICE +0 -0
@@ -1,7 +1,7 @@
1
1
  from typing import TYPE_CHECKING, Any, Union
2
2
 
3
3
  from litestar.di import Provide
4
- from litestar.plugins import InitPluginProtocol
4
+ from litestar.plugins import CLIPlugin, InitPluginProtocol
5
5
 
6
6
  from sqlspec.base import SQLSpec as SQLSpecBase
7
7
  from sqlspec.config import AsyncConfigT, DatabaseConfigProtocol, DriverT, SyncConfigT
@@ -17,16 +17,16 @@ if TYPE_CHECKING:
17
17
  logger = get_logger("extensions.litestar")
18
18
 
19
19
 
20
- class SQLSpec(InitPluginProtocol, SQLSpecBase):
21
- """SQLSpec plugin."""
20
+ class SQLSpec(InitPluginProtocol, CLIPlugin, SQLSpecBase):
21
+ """Litestar plugin for SQLSpec database integration."""
22
22
 
23
23
  __slots__ = ("_config", "_plugin_configs")
24
24
 
25
25
  def __init__(self, config: Union["SyncConfigT", "AsyncConfigT", "DatabaseConfig", list["DatabaseConfig"]]) -> None:
26
- """Initialize ``SQLSpecPlugin``.
26
+ """Initialize SQLSpec plugin.
27
27
 
28
28
  Args:
29
- config: configure SQLSpec plugin for use with Litestar.
29
+ config: Database configuration for SQLSpec plugin.
30
30
  """
31
31
  self._configs: dict[Any, DatabaseConfigProtocol[Any, Any, Any]] = {}
32
32
  if isinstance(config, DatabaseConfigProtocol):
@@ -38,24 +38,31 @@ class SQLSpec(InitPluginProtocol, SQLSpecBase):
38
38
 
39
39
  @property
40
40
  def config(self) -> "list[DatabaseConfig]": # pyright: ignore[reportInvalidTypeVarUse]
41
- """Return the plugin config.
41
+ """Return the plugin configuration.
42
42
 
43
43
  Returns:
44
- ConfigManager.
44
+ List of database configurations.
45
45
  """
46
46
  return self._plugin_configs
47
47
 
48
48
  def on_cli_init(self, cli: "Group") -> None:
49
- """Configure the CLI for use with SQLSpec."""
49
+ """Configure CLI commands for SQLSpec database operations.
50
+
51
+ Args:
52
+ cli: The Click command group to add commands to.
53
+ """
54
+ from sqlspec.extensions.litestar.cli import database_group
55
+
56
+ cli.add_command(database_group)
50
57
 
51
58
  def on_app_init(self, app_config: "AppConfig") -> "AppConfig":
52
- """Configure application for use with SQLSpec.
59
+ """Configure Litestar application with SQLSpec database integration.
53
60
 
54
61
  Args:
55
- app_config: The :class:`AppConfig <.config.app.AppConfig>` instance.
62
+ app_config: The Litestar application configuration instance.
56
63
 
57
64
  Returns:
58
- The updated :class:`AppConfig <.config.app.AppConfig>` instance.
65
+ The updated application configuration instance.
59
66
  """
60
67
 
61
68
  self._validate_dependency_keys()
@@ -64,7 +71,6 @@ class SQLSpec(InitPluginProtocol, SQLSpecBase):
64
71
  app_config.state.sqlspec = self
65
72
 
66
73
  app_config.on_startup.append(store_sqlspec_in_state)
67
- # Register types for injection
68
74
  app_config.signature_types.extend(
69
75
  [SQLSpec, ConnectionT, PoolT, DriverT, DatabaseConfig, DatabaseConfigProtocol, SyncConfigT, AsyncConfigT]
70
76
  )
@@ -78,8 +84,7 @@ class SQLSpec(InitPluginProtocol, SQLSpecBase):
78
84
  app_config.signature_types.append(c.config.driver_type) # type: ignore[union-attr]
79
85
 
80
86
  if hasattr(c.config, "get_signature_namespace"):
81
- config_namespace = c.config.get_signature_namespace() # type: ignore[attr-defined]
82
- signature_namespace.update(config_namespace)
87
+ signature_namespace.update(c.config.get_signature_namespace()) # type: ignore[attr-defined]
83
88
 
84
89
  app_config.before_send.append(c.before_send_handler)
85
90
  app_config.lifespan.append(c.lifespan_handler) # pyright: ignore[reportUnknownMemberType]
@@ -125,10 +130,10 @@ class SQLSpec(InitPluginProtocol, SQLSpecBase):
125
130
  raise KeyError(msg)
126
131
 
127
132
  def _validate_dependency_keys(self) -> None:
128
- """Verify uniqueness of ``connection_key`` and ``pool_key``.
133
+ """Validate that connection and pool keys are unique across configurations.
129
134
 
130
135
  Raises:
131
- ImproperConfigurationError: If session keys or pool keys are not unique.
136
+ ImproperConfigurationError: If connection keys or pool keys are not unique.
132
137
  """
133
138
  connection_keys = [c.connection_key for c in self.config]
134
139
  pool_keys = [c.pool_key for c in self.config]
@@ -2,8 +2,6 @@
2
2
  """Application dependency providers generators.
3
3
 
4
4
  This module contains functions to create dependency providers for services and filters.
5
-
6
- You should not have modify this module very often and should only be invoked under normal usage.
7
5
  """
8
6
 
9
7
  import datetime
@@ -16,7 +14,7 @@ from litestar.di import Provide
16
14
  from litestar.params import Dependency, Parameter
17
15
  from typing_extensions import NotRequired
18
16
 
19
- from sqlspec.statement.filters import (
17
+ from sqlspec.core.filters import (
20
18
  BeforeAfterFilter,
21
19
  FilterTypes,
22
20
  InCollectionFilter,
@@ -59,69 +57,44 @@ HashableType = Union[HashableValue, tuple[Any, ...], tuple[tuple[str, Any], ...]
59
57
 
60
58
  class DependencyDefaults:
61
59
  FILTERS_DEPENDENCY_KEY: str = "filters"
62
- """Key for the filters dependency."""
63
60
  CREATED_FILTER_DEPENDENCY_KEY: str = "created_filter"
64
- """Key for the created filter dependency."""
65
61
  ID_FILTER_DEPENDENCY_KEY: str = "id_filter"
66
- """Key for the id filter dependency."""
67
62
  LIMIT_OFFSET_FILTER_DEPENDENCY_KEY: str = "limit_offset_filter"
68
- """Key for the limit offset dependency."""
69
63
  UPDATED_FILTER_DEPENDENCY_KEY: str = "updated_filter"
70
- """Key for the updated filter dependency."""
71
64
  ORDER_BY_FILTER_DEPENDENCY_KEY: str = "order_by_filter"
72
- """Key for the order by dependency."""
73
65
  SEARCH_FILTER_DEPENDENCY_KEY: str = "search_filter"
74
- """Key for the search filter dependency."""
75
66
  DEFAULT_PAGINATION_SIZE: int = 20
76
- """Default pagination size."""
77
67
 
78
68
 
79
69
  DEPENDENCY_DEFAULTS = DependencyDefaults()
80
70
 
81
71
 
82
72
  class FieldNameType(NamedTuple):
83
- """Type for field name and associated type information.
84
-
85
- This allows for specifying both the field name and the expected type for filter values.
86
- """
73
+ """Type for field name and associated type information for filter configuration."""
87
74
 
88
75
  name: str
89
- """Name of the field to filter on."""
90
76
  type_hint: type[Any] = str
91
- """Type of the filter value. Defaults to str."""
92
77
 
93
78
 
94
79
  class FilterConfig(TypedDict):
95
80
  """Configuration for generating dynamic filters."""
96
81
 
97
82
  id_filter: NotRequired[type[Union[UUID, int, str]]]
98
- """Indicates that the id filter should be enabled. When set, the type specified will be used for the :class:`CollectionFilter`."""
99
83
  id_field: NotRequired[str]
100
- """The field on the model that stored the primary key or identifier."""
101
84
  sort_field: NotRequired[str]
102
- """The default field to use for the sort filter."""
103
85
  sort_order: NotRequired[SortOrder]
104
- """The default order to use for the sort filter."""
105
86
  pagination_type: NotRequired[Literal["limit_offset"]]
106
- """When set, pagination is enabled based on the type specified."""
107
87
  pagination_size: NotRequired[int]
108
- """The size of the pagination. Defaults to `DEFAULT_PAGINATION_SIZE`."""
109
88
  search: NotRequired[Union[str, set[str], list[str]]]
110
- """Fields to enable search on. Can be a comma-separated string or a set of field names."""
111
89
  search_ignore_case: NotRequired[bool]
112
- """When set, search is case insensitive by default."""
113
90
  created_at: NotRequired[bool]
114
- """When set, created_at filter is enabled."""
115
91
  updated_at: NotRequired[bool]
116
- """When set, updated_at filter is enabled."""
117
92
  not_in_fields: NotRequired[Union[FieldNameType, set[FieldNameType], list[Union[str, FieldNameType]]]]
118
- """Fields that support not-in collection filters. Can be a single field or a set of fields with type information."""
119
93
  in_fields: NotRequired[Union[FieldNameType, set[FieldNameType], list[Union[str, FieldNameType]]]]
120
- """Fields that support in-collection filters. Can be a single field or a set of fields with type information."""
121
94
 
122
95
 
123
96
  class DependencyCache(metaclass=SingletonMeta):
124
- """Simple dependency cache for the application. This is used to help memoize dependencies that are generated dynamically."""
97
+ """Dependency cache for memoizing dynamically generated dependencies."""
125
98
 
126
99
  def __init__(self) -> None:
127
100
  self.dependencies: dict[Union[int, str], dict[str, Provide]] = {}
@@ -148,9 +121,7 @@ def create_filter_dependencies(
148
121
  Returns:
149
122
  A dependency provider function for the combined filter function.
150
123
  """
151
- cache_key = hash(_make_hashable(config))
152
- deps = dep_cache.get_dependencies(cache_key)
153
- if deps is not None:
124
+ if (deps := dep_cache.get_dependencies(cache_key := hash(_make_hashable(config)))) is not None:
154
125
  return deps
155
126
  deps = _create_statement_filters(config, dep_defaults)
156
127
  dep_cache.add_dependencies(cache_key, deps)
@@ -158,13 +129,7 @@ def create_filter_dependencies(
158
129
 
159
130
 
160
131
  def _make_hashable(value: Any) -> HashableType:
161
- """Convert a value into a hashable type.
162
-
163
- This function converts any value into a hashable type by:
164
- - Converting dictionaries to sorted tuples of (key, value) pairs
165
- - Converting lists and sets to sorted tuples
166
- - Preserving primitive types (str, int, float, bool, None)
167
- - Converting any other type to its string representation
132
+ """Convert a value into a hashable type for caching purposes.
168
133
 
169
134
  Args:
170
135
  value: Any value that needs to be made hashable.
@@ -175,12 +140,12 @@ def _make_hashable(value: Any) -> HashableType:
175
140
  if isinstance(value, dict):
176
141
  items = []
177
142
  for k in sorted(value.keys()): # pyright: ignore
178
- v = value[k] # pyright: ignore
179
- items.append((str(k), _make_hashable(v))) # pyright: ignore
180
- return tuple(items) # pyright: ignore
143
+ v = value[k]
144
+ items.append((str(k), _make_hashable(v)))
145
+ return tuple(items)
181
146
  if isinstance(value, (list, set)):
182
- hashable_items = [_make_hashable(item) for item in value] # pyright: ignore
183
- filtered_items = [item for item in hashable_items if item is not None] # pyright: ignore
147
+ hashable_items = [_make_hashable(item) for item in value]
148
+ filtered_items = [item for item in hashable_items if item is not None]
184
149
  return tuple(sorted(filtered_items, key=str))
185
150
  if isinstance(value, (str, int, float, bool, type(None))):
186
151
  return value
@@ -193,11 +158,11 @@ def _create_statement_filters(
193
158
  """Create filter dependencies based on configuration.
194
159
 
195
160
  Args:
196
- config (FilterConfig): Configuration dictionary specifying which filters to enable
197
- dep_defaults (DependencyDefaults): Dependency defaults to use for the filter dependencies
161
+ config: Configuration dictionary specifying which filters to enable
162
+ dep_defaults: Dependency defaults to use for the filter dependencies
198
163
 
199
164
  Returns:
200
- dict[str, Provide]: Dictionary of filter provider functions
165
+ Dictionary of filter provider functions
201
166
  """
202
167
  filters: dict[str, Provide] = {}
203
168
 
@@ -343,13 +308,13 @@ def _create_statement_filters(
343
308
 
344
309
 
345
310
  def _create_filter_aggregate_function(config: FilterConfig) -> Callable[..., list[FilterTypes]]:
346
- """Create a filter function based on the provided configuration.
311
+ """Create filter aggregation function based on configuration.
347
312
 
348
313
  Args:
349
314
  config: The filter configuration.
350
315
 
351
316
  Returns:
352
- A function that returns a list of filters based on the configuration.
317
+ Function that returns list of configured filters.
353
318
  """
354
319
 
355
320
  parameters: dict[str, inspect.Parameter] = {}
@@ -432,13 +397,13 @@ def _create_filter_aggregate_function(config: FilterConfig) -> Callable[..., lis
432
397
  annotations[f"{field_def.name}_in_filter"] = InCollectionFilter[field_def.type_hint] # type: ignore
433
398
 
434
399
  def provide_filters(**kwargs: FilterTypes) -> list[FilterTypes]:
435
- """Provide filter dependencies based on configuration.
400
+ """Aggregate filter dependencies based on configuration.
436
401
 
437
402
  Args:
438
403
  **kwargs: Filter parameters dynamically provided based on configuration.
439
404
 
440
405
  Returns:
441
- list[FilterTypes]: List of configured filters.
406
+ List of configured filters.
442
407
  """
443
408
  filters: list[FilterTypes] = []
444
409
  if id_filter := kwargs.get("id_filter"):