jararaca 0.3.12a17__tar.gz → 0.3.12a18__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 (90) hide show
  1. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/PKG-INFO +1 -1
  2. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/pyproject.toml +1 -1
  3. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +8 -3
  4. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/tools/typescript/interface_parser.py +69 -36
  5. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/LICENSE +0 -0
  6. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/README.md +0 -0
  7. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/CNAME +0 -0
  8. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/architecture.md +0 -0
  9. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
  10. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
  11. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/assets/tracing_example.png +0 -0
  12. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/http-rpc.md +0 -0
  13. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/index.md +0 -0
  14. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/interceptors.md +0 -0
  15. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/messagebus.md +0 -0
  16. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/retry.md +0 -0
  17. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/scheduler.md +0 -0
  18. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/stylesheets/custom.css +0 -0
  19. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/docs/websocket.md +0 -0
  20. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/__init__.py +0 -0
  21. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/__main__.py +0 -0
  22. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/broker_backend/__init__.py +0 -0
  23. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/broker_backend/mapper.py +0 -0
  24. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/broker_backend/redis_broker_backend.py +0 -0
  25. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/cli.py +0 -0
  26. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/common/__init__.py +0 -0
  27. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/core/__init__.py +0 -0
  28. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/core/providers.py +0 -0
  29. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/core/uow.py +0 -0
  30. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/di.py +0 -0
  31. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/files/entity.py.mako +0 -0
  32. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/lifecycle.py +0 -0
  33. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/messagebus/__init__.py +0 -0
  34. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/messagebus/bus_message_controller.py +0 -0
  35. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/messagebus/consumers/__init__.py +0 -0
  36. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/messagebus/decorators.py +0 -0
  37. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
  38. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py +0 -0
  39. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +0 -0
  40. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/messagebus/message.py +0 -0
  41. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/messagebus/publisher.py +0 -0
  42. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/messagebus/worker.py +0 -0
  43. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/microservice.py +0 -0
  44. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/observability/decorators.py +0 -0
  45. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/observability/interceptor.py +0 -0
  46. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/observability/providers/__init__.py +0 -0
  47. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/observability/providers/otel.py +0 -0
  48. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/persistence/base.py +0 -0
  49. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/persistence/exports.py +0 -0
  50. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/persistence/interceptors/__init__.py +0 -0
  51. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/persistence/interceptors/constants.py +0 -0
  52. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/persistence/interceptors/decorators.py +0 -0
  53. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/persistence/session.py +0 -0
  54. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/persistence/sort_filter.py +0 -0
  55. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/persistence/utilities.py +0 -0
  56. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/__init__.py +0 -0
  57. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/decorators.py +0 -0
  58. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/hooks.py +0 -0
  59. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/http_microservice.py +0 -0
  60. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/server.py +0 -0
  61. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/websocket/__init__.py +0 -0
  62. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/websocket/base_types.py +0 -0
  63. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/websocket/context.py +0 -0
  64. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/websocket/decorators.py +0 -0
  65. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/websocket/redis.py +0 -0
  66. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/websocket/types.py +0 -0
  67. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/presentation/websocket/websocket_interceptor.py +0 -0
  68. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/py.typed +0 -0
  69. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/reflect/__init__.py +0 -0
  70. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/reflect/controller_inspect.py +0 -0
  71. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/reflect/metadata.py +0 -0
  72. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/rpc/__init__.py +0 -0
  73. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/rpc/http/__init__.py +0 -0
  74. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/rpc/http/backends/__init__.py +0 -0
  75. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/rpc/http/backends/httpx.py +0 -0
  76. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/rpc/http/backends/otel.py +0 -0
  77. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/rpc/http/decorators.py +0 -0
  78. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/rpc/http/httpx.py +0 -0
  79. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/scheduler/__init__.py +0 -0
  80. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/scheduler/beat_worker.py +0 -0
  81. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/scheduler/decorators.py +0 -0
  82. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/scheduler/types.py +0 -0
  83. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/tools/app_config/__init__.py +0 -0
  84. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/tools/app_config/decorators.py +0 -0
  85. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/tools/app_config/interceptor.py +0 -0
  86. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/tools/typescript/__init__.py +0 -0
  87. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/tools/typescript/decorators.py +0 -0
  88. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/utils/__init__.py +0 -0
  89. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/utils/rabbitmq_utils.py +0 -0
  90. {jararaca-0.3.12a17 → jararaca-0.3.12a18}/src/jararaca/utils/retry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jararaca
3
- Version: 0.3.12a17
3
+ Version: 0.3.12a18
4
4
  Summary: A simple and fast API framework for Python
5
5
  Home-page: https://github.com/LuscasLeo/jararaca
6
6
  Author: Lucas S
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "jararaca"
3
- version = "0.3.12a17"
3
+ version = "0.3.12a18"
4
4
  description = "A simple and fast API framework for Python"
5
5
  authors = ["Lucas S <me@luscasleo.dev>"]
6
6
  readme = "README.md"
@@ -114,9 +114,14 @@ async def providing_new_session(
114
114
  current_session.bind,
115
115
  ) as new_session, new_session.begin() as new_tx:
116
116
  with providing_session(new_session, new_tx, connection_name):
117
- yield new_session
118
- if new_tx.is_active:
119
- await new_tx.commit()
117
+ try:
118
+ yield new_session
119
+ if new_tx.is_active:
120
+ await new_tx.commit()
121
+ except Exception:
122
+ if new_tx.is_active:
123
+ await new_tx.rollback()
124
+ raise
120
125
 
121
126
 
122
127
  def use_session(connection_name: str | None = None) -> AsyncSession:
@@ -1067,26 +1067,37 @@ def extract_parameters(
1067
1067
  )
1068
1068
  else:
1069
1069
  mapped_types.add(annotated_type)
1070
- # For default parameters (treated as query), use Input suffix if it's a split model
1071
- context_suffix = (
1072
- "Input"
1073
- if (
1074
- inspect.isclass(annotated_type)
1075
- and hasattr(annotated_type, "__dict__")
1076
- and SplitInputOutput.is_split_model(annotated_type)
1070
+ # Special handling for UploadFile - should go to body, not query
1071
+ if annotated_type == UploadFile:
1072
+ parameters_list.append(
1073
+ HttpParemeterSpec(
1074
+ type_="body",
1075
+ name=parameter_name,
1076
+ required=True,
1077
+ argument_type_str=get_field_type_for_ts(annotated_type),
1078
+ )
1077
1079
  )
1078
- else ""
1079
- )
1080
- parameters_list.append(
1081
- HttpParemeterSpec(
1082
- type_="query",
1083
- name=parameter_name,
1084
- required=True,
1085
- argument_type_str=get_field_type_for_ts(
1086
- annotated_type, context_suffix
1087
- ),
1080
+ else:
1081
+ # For default parameters (treated as query), use Input suffix if it's a split model
1082
+ context_suffix = (
1083
+ "Input"
1084
+ if (
1085
+ inspect.isclass(annotated_type)
1086
+ and hasattr(annotated_type, "__dict__")
1087
+ and SplitInputOutput.is_split_model(annotated_type)
1088
+ )
1089
+ else ""
1090
+ )
1091
+ parameters_list.append(
1092
+ HttpParemeterSpec(
1093
+ type_="query",
1094
+ name=parameter_name,
1095
+ required=True,
1096
+ argument_type_str=get_field_type_for_ts(
1097
+ annotated_type, context_suffix
1098
+ ),
1099
+ )
1088
1100
  )
1089
- )
1090
1101
 
1091
1102
  elif inspect.isclass(parameter_type) and issubclass(
1092
1103
  parameter_type, BaseModel
@@ -1106,6 +1117,17 @@ def extract_parameters(
1106
1117
  ),
1107
1118
  )
1108
1119
  )
1120
+ elif parameter_type == UploadFile:
1121
+ # UploadFile should always go to body, not query parameters
1122
+ mapped_types.add(parameter_type)
1123
+ parameters_list.append(
1124
+ HttpParemeterSpec(
1125
+ type_="body",
1126
+ name=parameter_name,
1127
+ required=True,
1128
+ argument_type_str=get_field_type_for_ts(parameter_type),
1129
+ )
1130
+ )
1109
1131
  elif (
1110
1132
  # Match both simple parameters {param} and parameters with converters {param:converter}
1111
1133
  re.search(f"{{{parameter_name}(:.*?)?}}", controller.path) is not None
@@ -1134,26 +1156,37 @@ def extract_parameters(
1134
1156
  )
1135
1157
  else:
1136
1158
  mapped_types.add(parameter_type)
1137
- # For default parameters (treated as query), use Input suffix if it's a split model
1138
- context_suffix = (
1139
- "Input"
1140
- if (
1141
- inspect.isclass(parameter_type)
1142
- and hasattr(parameter_type, "__dict__")
1143
- and SplitInputOutput.is_split_model(parameter_type)
1159
+ # Special handling for UploadFile - should go to body, not query
1160
+ if parameter_type == UploadFile:
1161
+ parameters_list.append(
1162
+ HttpParemeterSpec(
1163
+ type_="body",
1164
+ name=parameter_name,
1165
+ required=True,
1166
+ argument_type_str=get_field_type_for_ts(parameter_type),
1167
+ )
1144
1168
  )
1145
- else ""
1146
- )
1147
- parameters_list.append(
1148
- HttpParemeterSpec(
1149
- type_="query",
1150
- name=parameter_name,
1151
- required=True,
1152
- argument_type_str=get_field_type_for_ts(
1153
- parameter_type, context_suffix
1154
- ),
1169
+ else:
1170
+ # For default parameters (treated as query), use Input suffix if it's a split model
1171
+ context_suffix = (
1172
+ "Input"
1173
+ if (
1174
+ inspect.isclass(parameter_type)
1175
+ and hasattr(parameter_type, "__dict__")
1176
+ and SplitInputOutput.is_split_model(parameter_type)
1177
+ )
1178
+ else ""
1179
+ )
1180
+ parameters_list.append(
1181
+ HttpParemeterSpec(
1182
+ type_="query",
1183
+ name=parameter_name,
1184
+ required=True,
1185
+ argument_type_str=get_field_type_for_ts(
1186
+ parameter_type, context_suffix
1187
+ ),
1188
+ )
1155
1189
  )
1156
- )
1157
1190
 
1158
1191
  if inspect.isclass(parameter_type) and not is_primitive(parameter_type):
1159
1192
  signature = inspect.signature(parameter_type)
File without changes
File without changes
File without changes
File without changes
File without changes