ormlambda 3.35.1__tar.gz → 3.35.3__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 (159) hide show
  1. {ormlambda-3.35.1 → ormlambda-3.35.3}/PKG-INFO +1 -1
  2. {ormlambda-3.35.1 → ormlambda-3.35.3}/pyproject.toml +1 -1
  3. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/iterable.py +4 -3
  4. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/table/table.py +2 -5
  5. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/util/__init__.py +15 -1
  6. {ormlambda-3.35.1 → ormlambda-3.35.3}/AUTHORS +0 -0
  7. {ormlambda-3.35.1 → ormlambda-3.35.3}/LICENSE +0 -0
  8. {ormlambda-3.35.1 → ormlambda-3.35.3}/README.md +0 -0
  9. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/__init__.py +0 -0
  10. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/caster/__init__.py +0 -0
  11. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/caster/base_caster.py +0 -0
  12. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/caster/caster.py +0 -0
  13. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/caster/interfaces/ICaster.py +0 -0
  14. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/caster/interfaces/__init__.py +0 -0
  15. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/__init__.py +0 -0
  16. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/abstract_classes/__init__.py +0 -0
  17. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/abstract_classes/clause_info_converter.py +0 -0
  18. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/abstract_classes/decomposition_query.py +0 -0
  19. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/abstract_classes/non_query_base.py +0 -0
  20. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/abstract_classes/query_base.py +0 -0
  21. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/enums/__init__.py +0 -0
  22. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/enums/condition_types.py +0 -0
  23. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/enums/join_type.py +0 -0
  24. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/errors/__init__.py +0 -0
  25. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/global_checker.py +0 -0
  26. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/interfaces/ICustomAlias.py +0 -0
  27. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/interfaces/IDecompositionQuery.py +0 -0
  28. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/interfaces/IJoinSelector.py +0 -0
  29. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/interfaces/INonQueryCommand.py +0 -0
  30. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/interfaces/IQueryCommand.py +0 -0
  31. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/common/interfaces/__init__.py +0 -0
  32. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/__init__.py +0 -0
  33. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/__init__.py +0 -0
  34. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/__init__.py +0 -0
  35. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/caster.py +0 -0
  36. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/__init__.py +0 -0
  37. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/boolean.py +0 -0
  38. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/bytes.py +0 -0
  39. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/date.py +0 -0
  40. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/datetime.py +0 -0
  41. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/decimal.py +0 -0
  42. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/float.py +0 -0
  43. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/int.py +0 -0
  44. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/json.py +0 -0
  45. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/none.py +0 -0
  46. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/point.py +0 -0
  47. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/caster/types/string.py +0 -0
  48. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/ST_AsText.py +0 -0
  49. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/ST_Contains.py +0 -0
  50. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/__init__.py +0 -0
  51. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/count.py +0 -0
  52. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/delete.py +0 -0
  53. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/drop_table.py +0 -0
  54. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/group_by.py +0 -0
  55. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/having.py +0 -0
  56. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/insert.py +0 -0
  57. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/joins.py +0 -0
  58. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/limit.py +0 -0
  59. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/offset.py +0 -0
  60. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/order.py +0 -0
  61. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/update.py +0 -0
  62. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/upsert.py +0 -0
  63. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/clauses/where.py +0 -0
  64. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/pool_types.py +0 -0
  65. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/databases/my_sql/repository.py +0 -0
  66. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/__init__.py +0 -0
  67. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/default/__init__.py +0 -0
  68. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/default/base.py +0 -0
  69. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/interface/__init__.py +0 -0
  70. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/interface/dialect.py +0 -0
  71. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/mysql/__init__.py +0 -0
  72. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/mysql/base.py +0 -0
  73. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/mysql/mysqlconnector.py +0 -0
  74. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/mysql/types.py +0 -0
  75. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/sqlite/__init__.py +0 -0
  76. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/sqlite/base.py +0 -0
  77. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/dialects/sqlite/pysqlite.py +0 -0
  78. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/engine/__init__.py +0 -0
  79. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/engine/base.py +0 -0
  80. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/engine/create.py +0 -0
  81. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/engine/url.py +0 -0
  82. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/engine/utils.py +0 -0
  83. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/env.py +0 -0
  84. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/errors.py +0 -0
  85. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/model/__init__.py +0 -0
  86. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/model/base_model.py +0 -0
  87. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/repository/__init__.py +0 -0
  88. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/repository/base_repository.py +0 -0
  89. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/repository/interfaces/IDatabaseConnection.py +0 -0
  90. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/repository/interfaces/IRepositoryBase.py +0 -0
  91. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/repository/interfaces/__init__.py +0 -0
  92. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/repository/response.py +0 -0
  93. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/__init__.py +0 -0
  94. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clause_info/__init__.py +0 -0
  95. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clause_info/aggregate_function_base.py +0 -0
  96. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clause_info/clause_info.py +0 -0
  97. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clause_info/clause_info_context.py +0 -0
  98. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clause_info/interface/IAggregate.py +0 -0
  99. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clause_info/interface/IClauseInfo.py +0 -0
  100. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clause_info/interface/__init__.py +0 -0
  101. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/__init__.py +0 -0
  102. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/alias.py +0 -0
  103. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/count.py +0 -0
  104. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/delete.py +0 -0
  105. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/group_by.py +0 -0
  106. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/having.py +0 -0
  107. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/insert.py +0 -0
  108. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/interfaces/IDelete.py +0 -0
  109. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/interfaces/IInsert.py +0 -0
  110. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/interfaces/ISelect.py +0 -0
  111. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/interfaces/IUpdate.py +0 -0
  112. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/interfaces/IUpsert.py +0 -0
  113. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/interfaces/__init__.py +0 -0
  114. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/join/__init__.py +0 -0
  115. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/join/join_context.py +0 -0
  116. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/joins.py +0 -0
  117. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/limit.py +0 -0
  118. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/new_join.py +0 -0
  119. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/offset.py +0 -0
  120. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/order.py +0 -0
  121. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/select.py +0 -0
  122. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/update.py +0 -0
  123. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/upsert.py +0 -0
  124. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/clauses/where.py +0 -0
  125. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/column/__init__.py +0 -0
  126. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/column/column.py +0 -0
  127. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/comparer.py +0 -0
  128. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/compiler.py +0 -0
  129. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/ddl.py +0 -0
  130. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/elements.py +0 -0
  131. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/foreign_key.py +0 -0
  132. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/functions/__init__.py +0 -0
  133. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/functions/concat.py +0 -0
  134. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/functions/max.py +0 -0
  135. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/functions/min.py +0 -0
  136. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/functions/sum.py +0 -0
  137. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/interfaces/__init__.py +0 -0
  138. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/sqltypes.py +0 -0
  139. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/table/__init__.py +0 -0
  140. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/table/fields.py +0 -0
  141. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/table/table_constructor.py +0 -0
  142. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/type_api.py +0 -0
  143. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/types.py +0 -0
  144. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/sql/visitors.py +0 -0
  145. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/statements/__init__.py +0 -0
  146. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/statements/base_statement.py +0 -0
  147. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/statements/interfaces/IStatements.py +0 -0
  148. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/statements/interfaces/__init__.py +0 -0
  149. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/statements/query_builder.py +0 -0
  150. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/statements/statements.py +0 -0
  151. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/statements/types.py +0 -0
  152. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/types/__init__.py +0 -0
  153. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/types/metadata.py +0 -0
  154. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/util/load_module.py +0 -0
  155. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/util/module_tree/__init__.py +0 -0
  156. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/util/module_tree/dfs_traversal.py +0 -0
  157. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/util/module_tree/dynamic_module.py +0 -0
  158. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/util/plugin_loader.py +0 -0
  159. {ormlambda-3.35.1 → ormlambda-3.35.3}/src/ormlambda/util/typing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ormlambda
3
- Version: 3.35.1
3
+ Version: 3.35.3
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
@@ -3,7 +3,7 @@ line-length = 320
3
3
 
4
4
  [tool.poetry]
5
5
  name = "ormlambda"
6
- version = "3.35.1"
6
+ version = "3.35.3"
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"
@@ -1,8 +1,9 @@
1
1
  from typing import Optional
2
2
  from ormlambda.caster import BaseCaster, Caster
3
+ from .json import JsonCaster
3
4
 
4
5
 
5
- class IterableCaster[TType](BaseCaster[bytes, TType]):
6
+ class IterableCaster[TType](JsonCaster[TType]):
6
7
  def __init__(self, value: bytes, type_value: TType):
7
8
  super().__init__(value, type_value)
8
9
 
@@ -18,12 +19,12 @@ class IterableCaster[TType](BaseCaster[bytes, TType]):
18
19
  @property
19
20
  @BaseCaster.return_value_if_exists
20
21
  def to_database(self) -> Optional[bytes]:
21
- return tuple(self.value)
22
+ return super().to_database
22
23
 
23
24
  @property
24
25
  @BaseCaster.return_value_if_exists
25
26
  def from_database(self) -> Optional[bytes]:
26
- return tuple(self.value)
27
+ return super().from_database
27
28
 
28
29
  @property
29
30
  @BaseCaster.return_value_if_exists
@@ -6,6 +6,7 @@ from ormlambda.sql import Column
6
6
  from ormlambda.sql import ForeignKey
7
7
  from ormlambda.util.module_tree.dfs_traversal import DFSTraversal
8
8
  from ormlambda.sql.ddl import CreateTable
9
+ from ormlambda.util import make_hashable
9
10
 
10
11
  if TYPE_CHECKING:
11
12
  from ormlambda.statements import BaseStatement
@@ -96,11 +97,7 @@ class Table(metaclass=TableMeta):
96
97
  dicc: dict[str, Any] = {}
97
98
  for x in self.__annotations__:
98
99
  value = getattr(self, x)
99
- if isinstance(value, dict):
100
- value = tuple(sorted(value.items()))
101
- if isinstance(value, list | set):
102
- value = tuple(value)
103
- dicc[x] = value
100
+ dicc[x] = make_hashable(value)
104
101
  return dicc
105
102
 
106
103
  @classmethod
@@ -2,7 +2,7 @@ from .module_tree import ModuleTree # noqa: F401
2
2
  from .load_module import __load_module__ # noqa: F401
3
3
  import types
4
4
  import inspect
5
- from typing import Any, Literal, Optional, Sequence, overload, get_origin, TypeGuard, TypeAliasType
5
+ from typing import Any, Literal, Optional, overload, get_origin, TypeGuard, TypeAliasType
6
6
  from ormlambda.util.typing import LITERAL_TYPES, _AnnotationScanType
7
7
  from .plugin_loader import PluginLoader # noqa: F401
8
8
 
@@ -86,3 +86,17 @@ def is_literal(type_: Any) -> bool:
86
86
 
87
87
  def is_pep695(type_: _AnnotationScanType) -> TypeGuard[TypeAliasType]:
88
88
  return isinstance(type_, TypeAliasType)
89
+
90
+
91
+ def make_hashable(item: Any) -> Any:
92
+ if isinstance(item, dict):
93
+ return tuple(sorted((k, make_hashable(x)) for k, x in item.items()))
94
+
95
+ if isinstance(item, (list | set)):
96
+ return tuple(make_hashable(x) for x in item)
97
+ if hasattr(item, "__iter__") and not isinstance(item, str | bytes):
98
+ try:
99
+ return tuple(make_hashable(x) for x in item)
100
+ except TypeError:
101
+ return item # if it fails, it's already hashable
102
+ return item
File without changes
File without changes
File without changes