c2cwsgiutils 5.2.2__py3-none-any.whl → 5.2.4__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.
- c2cwsgiutils/acceptance/connection.py +18 -1
- c2cwsgiutils/auth.py +20 -16
- c2cwsgiutils/broadcast/__init__.py +1 -0
- c2cwsgiutils/client_info.py +10 -0
- c2cwsgiutils/config_utils.py +1 -0
- c2cwsgiutils/db.py +1 -0
- c2cwsgiutils/errors.py +2 -1
- c2cwsgiutils/health_check.py +1 -0
- c2cwsgiutils/pyramid_logging.py +1 -0
- c2cwsgiutils/redis_utils.py +1 -1
- c2cwsgiutils/request_tracking/__init__.py +1 -0
- c2cwsgiutils/request_tracking/_sql.py +3 -2
- c2cwsgiutils/setup_process.py +0 -1
- c2cwsgiutils/sql_profiler/__init__.py +1 -0
- c2cwsgiutils/sql_profiler/_impl.py +1 -0
- c2cwsgiutils/sqlalchemylogger/handlers.py +2 -2
- c2cwsgiutils/stats_pyramid/__init__.py +1 -0
- {c2cwsgiutils-5.2.2.dist-info → c2cwsgiutils-5.2.4.dist-info}/METADATA +15 -4
- {c2cwsgiutils-5.2.2.dist-info → c2cwsgiutils-5.2.4.dist-info}/RECORD +22 -22
- {c2cwsgiutils-5.2.2.dist-info → c2cwsgiutils-5.2.4.dist-info}/WHEEL +1 -1
- {c2cwsgiutils-5.2.2.dist-info → c2cwsgiutils-5.2.4.dist-info}/LICENSE +0 -0
- {c2cwsgiutils-5.2.2.dist-info → c2cwsgiutils-5.2.4.dist-info}/entry_points.txt +0 -0
@@ -159,12 +159,29 @@ class Connection:
|
|
159
159
|
cache_expected: CacheExpected = CacheExpected.NO,
|
160
160
|
**kwargs: Any,
|
161
161
|
) -> Any:
|
162
|
-
"""
|
162
|
+
"""PUT the given URL (relative to the root of API)."""
|
163
163
|
with self.session.put(self.base_url + url, headers=self._merge_headers(headers, cors), **kwargs) as r:
|
164
164
|
check_response(r, expected_status, cache_expected)
|
165
165
|
self._check_cors(cors, r)
|
166
166
|
return _get_json(r)
|
167
167
|
|
168
|
+
def patch_json(
|
169
|
+
self,
|
170
|
+
url: str,
|
171
|
+
expected_status: int = 200,
|
172
|
+
headers: Optional[Mapping[str, str]] = None,
|
173
|
+
cors: bool = True,
|
174
|
+
cache_expected: CacheExpected = CacheExpected.NO,
|
175
|
+
**kwargs: Any,
|
176
|
+
) -> Any:
|
177
|
+
"""PATCH the given URL (relative to the root of API)."""
|
178
|
+
with self.session.patch(
|
179
|
+
self.base_url + url, headers=self._merge_headers(headers, cors), **kwargs
|
180
|
+
) as r:
|
181
|
+
check_response(r, expected_status, cache_expected)
|
182
|
+
self._check_cors(cors, r)
|
183
|
+
return _get_json(r)
|
184
|
+
|
168
185
|
def delete(
|
169
186
|
self,
|
170
187
|
url: str,
|
c2cwsgiutils/auth.py
CHANGED
@@ -217,22 +217,26 @@ def check_access(
|
|
217
217
|
return check_access_config(
|
218
218
|
request,
|
219
219
|
{
|
220
|
-
"github_repository":
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
220
|
+
"github_repository": (
|
221
|
+
env_or_settings(
|
222
|
+
settings,
|
223
|
+
GITHUB_REPOSITORY_ENV,
|
224
|
+
GITHUB_REPOSITORY_PROP,
|
225
|
+
"",
|
226
|
+
)
|
227
|
+
if repo is None
|
228
|
+
else repo
|
229
|
+
),
|
230
|
+
"github_access_type": (
|
231
|
+
env_or_settings(
|
232
|
+
settings,
|
233
|
+
GITHUB_ACCESS_TYPE_ENV,
|
234
|
+
GITHUB_ACCESS_TYPE_PROP,
|
235
|
+
"pull",
|
236
|
+
)
|
237
|
+
if access_type is None
|
238
|
+
else access_type
|
239
|
+
),
|
236
240
|
},
|
237
241
|
)
|
238
242
|
|
c2cwsgiutils/client_info.py
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import os
|
1
2
|
import re
|
2
3
|
from typing import Any, Callable, Dict
|
3
4
|
|
@@ -22,6 +23,15 @@ class Filter:
|
|
22
23
|
else:
|
23
24
|
_handle_others(environ)
|
24
25
|
|
26
|
+
if "C2CWSGIUTILS_FORCE_PROTO" in os.environ:
|
27
|
+
environ["wsgi.url_scheme"] = os.environ["C2CWSGIUTILS_FORCE_PROTO"]
|
28
|
+
if "C2CWSGIUTILS_FORCE_HOST" in os.environ:
|
29
|
+
environ["HTTP_HOST"] = os.environ["C2CWSGIUTILS_FORCE_HOST"]
|
30
|
+
if "C2CWSGIUTILS_FORCE_SERVER_NAME" in os.environ:
|
31
|
+
environ["SERVER_NAME"] = os.environ["C2CWSGIUTILS_FORCE_SERVER_NAME"]
|
32
|
+
if "C2CWSGIUTILS_FORCE_REMOTE_ADDR" in os.environ:
|
33
|
+
environ["REMOTE_ADDR"] = os.environ["C2CWSGIUTILS_FORCE_REMOTE_ADDR"]
|
34
|
+
|
25
35
|
return self._application(environ, start_response)
|
26
36
|
|
27
37
|
|
c2cwsgiutils/config_utils.py
CHANGED
c2cwsgiutils/db.py
CHANGED
c2cwsgiutils/errors.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
"""Install exception views to have nice JSON error pages."""
|
2
|
+
|
2
3
|
import logging
|
3
4
|
import os
|
4
5
|
import traceback
|
@@ -20,7 +21,7 @@ DEPRECATED_ENV_KEY = "ERROR_DETAILS_SECRET"
|
|
20
21
|
LOG = logging.getLogger(__name__)
|
21
22
|
STATUS_LOGGER = {
|
22
23
|
401: LOG.debug,
|
23
|
-
500: LOG.error
|
24
|
+
500: LOG.error,
|
24
25
|
# The rest are warnings
|
25
26
|
}
|
26
27
|
|
c2cwsgiutils/health_check.py
CHANGED
c2cwsgiutils/pyramid_logging.py
CHANGED
c2cwsgiutils/redis_utils.py
CHANGED
@@ -78,7 +78,7 @@ def _init(settings: Optional[Mapping[str, Any]]) -> None:
|
|
78
78
|
_slave = _sentinel.slave_for(service_name)
|
79
79
|
return
|
80
80
|
if url:
|
81
|
-
if not url
|
81
|
+
if "://" not in url:
|
82
82
|
url = "redis://" + url
|
83
83
|
|
84
84
|
LOG.info("Redis setup using: %s, with options: %s", url, redis_options_)
|
@@ -5,7 +5,7 @@ from pyramid.threadlocal import get_current_request
|
|
5
5
|
from sqlalchemy.orm import Session
|
6
6
|
|
7
7
|
|
8
|
-
def _add_session_id(session: Session, _transaction: Any
|
8
|
+
def _add_session_id(session: Session, _transaction: Any) -> None:
|
9
9
|
request = get_current_request()
|
10
10
|
if request is not None:
|
11
11
|
session.execute(
|
@@ -15,4 +15,5 @@ def _add_session_id(session: Session, _transaction: Any, _connection: Any) -> No
|
|
15
15
|
|
16
16
|
def init() -> None:
|
17
17
|
"""Initialize the SQL alchemy session selector."""
|
18
|
-
|
18
|
+
|
19
|
+
sqlalchemy.event.listen(Session, "after_transaction_create", _add_session_id)
|
c2cwsgiutils/setup_process.py
CHANGED
@@ -4,7 +4,6 @@ Used by standalone (non-wsgi) processes to setup all the bits and pieces of c2cw
|
|
4
4
|
Must be imported at the very beginning of the process's life, before any other module is imported.
|
5
5
|
"""
|
6
6
|
|
7
|
-
|
8
7
|
import argparse
|
9
8
|
import warnings
|
10
9
|
from typing import Any, Callable, Dict, Optional, TypedDict, cast
|
@@ -76,7 +76,7 @@ class SQLAlchemyHandler(logging.Handler):
|
|
76
76
|
try:
|
77
77
|
self.session.bulk_save_objects(logs)
|
78
78
|
self.session.commit()
|
79
|
-
except
|
79
|
+
except SQLAlchemyError:
|
80
80
|
try:
|
81
81
|
self.create_db()
|
82
82
|
self.session.rollback()
|
@@ -101,7 +101,7 @@ class SQLAlchemyHandler(logging.Handler):
|
|
101
101
|
with self.engine.begin() as connection:
|
102
102
|
if not self.engine.dialect.has_schema(connection, self.Log.__table_args__["schema"]):
|
103
103
|
connection.execute(
|
104
|
-
sqlalchemy.schema.CreateSchema(self.Log.__table_args__["schema"]),
|
104
|
+
sqlalchemy.schema.CreateSchema(self.Log.__table_args__["schema"]),
|
105
105
|
)
|
106
106
|
Base.metadata.create_all(self.engine)
|
107
107
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: c2cwsgiutils
|
3
|
-
Version: 5.2.
|
3
|
+
Version: 5.2.4
|
4
4
|
Summary: Common utilities for Camptocamp WSGI applications
|
5
5
|
Home-page: https://github.com/camptocamp/c2cwsgiutils
|
6
6
|
License: BSD-2-Clause
|
7
7
|
Keywords: geo,gis,sqlalchemy,orm,wsgi
|
8
8
|
Author: Camptocamp
|
9
9
|
Author-email: info@camptocamp.com
|
10
|
-
Requires-Python: >=3.8,<
|
10
|
+
Requires-Python: >=3.8,<3.12
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
12
12
|
Classifier: Environment :: Plugins
|
13
13
|
Classifier: Framework :: Pyramid
|
@@ -21,8 +21,6 @@ Classifier: Programming Language :: Python :: 3.8
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.9
|
22
22
|
Classifier: Programming Language :: Python :: 3.10
|
23
23
|
Classifier: Programming Language :: Python :: 3.11
|
24
|
-
Classifier: Programming Language :: Python :: 3
|
25
|
-
Classifier: Programming Language :: Python :: 3.8
|
26
24
|
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
|
27
25
|
Classifier: Typing :: Typed
|
28
26
|
Provides-Extra: all
|
@@ -39,9 +37,11 @@ Requires-Dist: cee_syslog_handler ; extra == "standard" or extra == "all"
|
|
39
37
|
Requires-Dist: certifi
|
40
38
|
Requires-Dist: cornice ; extra == "standard" or extra == "all"
|
41
39
|
Requires-Dist: gunicorn ; extra == "standard" or extra == "all"
|
40
|
+
Requires-Dist: idna
|
42
41
|
Requires-Dist: lxml ; extra == "standard" or extra == "all"
|
43
42
|
Requires-Dist: netifaces ; extra == "standard" or extra == "all"
|
44
43
|
Requires-Dist: objgraph ; extra == "standard" or extra == "all"
|
44
|
+
Requires-Dist: pillow
|
45
45
|
Requires-Dist: psycopg2 ; extra == "standard" or extra == "all"
|
46
46
|
Requires-Dist: pyjwt ; extra == "oauth2" or extra == "all"
|
47
47
|
Requires-Dist: pyramid ; extra == "standard" or extra == "all"
|
@@ -51,9 +51,13 @@ Requires-Dist: redis ; extra == "standard" or extra == "broadcast" or extra == "
|
|
51
51
|
Requires-Dist: requests
|
52
52
|
Requires-Dist: requests-oauthlib ; extra == "oauth2" or extra == "all"
|
53
53
|
Requires-Dist: scikit-image ; extra == "test-images"
|
54
|
+
Requires-Dist: scipy
|
54
55
|
Requires-Dist: sentry-sdk ; extra == "standard" or extra == "all"
|
55
56
|
Requires-Dist: ujson ; extra == "standard" or extra == "all"
|
57
|
+
Requires-Dist: urllib3
|
56
58
|
Requires-Dist: waitress ; extra == "dev" or extra == "all"
|
59
|
+
Requires-Dist: webob
|
60
|
+
Requires-Dist: zipp
|
57
61
|
Requires-Dist: zope.interface ; extra == "standard" or extra == "all"
|
58
62
|
Requires-Dist: zope.sqlalchemy ; extra == "standard" or extra == "all"
|
59
63
|
Project-URL: Repository, https://github.com/camptocamp/c2cwsgiutils
|
@@ -727,3 +731,10 @@ To make a release:
|
|
727
731
|
- Add the new branch name in the `.github/workflows/rebuild.yaml` and
|
728
732
|
`.github/workflows/audit.yaml` files.
|
729
733
|
|
734
|
+
## Pserve
|
735
|
+
|
736
|
+
Pserve will not set the headers in the environment then if you are behind a reverse proxy, you will have
|
737
|
+
wrong values in client information, you can force them by using the environment variables:
|
738
|
+
`C2CWSGIUTILS_FORCE_PROTO`, `C2CWSGIUTILS_FORCE_HOST` `C2CWSGIUTILS_FORCE_SERVER_NAME` and
|
739
|
+
`C2CWSGIUTILS_FORCE_REMOTE_ADDR`.
|
740
|
+
|
@@ -1,27 +1,27 @@
|
|
1
1
|
c2cwsgiutils/__init__.py,sha256=sPZ6-3L_gJy-NIbYdr7EcoMK2TFZMUnn-qD2BglQP8w,3997
|
2
2
|
c2cwsgiutils/acceptance/__init__.py,sha256=vjtpPfu0kbXUOYMx15Z8713IfPFZA9XnkUKkIFtVj_M,1500
|
3
3
|
c2cwsgiutils/acceptance/composition.py,sha256=73WT-DB3Zk_Va8bNfAQuYAOdXuJvNr-DbFJW4N_rLO8,4620
|
4
|
-
c2cwsgiutils/acceptance/connection.py,sha256=
|
4
|
+
c2cwsgiutils/acceptance/connection.py,sha256=fBsDlNwPUz0kl4xpVmb1_HXzl5BtmzQ2hnJGgeGG0X8,9791
|
5
5
|
c2cwsgiutils/acceptance/image.py,sha256=x5nUxg9UItluXEeP6xWU8UhvDUWu-SwDEqoNacOu3EA,4491
|
6
6
|
c2cwsgiutils/acceptance/print.py,sha256=DDAugcYsDAiFPzMnAQ1k4Us_x37ANEbuk5hb4d6xyKc,2329
|
7
7
|
c2cwsgiutils/acceptance/utils.py,sha256=ixCaHzLyA744dZnfwHpp2AeFlc14WAJb4ojBbbr_R-c,2072
|
8
|
-
c2cwsgiutils/auth.py,sha256=
|
9
|
-
c2cwsgiutils/broadcast/__init__.py,sha256=
|
8
|
+
c2cwsgiutils/auth.py,sha256=eFxEk5qe2UdKF_IdX6VAUjuEoI1heE253nioOY4M-Pk,9434
|
9
|
+
c2cwsgiutils/broadcast/__init__.py,sha256=ag2MHwEZ0vXjnWYKhOJxOEL1Nj7Xyt6NkYPc0zNPZjQ,4161
|
10
10
|
c2cwsgiutils/broadcast/interface.py,sha256=M2NMNCXky05xA_jVlnkEcRG-3SE0TEA2uXTz0oR4zKs,615
|
11
11
|
c2cwsgiutils/broadcast/local.py,sha256=iJxv9IjzKjKYz6ZLXRSbrqGRmNUmGoYsSbcRSdz4dbs,1062
|
12
12
|
c2cwsgiutils/broadcast/redis.py,sha256=02EE4-FHG8cE4v_sIswiQblKN6LseorkO13a-b2qq-k,5058
|
13
13
|
c2cwsgiutils/broadcast/utils.py,sha256=0fQZXPu3p_5LEJpGenJwiiMxECQjJhjZBjIkBk8h-ng,272
|
14
|
-
c2cwsgiutils/client_info.py,sha256=
|
15
|
-
c2cwsgiutils/config_utils.py,sha256=
|
14
|
+
c2cwsgiutils/client_info.py,sha256=YFteIwNamIc3LIsaYv2C1MZRS6crJYoId5TgxYNvDSw,3601
|
15
|
+
c2cwsgiutils/config_utils.py,sha256=v1v4Bypfh3yZeuR_Oh1BnA7eowfbJIQa423KnzV_VFc,1497
|
16
16
|
c2cwsgiutils/coverage_setup.py,sha256=fES0sdhFy6oaeOCuP1qjjm7PQL9l_O8rUKZhRvRBRwQ,839
|
17
|
-
c2cwsgiutils/db.py,sha256=
|
17
|
+
c2cwsgiutils/db.py,sha256=gq4BRaPLP7BM6bbRdkTwbb1hWC-onQQyW3WpmJk5o58,16141
|
18
18
|
c2cwsgiutils/db_maintenance_view.py,sha256=Br9EnG4wfFCh5-vWGY86be9iCQmS8Z3dg-n0F0Qp_wc,3049
|
19
19
|
c2cwsgiutils/debug/__init__.py,sha256=80zdAZnE9cwgQW1odE2aOauIxYsG5CQpWvHPcslRue8,1239
|
20
20
|
c2cwsgiutils/debug/_listeners.py,sha256=atiDbQaWYSSbLRcAuI53Rq_8jvwSN8U6e40Qzc6gePU,4364
|
21
21
|
c2cwsgiutils/debug/_views.py,sha256=OxFHGglT6QVGAoZqsgREtK3sZ4aSAoxd4Je0CmP5eAc,7507
|
22
22
|
c2cwsgiutils/debug/utils.py,sha256=1vtfXND_hzs6PH8ohnRGcPYaW2_qKRJ6VxDvEdG0hdU,2328
|
23
|
-
c2cwsgiutils/errors.py,sha256=
|
24
|
-
c2cwsgiutils/health_check.py,sha256=
|
23
|
+
c2cwsgiutils/errors.py,sha256=xAJghvSBRH_KOQFcYrItGrCLIFVri60ohq_z1dyG63I,6725
|
24
|
+
c2cwsgiutils/health_check.py,sha256=cT1vgBwzb9D0KimV8GH96rslXcUnCOPFMIjMJqIhNKo,20767
|
25
25
|
c2cwsgiutils/index.py,sha256=hXrkHNMuTQnNlG-pTe19teNWHX_gjBF4W1WmBAHiUBw,17356
|
26
26
|
c2cwsgiutils/loader.py,sha256=hFIB30saYkyj8brmL07AKE_PFAb2Bny_kWlSOg-xp1E,628
|
27
27
|
c2cwsgiutils/logging_view.py,sha256=zVvZiNvJDdMwclm3KiqsfK8Ra2JSKPSSQt5VYGGpQ2k,3337
|
@@ -32,11 +32,11 @@ c2cwsgiutils/profiler.py,sha256=3tIwoDSzOKQ06ug_U6j5VDR1BQ9auUOqdJRRLRhDoHw,739
|
|
32
32
|
c2cwsgiutils/prometheus.py,sha256=03DcJqwEj_UaDjVb5rzSbMAqJ6930ZycvNWm-lKB3c4,2062
|
33
33
|
c2cwsgiutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
34
|
c2cwsgiutils/pyramid.py,sha256=VmrAMFpC636WTToNNaI9hWQOYJAk5hn__K43mBvUFtw,1346
|
35
|
-
c2cwsgiutils/pyramid_logging.py,sha256=
|
35
|
+
c2cwsgiutils/pyramid_logging.py,sha256=u-z1LI-Mm_I3ihZr8Ymtospc3YFWMLPV2FMt4SUvnHw,3704
|
36
36
|
c2cwsgiutils/redis_stats.py,sha256=2Y0xj7_yK_A6PRhu8jSK8TF0fsboMiB88BWuEO-qv90,1478
|
37
|
-
c2cwsgiutils/redis_utils.py,sha256=
|
38
|
-
c2cwsgiutils/request_tracking/__init__.py,sha256=
|
39
|
-
c2cwsgiutils/request_tracking/_sql.py,sha256=
|
37
|
+
c2cwsgiutils/redis_utils.py,sha256=_S9yYngK3owFAjaGhT82V5e-h1dGEwl77RV7hQh09dM,4513
|
38
|
+
c2cwsgiutils/request_tracking/__init__.py,sha256=uLb9IuqgM7i_QXinQ97MRImnTAIxyRbV1jXJA7tifz4,3824
|
39
|
+
c2cwsgiutils/request_tracking/_sql.py,sha256=47OtVn3g5QpCCWyl8w6V1xVjbf0ahrw4r9ijjRKXDz4,573
|
40
40
|
c2cwsgiutils/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
41
|
c2cwsgiutils/scripts/check_es.py,sha256=dXF1FpyyIUMRlDxA-OY4RjOdnNqxYq2F6IhoNM7nRPg,4147
|
42
42
|
c2cwsgiutils/scripts/genversion.py,sha256=A5jE3E-yNMd3IW4jRFJmvLHphrvko4rA-is43sFKoxw,1998
|
@@ -44,23 +44,23 @@ c2cwsgiutils/scripts/stats_db.py,sha256=f_VY-JMYvCvZX4vGZHL17ZOQRVust6_3L4eeOgDe
|
|
44
44
|
c2cwsgiutils/scripts/test_print.py,sha256=UeOZa7jTazgEq5BRJD6lq-u9K6G4movf-sOVKTEs1cQ,2096
|
45
45
|
c2cwsgiutils/sentry.py,sha256=SpqCADxHvYVR89mFRMQDA7IbUVHh6iwKS06keWXtZSQ,5002
|
46
46
|
c2cwsgiutils/services.py,sha256=qz51oCZOC0Lj2_ig4UuHIm0ZZO3FfpFTxrXBWZ_oaNo,1567
|
47
|
-
c2cwsgiutils/setup_process.py,sha256=
|
48
|
-
c2cwsgiutils/sql_profiler/__init__.py,sha256=
|
49
|
-
c2cwsgiutils/sql_profiler/_impl.py,sha256=
|
47
|
+
c2cwsgiutils/setup_process.py,sha256=s4_3DfKFCp54SUUDh4qS4M-C7n8LVw-XLKsEhCmk6jQ,3493
|
48
|
+
c2cwsgiutils/sql_profiler/__init__.py,sha256=_Zw5BO-0sN2tVbSwtyHwi8gkmhCtGW-F6agkENhYILM,877
|
49
|
+
c2cwsgiutils/sql_profiler/_impl.py,sha256=zRNrFfUSPGjNHNluExpCpDkxvGna24w7Ny7LnuJsge0,3681
|
50
50
|
c2cwsgiutils/sqlalchemylogger/README.md,sha256=WEyJSrBjedtX1FFrYiq4oMaWMt1fNxRkJYmJWnAoz3g,1552
|
51
51
|
c2cwsgiutils/sqlalchemylogger/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
52
52
|
c2cwsgiutils/sqlalchemylogger/_filters.py,sha256=OJQ9_WA-fd9fMZ7TUNFzHHTPI6msw2NVBl5RoeYFnGw,752
|
53
53
|
c2cwsgiutils/sqlalchemylogger/_models.py,sha256=gCCP_AfGl8unVtV1mQW8l2vk8ltDMWl5UJj3-tJ94Pk,1477
|
54
54
|
c2cwsgiutils/sqlalchemylogger/examples/example.py,sha256=n48dJdUi1FH1hfBMAbfHLGPSb1bOVD8pXMxXB57PnpQ,460
|
55
|
-
c2cwsgiutils/sqlalchemylogger/handlers.py,sha256=
|
55
|
+
c2cwsgiutils/sqlalchemylogger/handlers.py,sha256=Bdmsv-C8ElM1U5C7_SWh6ZowyC4yzTQUXfKy5r0QC_k,4791
|
56
56
|
c2cwsgiutils/stats.py,sha256=A32rL2EZ0XlZGJzfZ2uF7cgzdBb4QtFiPnq77WmFhj4,11480
|
57
|
-
c2cwsgiutils/stats_pyramid/__init__.py,sha256=
|
57
|
+
c2cwsgiutils/stats_pyramid/__init__.py,sha256=NGVcqiLbk83HyFhl3IUKoXKNbYw4n8SrVpuYaKJjS1w,972
|
58
58
|
c2cwsgiutils/stats_pyramid/_db_spy.py,sha256=9dpOmx3uoJo8H6NGshDo9IqY97_JQ1Ywu_1dZc4fj08,2840
|
59
59
|
c2cwsgiutils/stats_pyramid/_pyramid_spy.py,sha256=K6Vd-nNAsstF0-2L51Qdo9xDt0RFB6-N5oBiLx5ZJms,2943
|
60
60
|
c2cwsgiutils/stats_pyramid/_views.py,sha256=c3PfyrXzG6I184-bWUrHpR1bt3xyIMgs5mfcZ6NjEwU,527
|
61
61
|
c2cwsgiutils/version.py,sha256=NPWGTOIOMbF2H6S0lmyOHw3r7UXh-1IkrY4ySJx7_Vk,1817
|
62
|
-
c2cwsgiutils-5.2.
|
63
|
-
c2cwsgiutils-5.2.
|
64
|
-
c2cwsgiutils-5.2.
|
65
|
-
c2cwsgiutils-5.2.
|
66
|
-
c2cwsgiutils-5.2.
|
62
|
+
c2cwsgiutils-5.2.4.dist-info/LICENSE,sha256=rM6IWxociA3daRkXnNLYOxGndT5fbs3BfVZCA2Xgt-g,1304
|
63
|
+
c2cwsgiutils-5.2.4.dist-info/METADATA,sha256=GqWk2CBhG0kiJim8zT1VnbtPGIMU2BOPcTh5ashWfVo,31901
|
64
|
+
c2cwsgiutils-5.2.4.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
|
65
|
+
c2cwsgiutils-5.2.4.dist-info/entry_points.txt,sha256=ujgqMTL1awN9qDg8WXmrF7m0fgR-hslUM6zKH86pvy0,703
|
66
|
+
c2cwsgiutils-5.2.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|