sqlakit 0.22.4__tar.gz → 0.22.6__tar.gz

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.
Files changed (34) hide show
  1. {sqlakit-0.22.4 → sqlakit-0.22.6}/PKG-INFO +1 -1
  2. {sqlakit-0.22.4 → sqlakit-0.22.6}/pyproject.toml +1 -1
  3. {sqlakit-0.22.4 → sqlakit-0.22.6}/pyproject.toml.orig +1 -1
  4. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_render.py +8 -11
  5. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_sql.py +11 -0
  6. {sqlakit-0.22.4 → sqlakit-0.22.6}/LICENSE +0 -0
  7. {sqlakit-0.22.4 → sqlakit-0.22.6}/README.md +0 -0
  8. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/__init__.py +0 -0
  9. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_base.py +0 -0
  10. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_cli.py +0 -0
  11. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_db.py +0 -0
  12. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_discovery.py +0 -0
  13. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_linters.py +0 -0
  14. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_model.py +0 -0
  15. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_project.py +0 -0
  16. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_pycharm.py +0 -0
  17. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_query.py +0 -0
  18. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_recording.py +0 -0
  19. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_registry.py +0 -0
  20. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_routing.py +0 -0
  21. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_sql_formatter.py +0 -0
  22. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/_static.py +0 -0
  23. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/asyncio/__init__.py +0 -0
  24. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/asyncio/_db.py +0 -0
  25. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/asyncio/_registry.py +0 -0
  26. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/asyncio/orm.py +0 -0
  27. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/asyncio/sql.py +0 -0
  28. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/exceptions.py +0 -0
  29. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/orm.py +0 -0
  30. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/py.typed +0 -0
  31. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/pytest_plugin.py +0 -0
  32. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/sql.py +0 -0
  33. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/testing.py +0 -0
  34. {sqlakit-0.22.4 → sqlakit-0.22.6}/sqlakit/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlakit
3
- Version: 0.22.4
3
+ Version: 0.22.6
4
4
  Summary: A toolkit for SQLAlchemy applications.
5
5
  Keywords: sqlalchemy,database,orm,sql,asyncio
6
6
  Author: Anton Ruhlov
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sqlakit"
3
- version = "0.22.4"
3
+ version = "0.22.6"
4
4
  description = "A toolkit for SQLAlchemy applications."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sqlakit"
3
- version = "0.22.4"
3
+ version = "0.22.6"
4
4
  description = "A toolkit for SQLAlchemy applications."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -278,23 +278,20 @@ def _place(
278
278
  starts = [0, *(index + 1 for index, char in enumerate(one.sql) if char == "\n")]
279
279
  for line, column in places:
280
280
  offset = starts[min(line, len(starts)) - 1] + column - 1
281
- text = one.sql[starts[line - 1] :].split("\n", 1)[0].strip()
281
+ written = one.sql[starts[line - 1] :].split("\n", 1)[0]
282
+ text = written.strip()
283
+ # The line the linter stopped on, and a caret under where it stopped.
284
+ indent = len(written) - len(written.lstrip())
285
+ shown = f"\n {text}\n {' ' * max(column - 1 - indent, 0)}^"
282
286
  piece = one.written_by(offset)
283
287
  if piece is not None:
284
- what = " ".join(one.sql[piece.start : piece.end].split())
285
- message = (
286
- f"{piece.call} writes SQL {linter.name} cannot parse, {{}}: {what}"
287
- )
288
+ message = f"{piece.call} writes SQL {linter.name} cannot parse, {{}}{shown}"
288
289
  key = (path, *piece.span, message)
289
290
  else:
290
291
  at = source.find(text) if text else -1
291
292
  start = max(at, 0)
292
- key = (
293
- path,
294
- start,
295
- start + len(text),
296
- f"{linter.name} cannot parse the rendered SQL, {{}}: {text}",
297
- )
293
+ message = f"{linter.name} cannot parse the rendered SQL, {{}}{shown}"
294
+ key = (path, start, start + len(text), message)
298
295
  ways = found.setdefault(key, [])
299
296
  if _WAYS[one.variant] not in ways:
300
297
  ways.append(_WAYS[one.variant])
@@ -1954,6 +1954,16 @@ def unless_set(value: Param, expr: Sql, otherwise: Sql = Sql("TRUE")) -> str: #
1954
1954
  return _grouped(str(otherwise if _is_set(value.value) else expr))
1955
1955
 
1956
1956
 
1957
+ @sql_macro(optional=True, lazy=True)
1958
+ def if_not_set(value: Param, expr: Sql, otherwise: Sql = Sql("TRUE")) -> str: # noqa: B008
1959
+ """`expr` when the parameter holds no value: another name for `unless_set`.
1960
+
1961
+ It reads as the other way round from `if_set`:
1962
+ `AND tpl.if_not_set(:status, status <> 'archived')`.
1963
+ """
1964
+ return _grouped(str(otherwise if _is_set(value.value) else expr))
1965
+
1966
+
1957
1967
  @sql_macro(optional=True)
1958
1968
  def array(ctx: Context, values: Param, type_name: Sql = Sql("")) -> str: # noqa: B008
1959
1969
  """Write a list as an array, one parameter per value.
@@ -2564,6 +2574,7 @@ BUILTIN_MACROS: Mapping[str, Macro] = {
2564
2574
  for macro in (
2565
2575
  if_set,
2566
2576
  unless_set,
2577
+ if_not_set,
2567
2578
  order_by,
2568
2579
  icontains,
2569
2580
  icollate,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes