ormlambda 3.12.2__tar.gz → 3.34.1__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 (184) hide show
  1. ormlambda-3.34.1/AUTHORS +32 -0
  2. {ormlambda-3.12.2 → ormlambda-3.34.1}/PKG-INFO +2 -3
  3. {ormlambda-3.12.2 → ormlambda-3.34.1}/pyproject.toml +2 -1
  4. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/__init__.py +2 -0
  5. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/caster/__init__.py +1 -1
  6. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/caster/caster.py +29 -12
  7. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/abstract_classes/clause_info_converter.py +4 -12
  8. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/abstract_classes/decomposition_query.py +17 -2
  9. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/abstract_classes/non_query_base.py +9 -7
  10. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/abstract_classes/query_base.py +3 -1
  11. ormlambda-3.34.1/src/ormlambda/common/errors/__init__.py +50 -0
  12. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/interfaces/IQueryCommand.py +6 -2
  13. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/__init__.py +0 -1
  14. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/__init__.py +0 -1
  15. ormlambda-3.34.1/src/ormlambda/databases/my_sql/caster/caster.py +43 -0
  16. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/caster/types/__init__.py +3 -0
  17. ormlambda-3.34.1/src/ormlambda/databases/my_sql/caster/types/boolean.py +35 -0
  18. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/caster/types/bytes.py +7 -7
  19. ormlambda-3.34.1/src/ormlambda/databases/my_sql/caster/types/date.py +34 -0
  20. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/caster/types/datetime.py +7 -7
  21. ormlambda-3.34.1/src/ormlambda/databases/my_sql/caster/types/decimal.py +32 -0
  22. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/caster/types/float.py +7 -7
  23. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/caster/types/int.py +7 -7
  24. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/caster/types/iterable.py +7 -7
  25. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/caster/types/none.py +8 -7
  26. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/caster/types/point.py +4 -4
  27. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/caster/types/string.py +7 -7
  28. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/clauses/ST_AsText.py +8 -7
  29. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/clauses/ST_Contains.py +10 -5
  30. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/__init__.py +14 -0
  31. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/count.py +33 -0
  32. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/delete.py +9 -0
  33. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/group_by.py +17 -0
  34. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/having.py +12 -0
  35. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/insert.py +9 -0
  36. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/joins.py +14 -0
  37. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/limit.py +6 -0
  38. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/offset.py +6 -0
  39. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/order.py +8 -0
  40. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/update.py +8 -0
  41. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/upsert.py +9 -0
  42. ormlambda-3.34.1/src/ormlambda/databases/my_sql/clauses/where.py +7 -0
  43. ormlambda-3.34.1/src/ormlambda/databases/my_sql/repository.py +217 -0
  44. ormlambda-3.34.1/src/ormlambda/dialects/__init__.py +39 -0
  45. ormlambda-3.34.1/src/ormlambda/dialects/default/__init__.py +1 -0
  46. ormlambda-3.34.1/src/ormlambda/dialects/default/base.py +39 -0
  47. ormlambda-3.34.1/src/ormlambda/dialects/interface/__init__.py +1 -0
  48. ormlambda-3.34.1/src/ormlambda/dialects/interface/dialect.py +78 -0
  49. ormlambda-3.34.1/src/ormlambda/dialects/mysql/__init__.py +8 -0
  50. ormlambda-3.34.1/src/ormlambda/dialects/mysql/base.py +387 -0
  51. ormlambda-3.34.1/src/ormlambda/dialects/mysql/mysqlconnector.py +46 -0
  52. ormlambda-3.34.1/src/ormlambda/dialects/mysql/types.py +732 -0
  53. ormlambda-3.34.1/src/ormlambda/dialects/sqlite/__init__.py +5 -0
  54. ormlambda-3.34.1/src/ormlambda/dialects/sqlite/base.py +47 -0
  55. ormlambda-3.34.1/src/ormlambda/dialects/sqlite/pysqlite.py +32 -0
  56. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/engine/__init__.py +1 -0
  57. ormlambda-3.34.1/src/ormlambda/engine/base.py +58 -0
  58. ormlambda-3.34.1/src/ormlambda/engine/create.py +21 -0
  59. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/engine/url.py +31 -19
  60. ormlambda-3.34.1/src/ormlambda/env.py +30 -0
  61. ormlambda-3.34.1/src/ormlambda/errors.py +17 -0
  62. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/model/base_model.py +7 -9
  63. ormlambda-3.34.1/src/ormlambda/repository/base_repository.py +44 -0
  64. ormlambda-3.34.1/src/ormlambda/repository/interfaces/IRepositoryBase.py +156 -0
  65. ormlambda-3.34.1/src/ormlambda/repository/response.py +134 -0
  66. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/clause_info/aggregate_function_base.py +19 -9
  67. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/clause_info/clause_info.py +34 -17
  68. ormlambda-3.34.1/src/ormlambda/sql/clauses/__init__.py +14 -0
  69. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/alias.py +23 -6
  70. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/count.py +15 -1
  71. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/delete.py +22 -7
  72. ormlambda-3.34.1/src/ormlambda/sql/clauses/group_by.py +30 -0
  73. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/having.py +7 -2
  74. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/insert.py +16 -9
  75. ormlambda-3.34.1/src/ormlambda/sql/clauses/interfaces/__init__.py +5 -0
  76. {ormlambda-3.12.2/src/ormlambda/components → ormlambda-3.34.1/src/ormlambda/sql/clauses}/join/join_context.py +15 -7
  77. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/joins.py +29 -19
  78. ormlambda-3.34.1/src/ormlambda/sql/clauses/limit.py +15 -0
  79. ormlambda-3.34.1/src/ormlambda/sql/clauses/offset.py +15 -0
  80. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/order.py +14 -24
  81. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/select.py +12 -13
  82. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/update.py +24 -11
  83. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/upsert.py +17 -12
  84. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/clauses/where.py +28 -8
  85. ormlambda-3.34.1/src/ormlambda/sql/column/__init__.py +1 -0
  86. {ormlambda-3.12.2/src/ormlambda/sql → ormlambda-3.34.1/src/ormlambda/sql/column}/column.py +82 -22
  87. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/comparer.py +51 -37
  88. ormlambda-3.34.1/src/ormlambda/sql/compiler.py +427 -0
  89. ormlambda-3.34.1/src/ormlambda/sql/ddl.py +68 -0
  90. ormlambda-3.34.1/src/ormlambda/sql/elements.py +36 -0
  91. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/foreign_key.py +43 -39
  92. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/functions/concat.py +13 -5
  93. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/functions/max.py +9 -4
  94. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/functions/min.py +9 -13
  95. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/functions/sum.py +8 -10
  96. ormlambda-3.34.1/src/ormlambda/sql/sqltypes.py +647 -0
  97. ormlambda-3.34.1/src/ormlambda/sql/table/__init__.py +1 -0
  98. ormlambda-3.12.2/src/ormlambda/sql/table/table_constructor.py → ormlambda-3.34.1/src/ormlambda/sql/table/table.py +14 -85
  99. ormlambda-3.34.1/src/ormlambda/sql/table/table_constructor.py +43 -0
  100. ormlambda-3.34.1/src/ormlambda/sql/type_api.py +35 -0
  101. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/types.py +3 -1
  102. ormlambda-3.34.1/src/ormlambda/sql/visitors.py +74 -0
  103. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/statements/__init__.py +1 -0
  104. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/statements/base_statement.py +28 -38
  105. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/statements/interfaces/IStatements.py +5 -4
  106. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/statements}/query_builder.py +35 -30
  107. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/statements}/statements.py +50 -60
  108. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/statements/types.py +2 -2
  109. ormlambda-3.34.1/src/ormlambda/types/__init__.py +24 -0
  110. ormlambda-3.34.1/src/ormlambda/types/metadata.py +42 -0
  111. ormlambda-3.34.1/src/ormlambda/util/__init__.py +88 -0
  112. ormlambda-3.34.1/src/ormlambda/util/load_module.py +21 -0
  113. ormlambda-3.34.1/src/ormlambda/util/plugin_loader.py +32 -0
  114. ormlambda-3.34.1/src/ormlambda/util/typing.py +6 -0
  115. ormlambda-3.12.2/src/ormlambda/common/errors/__init__.py +0 -21
  116. ormlambda-3.12.2/src/ormlambda/components/__init__.py +0 -4
  117. ormlambda-3.12.2/src/ormlambda/components/delete/__init__.py +0 -2
  118. ormlambda-3.12.2/src/ormlambda/components/delete/abstract_delete.py +0 -17
  119. ormlambda-3.12.2/src/ormlambda/components/insert/__init__.py +0 -2
  120. ormlambda-3.12.2/src/ormlambda/components/insert/abstract_insert.py +0 -25
  121. ormlambda-3.12.2/src/ormlambda/components/select/__init__.py +0 -1
  122. ormlambda-3.12.2/src/ormlambda/components/update/__init__.py +0 -2
  123. ormlambda-3.12.2/src/ormlambda/components/update/abstract_update.py +0 -29
  124. ormlambda-3.12.2/src/ormlambda/components/upsert/__init__.py +0 -2
  125. ormlambda-3.12.2/src/ormlambda/components/upsert/abstract_upsert.py +0 -25
  126. ormlambda-3.12.2/src/ormlambda/databases/my_sql/caster/caster.py +0 -39
  127. ormlambda-3.12.2/src/ormlambda/databases/my_sql/clauses/__init__.py +0 -20
  128. ormlambda-3.12.2/src/ormlambda/databases/my_sql/clauses/create_database.py +0 -35
  129. ormlambda-3.12.2/src/ormlambda/databases/my_sql/clauses/drop_database.py +0 -17
  130. ormlambda-3.12.2/src/ormlambda/databases/my_sql/clauses/group_by.py +0 -30
  131. ormlambda-3.12.2/src/ormlambda/databases/my_sql/clauses/limit.py +0 -17
  132. ormlambda-3.12.2/src/ormlambda/databases/my_sql/clauses/offset.py +0 -17
  133. ormlambda-3.12.2/src/ormlambda/databases/my_sql/repository/__init__.py +0 -1
  134. ormlambda-3.12.2/src/ormlambda/databases/my_sql/repository/repository.py +0 -351
  135. ormlambda-3.12.2/src/ormlambda/engine/create.py +0 -35
  136. ormlambda-3.12.2/src/ormlambda/engine/template.py +0 -47
  137. ormlambda-3.12.2/src/ormlambda/repository/base_repository.py +0 -13
  138. ormlambda-3.12.2/src/ormlambda/repository/interfaces/IRepositoryBase.py +0 -42
  139. ormlambda-3.12.2/src/ormlambda/sql/dtypes.py +0 -94
  140. ormlambda-3.12.2/src/ormlambda/sql/table/__init__.py +0 -1
  141. ormlambda-3.12.2/src/ormlambda/utils/__init__.py +0 -1
  142. {ormlambda-3.12.2 → ormlambda-3.34.1}/LICENSE +0 -0
  143. {ormlambda-3.12.2 → ormlambda-3.34.1}/README.md +0 -0
  144. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/caster/base_caster.py +0 -0
  145. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/caster/interfaces/ICaster.py +0 -0
  146. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/caster/interfaces/__init__.py +0 -0
  147. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/__init__.py +0 -0
  148. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/abstract_classes/__init__.py +0 -0
  149. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/enums/__init__.py +0 -0
  150. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/enums/condition_types.py +0 -0
  151. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/enums/join_type.py +0 -0
  152. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/global_checker.py +0 -0
  153. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/interfaces/ICustomAlias.py +0 -0
  154. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/interfaces/IDecompositionQuery.py +0 -0
  155. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/interfaces/IJoinSelector.py +0 -0
  156. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/interfaces/INonQueryCommand.py +0 -0
  157. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/common/interfaces/__init__.py +0 -0
  158. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/caster/__init__.py +0 -0
  159. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/databases/my_sql/clauses/drop_table.py +0 -0
  160. /ormlambda-3.12.2/src/ormlambda/databases/my_sql/types.py → /ormlambda-3.34.1/src/ormlambda/databases/my_sql/pool_types.py +0 -0
  161. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/engine/utils.py +0 -0
  162. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/model/__init__.py +0 -0
  163. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/repository/__init__.py +0 -0
  164. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/repository/interfaces/IDatabaseConnection.py +0 -0
  165. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/repository/interfaces/__init__.py +0 -0
  166. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/__init__.py +0 -0
  167. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/clause_info/__init__.py +0 -0
  168. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/clause_info/clause_info_context.py +0 -0
  169. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/clause_info/interface/IAggregate.py +0 -0
  170. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/clause_info/interface/IClauseInfo.py +0 -0
  171. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/clause_info/interface/__init__.py +0 -0
  172. {ormlambda-3.12.2/src/ormlambda/components/delete → ormlambda-3.34.1/src/ormlambda/sql/clauses/interfaces}/IDelete.py +0 -0
  173. {ormlambda-3.12.2/src/ormlambda/components/insert → ormlambda-3.34.1/src/ormlambda/sql/clauses/interfaces}/IInsert.py +0 -0
  174. {ormlambda-3.12.2/src/ormlambda/components/select → ormlambda-3.34.1/src/ormlambda/sql/clauses/interfaces}/ISelect.py +0 -0
  175. {ormlambda-3.12.2/src/ormlambda/components/update → ormlambda-3.34.1/src/ormlambda/sql/clauses/interfaces}/IUpdate.py +0 -0
  176. {ormlambda-3.12.2/src/ormlambda/components/upsert → ormlambda-3.34.1/src/ormlambda/sql/clauses/interfaces}/IUpsert.py +0 -0
  177. {ormlambda-3.12.2/src/ormlambda/components → ormlambda-3.34.1/src/ormlambda/sql/clauses}/join/__init__.py +0 -0
  178. {ormlambda-3.12.2/src/ormlambda/databases/my_sql → ormlambda-3.34.1/src/ormlambda/sql}/functions/__init__.py +0 -0
  179. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/interfaces/__init__.py +0 -0
  180. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/sql/table/fields.py +0 -0
  181. {ormlambda-3.12.2 → ormlambda-3.34.1}/src/ormlambda/statements/interfaces/__init__.py +0 -0
  182. {ormlambda-3.12.2/src/ormlambda/utils → ormlambda-3.34.1/src/ormlambda/util}/module_tree/__init__.py +0 -0
  183. {ormlambda-3.12.2/src/ormlambda/utils → ormlambda-3.34.1/src/ormlambda/util}/module_tree/dfs_traversal.py +0 -0
  184. {ormlambda-3.12.2/src/ormlambda/utils → ormlambda-3.34.1/src/ormlambda/util}/module_tree/dynamic_module.py +0 -0
@@ -0,0 +1,32 @@
1
+ ormlambda was created by Pablo hernandez.
2
+
3
+ Some files was originally written by other authors from sqlalchemy library and rewritten by Pablo Hernandez
4
+
5
+ Major contributing authors include:
6
+
7
+ - Pablo Hernandez
8
+ - Jason Kirtland
9
+ - Michael Trier
10
+ - Diana Clarke
11
+ - Gaetan de Menten
12
+ - Lele Gaifax
13
+ - Jonathan Ellis
14
+ - Gord Thompson
15
+ - Federico Caselli
16
+ - Philip Jenvey
17
+ - Rick Morrison
18
+ - Chris Withers
19
+ - Ants Aasma
20
+ - Sheila Allen
21
+ - Paul Johnston
22
+ - Tony Locke
23
+ - Hajime Nakagami
24
+ - Vraj Mohan
25
+ - Robert Leftwich
26
+ - Taavi Burns
27
+ - Jonathan Vanasco
28
+ - Jeff Widman
29
+ - Scott Dugas
30
+ - Dobes Vandermeer
31
+ - Ville Skytta
32
+ - Rodrigo Menezes
@@ -1,13 +1,12 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.1
2
2
  Name: ormlambda
3
- Version: 3.12.2
3
+ Version: 3.34.1
4
4
  Summary: ORM designed to interact with the database (currently with MySQL) using lambda functions and nested functions
5
5
  Author: p-hzamora
6
6
  Author-email: p.hzamora@icloud.com
7
7
  Requires-Python: >=3.12,<4.0
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.12
10
- Classifier: Programming Language :: Python :: 3.13
11
10
  Requires-Dist: mysql-connector-python (>=9.0.0,<10.0.0)
12
11
  Requires-Dist: shapely (>=2.0.6,<3.0.0)
13
12
  Description-Content-Type: text/markdown
@@ -3,7 +3,7 @@ line-length = 320
3
3
 
4
4
  [tool.poetry]
5
5
  name = "ormlambda"
6
- version = "3.12.2"
6
+ version = "3.34.1"
7
7
  description = "ORM designed to interact with the database (currently with MySQL) using lambda functions and nested functions"
8
8
  authors = ["p-hzamora <p.hzamora@icloud.com>"]
9
9
  readme = "README.md"
@@ -20,6 +20,7 @@ pandas = "^2.2.2"
20
20
  ruff = "^0.4.5"
21
21
  parameterized = "^0.9.0"
22
22
  pydantic = "^2.11.1"
23
+ sqlserver = "^0.0.17.1"
23
24
 
24
25
 
25
26
  [build-system]
@@ -1,3 +1,5 @@
1
+ import ormlambda.env # noqa: F401 Necesary to load all variables inside ormalambda.env
2
+
1
3
  # region enums
2
4
  from .common.enums import (
3
5
  JoinType as JoinType,
@@ -1,3 +1,3 @@
1
1
  from .base_caster import BaseCaster # noqa: F401
2
- from .caster import Caster, PLACEHOLDER # noqa: F401
2
+ from .caster import Caster # noqa: F401
3
3
  from .interfaces import ICaster # noqa: F401
@@ -1,24 +1,26 @@
1
1
  from __future__ import annotations
2
2
 
3
3
 
4
- from typing import Optional, Type, TYPE_CHECKING, Callable, overload
5
-
4
+ from typing import ClassVar, Optional, Type, TYPE_CHECKING, Callable, overload, get_args
5
+ from types import NoneType
6
+ from ormlambda.caster.interfaces import ICaster
6
7
  from ormlambda.common.global_checker import GlobalChecker
7
8
  from ormlambda.sql.types import ColumnType
8
- from ormlambda.engine.template import RepositoryTemplateDict
9
+ from ormlambda.caster import BaseCaster
10
+ from ormlambda.sql.sqltypes import TypeEngine
11
+
9
12
 
10
13
  if TYPE_CHECKING:
11
14
  from ormlambda.caster import BaseCaster
12
- from ormlambda.repository import IRepositoryBase
13
15
 
14
16
 
15
- PLACEHOLDER: str = "%s"
17
+ class Caster(ICaster):
18
+ PLACEHOLDER: ClassVar[str] = "%s"
16
19
 
17
-
18
- class Caster:
19
- def __init__(self, repository: IRepositoryBase):
20
- self._repository: IRepositoryBase = repository
21
- self._caster = RepositoryTemplateDict().get(repository).caster
20
+ @classmethod
21
+ def set_placeholder(cls, char: str) -> None:
22
+ cls.PLACEHOLDER = char
23
+ return None
22
24
 
23
25
  @overload
24
26
  def for_column[T, TProp](self, column: Callable[[T], TProp], instance: T) -> BaseCaster[TProp, Type[TProp]]: ...
@@ -36,7 +38,7 @@ class Caster:
36
38
  column_type = column.dtype
37
39
  value = instance[column]
38
40
 
39
- return self._caster.cast(value, column_type)
41
+ return self.cast(value, column_type)
40
42
 
41
43
  @overload
42
44
  def for_value[TProp](self, value: TProp) -> BaseCaster[TProp, Type[TProp]]: ...
@@ -45,4 +47,19 @@ class Caster:
45
47
 
46
48
  def for_value[TProp, TType](self, value: TProp, value_type: Optional[TType] = None) -> BaseCaster[TProp, TType]:
47
49
  column_type = value_type if value_type else type(value)
48
- return self._caster.cast(value, column_type)
50
+ return self.cast(value, column_type)
51
+
52
+ @classmethod
53
+ def cast[TProp, TType](cls, value: TProp, type_value: Optional[TypeEngine[TType]] = None) -> BaseCaster[TProp, TType]:
54
+ if len(args := get_args(type_value)) > 1:
55
+ args = [x for x in args if x != NoneType]
56
+
57
+ type_value = args[0]
58
+
59
+ if isinstance(type_value, TypeEngine):
60
+ column_type = type_value.python_type
61
+ elif not type_value:
62
+ column_type = type(value)
63
+ else:
64
+ column_type = type_value
65
+ return cls.CASTER_SELECTOR()[column_type](value, column_type)
@@ -17,21 +17,13 @@ class ClauseInfoConverter[T, TProp](tp.Protocol):
17
17
  class ConvertFromAnyType(ClauseInfoConverter[None, None]):
18
18
  @classmethod
19
19
  def convert(cls, data: tp.Any, alias_table: AliasType = "{table}", context: ClauseContextType = None, **kwargs) -> list[ClauseInfo[None]]:
20
- return [
21
- ClauseInfo[None](
22
- table=None,
23
- column=data,
24
- alias_table=alias_table,
25
- alias_clause=kwargs.get("alias", None),
26
- context=context,
27
- )
28
- ]
20
+ return [ClauseInfo[None](table=None, column=data, alias_table=alias_table, alias_clause=kwargs.get("alias", None), context=context, **kwargs)]
29
21
 
30
22
 
31
23
  class ConvertFromForeignKey[LT: Table, RT: Table](ClauseInfoConverter[RT, None]):
32
24
  @classmethod
33
25
  def convert(cls, data: ForeignKey[LT, RT], alias_table=None, context: ClauseContextType = None, **kwargs) -> list[ClauseInfo[RT]]:
34
- return ConvertFromTable[RT].convert(data.tright, data.alias, context, **kwargs)
26
+ return ConvertFromTable[RT].convert(data.tright, data.get_alias(kwargs["dialect"]), context, **kwargs)
35
27
 
36
28
 
37
29
  class ConvertFromColumn[TProp](ClauseInfoConverter[None, TProp]):
@@ -44,9 +36,9 @@ class ConvertFromColumn[TProp](ClauseInfoConverter[None, TProp]):
44
36
  "alias_table": alias_table,
45
37
  "alias_clause": "{table}_{column}",
46
38
  "context": context,
47
- **kwargs,
48
39
  }
49
- clause_info = ClauseInfo[None](**attributes)
40
+ attributes.update(**kwargs)
41
+ clause_info = ClauseInfo(**attributes)
50
42
  return [clause_info]
51
43
 
52
44
 
@@ -27,6 +27,9 @@ type ValueType = tp.Union[
27
27
  tp.Type[ICustomAlias],
28
28
  ]
29
29
 
30
+ if tp.TYPE_CHECKING:
31
+ from ormlambda.dialects import Dialect
32
+
30
33
 
31
34
  class DecompositionQueryBase[T: Table, *Ts](IDecompositionQuery[T, *Ts]):
32
35
  @tp.overload
@@ -36,10 +39,20 @@ class DecompositionQueryBase[T: Table, *Ts](IDecompositionQuery[T, *Ts]):
36
39
  @tp.overload
37
40
  def __init__(self, tables: tuple[TableType[T]], columns: tuple[ColumnType], alias_table: str, context: ClauseContextType = ...) -> None: ...
38
41
 
39
- def __init__(self, tables: tuple[TableType[T]], columns: tuple[ColumnType], alias_table: str = "{table}", *, context: ClauseContextType = ClauseInfoContext(), **kwargs) -> None:
42
+ def __init__(
43
+ self,
44
+ tables: tuple[TableType[T]],
45
+ columns: tuple[ColumnType],
46
+ alias_table: str = "{table}",
47
+ *,
48
+ context: ClauseContextType = ClauseInfoContext(),
49
+ dialect: Dialect,
50
+ **kwargs,
51
+ ) -> None:
40
52
  self.kwargs = kwargs
41
53
  self._tables: tuple[TableType[T]] = tables if isinstance(tables, tp.Iterable) else (tables,)
42
54
 
55
+ self._dialect = dialect
43
56
  self._columns: tp.Callable[[T], tuple] = columns
44
57
  self._all_clauses: list[ClauseInfo | AggregateFunctionBase] = []
45
58
  self._context: ClauseContextType = context if context else ClauseInfoContext()
@@ -88,7 +101,9 @@ class DecompositionQueryBase[T: Table, *Ts](IDecompositionQuery[T, *Ts]):
88
101
  Table: ConvertFromTable[T],
89
102
  }
90
103
  classConverter = next((converter for obj, converter in VALUE_TYPE_MAPPED.items() if validation(data, obj)), ConvertFromAnyType)
91
-
104
+ self.kwargs.setdefault("dialect", self._dialect)
105
+ if "dialect" not in self.kwargs:
106
+ raise ValueError("You must specified 'dialect' variable")
92
107
  return classConverter.convert(data, alias_table=self._alias_table, context=self._context, **self.kwargs)
93
108
 
94
109
  def __add_clause[TTable: TableType](self, clauses: list[ClauseInfo[TTable]] | ClauseInfo[TTable]) -> None:
@@ -1,22 +1,26 @@
1
1
  from __future__ import annotations
2
2
  from abc import abstractmethod
3
- from typing import Any, Optional, Type, override, TYPE_CHECKING
3
+ from typing import Any, Optional, Type, TYPE_CHECKING
4
4
 
5
5
  from ormlambda.common.interfaces.INonQueryCommand import INonQueryCommand
6
6
 
7
7
  if TYPE_CHECKING:
8
8
  from ormlambda.repository import BaseRepository
9
+ from ormlambda.dialects import Dialect
9
10
  from ormlambda import Table
11
+ from ormlambda.engine import Engine
10
12
 
11
13
 
12
- class NonQueryBase[T: Type[Table], TRepo: BaseRepository](INonQueryCommand):
14
+ class NonQueryBase[T: Type[Table], TRepo](INonQueryCommand):
13
15
  __slots__: tuple[str, ...] = ("_model", "_repository", "_values", "_query")
14
16
 
15
- def __init__(self, model: T, repository: TRepo) -> None:
17
+ def __init__(self, model: T, repository: TRepo, **kwargs) -> None:
16
18
  self._model: T = model
17
- self._repository: TRepo = repository
19
+ self._repository: BaseRepository[TRepo] = repository
18
20
  self._values: list[tuple[Any]] = []
19
21
  self._query: Optional[str] = None
22
+ self._dialect: Dialect = kwargs.get("dialect", None)
23
+ self._engine: Optional[Engine] = kwargs.get("engine", None)
20
24
 
21
25
  @property
22
26
  @abstractmethod
@@ -25,9 +29,7 @@ class NonQueryBase[T: Type[Table], TRepo: BaseRepository](INonQueryCommand):
25
29
  @abstractmethod
26
30
  def execute(self) -> None: ...
27
31
 
28
- @property
29
- @override
30
- def query(self) -> str:
32
+ def query(self, dialect: Dialect, **kwargs) -> str:
31
33
  return self._query
32
34
 
33
35
  @property
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from abc import abstractmethod
2
3
  from typing import TYPE_CHECKING
3
4
 
@@ -5,9 +6,10 @@ from ormlambda.common.interfaces import IQuery
5
6
 
6
7
  if TYPE_CHECKING:
7
8
  from ormlambda import Table
9
+ from ormlambda.dialects import Dialect
8
10
 
9
11
 
10
12
  class QueryBase[T: Table](IQuery):
11
13
  @property
12
14
  @abstractmethod
13
- def query(self) -> str: ...
15
+ def query(self, dialect: Dialect, **kwargs) -> str: ...
@@ -0,0 +1,50 @@
1
+ from __future__ import annotations
2
+ import inspect
3
+ import typing as tp
4
+
5
+
6
+ if tp.TYPE_CHECKING:
7
+ from ormlambda.sql.clause_info import ClauseInfo
8
+
9
+
10
+ class UnmatchedLambdaParameterError(Exception):
11
+ def __init__(self, expected_params: int, function: tp.Callable[..., tp.Any], *args: object) -> None:
12
+ super().__init__(*args)
13
+ self.expected_params = expected_params
14
+ self.found_param: tuple[str, ...] = tuple(inspect.signature(function).parameters)
15
+
16
+ def __str__(self) -> str:
17
+ return f"Unmatched number of parameters in lambda function with the number of tables: Expected {self.expected_params} parameters but found {str(self.found_param)}."
18
+
19
+
20
+ class NotKeysInIAggregateError(Exception):
21
+ def __init__(self, match_regex: list[str], *args: object) -> None:
22
+ super().__init__(*args)
23
+ self._match_regex: list[str] = match_regex
24
+
25
+ def __str__(self) -> str:
26
+ return f"We cannot use placeholders in IAggregate class. You used {self._match_regex}"
27
+
28
+
29
+ class AggregateFunctionError[T](Exception):
30
+ def __init__(self, clause: ClauseInfo[T], *args):
31
+ self.clause = clause
32
+ super().__init__(*args)
33
+
34
+ def __str__(self):
35
+ agg_methods = self.__get_all_aggregate_method(self.clause)
36
+ return f"You cannot use aggregation method like '{agg_methods}' to return model objects. Try specifying 'flavour' attribute as 'dict'."
37
+
38
+ def __get_all_aggregate_method(self, clauses: list[ClauseInfo]) -> str:
39
+ """
40
+ Get the class name of those classes that inherit from 'AggregateFunctionBase' class in order to create a better error message.
41
+ """
42
+ from ormlambda.sql.clause_info import AggregateFunctionBase
43
+
44
+ res: set[str] = set()
45
+ if not isinstance(clauses, tp.Iterable):
46
+ return clauses.__class__.__name__
47
+ for clause in clauses:
48
+ if isinstance(clause, AggregateFunctionBase):
49
+ res.add(clause.__class__.__name__)
50
+ return ", ".join(res)
@@ -1,12 +1,16 @@
1
+ from __future__ import annotations
1
2
  from abc import abstractmethod, ABC
3
+ from typing import TYPE_CHECKING
4
+
5
+ if TYPE_CHECKING:
6
+ from ormlambda.dialects import Dialect
2
7
 
3
8
 
4
9
  class IQuery(ABC):
5
10
  """Interface to queries that retrieve any element such as select, limit, offset, where, group by, etc..."""
6
11
 
7
- @property
8
12
  @abstractmethod
9
- def query(self) -> str: ...
13
+ def query(self, dialect: Dialect, **kwargs) -> str: ...
10
14
 
11
15
  def __repr__(self) -> str:
12
16
  return f"{IQuery.__name__}: {self.__class__.__name__}"
@@ -1,5 +1,4 @@
1
1
  from .my_sql import (
2
2
  MySQLCaster as MySQLCaster,
3
3
  MySQLRepository as MySQLRepository,
4
- MySQLStatements as MySQLStatements,
5
4
  )
@@ -1,4 +1,3 @@
1
1
  from mysql.connector import MySQLConnection # noqa: F401
2
2
  from .repository import MySQLRepository # noqa: F401
3
- from .statements import MySQLStatements # noqa: F401
4
3
  from .caster import MySQLCaster # noqa: F401
@@ -0,0 +1,43 @@
1
+ from __future__ import annotations
2
+ from ormlambda.caster.caster import Caster
3
+
4
+
5
+ from .types import (
6
+ StringCaster,
7
+ IntegerCaster,
8
+ FloatCaster,
9
+ PointCaster,
10
+ NoneTypeCaster,
11
+ DatetimeCaster,
12
+ BytesCaster,
13
+ IterableCaster,
14
+ BooleanCaster,
15
+ DecimalCaster,
16
+ )
17
+
18
+ from shapely import Point
19
+ from types import NoneType
20
+ from datetime import datetime, date
21
+ from decimal import Decimal
22
+
23
+
24
+ class MySQLCaster(Caster):
25
+ PLACEHOLDER = "%s"
26
+
27
+ @classmethod
28
+ def CASTER_SELECTOR(cls):
29
+ return {
30
+ str: StringCaster,
31
+ int: IntegerCaster,
32
+ float: FloatCaster,
33
+ Point: PointCaster,
34
+ NoneType: NoneTypeCaster,
35
+ datetime: DatetimeCaster,
36
+ date: DatetimeCaster,
37
+ bytes: BytesCaster,
38
+ bytearray: BytesCaster,
39
+ tuple: IterableCaster,
40
+ list: IterableCaster,
41
+ bool: BooleanCaster,
42
+ Decimal: DecimalCaster,
43
+ }
@@ -6,3 +6,6 @@ from .none import NoneTypeCaster as NoneTypeCaster
6
6
  from .datetime import DatetimeCaster as DatetimeCaster
7
7
  from .bytes import BytesCaster as BytesCaster
8
8
  from .iterable import IterableCaster as IterableCaster
9
+ from .boolean import BooleanCaster as BooleanCaster
10
+ from .date import DateCaster as DateCaster
11
+ from .decimal import DecimalCaster as DecimalCaster
@@ -0,0 +1,35 @@
1
+ from typing import Optional
2
+ from ormlambda.caster import BaseCaster, Caster
3
+
4
+
5
+ class BooleanCaster[TType](BaseCaster[bool, TType]):
6
+ """
7
+ MySQL uses 0/1 for booleans stored in TINYINT
8
+ """
9
+
10
+ def __init__(self, value: bool, type_value: TType):
11
+ super().__init__(value, type_value)
12
+
13
+ def wildcard_to_select(self, value: Optional[str] = None) -> str:
14
+ return Caster.PLACEHOLDER if value is None else value
15
+
16
+ def wildcard_to_where(self, value: Optional[str] = None) -> str:
17
+ return Caster.PLACEHOLDER if value is None else value
18
+
19
+ def wildcard_to_insert(self, value: Optional[str] = None) -> str:
20
+ return Caster.PLACEHOLDER if value is None else value
21
+
22
+ @property
23
+ @BaseCaster.return_value_if_exists
24
+ def to_database(self) -> Optional[int]:
25
+ return 1 if self.value else 0
26
+
27
+ @property
28
+ @BaseCaster.return_value_if_exists
29
+ def from_database(self) -> Optional[bool]:
30
+ return bool(self.value)
31
+
32
+ @property
33
+ @BaseCaster.return_value_if_exists
34
+ def string_data(self) -> Optional[str]:
35
+ return str(bool(self.value))
@@ -1,19 +1,19 @@
1
1
  from typing import Optional
2
- from ormlambda.caster import BaseCaster, PLACEHOLDER
2
+ from ormlambda.caster import BaseCaster, Caster
3
3
 
4
4
 
5
5
  class BytesCaster[TType](BaseCaster[bytes, TType]):
6
6
  def __init__(self, value: bytes, type_value: TType):
7
7
  super().__init__(value, type_value)
8
8
 
9
- def wildcard_to_select(self, value: str = PLACEHOLDER) -> str:
10
- return value
9
+ def wildcard_to_select(self, value: Optional[str] = None) -> str:
10
+ return Caster.PLACEHOLDER if value is None else value
11
11
 
12
- def wildcard_to_where(self, value: str = PLACEHOLDER) -> str:
13
- return value
12
+ def wildcard_to_where(self, value: Optional[str] = None) -> str:
13
+ return Caster.PLACEHOLDER if value is None else value
14
14
 
15
- def wildcard_to_insert(self, value: str = PLACEHOLDER) -> str:
16
- return value
15
+ def wildcard_to_insert(self, value: Optional[str] = None) -> str:
16
+ return Caster.PLACEHOLDER if value is None else value
17
17
 
18
18
  @property
19
19
  @BaseCaster.return_value_if_exists
@@ -0,0 +1,34 @@
1
+ from typing import Optional
2
+ from ormlambda.caster import BaseCaster, Caster
3
+ from datetime import datetime
4
+ from .string import StringCaster
5
+
6
+
7
+ class DateCaster[TType](BaseCaster[datetime, TType]):
8
+ def __init__(self, value: datetime, type_value: TType):
9
+ super().__init__(value, type_value)
10
+
11
+ def wildcard_to_select(self, value: Optional[str] = None) -> str:
12
+ return Caster.PLACEHOLDER if value is None else value
13
+
14
+ def wildcard_to_where(self, value: Optional[str] = None) -> str:
15
+ return Caster.PLACEHOLDER if value is None else value
16
+
17
+ def wildcard_to_insert(self, value: Optional[str] = None) -> str:
18
+ return Caster.PLACEHOLDER if value is None else value
19
+
20
+ @property
21
+ @BaseCaster.return_value_if_exists
22
+ def to_database(self) -> Optional[datetime]:
23
+ return self.value
24
+
25
+ @property
26
+ @BaseCaster.return_value_if_exists
27
+ def from_database(self) -> Optional[datetime]:
28
+ return self.value
29
+
30
+ @property
31
+ @BaseCaster.return_value_if_exists
32
+ def string_data(self) -> Optional[str]:
33
+ datetime_string = self.value.strftime(r"%Y-%m-%d")
34
+ return StringCaster(datetime_string, str).string_data
@@ -1,5 +1,5 @@
1
1
  from typing import Optional
2
- from ormlambda.caster import BaseCaster, PLACEHOLDER
2
+ from ormlambda.caster import BaseCaster, Caster
3
3
  from datetime import datetime
4
4
  from .string import StringCaster
5
5
 
@@ -8,14 +8,14 @@ class DatetimeCaster[TType](BaseCaster[datetime, TType]):
8
8
  def __init__(self, value: datetime, type_value: TType):
9
9
  super().__init__(value, type_value)
10
10
 
11
- def wildcard_to_select(self, value: str = PLACEHOLDER) -> str:
12
- return value
11
+ def wildcard_to_select(self, value: Optional[str] = None) -> str:
12
+ return Caster.PLACEHOLDER if value is None else value
13
13
 
14
- def wildcard_to_where(self, value: str = PLACEHOLDER) -> str:
15
- return value
14
+ def wildcard_to_where(self, value: Optional[str] = None) -> str:
15
+ return Caster.PLACEHOLDER if value is None else value
16
16
 
17
- def wildcard_to_insert(self, value: str = PLACEHOLDER) -> str:
18
- return value
17
+ def wildcard_to_insert(self, value: Optional[str] = None) -> str:
18
+ return Caster.PLACEHOLDER if value is None else value
19
19
 
20
20
  @property
21
21
  @BaseCaster.return_value_if_exists
@@ -0,0 +1,32 @@
1
+ from typing import Optional
2
+ from ormlambda.caster import BaseCaster, Caster
3
+ from decimal import Decimal
4
+
5
+
6
+ class DecimalCaster[TType](BaseCaster[Decimal, TType]):
7
+ def __init__(self, value: Decimal, type_value: TType):
8
+ super().__init__(value, type_value)
9
+
10
+ def wildcard_to_select(self, value: Optional[str] = None) -> str:
11
+ return Caster.PLACEHOLDER if value is None else value
12
+
13
+ def wildcard_to_where(self, value: Optional[str] = None) -> str:
14
+ return Caster.PLACEHOLDER if value is None else value
15
+
16
+ def wildcard_to_insert(self, value: Optional[str] = None) -> str:
17
+ return Caster.PLACEHOLDER if value is None else value
18
+
19
+ @property
20
+ @BaseCaster.return_value_if_exists
21
+ def to_database(self) -> Optional[Decimal]:
22
+ return Decimal(self.value)
23
+
24
+ @property
25
+ @BaseCaster.return_value_if_exists
26
+ def from_database(self) -> Optional[Decimal]:
27
+ return Decimal(self.value)
28
+
29
+ @property
30
+ @BaseCaster.return_value_if_exists
31
+ def string_data(self) -> Optional[str]:
32
+ return str(self.value)
@@ -1,19 +1,19 @@
1
1
  from typing import Optional
2
- from ormlambda.caster import BaseCaster, PLACEHOLDER
2
+ from ormlambda.caster import BaseCaster, Caster
3
3
 
4
4
 
5
5
  class FloatCaster[TType](BaseCaster[float, TType]):
6
6
  def __init__(self, value: float, type_value: TType):
7
7
  super().__init__(value, type_value)
8
8
 
9
- def wildcard_to_select(self, value: str = PLACEHOLDER) -> str:
10
- return value
9
+ def wildcard_to_select(self, value: Optional[str] = None) -> str:
10
+ return Caster.PLACEHOLDER if value is None else value
11
11
 
12
- def wildcard_to_where(self, value: str = PLACEHOLDER) -> str:
13
- return value
12
+ def wildcard_to_where(self, value: Optional[str] = None) -> str:
13
+ return Caster.PLACEHOLDER if value is None else value
14
14
 
15
- def wildcard_to_insert(self, value: str = PLACEHOLDER) -> str:
16
- return value
15
+ def wildcard_to_insert(self, value: Optional[str] = None) -> str:
16
+ return Caster.PLACEHOLDER if value is None else value
17
17
 
18
18
  @property
19
19
  @BaseCaster.return_value_if_exists
@@ -1,19 +1,19 @@
1
1
  from typing import Optional
2
- from ormlambda.caster import BaseCaster, PLACEHOLDER
2
+ from ormlambda.caster import BaseCaster, Caster
3
3
 
4
4
 
5
5
  class IntegerCaster[TType](BaseCaster[int, TType]):
6
6
  def __init__(self, value: int, type_value: TType):
7
7
  super().__init__(value, type_value)
8
8
 
9
- def wildcard_to_select(self, value: str = PLACEHOLDER) -> str:
10
- return value
9
+ def wildcard_to_select(self, value: Optional[str] = None) -> str:
10
+ return Caster.PLACEHOLDER if value is None else value
11
11
 
12
- def wildcard_to_where(self, value: str = PLACEHOLDER) -> str:
13
- return value
12
+ def wildcard_to_where(self, value: Optional[str] = None) -> str:
13
+ return Caster.PLACEHOLDER if value is None else value
14
14
 
15
- def wildcard_to_insert(self, value: str = PLACEHOLDER) -> str:
16
- return value
15
+ def wildcard_to_insert(self, value: Optional[str] = None) -> str:
16
+ return Caster.PLACEHOLDER if value is None else value
17
17
 
18
18
  @property
19
19
  @BaseCaster.return_value_if_exists
@@ -1,19 +1,19 @@
1
1
  from typing import Optional
2
- from ormlambda.caster import BaseCaster, PLACEHOLDER
2
+ from ormlambda.caster import BaseCaster, Caster
3
3
 
4
4
 
5
5
  class IterableCaster[TType](BaseCaster[bytes, TType]):
6
6
  def __init__(self, value: bytes, type_value: TType):
7
7
  super().__init__(value, type_value)
8
8
 
9
- def wildcard_to_select(self, value: str = PLACEHOLDER) -> str:
10
- return value
9
+ def wildcard_to_select(self, value: Optional[str] = None) -> str:
10
+ return Caster.PLACEHOLDER if value is None else value
11
11
 
12
- def wildcard_to_where(self, value: str = PLACEHOLDER) -> str:
13
- return value
12
+ def wildcard_to_where(self, value: Optional[str] = None) -> str:
13
+ return Caster.PLACEHOLDER if value is None else value
14
14
 
15
- def wildcard_to_insert(self, value: str = PLACEHOLDER) -> str:
16
- return value
15
+ def wildcard_to_insert(self, value: Optional[str] = None) -> str:
16
+ return Caster.PLACEHOLDER if value is None else value
17
17
 
18
18
  @property
19
19
  @BaseCaster.return_value_if_exists