half-orm-dev 1.0.0a27__tar.gz → 1.0.0a29__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 (82) hide show
  1. {half_orm_dev-1.0.0a27/half_orm_dev.egg-info → half_orm_dev-1.0.0a29}/PKG-INFO +1 -1
  2. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/bootstrap_manager.py +13 -25
  3. half_orm_dev-1.0.0a29/half_orm_dev/version.txt +1 -0
  4. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29/half_orm_dev.egg-info}/PKG-INFO +1 -1
  5. half_orm_dev-1.0.0a27/half_orm_dev/version.txt +0 -1
  6. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/AUTHORS +0 -0
  7. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/LICENSE +0 -0
  8. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/README.md +0 -0
  9. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/__init__.py +0 -0
  10. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/__init__.py +0 -0
  11. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/__init__.py +0 -0
  12. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/apply.py +0 -0
  13. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/bootstrap.py +0 -0
  14. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/check.py +0 -0
  15. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/clone.py +0 -0
  16. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/init.py +0 -0
  17. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/migrate.py +0 -0
  18. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/patch.py +0 -0
  19. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/release.py +0 -0
  20. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/restore.py +0 -0
  21. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/revert_migration.py +0 -0
  22. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/set_git_origin.py +0 -0
  23. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/sync.py +0 -0
  24. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/todo.py +0 -0
  25. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/undo.py +0 -0
  26. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/update.py +0 -0
  27. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/commands/upgrade.py +0 -0
  28. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli/main.py +0 -0
  29. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/cli_extension.py +0 -0
  30. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/database.py +0 -0
  31. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/decorators.py +0 -0
  32. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/file_executor.py +0 -0
  33. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/hgit.py +0 -0
  34. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migration_manager.py +0 -0
  35. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migrations/0/17/1/00_move_to_hop.py +0 -0
  36. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migrations/0/17/1/01_txt_to_toml.py +0 -0
  37. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migrations/0/17/4/00_toml_dict_format.py +0 -0
  38. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migrations/0/17/4/01_add_bootstrap_table.py +0 -0
  39. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migrations/0/17/4/02_move_patches_to_subdirs.py +0 -0
  40. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migrations/0/17/5/01_update_pyproject_dependency.py +0 -0
  41. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migrations/0/18/0/00_add_async_support.py +0 -0
  42. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migrations/0/18/0/01_update_default_tests.py +0 -0
  43. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migrations/1/0/0/a20/01_update_gitignore.py +0 -0
  44. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/migrations/hop/BREAKING_CHANGES-1.0.0.md +0 -0
  45. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/modules.py +0 -0
  46. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/patch_manager.py +0 -0
  47. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/patch_validator.py +0 -0
  48. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/patches/0/1/0/00_half_orm_meta.database.sql +0 -0
  49. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/patches/0/1/0/01_alter_half_orm_meta.hop_release.sql +0 -0
  50. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/patches/0/1/0/02_half_orm_meta.view.hop_penultimate_release.sql +0 -0
  51. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/patches/log +0 -0
  52. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/patches/sql/half_orm_meta.sql +0 -0
  53. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/py.typed +0 -0
  54. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/release_file.py +0 -0
  55. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/release_manager.py +0 -0
  56. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/repo.py +0 -0
  57. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/scripts/repair-metadata.py +0 -0
  58. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/.gitignore +0 -0
  59. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/MANIFEST.in +0 -0
  60. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/README +0 -0
  61. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/conftest_template +0 -0
  62. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/git-hooks/pre-commit +0 -0
  63. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/git-hooks/pre-push +0 -0
  64. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/git-hooks/prepare-commit-msg +0 -0
  65. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/git-hooks/reference-transaction +0 -0
  66. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/init_module_template +0 -0
  67. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/module_template_1 +0 -0
  68. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/module_template_2 +0 -0
  69. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/module_template_3 +0 -0
  70. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/pyproject.toml +0 -0
  71. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/relation_test +0 -0
  72. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/sql_adapter +0 -0
  73. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/templates/warning +0 -0
  74. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev/utils.py +0 -0
  75. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev.egg-info/SOURCES.txt +0 -0
  76. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev.egg-info/dependency_links.txt +0 -0
  77. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev.egg-info/entry_points.txt +0 -0
  78. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev.egg-info/requires.txt +0 -0
  79. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/half_orm_dev.egg-info/top_level.txt +0 -0
  80. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/pyproject.toml +0 -0
  81. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/setup.cfg +0 -0
  82. {half_orm_dev-1.0.0a27 → half_orm_dev-1.0.0a29}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: half_orm_dev
3
- Version: 1.0.0a27
3
+ Version: 1.0.0a29
4
4
  Summary: half_orm development Framework.
5
5
  Author-email: Joël Maïzi <joel.maizi@collorg.org>
6
6
  License-Expression: GPL-3.0-or-later
@@ -62,8 +62,8 @@ class BootstrapManager:
62
62
  """
63
63
  Ensure half_orm_meta.bootstrap table exists.
64
64
 
65
- Creates the table if it doesn't exist. This handles the case
66
- where the table hasn't been created yet (pre-migration databases).
65
+ Creates the table if it doesn't exist, then reloads the model so
66
+ get_relation_class('half_orm_meta.bootstrap') can find it.
67
67
  """
68
68
  sql = """
69
69
  CREATE TABLE IF NOT EXISTS half_orm_meta.bootstrap (
@@ -73,6 +73,7 @@ class BootstrapManager:
73
73
  );
74
74
  """
75
75
  self._repo.database.model.execute_query(sql)
76
+ self._repo.database.model.reconnect(reload=True)
76
77
 
77
78
  def get_bootstrap_files(
78
79
  self,
@@ -135,22 +136,14 @@ class BootstrapManager:
135
136
  """
136
137
  Get set of already executed filenames from database.
137
138
 
138
- Queries half_orm_meta.bootstrap table to get filenames
139
- that have already been executed.
140
-
141
139
  Returns:
142
140
  Set of filename strings that have been executed
143
141
  """
144
142
  # If schema or table isn't ready yet (pre-migration state),
145
143
  # return empty set so all bootstrap files are treated as pending.
146
- try:
147
- self._ensure_bootstrap_table()
148
- result = self._repo.database.model.execute_query(
149
- "SELECT filename FROM half_orm_meta.bootstrap"
150
- )
151
- return {row[0] for row in result} if result else set()
152
- except Exception:
153
- return set()
144
+ self._ensure_bootstrap_table()
145
+ HopBootstrap = self._repo.database.model.get_relation_class('half_orm_meta.bootstrap')
146
+ return {row['filename'] for row in HopBootstrap()}
154
147
 
155
148
  def get_pending_files(
156
149
  self,
@@ -171,7 +164,6 @@ class BootstrapManager:
171
164
  """
172
165
  all_files = self.get_bootstrap_files(up_to_version, exclude_version=exclude_version, for_version=for_version)
173
166
  executed = self.get_executed_files()
174
-
175
167
  return [f for f in all_files if f.name not in executed]
176
168
 
177
169
  def execute_file(self, file_path: Path) -> None:
@@ -198,22 +190,18 @@ class BootstrapManager:
198
190
  except FileExecutionError as e:
199
191
  raise BootstrapManagerError(str(e)) from e
200
192
 
201
- def record_execution(self, filename: str, version: str) -> None:
193
+ def record_execution(self, filename: str, version: str, force: bool = False) -> None:
202
194
  """
203
195
  Record execution in half_orm_meta.bootstrap table.
204
196
 
205
197
  Args:
206
198
  filename: Name of the executed file
207
199
  version: Version extracted from filename
200
+ force: If True, upsert (update executed_at on re-run). If False,
201
+ plain insert — a duplicate raises an error revealing a guard bug.
208
202
  """
209
- sql = """
210
- INSERT INTO half_orm_meta.bootstrap (filename, version)
211
- VALUES (%s, %s)
212
- ON CONFLICT (filename) DO UPDATE SET
213
- version = EXCLUDED.version,
214
- executed_at = NOW()
215
- """
216
- self._repo.database.model.execute_query(sql, (filename, version))
203
+ HopBootstrap = self._repo.database.model.get_relation_class('half_orm_meta.bootstrap')
204
+ HopBootstrap(filename=filename, version=version).ho_insert(upsert=force)
217
205
 
218
206
  def run_bootstrap(
219
207
  self,
@@ -278,14 +266,14 @@ class BootstrapManager:
278
266
  result['executed'].append(filename)
279
267
  continue
280
268
 
281
- if filename in executed_set:
269
+ if not force and filename in executed_set:
282
270
  result['skipped'].append(filename)
283
271
  continue
284
272
 
285
273
  try:
286
274
  click.echo(f" • Executing {filename}...")
287
275
  self.execute_file(file_path)
288
- self.record_execution(filename, file_version)
276
+ self.record_execution(filename, file_version, force=force)
289
277
  executed_set.add(filename)
290
278
  result['executed'].append(filename)
291
279
  except BootstrapManagerError as e:
@@ -0,0 +1 @@
1
+ 1.0.0-a29
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: half_orm_dev
3
- Version: 1.0.0a27
3
+ Version: 1.0.0a29
4
4
  Summary: half_orm development Framework.
5
5
  Author-email: Joël Maïzi <joel.maizi@collorg.org>
6
6
  License-Expression: GPL-3.0-or-later
@@ -1 +0,0 @@
1
- 1.0.0-a27
File without changes
File without changes