c2cwsgiutils 6.2.0.dev387__tar.gz → 6.2.0.dev395__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 (67) hide show
  1. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/PKG-INFO +11 -11
  2. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/README.md +2 -2
  3. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/acceptance/package-lock.json +23 -23
  4. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/acceptance/package.json +1 -1
  5. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/request_tracking/_sql.py +1 -1
  6. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/scripts/stats_db.py +1 -1
  7. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/sqlalchemylogger/README.md +2 -2
  8. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/pyproject.toml +22 -21
  9. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/LICENSE +0 -0
  10. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/__init__.py +0 -0
  11. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/acceptance/__init__.py +0 -0
  12. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/acceptance/connection.py +0 -0
  13. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/acceptance/image.py +0 -0
  14. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/acceptance/print.py +0 -0
  15. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/acceptance/screenshot.js +0 -0
  16. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/acceptance/utils.py +0 -0
  17. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/auth.py +0 -0
  18. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/broadcast/__init__.py +0 -0
  19. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/broadcast/interface.py +0 -0
  20. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/broadcast/local.py +0 -0
  21. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/broadcast/redis.py +0 -0
  22. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/broadcast/utils.py +0 -0
  23. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/client_info.py +0 -0
  24. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/config_utils.py +0 -0
  25. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/coverage_setup.py +0 -0
  26. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/db.py +0 -0
  27. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/db_maintenance_view.py +0 -0
  28. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/debug/__init__.py +0 -0
  29. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/debug/_listeners.py +0 -0
  30. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/debug/_views.py +0 -0
  31. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/debug/utils.py +0 -0
  32. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/errors.py +0 -0
  33. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/health_check.py +0 -0
  34. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/index.py +0 -0
  35. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/loader.py +0 -0
  36. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/logging_view.py +0 -0
  37. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/models_graph.py +0 -0
  38. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/pretty_json.py +0 -0
  39. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/profiler.py +0 -0
  40. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/prometheus.py +0 -0
  41. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/py.typed +0 -0
  42. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/pyramid.py +0 -0
  43. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/pyramid_logging.py +0 -0
  44. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/redis_stats.py +0 -0
  45. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/redis_utils.py +0 -0
  46. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/request_tracking/__init__.py +0 -0
  47. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/scripts/__init__.py +0 -0
  48. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/scripts/genversion.py +0 -0
  49. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/scripts/test_print.py +0 -0
  50. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/sentry.py +0 -0
  51. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/services.py +0 -0
  52. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/setup_process.py +0 -0
  53. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/sql_profiler/__init__.py +0 -0
  54. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/sql_profiler/_impl.py +0 -0
  55. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/sqlalchemylogger/__init__.py +0 -0
  56. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/sqlalchemylogger/_filters.py +0 -0
  57. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/sqlalchemylogger/_models.py +0 -0
  58. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/sqlalchemylogger/examples/__init__.py +0 -0
  59. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/sqlalchemylogger/examples/example.py +0 -0
  60. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/sqlalchemylogger/handlers.py +0 -0
  61. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/static/favicon-16x16.png +0 -0
  62. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/static/favicon-32x32.png +0 -0
  63. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/stats_pyramid/__init__.py +0 -0
  64. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/stats_pyramid/_db_spy.py +0 -0
  65. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/stats_pyramid/_pyramid_spy.py +0 -0
  66. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/templates/index.html.mako +0 -0
  67. {c2cwsgiutils-6.2.0.dev387 → c2cwsgiutils-6.2.0.dev395}/c2cwsgiutils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: c2cwsgiutils
3
- Version: 6.2.0.dev387
3
+ Version: 6.2.0.dev395
4
4
  Summary: Common utilities for Camptocamp WSGI applications
5
5
  License-Expression: BSD-2-Clause
6
6
  License-File: LICENSE
@@ -36,10 +36,10 @@ Provides-Extra: webserver
36
36
  Requires-Dist: Paste ; extra == "all"
37
37
  Requires-Dist: Paste ; extra == "standard"
38
38
  Requires-Dist: Paste ; extra == "waitress"
39
- Requires-Dist: SQLAlchemy (>=1.4.0,<3.0.0) ; extra == "all"
40
- Requires-Dist: SQLAlchemy (>=1.4.0,<3.0.0) ; extra == "standard"
41
- Requires-Dist: SQLAlchemy (>=1.4.0,<3.0.0) ; extra == "waitress"
42
- Requires-Dist: SQLAlchemy (>=1.4.0,<3.0.0) ; extra == "webserver"
39
+ Requires-Dist: SQLAlchemy (>=2.1.0,<3.0.0) ; extra == "all"
40
+ Requires-Dist: SQLAlchemy (>=2.1.0,<3.0.0) ; extra == "standard"
41
+ Requires-Dist: SQLAlchemy (>=2.1.0,<3.0.0) ; extra == "waitress"
42
+ Requires-Dist: SQLAlchemy (>=2.1.0,<3.0.0) ; extra == "webserver"
43
43
  Requires-Dist: SQLAlchemy-Utils ; extra == "all"
44
44
  Requires-Dist: SQLAlchemy-Utils ; extra == "standard"
45
45
  Requires-Dist: SQLAlchemy-Utils ; extra == "waitress"
@@ -66,10 +66,10 @@ Requires-Dist: objgraph ; extra == "debug"
66
66
  Requires-Dist: prometheus-client
67
67
  Requires-Dist: psutil ; extra == "all"
68
68
  Requires-Dist: psutil ; extra == "debug"
69
- Requires-Dist: psycopg2 ; extra == "all"
70
- Requires-Dist: psycopg2 ; extra == "standard"
71
- Requires-Dist: psycopg2 ; extra == "waitress"
72
- Requires-Dist: psycopg2 ; extra == "webserver"
69
+ Requires-Dist: psycopg[binary] (>=3.2,<4.0) ; extra == "all"
70
+ Requires-Dist: psycopg[binary] (>=3.2,<4.0) ; extra == "standard"
71
+ Requires-Dist: psycopg[binary] (>=3.2,<4.0) ; extra == "waitress"
72
+ Requires-Dist: psycopg[binary] (>=3.2,<4.0) ; extra == "webserver"
73
73
  Requires-Dist: pyjwt ; extra == "all"
74
74
  Requires-Dist: pyjwt ; extra == "oauth2"
75
75
  Requires-Dist: pyjwt ; extra == "standard"
@@ -199,11 +199,11 @@ health_check.add_alembic_check(dbsession, "/app/alembic.ini", 1)
199
199
  The related environment variables:
200
200
 
201
201
  - `DEVELOPMENT`: set to `1` to enable the development mode, default is `0`.
202
- - `SQLALCHEMY_URL`: SQL alchemy URL, like `postgresql://user:password@host:port/dbname`.
202
+ - `SQLALCHEMY_URL`: SQL alchemy URL, like `postgresql+psycopg://user:password@host:port/dbname`.
203
203
  - `SQLALCHEMY_POOL_RECYCLE`: The SQL alchemy pool recycle, default is `30`.
204
204
  - `SQLALCHEMY_POOL_SIZE`: The SQL alchemy pool size, default is `5`.
205
205
  - `SQLALCHEMY_MAX_OVERFLOW`: SQL alchemy max overflow, default is `25`.
206
- - `SQLALCHEMY_SLAVE_URL`: The SQL alchemy slave (read only) URL, like `postgresql://user:password@host:port/dbname`.
206
+ - `SQLALCHEMY_SLAVE_URL`: The SQL alchemy slave (read only) URL, like `postgresql+psycopg://user:password@host:port/dbname`.
207
207
  - `SQLALCHEMY_SLAVE_POOL_RECYCLE`: The SQL alchemy slave pool recycle, default is `30`.
208
208
  - `SQLALCHEMY_SLAVE_POOL_SIZE`: The SQL alchemy slave pool size, default is `5`.
209
209
  - `SQLALCHEMY_SLAVE_MAX_OVERFLOW`: The SQL alchemy slave max overflow, default is `25`.
@@ -82,11 +82,11 @@ health_check.add_alembic_check(dbsession, "/app/alembic.ini", 1)
82
82
  The related environment variables:
83
83
 
84
84
  - `DEVELOPMENT`: set to `1` to enable the development mode, default is `0`.
85
- - `SQLALCHEMY_URL`: SQL alchemy URL, like `postgresql://user:password@host:port/dbname`.
85
+ - `SQLALCHEMY_URL`: SQL alchemy URL, like `postgresql+psycopg://user:password@host:port/dbname`.
86
86
  - `SQLALCHEMY_POOL_RECYCLE`: The SQL alchemy pool recycle, default is `30`.
87
87
  - `SQLALCHEMY_POOL_SIZE`: The SQL alchemy pool size, default is `5`.
88
88
  - `SQLALCHEMY_MAX_OVERFLOW`: SQL alchemy max overflow, default is `25`.
89
- - `SQLALCHEMY_SLAVE_URL`: The SQL alchemy slave (read only) URL, like `postgresql://user:password@host:port/dbname`.
89
+ - `SQLALCHEMY_SLAVE_URL`: The SQL alchemy slave (read only) URL, like `postgresql+psycopg://user:password@host:port/dbname`.
90
90
  - `SQLALCHEMY_SLAVE_POOL_RECYCLE`: The SQL alchemy slave pool recycle, default is `30`.
91
91
  - `SQLALCHEMY_SLAVE_POOL_SIZE`: The SQL alchemy slave pool size, default is `5`.
92
92
  - `SQLALCHEMY_SLAVE_MAX_OVERFLOW`: The SQL alchemy slave max overflow, default is `25`.
@@ -6,16 +6,16 @@
6
6
  "": {
7
7
  "dependencies": {
8
8
  "commander": "15.0.0",
9
- "puppeteer": "25.9.0"
9
+ "puppeteer": "25.12.0"
10
10
  }
11
11
  },
12
12
  "node_modules/@puppeteer/browsers": {
13
- "version": "3.2.1",
14
- "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.2.1.tgz",
15
- "integrity": "sha512-KDz+3qDRdBAlRlMjmKyj6dEs33YHTk/xRHEENSXq6TNnhgoU15ruSHtEBeVF6OZ9tBDY55Se4P0nFMNsipzU9A==",
13
+ "version": "3.2.3",
14
+ "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.2.3.tgz",
15
+ "integrity": "sha512-2Bt3m6dDAJqmZehn0wiXSYyQmuhyiHHZ7FjvrVaS1W2RoFGV6eCK71UvKYkNJjkwC1Q9nobjhvTMhLQztFVINA==",
16
16
  "license": "Apache-2.0",
17
17
  "dependencies": {
18
- "modern-tar": "^0.8.0",
18
+ "modern-tar": "^0.8.4",
19
19
  "yargs": "^18.0.0"
20
20
  },
21
21
  "bin": {
@@ -118,9 +118,9 @@
118
118
  }
119
119
  },
120
120
  "node_modules/devtools-protocol": {
121
- "version": "0.0.1666840",
122
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1666840.tgz",
123
- "integrity": "sha512-gCcO42XCHKEs7Ag0S7aGYsnJ7hlgrO3qderYqeiY0Eqk+0GFfuvT13IA0hHreJTa2KCdDVyGMeOhdMNmrrTjVg==",
121
+ "version": "0.0.1687809",
122
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1687809.tgz",
123
+ "integrity": "sha512-t7kSb+UKYdyxcmqy98U2P86ne6rCve3DIJ4+lp54i/hhClgFuG35JrLj23rO14Jw3sWDsp7i+22QhNU0+/qk8g==",
124
124
  "license": "BSD-3-Clause"
125
125
  },
126
126
  "node_modules/emoji-regex": {
@@ -187,17 +187,17 @@
187
187
  }
188
188
  },
189
189
  "node_modules/puppeteer": {
190
- "version": "25.9.0",
191
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.9.0.tgz",
192
- "integrity": "sha512-2JqQszD2pyDTpIvBH1ZCXdrHgENVNdJIeOM6asbwHRgWknFiaLd1gNB91w/B/0hQHNpafkpxa90lPpBaJM87Hw==",
190
+ "version": "25.12.0",
191
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.12.0.tgz",
192
+ "integrity": "sha512-agM9cYcxbvmU17w9qtF17s7/Vv7Dhbyig6AWwIgvQQLR2dKZdPqNvRPanac7xH4iMPcNYOCfyCkwqCnR4nVOcA==",
193
193
  "hasInstallScript": true,
194
194
  "license": "Apache-2.0",
195
195
  "dependencies": {
196
- "@puppeteer/browsers": "3.2.1",
196
+ "@puppeteer/browsers": "3.2.3",
197
197
  "chromium-bidi": "17.0.2",
198
- "devtools-protocol": "0.0.1666840",
198
+ "devtools-protocol": "0.0.1687809",
199
199
  "lilconfig": "^3.1.3",
200
- "puppeteer-core": "25.9.0",
200
+ "puppeteer-core": "25.12.0",
201
201
  "typed-query-selector": "^2.12.2"
202
202
  },
203
203
  "bin": {
@@ -208,16 +208,16 @@
208
208
  }
209
209
  },
210
210
  "node_modules/puppeteer-core": {
211
- "version": "25.9.0",
212
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.9.0.tgz",
213
- "integrity": "sha512-U61rCwSMha62CA/Opy6tCx2Fx+ck7ouiKnbpEApzSoLYMoEu9F71nuFpHL55vmIt33/GYm6eKZVhH2ev0nAIeg==",
211
+ "version": "25.12.0",
212
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.12.0.tgz",
213
+ "integrity": "sha512-z6LQUt5SH7jwGtGA+nMtJuEjZIsqPiwQ+EFHCYuVDQrJpvifNmmGuyDvTzAKPyFzihxgHc5f3aMzu2kn8Ps37A==",
214
214
  "license": "Apache-2.0",
215
215
  "dependencies": {
216
- "@puppeteer/browsers": "3.2.1",
216
+ "@puppeteer/browsers": "3.2.3",
217
217
  "chromium-bidi": "17.0.2",
218
- "devtools-protocol": "0.0.1666840",
218
+ "devtools-protocol": "0.0.1687809",
219
219
  "typed-query-selector": "^2.12.2",
220
- "webdriver-bidi-protocol": "0.4.2",
220
+ "webdriver-bidi-protocol": "0.4.3",
221
221
  "ws": "^8.21.3"
222
222
  },
223
223
  "engines": {
@@ -262,9 +262,9 @@
262
262
  "license": "MIT"
263
263
  },
264
264
  "node_modules/webdriver-bidi-protocol": {
265
- "version": "0.4.2",
266
- "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.2.tgz",
267
- "integrity": "sha512-VSV+fzfChirL3e7jay2yUC7B4HQCGtEWEg/MSSQbK+qWbqeGlRLlXTzPpYr3XGUvbpDHumWZBJxgesg4N7dbtA==",
265
+ "version": "0.4.3",
266
+ "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.3.tgz",
267
+ "integrity": "sha512-uuN0goWfxP22B7J/uAgBpOYNPttC+XVseYE+rSY5+rQ+YBeVz/VORw8WbmLVcqW78zNg5A4qnjNXYUWR3il2ig==",
268
268
  "license": "Apache-2.0"
269
269
  },
270
270
  "node_modules/wrap-ansi": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "dependencies": {
3
3
  "commander": "15.0.0",
4
- "puppeteer": "25.9.0"
4
+ "puppeteer": "25.12.0"
5
5
  },
6
6
  "type": "module"
7
7
  }
@@ -11,7 +11,7 @@ def _add_session_id(session: Session, _transaction: Any) -> None:
11
11
  request = get_current_request()
12
12
  if request is not None:
13
13
  session.execute(
14
- sqlalchemy.text("set application_name=:session_id"),
14
+ sqlalchemy.text("SELECT set_config('application_name', :session_id, false)"),
15
15
  params={"session_id": request.c2c_request_id},
16
16
  )
17
17
 
@@ -270,7 +270,7 @@ def _do_dtats_db(args: argparse.Namespace) -> None:
270
270
  SELECT table_schema, table_name FROM information_schema.tables
271
271
  WHERE table_type='BASE TABLE' AND table_schema IN :schemas
272
272
  """,
273
- ),
273
+ ).bindparams(sqlalchemy.bindparam("schemas", expanding=True)),
274
274
  params={"schemas": tuple(args.schema)},
275
275
  ).fetchall()
276
276
  for schema, table in tables:
@@ -1,6 +1,6 @@
1
1
  This module is used to ship logging records to an SQL database.
2
2
 
3
- Currently only `sqlite` and `postgres_psycopg2` are fully supported.
3
+ Currently only `sqlite` and PostgreSQL with `psycopg` (version 3) are fully supported.
4
4
 
5
5
  To add the handler, setup it directly in your app's main function. You
6
6
  can add it to an existing logger (setup in you `.ini` file),
@@ -19,7 +19,7 @@ def _setup_sqlalchemy_logger():
19
19
  handler = SQLAlchemyHandler(
20
20
  sqlalchemy_url={
21
21
  # "url": "sqlite:///logger_db.sqlite3",
22
- "url": "postgresql://postgres:password@localhost:5432/test",
22
+ "url": "postgresql+psycopg://postgres:password@localhost:5432/test",
23
23
  "tablename": "test",
24
24
  "tableargs": {"schema": "xyz"},
25
25
  },
@@ -37,21 +37,21 @@ python = ">=3.11,<4.0"
37
37
  requests = { version = "2.34.2" }
38
38
  pyyaml = { version = "6.0.3" }
39
39
  setuptools = "80.9.0"
40
- alembic = { version = "1.19.1", optional = true }
41
- boltons = { version = "26.1.0", optional = true }
40
+ alembic = { version = "1.20.0", optional = true }
41
+ boltons = { version = "26.2.0", optional = true }
42
42
  cornice = { version = "6.1.0", optional = true }
43
43
  redis = { version = "8.1.0", optional = true }
44
44
  gunicorn = { version = "26.2.0", optional = true }
45
- lxml = { version = "6.1.2", optional = true }
45
+ lxml = { version = "6.1.3", optional = true }
46
46
  objgraph = { version = "3.6.2", optional = true }
47
- psycopg2 = { version = "2.9.12", optional = true }
47
+ psycopg = { version = "3.3.6", extras = ["binary"], optional = true }
48
48
  pyramid = { version = "2.1", optional = true }
49
49
  pyramid-tm = { version = "2.6", optional = true }
50
- sentry-sdk = { version = "2.68.1", optional = true }
50
+ sentry-sdk = { version = "2.70.0", optional = true }
51
51
  ujson = { version = "6.0.0" }
52
52
  cee_syslog_handler = { version = "0.6.0" }
53
- SQLAlchemy = { version = "2.0.52", optional = true }
54
- SQLAlchemy-Utils = { version = "0.42.1", optional = true }
53
+ SQLAlchemy = { version = "2.1.6", optional = true }
54
+ SQLAlchemy-Utils = { version = "0.43.0", optional = true }
55
55
  "zope.interface" = { version = "8.6", optional = true }
56
56
  "zope.sqlalchemy" = { version = "4.1", optional = true }
57
57
  pyjwt = { version = "2.15.0", optional = true }
@@ -62,7 +62,7 @@ prometheus-client = { version = "0.26.0", optional = true}
62
62
  pyramid_mako = { version = "1.1.0", optional = true}
63
63
  psutil = { version = "7.2.2", optional = true}
64
64
  Paste = { version = "3.10.1", optional = true}
65
- coverage = { version = "7.15.4", optional = true}
65
+ coverage = { version = "7.16.2", optional = true}
66
66
 
67
67
  [tool.poetry.extras]
68
68
  standard = [
@@ -78,7 +78,7 @@ standard = [
78
78
  # webserver
79
79
  "cornice",
80
80
  "gunicorn",
81
- "psycopg2",
81
+ "psycopg",
82
82
  "pyramid",
83
83
  "pyramid-tm",
84
84
  "SQLAlchemy",
@@ -100,7 +100,7 @@ broadcast = ["redis"]
100
100
  webserver = [
101
101
  "cornice",
102
102
  "gunicorn",
103
- "psycopg2",
103
+ "psycopg",
104
104
  "pyramid",
105
105
  "pyramid-tm",
106
106
  "SQLAlchemy",
@@ -113,7 +113,7 @@ waitress = [
113
113
  "waitress",
114
114
  "Paste",
115
115
  "cornice",
116
- "psycopg2",
116
+ "psycopg",
117
117
  "pyramid",
118
118
  "pyramid-tm",
119
119
  "SQLAlchemy",
@@ -140,7 +140,7 @@ all = [
140
140
  # webserver
141
141
  "cornice",
142
142
  "gunicorn",
143
- "psycopg2",
143
+ "psycopg",
144
144
  "pyramid",
145
145
  "pyramid-tm",
146
146
  "SQLAlchemy",
@@ -167,8 +167,8 @@ junit2html = "31.1.4"
167
167
  pytest = "9.1.1"
168
168
  pytest-cov = "7.1.0"
169
169
  pytest-html = "4.2.0"
170
- types-pyyaml = "6.0.12.20260815"
171
- types-requests = "2.33.0.20260712"
170
+ types-pyyaml = "6.0.12.20260906"
171
+ types-requests = "2.33.0.20260906"
172
172
  types-redis = "4.6.0.20241004"
173
173
  types-ujson = "5.10.0.20250822"
174
174
  types-python-dateutil = "2.9.0.20260807"
@@ -194,7 +194,8 @@ format-jinja = """
194
194
 
195
195
  [tool.poetry-plugin-tweak-dependencies-version]
196
196
  default = "present"
197
- SQLAlchemy = ">=1.4.0,<3.0.0"
197
+ SQLAlchemy = ">=2.1.0,<3.0.0"
198
+ psycopg = ">=3.2,<4.0"
198
199
  setuptools = "<81.0.0"
199
200
 
200
201
  [project]
@@ -229,7 +230,7 @@ include = [
229
230
  ]
230
231
  requires-python = ">=3.11"
231
232
  dependencies = ["requests", "pyyaml", "ujson", "cee_syslog_handler", "prometheus-client", "setuptools<81.0.0"]
232
- version = "6.2.0.dev387"
233
+ version = "6.2.0.dev395"
233
234
 
234
235
  [project.urls]
235
236
  repository = "https://github.com/camptocamp/c2cwsgiutils"
@@ -243,12 +244,12 @@ c2cwsgiutils-test-print = "c2cwsgiutils.scripts.test_print:main"
243
244
  c2cwsgiutils-check-es = "c2cwsgiutils.scripts.check_es:main"
244
245
 
245
246
  [project.optional-dependencies]
246
- standard = ["alembic", "cornice", "redis", "gunicorn", "psycopg2", "pyramid", "pyramid-tm", "sentry-sdk", "SQLAlchemy<3.0.0,>=1.4.0", "SQLAlchemy-Utils", "zope.interface", "zope.sqlalchemy", "pyjwt", "requests-oauthlib", "waitress", "pyramid_mako", "Paste"]
247
+ standard = ["alembic", "cornice", "redis", "gunicorn", "psycopg[binary]>=3.2,<4.0", "pyramid", "pyramid-tm", "sentry-sdk", "SQLAlchemy<3.0.0,>=2.1.0", "SQLAlchemy-Utils", "zope.interface", "zope.sqlalchemy", "pyjwt", "requests-oauthlib", "waitress", "pyramid_mako", "Paste"]
247
248
  alembic = ["alembic"]
248
- all = ["alembic", "boltons", "cornice", "redis", "gunicorn", "lxml", "objgraph", "psycopg2", "pyramid", "pyramid-tm", "sentry-sdk", "SQLAlchemy<3.0.0,>=1.4.0", "SQLAlchemy-Utils", "zope.interface", "zope.sqlalchemy", "pyjwt", "requests-oauthlib", "waitress", "pyramid_mako", "psutil", "Paste", "coverage"]
249
+ all = ["alembic", "boltons", "cornice", "redis", "gunicorn", "lxml", "objgraph", "psycopg[binary]>=3.2,<4.0", "pyramid", "pyramid-tm", "sentry-sdk", "SQLAlchemy<3.0.0,>=2.1.0", "SQLAlchemy-Utils", "zope.interface", "zope.sqlalchemy", "pyjwt", "requests-oauthlib", "waitress", "pyramid_mako", "psutil", "Paste", "coverage"]
249
250
  tests = ["boltons", "lxml"]
250
- webserver = ["cornice", "gunicorn", "psycopg2", "pyramid", "pyramid-tm", "SQLAlchemy<3.0.0,>=1.4.0", "SQLAlchemy-Utils", "zope.interface", "zope.sqlalchemy", "pyramid_mako"]
251
- waitress = ["cornice", "psycopg2", "pyramid", "pyramid-tm", "SQLAlchemy<3.0.0,>=1.4.0", "SQLAlchemy-Utils", "zope.interface", "zope.sqlalchemy", "waitress", "pyramid_mako", "Paste"]
251
+ webserver = ["cornice", "gunicorn", "psycopg[binary]>=3.2,<4.0", "pyramid", "pyramid-tm", "SQLAlchemy<3.0.0,>=2.1.0", "SQLAlchemy-Utils", "zope.interface", "zope.sqlalchemy", "pyramid_mako"]
252
+ waitress = ["cornice", "psycopg[binary]>=3.2,<4.0", "pyramid", "pyramid-tm", "SQLAlchemy<3.0.0,>=2.1.0", "SQLAlchemy-Utils", "zope.interface", "zope.sqlalchemy", "waitress", "pyramid_mako", "Paste"]
252
253
  broadcast = ["redis"]
253
254
  debug = ["objgraph", "psutil", "coverage"]
254
255
  sentry = ["sentry-sdk"]
@@ -258,7 +259,7 @@ test_images = ["scikit-image"]
258
259
 
259
260
  [build-system]
260
261
  requires = [
261
- "poetry-core==2.4.0",
262
+ "poetry-core==2.5.0",
262
263
  "poetry-dynamic-versioning[plugin]==1.10.0"
263
264
  ]
264
265
  build-backend = "poetry.core.masonry.api"