pum 1.1.2__tar.gz → 1.1.4__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 (158) hide show
  1. {pum-1.1.2/pum.egg-info → pum-1.1.4}/PKG-INFO +1 -1
  2. {pum-1.1.2 → pum-1.1.4}/docs/docs/index.md +1 -1
  3. {pum-1.1.2 → pum-1.1.4}/pum/config_model.py +6 -0
  4. {pum-1.1.2 → pum-1.1.4}/pum/pum_config.py +27 -14
  5. {pum-1.1.2 → pum-1.1.4/pum.egg-info}/PKG-INFO +1 -1
  6. {pum-1.1.2 → pum-1.1.4}/pum.egg-info/SOURCES.txt +0 -1
  7. pum-1.1.2/docs/docs/api/api.md +0 -11
  8. {pum-1.1.2 → pum-1.1.4}/.ci/setup_db.sh +0 -0
  9. {pum-1.1.2 → pum-1.1.4}/.github/dependabot.yml +0 -0
  10. {pum-1.1.2 → pum-1.1.4}/.github/workflows/deploy-to-pypi.yml +0 -0
  11. {pum-1.1.2 → pum-1.1.4}/.github/workflows/docs.yml +0 -0
  12. {pum-1.1.2 → pum-1.1.4}/.github/workflows/tests.yml +0 -0
  13. {pum-1.1.2 → pum-1.1.4}/.github/workflows/wheel.yml +0 -0
  14. {pum-1.1.2 → pum-1.1.4}/.github/workflows/windows-tests.yml +0 -0
  15. {pum-1.1.2 → pum-1.1.4}/.gitignore +0 -0
  16. {pum-1.1.2 → pum-1.1.4}/.pre-commit-config.yaml +0 -0
  17. {pum-1.1.2 → pum-1.1.4}/LICENSE +0 -0
  18. {pum-1.1.2 → pum-1.1.4}/README.md +0 -0
  19. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/changelog.md +0 -0
  20. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/dump_format.md +0 -0
  21. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/dumper.md +0 -0
  22. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/exceptions.md +0 -0
  23. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/hook_base.md +0 -0
  24. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/hook_handler.md +0 -0
  25. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/parameter_definition.md +0 -0
  26. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/parameter_type.md +0 -0
  27. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/permission.md +0 -0
  28. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/permission_type.md +0 -0
  29. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/pum_config.md +0 -0
  30. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/role.md +0 -0
  31. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/role_manager.md +0 -0
  32. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/schema_migrations.md +0 -0
  33. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/sql_content.md +0 -0
  34. {pum-1.1.2 → pum-1.1.4}/docs/docs/api/upgrader.md +0 -0
  35. {pum-1.1.2 → pum-1.1.4}/docs/docs/assets/images/favicon.ico +0 -0
  36. {pum-1.1.2 → pum-1.1.4}/docs/docs/assets/images/pum-darkmode.png +0 -0
  37. {pum-1.1.2 → pum-1.1.4}/docs/docs/assets/images/pum.png +0 -0
  38. {pum-1.1.2 → pum-1.1.4}/docs/docs/cli/baseline.md +0 -0
  39. {pum-1.1.2 → pum-1.1.4}/docs/docs/cli/check.md +0 -0
  40. {pum-1.1.2 → pum-1.1.4}/docs/docs/cli/dump.md +0 -0
  41. {pum-1.1.2 → pum-1.1.4}/docs/docs/cli/info.md +0 -0
  42. {pum-1.1.2 → pum-1.1.4}/docs/docs/cli/install.md +0 -0
  43. {pum-1.1.2 → pum-1.1.4}/docs/docs/cli/restore.md +0 -0
  44. {pum-1.1.2 → pum-1.1.4}/docs/docs/cli/role.md +0 -0
  45. {pum-1.1.2 → pum-1.1.4}/docs/docs/cli/upgrade.md +0 -0
  46. {pum-1.1.2 → pum-1.1.4}/docs/docs/cli.md +0 -0
  47. {pum-1.1.2 → pum-1.1.4}/docs/docs/configuration/config_model.md +0 -0
  48. {pum-1.1.2 → pum-1.1.4}/docs/docs/configuration/configuration.md +0 -0
  49. {pum-1.1.2 → pum-1.1.4}/docs/docs/configuration/demo_data_model.md +0 -0
  50. {pum-1.1.2 → pum-1.1.4}/docs/docs/configuration/dependency_model.md +0 -0
  51. {pum-1.1.2 → pum-1.1.4}/docs/docs/configuration/hook_model.md +0 -0
  52. {pum-1.1.2 → pum-1.1.4}/docs/docs/configuration/migration_hooks_model.md +0 -0
  53. {pum-1.1.2 → pum-1.1.4}/docs/docs/configuration/parameter_definition_model.md +0 -0
  54. {pum-1.1.2 → pum-1.1.4}/docs/docs/configuration/permission_model.md +0 -0
  55. {pum-1.1.2 → pum-1.1.4}/docs/docs/configuration/pum_model.md +0 -0
  56. {pum-1.1.2 → pum-1.1.4}/docs/docs/configuration/role_model.md +0 -0
  57. {pum-1.1.2 → pum-1.1.4}/docs/docs/getting_started.md +0 -0
  58. {pum-1.1.2 → pum-1.1.4}/docs/docs/hooks.md +0 -0
  59. {pum-1.1.2 → pum-1.1.4}/docs/docs/roles.md +0 -0
  60. {pum-1.1.2 → pum-1.1.4}/docs/mkdocs.yml +0 -0
  61. {pum-1.1.2 → pum-1.1.4}/docs/requirements.txt +0 -0
  62. {pum-1.1.2 → pum-1.1.4}/docs/roles.md +0 -0
  63. {pum-1.1.2 → pum-1.1.4}/docs/update_cli_docs.py +0 -0
  64. {pum-1.1.2 → pum-1.1.4}/pum/__init__.py +0 -0
  65. {pum-1.1.2 → pum-1.1.4}/pum/changelog.py +0 -0
  66. {pum-1.1.2 → pum-1.1.4}/pum/checker.py +0 -0
  67. {pum-1.1.2 → pum-1.1.4}/pum/cli.py +0 -0
  68. {pum-1.1.2 → pum-1.1.4}/pum/conf/pum_config_example.yaml +0 -0
  69. {pum-1.1.2 → pum-1.1.4}/pum/dependency_handler.py +0 -0
  70. {pum-1.1.2 → pum-1.1.4}/pum/dumper.py +0 -0
  71. {pum-1.1.2 → pum-1.1.4}/pum/exceptions.py +0 -0
  72. {pum-1.1.2 → pum-1.1.4}/pum/hook.py +0 -0
  73. {pum-1.1.2 → pum-1.1.4}/pum/info.py +0 -0
  74. {pum-1.1.2 → pum-1.1.4}/pum/parameter.py +0 -0
  75. {pum-1.1.2 → pum-1.1.4}/pum/role_manager.py +0 -0
  76. {pum-1.1.2 → pum-1.1.4}/pum/schema_migrations.py +0 -0
  77. {pum-1.1.2 → pum-1.1.4}/pum/sql_content.py +0 -0
  78. {pum-1.1.2 → pum-1.1.4}/pum/upgrader.py +0 -0
  79. {pum-1.1.2 → pum-1.1.4}/pum.egg-info/dependency_links.txt +0 -0
  80. {pum-1.1.2 → pum-1.1.4}/pum.egg-info/entry_points.txt +0 -0
  81. {pum-1.1.2 → pum-1.1.4}/pum.egg-info/requires.txt +0 -0
  82. {pum-1.1.2 → pum-1.1.4}/pum.egg-info/top_level.txt +0 -0
  83. {pum-1.1.2 → pum-1.1.4}/pyproject.toml +0 -0
  84. {pum-1.1.2 → pum-1.1.4}/requirements/base.txt +0 -0
  85. {pum-1.1.2 → pum-1.1.4}/requirements/development.txt +0 -0
  86. {pum-1.1.2 → pum-1.1.4}/scripts/run_postgis.sh +0 -0
  87. {pum-1.1.2 → pum-1.1.4}/setup.cfg +0 -0
  88. {pum-1.1.2 → pum-1.1.4}/test/__init__.py +0 -0
  89. {pum-1.1.2 → pum-1.1.4}/test/data/complex_files_content/changelogs/1.2.3/complex_files_content.sql +0 -0
  90. {pum-1.1.2 → pum-1.1.4}/test/data/custom_directory/.pum.yaml +0 -0
  91. {pum-1.1.2 → pum-1.1.4}/test/data/custom_directory/my_delta_directory/1.2.3/my_delta_directory.sql +0 -0
  92. {pum-1.1.2 → pum-1.1.4}/test/data/custom_migration_schema/.pum.yaml +0 -0
  93. {pum-1.1.2 → pum-1.1.4}/test/data/custom_migration_schema/changelogs/1.2.3/custom_migration_schema.sql +0 -0
  94. {pum-1.1.2 → pum-1.1.4}/test/data/demo_data/.pum.yaml +0 -0
  95. {pum-1.1.2 → pum-1.1.4}/test/data/demo_data/changelogs/1.2.3/single_changelog.sql +0 -0
  96. {pum-1.1.2 → pum-1.1.4}/test/data/demo_data/demo_data/demo_data.sql +0 -0
  97. {pum-1.1.2 → pum-1.1.4}/test/data/dependencies/.pum.yaml +0 -0
  98. {pum-1.1.2 → pum-1.1.4}/test/data/dependencies/changelogs/1.2.3/pre_post_python_parameters.sql +0 -0
  99. {pum-1.1.2 → pum-1.1.4}/test/data/dependencies/changelogs/1.2.4/rename_created_date.sql +0 -0
  100. {pum-1.1.2 → pum-1.1.4}/test/data/dependencies/post/create_schema.sql +0 -0
  101. {pum-1.1.2 → pum-1.1.4}/test/data/dependencies/post/create_view.py +0 -0
  102. {pum-1.1.2 → pum-1.1.4}/test/data/dependencies/pre/drop_view.sql +0 -0
  103. {pum-1.1.2 → pum-1.1.4}/test/data/invalid_changelog_commit/changelogs/1.2.3/invalid_changelog.sql +0 -0
  104. {pum-1.1.2 → pum-1.1.4}/test/data/invalid_changelog_search_path/changelogs/1.2.3/invalid_changelog.sql +0 -0
  105. {pum-1.1.2 → pum-1.1.4}/test/data/min_version/.pum.yaml +0 -0
  106. {pum-1.1.2 → pum-1.1.4}/test/data/min_version/changelogs/1.2.3/roles.sql +0 -0
  107. {pum-1.1.2 → pum-1.1.4}/test/data/multiple_changelogs/changelogs/1.2.3/multiple_changelogs.sql +0 -0
  108. {pum-1.1.2 → pum-1.1.4}/test/data/multiple_changelogs/changelogs/1.2.4/rename_created_date.sql +0 -0
  109. {pum-1.1.2 → pum-1.1.4}/test/data/multiple_changelogs/changelogs/1.3.0/add_created_by_column.sql +0 -0
  110. {pum-1.1.2 → pum-1.1.4}/test/data/multiple_changelogs/changelogs/2.0.0/create_second_table.sql +0 -0
  111. {pum-1.1.2 → pum-1.1.4}/test/data/multiple_changelogs/changelogs/2.0.0/create_third_table.sql +0 -0
  112. {pum-1.1.2 → pum-1.1.4}/test/data/parameters/.pum.yaml +0 -0
  113. {pum-1.1.2 → pum-1.1.4}/test/data/parameters/changelogs/1.2.3/parameters.sql +0 -0
  114. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python/.pum.yaml +0 -0
  115. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python/changelogs/1.2.3/pre_post_python.sql +0 -0
  116. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python/changelogs/1.2.4/rename_created_date.sql +0 -0
  117. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python/post/create_schema.sql +0 -0
  118. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python/post/create_view.py +0 -0
  119. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python/pre/drop_view.sql +0 -0
  120. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_local_import/.pum.yaml +0 -0
  121. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_local_import/changelogs/1.2.3/pre_post_python_local_import.sql +0 -0
  122. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_local_import/post/create_schema.sql +0 -0
  123. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_local_import/post/create_view.py +0 -0
  124. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_local_import/post/folder/my_module.py +0 -0
  125. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_local_import/pre/drop_view.sql +0 -0
  126. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters/.pum.yaml +0 -0
  127. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters/changelogs/1.2.3/pre_post_python_parameters.sql +0 -0
  128. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters/changelogs/1.2.4/rename_created_date.sql +0 -0
  129. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters/post/create_schema.sql +0 -0
  130. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters/post/create_view.py +0 -0
  131. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters/pre/drop_view.sql +0 -0
  132. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters_broken/.pum.yaml +0 -0
  133. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters_broken/changelogs/1.2.3/pre_post_python_parameters_broken.sql +0 -0
  134. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters_broken/changelogs/1.2.4/rename_created_date.sql +0 -0
  135. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters_broken/post/create_schema.sql +0 -0
  136. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters_broken/post/create_view.py +0 -0
  137. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_python_parameters_broken/pre/drop_view.sql +0 -0
  138. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_sql_code/.pum.yaml +0 -0
  139. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_sql_code/changelogs/1.2.3/pre_post_sql_code.sql +0 -0
  140. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_sql_code/changelogs/1.2.4/rename_created_date.sql +0 -0
  141. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_sql_code/post/create_view.sql +0 -0
  142. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_sql_code/pre/drop_view.sql +0 -0
  143. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_sql_files/.pum.yaml +0 -0
  144. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_sql_files/changelogs/1.2.3/pre_post_sql_files.sql +0 -0
  145. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_sql_files/changelogs/1.2.4/rename_created_date.sql +0 -0
  146. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_sql_files/post/create_view.sql +0 -0
  147. {pum-1.1.2 → pum-1.1.4}/test/data/pre_post_sql_files/pre/drop_view.sql +0 -0
  148. {pum-1.1.2 → pum-1.1.4}/test/data/roles/.pum.yaml +0 -0
  149. {pum-1.1.2 → pum-1.1.4}/test/data/roles/changelogs/1.2.3/roles.sql +0 -0
  150. {pum-1.1.2 → pum-1.1.4}/test/data/single_changelog/changelogs/1.2.3/single_changelog.sql +0 -0
  151. {pum-1.1.2 → pum-1.1.4}/test/test_changelog.py +0 -0
  152. {pum-1.1.2 → pum-1.1.4}/test/test_checker.py.disabled +0 -0
  153. {pum-1.1.2 → pum-1.1.4}/test/test_config.py +0 -0
  154. {pum-1.1.2 → pum-1.1.4}/test/test_dumper.py +0 -0
  155. {pum-1.1.2 → pum-1.1.4}/test/test_pum.sh +0 -0
  156. {pum-1.1.2 → pum-1.1.4}/test/test_roles.py +0 -0
  157. {pum-1.1.2 → pum-1.1.4}/test/test_schema_migrations.py +0 -0
  158. {pum-1.1.2 → pum-1.1.4}/test/test_upgrader.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pum
3
- Version: 1.1.2
3
+ Version: 1.1.4
4
4
  Summary: Pum stands for "Postgres Upgrades Manager". It is a Database migration management tool very similar to flyway-db or Liquibase, based on metadata tables.
5
5
  Author-email: Denis Rouzaud <denis@opengis.ch>
6
6
  License-Expression: GPL-2.0-or-later
@@ -8,7 +8,7 @@ PUM (PostgreSQL Upgrades Manager) is a robust database migration management tool
8
8
 
9
9
  # Key Features
10
10
 
11
- - **Command-line and Python Integration**: Use PUM as a standalone [CLI tool](cli.md) or integrate it into your Python project using the [API](api/api.md).
11
+ - **Command-line and Python Integration**: Use PUM as a standalone [CLI tool](cli.md) or integrate it into your Python project using the [API](api/pum_config.md).
12
12
  - **Database Versioning**: Automatically manage database versioning with a metadata table.
13
13
  - **Changelog Management**: Apply and track SQL delta files for database upgrades.
14
14
  - **Migration Hooks**: Define custom hooks to execute additional SQL or Python code before or after migrations. This feature allows you to isolate data (table) code from application code (such as views and triggers), ensuring a clear separation of concerns and more maintainable database structures.
@@ -26,6 +26,12 @@ class ParameterDefinitionModel(PumCustomBaseModel):
26
26
  default: Optional[Any] = None
27
27
  description: Optional[str] = None
28
28
 
29
+ @model_validator(mode="before")
30
+ def validate_default(cls, values):
31
+ if values.get("type") == ParameterType.BOOLEAN:
32
+ values["default"] = values.get("default", False) in (1, "1", "true", "TRUE", True)
33
+ return values
34
+
29
35
 
30
36
  class HookModel(PumCustomBaseModel):
31
37
  """
@@ -18,7 +18,6 @@ from .config_model import ConfigModel
18
18
  from .hook import HookHandler
19
19
  import tempfile
20
20
  import sys
21
- import atexit
22
21
 
23
22
 
24
23
  try:
@@ -26,7 +25,7 @@ try:
26
25
  except importlib.metadata.PackageNotFoundError:
27
26
  # Fallback: try to read from pum-*.dist-info/METADATA
28
27
  dist_info_dirs = glob.glob(os.path.join(os.path.dirname(__file__), "..", "pum-*.dist-info"))
29
- version = None
28
+ versions = []
30
29
  for dist_info in dist_info_dirs:
31
30
  metadata_path = os.path.join(dist_info, "METADATA")
32
31
  if os.path.isfile(metadata_path):
@@ -34,11 +33,11 @@ except importlib.metadata.PackageNotFoundError:
34
33
  for line in f:
35
34
  if line.startswith("Version:"):
36
35
  version = line.split(":", 1)[1].strip()
36
+ versions.append(version)
37
37
  break
38
- if version:
39
- break
40
- if version:
41
- PUM_VERSION = packaging.version.Version(version)
38
+ if versions:
39
+ # Pick the highest version
40
+ PUM_VERSION = max((packaging.version.Version(v) for v in versions))
42
41
  else:
43
42
  PUM_VERSION = packaging.version.Version("0.0.0")
44
43
 
@@ -138,6 +137,17 @@ class PumConfig:
138
137
  """Return the base path used for configuration and changelogs."""
139
138
  return self._base_path
140
139
 
140
+ def parameters(self) -> list[ParameterDefinition]:
141
+ """Return a list of migration parameters.
142
+
143
+ Returns:
144
+ list[ParameterDefinition]: A list of migration parameter definitions.
145
+
146
+ """
147
+ return [
148
+ ParameterDefinition(**parameter.model_dump()) for parameter in self.config.parameters
149
+ ]
150
+
141
151
  def parameter(self, name: str) -> ParameterDefinition:
142
152
  """Get a specific migration parameter by name.
143
153
 
@@ -250,6 +260,15 @@ class PumConfig:
250
260
  """Return a dictionary of demo data files defined in the configuration."""
251
261
  return {dm.name: dm.file for dm in self.config.demo_data}
252
262
 
263
+ def __del__(self):
264
+ # Cleanup temporary directories and sys.path modifications
265
+ if self.dependency_path:
266
+ # Remove from sys.path if present
267
+ sys.path = [p for p in sys.path if p != str(self.dependency_path)]
268
+ # Remove the directory if it exists and is a TemporaryDirectory
269
+ if hasattr(self, "_temp_dir") and self._temp_dir:
270
+ self.dependency_tmp.cleanup()
271
+
253
272
  def validate(self, install_dependencies: bool = False) -> None:
254
273
  """Validate the changelogs and hooks.
255
274
 
@@ -258,16 +277,10 @@ class PumConfig:
258
277
  """
259
278
 
260
279
  if install_dependencies and self.config.dependencies:
261
- temp_dir = tempfile.TemporaryDirectory()
262
- self.dependency_path = Path(temp_dir.name)
280
+ self.dependency_tmp = tempfile.TemporaryDirectory()
281
+ self.dependency_path = Path(self.dependency_tmp.name)
263
282
  sys.path.insert(0, str(self.dependency_path))
264
283
 
265
- def cleanup():
266
- sys.path = [p for p in sys.path if p != str(self.dependency_path)]
267
- temp_dir.cleanup()
268
-
269
- atexit.register(cleanup)
270
-
271
284
  parameter_defaults = {}
272
285
  for parameter in self.config.parameters:
273
286
  parameter_defaults[parameter.name] = psycopg.sql.Literal(parameter.default)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pum
3
- Version: 1.1.2
3
+ Version: 1.1.4
4
4
  Summary: Pum stands for "Postgres Upgrades Manager". It is a Database migration management tool very similar to flyway-db or Liquibase, based on metadata tables.
5
5
  Author-email: Denis Rouzaud <denis@opengis.ch>
6
6
  License-Expression: GPL-2.0-or-later
@@ -19,7 +19,6 @@ docs/docs/getting_started.md
19
19
  docs/docs/hooks.md
20
20
  docs/docs/index.md
21
21
  docs/docs/roles.md
22
- docs/docs/api/api.md
23
22
  docs/docs/api/changelog.md
24
23
  docs/docs/api/dump_format.md
25
24
  docs/docs/api/dumper.md
@@ -1,11 +0,0 @@
1
- # PUM API
2
-
3
- - [Changelog](api/changelog.md)
4
- - [Hook](api/hook.md)
5
- - [Hook](api/hook_handler.md)
6
- - [ParameterDefinition](api/parameter_definition.md)
7
- - [ParameterType](api/parameter_type.md)
8
- - [PumConfig](api/pum_config.md)
9
- - [SchemaMigrations](api/schema_migrations.md)
10
- - [Upgrader](api/upgrader.md)
11
- - [Exceptions](api/exceptions.md)
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
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
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes