arpakitlib 1.8.150__py3-none-any.whl → 1.8.152__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.
@@ -236,6 +236,24 @@ def get_exception_handler() -> Callable:
236
236
  funcs_before = []
237
237
  async_funcs_after = []
238
238
 
239
+ funcs_before.append(
240
+ logging_func_before_in_api_exception_handler(
241
+ ignore_api_error_codes=[
242
+ APIErrorCodes.cannot_authorize,
243
+ APIErrorCodes.error_in_request,
244
+ APIErrorCodes.not_found
245
+ ],
246
+ ignore_status_codes=[
247
+ fastapi.status.HTTP_401_UNAUTHORIZED,
248
+ fastapi.status.HTTP_422_UNPROCESSABLE_ENTITY,
249
+ fastapi.status.HTTP_404_NOT_FOUND
250
+ ],
251
+ ignore_exception_types=[
252
+ fastapi.exceptions.RequestValidationError
253
+ ],
254
+ )
255
+ )
256
+
239
257
  if get_cached_sqlalchemy_db() is not None:
240
258
  funcs_before.append(
241
259
  create_story_log_func_before_in_api_exception_handler(
@@ -255,24 +273,6 @@ def get_exception_handler() -> Callable:
255
273
  )
256
274
  )
257
275
 
258
- funcs_before.append(
259
- logging_func_before_in_api_exception_handler(
260
- ignore_api_error_codes=[
261
- APIErrorCodes.cannot_authorize,
262
- APIErrorCodes.error_in_request,
263
- APIErrorCodes.not_found
264
- ],
265
- ignore_status_codes=[
266
- fastapi.status.HTTP_401_UNAUTHORIZED,
267
- fastapi.status.HTTP_422_UNPROCESSABLE_ENTITY,
268
- fastapi.status.HTTP_404_NOT_FOUND
269
- ],
270
- ignore_exception_types=[
271
- fastapi.exceptions.RequestValidationError
272
- ],
273
- )
274
- )
275
-
276
276
  return create_api_exception_handler(
277
277
  funcs_before=funcs_before,
278
278
  async_funcs_after=async_funcs_after
@@ -25,6 +25,7 @@ class StoryLogDBM(SimpleDBM):
25
25
  error_in_execute_operation = "error_in_execute_operation"
26
26
  error_in_api = "error_in_api"
27
27
  error_in_tg_bot = "error_in_tg_bot"
28
+ error_in_sync_execute_with_story_log = "error_in_sync_execute_with_story_log"
28
29
 
29
30
  level: Mapped[str] = mapped_column(
30
31
  sqlalchemy.TEXT,
@@ -0,0 +1,81 @@
1
+ import logging
2
+ from typing import Callable, Any
3
+
4
+ from arpakitlib.ar_exception_util import exception_to_traceback_str
5
+ from sqlalchemy.orm import Session
6
+
7
+ from project.core.util import setup_logging
8
+ from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
9
+ from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
10
+
11
+ _logger = logging.getLogger(__name__)
12
+
13
+
14
+ def sync_execute_with_story_log(
15
+ func: Callable,
16
+ *,
17
+ func_args: tuple | None = None,
18
+ func_kwargs: dict | None = None,
19
+ session_: Session | None = None,
20
+ story_log_level: str = StoryLogDBM.Levels.error,
21
+ story_log_type: str = StoryLogDBM.Types.error_in_sync_execute_with_story_log,
22
+ story_log_title: str | None = None,
23
+ story_log_extra_data: dict | None = None,
24
+ ) -> Any:
25
+ if func_args is None:
26
+ func_args = tuple()
27
+ if func_kwargs is None:
28
+ func_kwargs = {}
29
+ if story_log_extra_data is None:
30
+ story_log_extra_data = {}
31
+
32
+ try:
33
+ return func(*func_args, **func_kwargs)
34
+ except Exception as exception:
35
+ _logger.error(f"Error in {func.__name__}", exc_info=True)
36
+
37
+ if story_log_title is None:
38
+ story_log_title = f"Error in func {func.__name__}: {type(exception).__name__}: {exception}"
39
+ story_log_extra_data.update({
40
+ "exception": str(exception),
41
+ "exception_traceback": exception_to_traceback_str(exception=exception),
42
+ "exception_type_name": type(exception).__name__
43
+ })
44
+
45
+ if session_ is not None:
46
+ story_log_dbm = StoryLogDBM(
47
+ level=story_log_level,
48
+ type=story_log_type,
49
+ title=story_log_title,
50
+ extra_data=story_log_extra_data
51
+ )
52
+ session_.add(story_log_dbm)
53
+ session_.commit()
54
+ else:
55
+ with get_cached_sqlalchemy_db().new_session() as session:
56
+ story_log_dbm = StoryLogDBM(
57
+ level=story_log_level,
58
+ type=story_log_type,
59
+ title=story_log_title,
60
+ extra_data=story_log_extra_data
61
+ )
62
+ session.add(story_log_dbm)
63
+ session.commit()
64
+
65
+ raise exception
66
+
67
+
68
+ def __example():
69
+ setup_logging()
70
+
71
+ def hello_world():
72
+ print(1)
73
+ raise ValueError("1111111")
74
+
75
+ sync_execute_with_story_log(
76
+ func=hello_world
77
+ )
78
+
79
+
80
+ if __name__ == '__main__':
81
+ __example()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.8.150
3
+ Version: 1.8.152
4
4
  Summary: arpakitlib
5
5
  License: Apache-2.0
6
6
  Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
@@ -92,7 +92,7 @@ arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py,sha256=-0
92
92
  arpakitlib/_arpakit_project_template_v_5/project/api/create_first_data.py,sha256=sc98-xW74QbhFCT6AW5-fUJVd8RLRxClAOEW5-ec9T0,1815
93
93
  arpakitlib/_arpakit_project_template_v_5/project/api/event.py,sha256=P8gV2Bq6LeLH0JDN9Z3O401PMbyNr2n-tme2gPvT-m4,996
94
94
  arpakitlib/_arpakit_project_template_v_5/project/api/exception.py,sha256=cNZaI2DacGLl8Hyn1qIfFpVjvQzOQjwXWsVW4auBrCo,1280
95
- arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py,sha256=TEzkCNOg_TAELRTZgLtblVagSaHf-vego_oH5FNCbcs,11179
95
+ arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py,sha256=q6a4HHIIWnCinAOu89mQrpABm0WMTANNCOPLa1YG7_k,11179
96
96
  arpakitlib/_arpakit_project_template_v_5/project/api/openapi_ui.py,sha256=PLhH-W6zDViO-75AGCs8Vq3IoyHChdqwBYAqLvdQN0U,904
97
97
  arpakitlib/_arpakit_project_template_v_5/project/api/response.py,sha256=xZMymP2BuQaRNVWLeIp3UgUUo-MFN8MJnsn9Al4vOb8,1028
98
98
  arpakitlib/_arpakit_project_template_v_5/project/api/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -258,11 +258,12 @@ arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model
258
258
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/api_key.py,sha256=2X6VPkf1TKq-0319J0tL-rPMvgmkBCjim3Si1dZboMQ,1969
259
259
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/common.py,sha256=9j3QwBkaQSmsqXZbAYZDysGXP3xPPAHJfqIja5UnLcc,3229
260
260
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/operation.py,sha256=op5cSkTlHJyGjULgcSWE9-_PNinKSneHLxhG5DUkd9M,5913
261
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py,sha256=wig_D6OZyYYGsqZEbmSK56qoAIOnOVnOEB_sRSZLSIU,2396
261
+ arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py,sha256=u4bXqP0tul7wwypWnqSKdvn6N2DJPdmOi_CBy_JMFrk,2482
262
262
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py,sha256=-gmBWOAHJsUl-YY7U_2ZcKK5GV9dPHpvpdTRQnfbA_0,7579
263
263
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user_token.py,sha256=hX6nHvVvhg5YB3vCjsku4TDoY5Jk1FsuDu5elbcF7VE,1886
264
264
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/verification_code.py,sha256=xrrNPXn5PeCnZ2VWVBdXDUft83EEYtc6b4pvs0oh1uw,3078
265
265
  arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
266
+ arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/util/execute_func_with_story_log.py,sha256=dZxt9y4YCX_8Pu00QojnmfFI4H93-rs8UuSiNT098eA,2499
266
267
  arpakitlib/_arpakit_project_template_v_5/project/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
267
268
  arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_api_keys.py,sha256=9F2bMfymaqx_Czh_tF945BKpKqNrVNjSIfCQl13Dkxw,911
268
269
  arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_1.py,sha256=F7vCmfWjItw5QzYR7_OAPSHdJt9louuvqXvcfOkU0AU,2246
@@ -406,8 +407,8 @@ arpakitlib/ar_ssh_runner_util.py,sha256=yvAwza480MkHKvLkDEsR7JNh2bYNs6P9rCVo4NA8
406
407
  arpakitlib/ar_str_util.py,sha256=2lGpnXDf2h1cBZpVf5i1tX_HCv5iBd6IGnrCw4QWWlY,4350
407
408
  arpakitlib/ar_type_util.py,sha256=Cs_tef-Fc5xeyAF54KgISCsP11NHyzIsglm4S3Xx7iM,4049
408
409
  arpakitlib/ar_yookassa_api_client_util.py,sha256=VozuZeCJjmLd1zj2BdC9WfiAQ3XYOrIMsdpNK-AUlm0,5347
409
- arpakitlib-1.8.150.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
410
- arpakitlib-1.8.150.dist-info/METADATA,sha256=M-KDN1jm8Ku-PqaVBOhIrl5eLu-vHGr8s6mRbBBNI_I,3706
411
- arpakitlib-1.8.150.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
412
- arpakitlib-1.8.150.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
413
- arpakitlib-1.8.150.dist-info/RECORD,,
410
+ arpakitlib-1.8.152.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
411
+ arpakitlib-1.8.152.dist-info/METADATA,sha256=87EE4vtrA0N8mTZmUnJsr_OdGDe53fCesdp8DoViueM,3706
412
+ arpakitlib-1.8.152.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
413
+ arpakitlib-1.8.152.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
414
+ arpakitlib-1.8.152.dist-info/RECORD,,