pgdevkit 0.3.6__tar.gz → 0.3.8__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 (108) hide show
  1. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/PKG-INFO +1 -1
  2. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/fetch_missing.py +2 -2
  3. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/parser.py +10 -0
  4. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/schema.py +3 -1
  5. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pyproject.toml +1 -1
  6. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/uv.lock +1 -1
  7. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/.github/workflows/python-publish.yml +0 -0
  8. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/.github/workflows/python-test.yml +0 -0
  9. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/.gitignore +0 -0
  10. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/.python-version +0 -0
  11. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/README.md +0 -0
  12. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/docs/database-layout.md +0 -0
  13. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/__init__.py +0 -0
  14. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/backends/__init__.py +0 -0
  15. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/backends/base.py +0 -0
  16. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/backends/mssql.py +0 -0
  17. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/backends/postgres.py +0 -0
  18. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/cli.py +0 -0
  19. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/connection.py +0 -0
  20. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/db/__init__.py +0 -0
  21. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/db/complex_types.py +0 -0
  22. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/db/connection.py +0 -0
  23. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/db/crud.py +0 -0
  24. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/db/loader.py +0 -0
  25. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/db/model.py +0 -0
  26. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/db/mssql_crud.py +0 -0
  27. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/db/mssql_sql.py +0 -0
  28. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/dialect.py +0 -0
  29. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/diff.py +0 -0
  30. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/introspect.py +0 -0
  31. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/lakebase.py +0 -0
  32. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/migrate.py +0 -0
  33. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/models.py +0 -0
  34. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/mssql_introspect.py +0 -0
  35. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/__init__.py +0 -0
  36. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/_docker.py +0 -0
  37. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/api.py +0 -0
  38. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/config.py +0 -0
  39. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/constants.py +0 -0
  40. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/container.py +0 -0
  41. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/mssql/__init__.py +0 -0
  42. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/mssql/api.py +0 -0
  43. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/mssql/constants.py +0 -0
  44. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/mssql/container.py +0 -0
  45. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/naming.py +0 -0
  46. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/pgdevkit/testdb/query.py +0 -0
  47. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/skills/pgdevkit/SKILL.md +0 -0
  48. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/skills/pgdevkit/references/dynamic-sql.md +0 -0
  49. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/skills/pgdevkit/references/temporal-tables.md +0 -0
  50. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/__init__.py +0 -0
  51. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/conftest.py +0 -0
  52. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/db/__init__.py +0 -0
  53. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/db/test_complex_types.py +0 -0
  54. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/db/test_connection.py +0 -0
  55. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/db/test_crud.py +0 -0
  56. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/db/test_loader.py +0 -0
  57. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/db/test_mssql_crud_live.py +0 -0
  58. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/db/test_mssql_crud_sql.py +0 -0
  59. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/fixtures/01_schema.sql +0 -0
  60. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/fixtures/02_types.sql +0 -0
  61. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/fixtures/03_tables.sql +0 -0
  62. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/fixtures/04_views.sql +0 -0
  63. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/fixtures/05_functions.sql +0 -0
  64. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/fixtures/06_indexes.sql +0 -0
  65. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_cli_compare.py +0 -0
  66. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_compare.py +0 -0
  67. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_compare_mssql_live.py +0 -0
  68. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_connection.py +0 -0
  69. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_dialect.py +0 -0
  70. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_diff_mssql.py +0 -0
  71. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_fetch_missing.py +0 -0
  72. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_fetch_missing_cli.py +0 -0
  73. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_lakebase.py +0 -0
  74. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_migrate.py +0 -0
  75. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_mssql_introspect.py +0 -0
  76. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/test_parser_mssql.py +0 -0
  77. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/__init__.py +0 -0
  78. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/conftest.py +0 -0
  79. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/migrations/001_add_gadget_note.sql +0 -0
  80. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/tables/gadget.sql +0 -0
  81. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/tables/gadget.test_data.json +0 -0
  82. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/tables/widget.sql +0 -0
  83. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/tables/widget.test_data.json +0 -0
  84. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/tables/widget_part.sql +0 -0
  85. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/tables/widget_part_detail.sql +0 -0
  86. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/types/dimensions.sql +0 -0
  87. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/types/mood.sql +0 -0
  88. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/views/a_wrapper_view.sql +0 -0
  89. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/app/views/b_base_view.sql +0 -0
  90. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database/schema/app.sql +0 -0
  91. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database_mssql/app/tables/widget.sql +0 -0
  92. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database_mssql/app/tables/widget.test_data.json +0 -0
  93. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database_mssql/app/views/a_wrapper_view.sql +0 -0
  94. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database_mssql/app/views/b_base_view.sql +0 -0
  95. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/fixtures/database_mssql/schema/app.sql +0 -0
  96. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_api.py +0 -0
  97. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_api_mssql.py +0 -0
  98. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_api_mssql_live.py +0 -0
  99. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_cli.py +0 -0
  100. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_config.py +0 -0
  101. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_config_mssql.py +0 -0
  102. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_constants.py +0 -0
  103. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_container.py +0 -0
  104. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_mssql_constants.py +0 -0
  105. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_naming.py +0 -0
  106. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_query.py +0 -0
  107. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_schema.py +0 -0
  108. {pgdevkit-0.3.6 → pgdevkit-0.3.8}/tests/testdb/test_schema_mssql.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: pgdevkit
3
- Version: 0.3.6
3
+ Version: 0.3.8
4
4
  Summary: A helper for developing with Postgres
5
5
  Requires-Python: >=3.14
6
6
  Requires-Dist: docker>=7.1.0
@@ -9,7 +9,7 @@ import psycopg
9
9
 
10
10
  from .diff import DiffKind, compute_diff
11
11
  from .introspect import introspect_db
12
- from .parser import parse_directory
12
+ from .parser import IGNORED_DIR_NAMES, parse_directory
13
13
 
14
14
  _LAYER_PREFIX_RE = re.compile(r"^\d+_?")
15
15
 
@@ -41,7 +41,7 @@ def layer_folder_for(scripts_dir: Path, schema: str) -> Path:
41
41
  if no existing folder matches."""
42
42
  if scripts_dir.is_dir():
43
43
  for entry in scripts_dir.iterdir():
44
- if not entry.is_dir() or entry.name in ("migrations", "_migration_scripts"):
44
+ if not entry.is_dir() or entry.name in ("migrations", "_migration_scripts") or entry.name in IGNORED_DIR_NAMES:
45
45
  continue
46
46
  if _LAYER_PREFIX_RE.sub("", entry.name).lower() == schema.lower():
47
47
  return entry
@@ -15,6 +15,14 @@ from .models import (
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
18
+ # Tooling/scratch dirs that can end up inside a database/ tree (e.g. git
19
+ # worktrees checked out under database/.worktree for isolated test DBs) but
20
+ # never hold real schema content.
21
+ IGNORED_DIR_NAMES = {
22
+ ".worktree", ".worktrees", ".claude", ".vscode", "node_modules",
23
+ "__pycache__", ".pytest_cache", ".mypy_cache", ".ruff_cache",
24
+ }
25
+
18
26
  # Regex to extract dollar-quoted body (Postgres-only construct)
19
27
  _DOLLAR_BODY = re.compile(r'\$(\w*)\$(.*?)\$\1\$', re.DOTALL | re.IGNORECASE)
20
28
 
@@ -35,6 +43,8 @@ def parse_directory(scripts_dir: Path, *, dialect: str | Dialect = "postgres") -
35
43
  resolved = resolve_dialect(dialect)
36
44
  db_schema = DatabaseSchema()
37
45
  for sql_file in sorted(scripts_dir.rglob("*.sql")):
46
+ if IGNORED_DIR_NAMES.intersection(sql_file.relative_to(scripts_dir).parts[:-1]):
47
+ continue
38
48
  _parse_file(sql_file, db_schema, resolved)
39
49
  return db_schema
40
50
 
@@ -15,6 +15,7 @@ from psycopg.sql import SQL, Identifier, Placeholder
15
15
 
16
16
  from ..db.complex_types import ComplexHelper
17
17
  from ..dialect import Dialect, POSTGRES
18
+ from ..parser import IGNORED_DIR_NAMES
18
19
 
19
20
  logger = logging.getLogger(__name__)
20
21
  logging.getLogger("sqlglot").setLevel(logging.ERROR)
@@ -121,7 +122,8 @@ def _get_sql_deps(sql: str, dialect: Dialect = POSTGRES) -> set[str]:
121
122
  def _iter_sql_files(database_dir: Path, dialect: Dialect = POSTGRES):
122
123
  """Yield (Path, sql_content) pairs in dependency-safe execution order."""
123
124
  files: list[Path] = []
124
- for root, _, dbfiles in os.walk(database_dir):
125
+ for root, dirs, dbfiles in os.walk(database_dir):
126
+ dirs[:] = [d for d in dirs if d not in IGNORED_DIR_NAMES]
125
127
  if "_migration_scripts" in root or "migrations" in root:
126
128
  continue
127
129
  for file in dbfiles:
@@ -11,7 +11,7 @@ packages = ["pgdevkit"]
11
11
 
12
12
  [project]
13
13
  name = "pgdevkit"
14
- version = "0.3.6"
14
+ version = "0.3.8"
15
15
  description = "A helper for developing with Postgres"
16
16
  readme = "README.md"
17
17
  requires-python = ">=3.14"
@@ -313,7 +313,7 @@ wheels = [
313
313
 
314
314
  [[package]]
315
315
  name = "pgdevkit"
316
- version = "0.3.6"
316
+ version = "0.3.8"
317
317
  source = { editable = "." }
318
318
  dependencies = [
319
319
  { name = "docker" },
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