pum 1.1.4__py3-none-any.whl → 1.1.6__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.
pum/hook.py CHANGED
@@ -59,8 +59,9 @@ class HookBase(abc.ABC):
59
59
  connection: The database connection.
60
60
  sql: The SQL statement to execute or a path to a SQL file..
61
61
  """
62
+ parameters_literals = SqlContent.prepare_parameters(self._parameters)
62
63
  SqlContent(sql).execute(
63
- connection=self._connection, parameters=self._parameters, commit=False
64
+ connection=self._connection, parameters=parameters_literals, commit=False
64
65
  )
65
66
 
66
67
  execute.__isfinal__ = True
@@ -191,13 +192,15 @@ class HookHandler:
191
192
  f"Executing hook from file: {self.file} or SQL code with parameters: {parameters}",
192
193
  )
193
194
 
195
+ parameters_literals = SqlContent.prepare_parameters(parameters)
196
+
194
197
  if self.file is None and self.code is None:
195
198
  raise ValueError("No file or SQL code specified for the migration hook.")
196
199
 
197
200
  if self.file:
198
201
  if self.file.suffix == ".sql":
199
202
  SqlContent(self.file).execute(
200
- connection=connection, commit=False, parameters=parameters
203
+ connection=connection, commit=False, parameters=parameters_literals
201
204
  )
202
205
  elif self.file.suffix == ".py":
203
206
  for parameter_arg in self.parameter_args:
@@ -208,9 +211,10 @@ class HookHandler:
208
211
  )
209
212
 
210
213
  _hook_parameters = {}
211
- for key, value in parameters.items():
212
- if key in self.parameter_args:
213
- _hook_parameters[key] = value
214
+ if parameters:
215
+ for key, value in parameters.items():
216
+ if key in self.parameter_args:
217
+ _hook_parameters[key] = value
214
218
  self.hook_instance._prepare(connection=connection, parameters=parameters)
215
219
  try:
216
220
  if _hook_parameters:
@@ -225,7 +229,7 @@ class HookHandler:
225
229
  f"Unsupported file type for migration hook: {self.file.suffix}. Only .sql and .py files are supported."
226
230
  )
227
231
  elif self.code:
228
- SqlContent(self.code).execute(connection, parameters=parameters, commit=False)
232
+ SqlContent(self.code).execute(connection, parameters=parameters_literals, commit=False)
229
233
 
230
234
  if commit:
231
235
  connection.commit()
pum/parameter.py CHANGED
@@ -11,6 +11,7 @@ class ParameterType(Enum):
11
11
  INTEGER (str): Represents an integer parameter type.
12
12
  TEXT (str): Represents a text parameter type.
13
13
  DECIMAL (str): Represents a decimal parameter type.
14
+ PATH (str): Represents a path parameter type.
14
15
 
15
16
  """
16
17
 
@@ -18,6 +19,7 @@ class ParameterType(Enum):
18
19
  INTEGER = "integer"
19
20
  TEXT = "text"
20
21
  DECIMAL = "decimal"
22
+ PATH = "path"
21
23
 
22
24
 
23
25
  class ParameterDefinition:
pum/sql_content.py CHANGED
@@ -263,3 +263,20 @@ class SqlContent:
263
263
  ) from e
264
264
 
265
265
  return [format_sql(statement, parameters) for statement in sql_code]
266
+
267
+ @staticmethod
268
+ def prepare_parameters(parameters: dict | None):
269
+ """
270
+ Prepares a dictionary of parameters for use in SQL queries by converting each value to a psycopg.sql.Literal.
271
+
272
+ Args:
273
+ parameters: A dictionary of parameters to be converted, or None.
274
+
275
+ Returns:
276
+ dict: A new dictionary with the same keys as `parameters`, where each value is wrapped in psycopg.sql.Literal.
277
+ """
278
+ parameters_literals = {}
279
+ if parameters:
280
+ for key, value in parameters.items():
281
+ parameters_literals[key] = psycopg.sql.Literal(value)
282
+ return parameters_literals
pum/upgrader.py CHANGED
@@ -4,7 +4,6 @@ import logging
4
4
  import packaging
5
5
  import packaging.version
6
6
  import psycopg
7
- import copy
8
7
 
9
8
  from .pum_config import PumConfig
10
9
  from .exceptions import PumException
@@ -76,8 +75,6 @@ class Upgrader:
76
75
  commit:
77
76
  If True, the changes will be committed to the database.
78
77
  """
79
- parameters_literals = self._prepare_parameters(parameters)
80
-
81
78
  if demo_data and demo_data not in self.config.demo_data():
82
79
  raise PumException(
83
80
  f"Demo data '{demo_data}' not found in the configuration. Available demo data: {self.config.demo_data()}"
@@ -98,8 +95,9 @@ class Upgrader:
98
95
  )
99
96
 
100
97
  for pre_hook in self.config.pre_hook_handlers():
101
- pre_hook.execute(connection=connection, commit=False, parameters=parameters_literals)
98
+ pre_hook.execute(connection=connection, commit=False, parameters=parameters)
102
99
 
100
+ parameters_literals = SqlContent.prepare_parameters(parameters)
103
101
  last_changelog = None
104
102
  for changelog in self.config.changelogs(max_version=max_version):
105
103
  last_changelog = changelog
@@ -117,7 +115,7 @@ class Upgrader:
117
115
  )
118
116
 
119
117
  for post_hook in self.config.post_hook_handlers():
120
- post_hook.execute(connection=connection, commit=False, parameters=parameters_literals)
118
+ post_hook.execute(connection=connection, commit=False, parameters=parameters)
121
119
 
122
120
  logger.info(
123
121
  "Installed %s.pum_migrations table and applied changelogs up to version %s",
@@ -148,16 +146,15 @@ class Upgrader:
148
146
  if name not in self.config.demo_data():
149
147
  raise PumException(f"Demo data '{name}' not found in the configuration.")
150
148
 
151
- parameters_literals = self._prepare_parameters(parameters)
152
-
153
149
  demo_data_file = self.config.base_path / self.config.demo_data()[name]
154
150
  logger.info("Installing demo data from %s", demo_data_file)
155
151
 
156
152
  for pre_hook in self.config.pre_hook_handlers():
157
- pre_hook.execute(connection=connection, commit=False, parameters=parameters_literals)
153
+ pre_hook.execute(connection=connection, commit=False, parameters=parameters)
158
154
 
159
155
  connection.commit()
160
156
 
157
+ parameters_literals = SqlContent.prepare_parameters(parameters)
161
158
  SqlContent(sql=demo_data_file).execute(
162
159
  connection=connection,
163
160
  commit=False,
@@ -167,22 +164,6 @@ class Upgrader:
167
164
  connection.commit()
168
165
 
169
166
  for post_hook in self.config.post_hook_handlers():
170
- post_hook.execute(connection=connection, commit=False, parameters=parameters_literals)
167
+ post_hook.execute(connection=connection, commit=False, parameters=parameters)
171
168
 
172
169
  logger.info("Demo data '%s' installed successfully.", name)
173
-
174
- @staticmethod
175
- def _prepare_parameters(parameters: dict | None):
176
- """
177
- Prepares a dictionary of parameters for use in SQL queries by converting each value to a psycopg.sql.Literal.
178
-
179
- Args:
180
- parameters: A dictionary of parameters to be converted, or None.
181
-
182
- Returns:
183
- dict: A new dictionary with the same keys as `parameters`, where each value is wrapped in psycopg.sql.Literal.
184
- """
185
- parameters_literals = copy.deepcopy(parameters) if parameters else {}
186
- for key, value in parameters_literals.items():
187
- parameters_literals[key] = psycopg.sql.Literal(value)
188
- return parameters_literals
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pum
3
- Version: 1.1.4
3
+ Version: 1.1.6
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
@@ -6,18 +6,18 @@ pum/config_model.py,sha256=piSQBYp29gnzqmtN50_OUw5o9d7Q5dEzj4q6G7cIFik,6396
6
6
  pum/dependency_handler.py,sha256=34wvDGWlI-vsMFm1z0XcSDN2cnL_VFAh61GWmeYEzk4,3841
7
7
  pum/dumper.py,sha256=EJZ8T44JM0GKgdqw1ENOfhZ-RI89OQ4DNdoTZKtLdEw,3404
8
8
  pum/exceptions.py,sha256=xyzzY4ht1nKfrVt59Giulflpmu83nJhxoTygrqiqPlw,1137
9
- pum/hook.py,sha256=L4Cnr34zrgPzxso9CdsUYWmtuOXRmFccQZ9Lp4IYCBM,9326
9
+ pum/hook.py,sha256=5MrVa6Xr0o28RfsXylGDatlM_vOKfKtGJmhYx8crC94,9541
10
10
  pum/info.py,sha256=VSCUZJJ_ae-khKaudwbgqszZXBMKB_yskuQo5Mc1PgY,1024
11
- pum/parameter.py,sha256=e9f80kMZpART9laeImW_YECeTvwDyDSmZlTeJGvpS_8,2449
11
+ pum/parameter.py,sha256=rx8Wsm4wjm7YLVDqAx_NBIvkKB_ljEIGR88l17aaGbM,2521
12
12
  pum/pum_config.py,sha256=xTEdYh-628pnkoqH56NoPIuhIQauc1d6hksM8hcCCU4,11232
13
13
  pum/role_manager.py,sha256=yr-fmytflGqANY3IZIpgJBoMOK98ynTWfemIBhAy79A,10131
14
14
  pum/schema_migrations.py,sha256=FiaqAbhFX7vd3Rk_R43kd7-QWfil-Q5587EU8xSLBkA,10504
15
- pum/sql_content.py,sha256=gwgvcdXOXxNz3RvLtL8Bqr5WO3KKq3sluhbj4OAEnQs,9756
16
- pum/upgrader.py,sha256=jvl6vmpgxGyYiw8rrWC_bDC7Zd4wHJqGLXCK8EMt9wY,7109
15
+ pum/sql_content.py,sha256=KoAa3CNVH_Hh6Z3FxpCYJCsG1NEiCRpfzlfP8wPFZHE,10414
16
+ pum/upgrader.py,sha256=HrFy-ev55t_nfaMYDOVRd44ACvb56-f4r4rv7m1UBVg,6387
17
17
  pum/conf/pum_config_example.yaml,sha256=_nwV_7z6S_Se-mejh_My0JFLY-A0Q4nigeLGPZAfcqg,424
18
- pum-1.1.4.dist-info/licenses/LICENSE,sha256=2ylvL381vKOhdO-w6zkrOxe9lLNBhRQpo9_0EbHC_HM,18046
19
- pum-1.1.4.dist-info/METADATA,sha256=eZOs5rKpdCVJJR1BSQKeTjMdhneE57kZMrNaTnv-US8,3138
20
- pum-1.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
- pum-1.1.4.dist-info/entry_points.txt,sha256=U6dmxSpKs1Pe9vWiR29VPhJMDjrmZeJCSxvfLGR8BD4,36
22
- pum-1.1.4.dist-info/top_level.txt,sha256=ddiI4HLBhY6ql-NNm0Ez0JhoOHdWDIzrHeCdHmmagcc,4
23
- pum-1.1.4.dist-info/RECORD,,
18
+ pum-1.1.6.dist-info/licenses/LICENSE,sha256=2ylvL381vKOhdO-w6zkrOxe9lLNBhRQpo9_0EbHC_HM,18046
19
+ pum-1.1.6.dist-info/METADATA,sha256=adZCP888gUAgoCaPs0bkgMOb7Qd0hvM9PYIKnljXD4M,3138
20
+ pum-1.1.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
+ pum-1.1.6.dist-info/entry_points.txt,sha256=U6dmxSpKs1Pe9vWiR29VPhJMDjrmZeJCSxvfLGR8BD4,36
22
+ pum-1.1.6.dist-info/top_level.txt,sha256=ddiI4HLBhY6ql-NNm0Ez0JhoOHdWDIzrHeCdHmmagcc,4
23
+ pum-1.1.6.dist-info/RECORD,,
File without changes