SQLAlchemy-Utils 0.41.2__tar.gz → 0.42.0__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 (218) hide show
  1. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/CHANGES.rst +22 -9
  2. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/MANIFEST.in +1 -1
  3. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/PKG-INFO +49 -36
  4. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/SQLAlchemy_Utils.egg-info/PKG-INFO +49 -36
  5. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/SQLAlchemy_Utils.egg-info/SOURCES.txt +2 -8
  6. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/SQLAlchemy_Utils.egg-info/requires.txt +18 -27
  7. sqlalchemy_utils-0.42.0/docs/conf.py +47 -0
  8. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/data_types.rst +2 -3
  9. sqlalchemy_utils-0.42.0/docs/database_helpers.rst +50 -0
  10. sqlalchemy_utils-0.42.0/docs/foreign_key_helpers.rst +32 -0
  11. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/installation.rst +5 -6
  12. sqlalchemy_utils-0.42.0/docs/models.rst +14 -0
  13. sqlalchemy_utils-0.42.0/docs/orm_helpers.rst +110 -0
  14. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/range_data_types.rst +0 -2
  15. sqlalchemy_utils-0.42.0/docs/view.rst +20 -0
  16. sqlalchemy_utils-0.42.0/pyproject.toml +116 -0
  17. sqlalchemy_utils-0.42.0/setup.cfg +4 -0
  18. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/__init__.py +6 -6
  19. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/aggregates.py +18 -55
  20. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/asserts.py +4 -6
  21. sqlalchemy_utils-0.42.0/sqlalchemy_utils/compat.py +12 -0
  22. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/expressions.py +5 -11
  23. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/__init__.py +3 -3
  24. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/database.py +56 -73
  25. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/foreign_keys.py +11 -28
  26. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/mock.py +3 -8
  27. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/orm.py +14 -34
  28. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/sort_query.py +1 -3
  29. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/generic.py +17 -20
  30. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/i18n.py +6 -5
  31. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/listeners.py +8 -26
  32. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/models.py +15 -8
  33. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/observer.py +22 -43
  34. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/operators.py +4 -9
  35. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/path.py +7 -24
  36. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/country.py +3 -5
  37. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/currency.py +2 -4
  38. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/ltree.py +10 -17
  39. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/weekday.py +3 -12
  40. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/weekdays.py +2 -7
  41. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/proxy_dict.py +1 -3
  42. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/query_chain.py +3 -1
  43. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/relationships/__init__.py +13 -35
  44. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/relationships/chained_join.py +4 -14
  45. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/__init__.py +5 -4
  46. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/arrow.py +4 -9
  47. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/bit.py +1 -0
  48. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/choice.py +4 -18
  49. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/color.py +2 -0
  50. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/country.py +2 -1
  51. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/currency.py +1 -0
  52. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/email.py +1 -0
  53. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/encrypted/encrypted_type.py +19 -35
  54. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/encrypted/padding.py +13 -9
  55. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/arrow_datetime.py +1 -2
  56. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/enriched_date_type.py +1 -0
  57. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/enriched_datetime_type.py +1 -0
  58. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/pendulum_datetime.py +7 -13
  59. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/json.py +4 -0
  60. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/locale.py +1 -3
  61. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/ltree.py +6 -0
  62. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/password.py +4 -17
  63. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/pg_composite.py +23 -57
  64. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/phone_number.py +5 -5
  65. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/range.py +22 -26
  66. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/scalar_list.py +5 -9
  67. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/timezone.py +6 -18
  68. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/ts_vector.py +2 -3
  69. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/uuid.py +5 -10
  70. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/utils.py +2 -4
  71. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/view.py +13 -41
  72. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0/tests}/conftest.py +24 -39
  73. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_cast_if.py +2 -7
  74. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_type.py +1 -2
  75. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_json_sql.py +2 -3
  76. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_jsonb_sql.py +2 -3
  77. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_make_order_by_deterministic.py +1 -2
  78. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_render.py +1 -2
  79. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/relationships/test_select_correlated_expression.py +8 -10
  80. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_expressions.py +3 -3
  81. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_models.py +7 -5
  82. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_views.py +12 -17
  83. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_arrow.py +1 -2
  84. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_choice.py +1 -2
  85. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_color.py +1 -2
  86. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_composite.py +1 -6
  87. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_country.py +1 -2
  88. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_currency.py +1 -2
  89. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_date_range.py +1 -2
  90. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_datetime_range.py +1 -2
  91. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_email.py +1 -2
  92. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_encrypted.py +3 -15
  93. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_enriched_date_pendulum.py +1 -2
  94. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_enriched_datetime_arrow.py +1 -2
  95. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_enriched_datetime_pendulum.py +9 -0
  96. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_int_range.py +2 -3
  97. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_ip_address.py +1 -2
  98. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_json.py +1 -2
  99. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_locale.py +1 -2
  100. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_ltree.py +1 -2
  101. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_numeric_range.py +1 -2
  102. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_password.py +5 -22
  103. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_phonenumber.py +1 -2
  104. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_scalar_list.py +1 -2
  105. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_timezone.py +2 -6
  106. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_url.py +1 -2
  107. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_uuid.py +1 -2
  108. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_weekdays.py +1 -2
  109. SQLAlchemy-Utils-0.41.2/.isort.cfg +0 -6
  110. SQLAlchemy-Utils-0.41.2/SQLAlchemy_Utils.egg-info/not-zip-safe +0 -1
  111. SQLAlchemy-Utils-0.41.2/docs/Makefile +0 -153
  112. SQLAlchemy-Utils-0.41.2/docs/conf.py +0 -246
  113. SQLAlchemy-Utils-0.41.2/docs/database_helpers.rst +0 -53
  114. SQLAlchemy-Utils-0.41.2/docs/foreign_key_helpers.rst +0 -40
  115. SQLAlchemy-Utils-0.41.2/docs/make.bat +0 -190
  116. SQLAlchemy-Utils-0.41.2/docs/models.rst +0 -18
  117. SQLAlchemy-Utils-0.41.2/docs/orm_helpers.rst +0 -124
  118. SQLAlchemy-Utils-0.41.2/docs/view.rst +0 -22
  119. SQLAlchemy-Utils-0.41.2/setup.cfg +0 -15
  120. SQLAlchemy-Utils-0.41.2/setup.py +0 -98
  121. SQLAlchemy-Utils-0.41.2/sqlalchemy_utils/compat.py +0 -86
  122. SQLAlchemy-Utils-0.41.2/tests/test_compat.py +0 -20
  123. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/LICENSE +0 -0
  124. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/README.rst +0 -0
  125. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/SQLAlchemy_Utils.egg-info/dependency_links.txt +0 -0
  126. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/SQLAlchemy_Utils.egg-info/top_level.txt +0 -0
  127. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/aggregates.rst +0 -0
  128. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/generic_relationship.rst +0 -0
  129. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/index.rst +0 -0
  130. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/internationalization.rst +0 -0
  131. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/license.rst +0 -0
  132. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/listeners.rst +0 -0
  133. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/observers.rst +0 -0
  134. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/testing.rst +0 -0
  135. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/utility_classes.rst +0 -0
  136. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/exceptions.py +0 -0
  137. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/render.py +0 -0
  138. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/__init__.py +0 -0
  139. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/encrypted/__init__.py +0 -0
  140. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/__init__.py +0 -0
  141. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/pendulum_date.py +0 -0
  142. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/ip_address.py +0 -0
  143. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/scalar_coercible.py +0 -0
  144. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/url.py +0 -0
  145. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/weekdays.py +0 -0
  146. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/__init__.py +0 -0
  147. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/__init__.py +0 -0
  148. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_backrefs.py +0 -0
  149. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_custom_select_expressions.py +0 -0
  150. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_join_table_inheritance.py +0 -0
  151. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_m2m.py +0 -0
  152. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_m2m_m2m.py +0 -0
  153. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_multiple_aggregates_per_class.py +0 -0
  154. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_o2m_m2m.py +0 -0
  155. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_o2m_o2m.py +0 -0
  156. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_o2m_o2m_o2m.py +0 -0
  157. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_search_vectors.py +0 -0
  158. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_simple_paths.py +0 -0
  159. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_with_column_alias.py +0 -0
  160. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_with_ondelete_cascade.py +0 -0
  161. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/__init__.py +0 -0
  162. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_database.py +0 -0
  163. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_dependent_objects.py +0 -0
  164. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_escape_like.py +0 -0
  165. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_bind.py +0 -0
  166. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_class_by_table.py +0 -0
  167. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_column_key.py +0 -0
  168. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_columns.py +0 -0
  169. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_hybrid_properties.py +0 -0
  170. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_mapper.py +0 -0
  171. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_primary_keys.py +0 -0
  172. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_referencing_foreign_keys.py +0 -0
  173. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_tables.py +0 -0
  174. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_getdotattr.py +0 -0
  175. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_has_changes.py +0 -0
  176. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_has_index.py +0 -0
  177. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_has_unique_index.py +0 -0
  178. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_identity.py +0 -0
  179. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_is_loaded.py +0 -0
  180. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_merge_references.py +0 -0
  181. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_naturally_equivalent.py +0 -0
  182. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_non_indexed_foreign_keys.py +0 -0
  183. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_quote.py +0 -0
  184. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_table_name.py +0 -0
  185. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/__init__.py +0 -0
  186. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/test_abstract_base_class.py +0 -0
  187. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/test_column_aliases.py +0 -0
  188. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/test_composite_keys.py +0 -0
  189. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/test_hybrid_properties.py +0 -0
  190. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/test_single_table_inheritance.py +0 -0
  191. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/mixins.py +0 -0
  192. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/__init__.py +0 -0
  193. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_column_property.py +0 -0
  194. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_dynamic_relationship.py +0 -0
  195. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_m2m_m2m_m2m.py +0 -0
  196. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_o2m_o2m_o2m.py +0 -0
  197. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_o2m_o2o_o2m.py +0 -0
  198. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_o2o_o2o.py +0 -0
  199. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_o2o_o2o_o2o.py +0 -0
  200. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/primitives/__init__.py +0 -0
  201. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/primitives/test_country.py +0 -0
  202. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/primitives/test_currency.py +0 -0
  203. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/primitives/test_ltree.py +0 -0
  204. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/primitives/test_weekdays.py +0 -0
  205. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/relationships/__init__.py +0 -0
  206. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/relationships/test_chained_join.py +0 -0
  207. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_asserts.py +0 -0
  208. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_auto_delete_orphans.py +0 -0
  209. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_case_insensitive_comparator.py +0 -0
  210. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_instant_defaults_listener.py +0 -0
  211. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_instrumented_list.py +0 -0
  212. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_path.py +0 -0
  213. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_proxy_dict.py +0 -0
  214. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_query_chain.py +0 -0
  215. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_translation_hybrid.py +0 -0
  216. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/__init__.py +0 -0
  217. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/encrypted/test_padding.py +0 -0
  218. {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_tsvector.py +0 -0
@@ -3,17 +3,30 @@ Changelog
3
3
 
4
4
  Here you can see the full list of changes between each SQLAlchemy-Utils release.
5
5
 
6
+ 0.42.0 (2025-08-30)
7
+ ^^^^^^^^^^^^^^^^^^^
8
+
9
+ - Drop support for Python 3.7 and 3.8.
10
+ - Drop support for sqlalchemy 1.3.
11
+ - Add support for Python 3.12 and 3.13.
12
+ - Add a Read the Docs configuration file.
13
+ - Make documentation builds reproducible.
14
+ - Test documentation builds in CI.
15
+ - Fix Pendulum parsing of datetime instances with timezones. (#755)
16
+ - Migrate package metadata to PEP 621 format in pyproject.toml
17
+ - Migrate to `ruff <https://docs.astral.sh/ruff/>`_ for code linting and formatting, replacing flake8 and isort with a faster Rust-based tool.
18
+
6
19
  0.41.2 (2024-03-22)
7
20
  ^^^^^^^^^^^^^^^^^^^
8
21
 
9
- - Fix breaking change introduced on SQLAlchemy 2.0.22 changes to `attributes.AttributeImpl` constructor (#733)
22
+ - Fix breaking change introduced on SQLAlchemy 2.0.22 changes to ``attributes.AttributeImpl`` constructor (#733)
10
23
 
11
24
 
12
25
  0.41.1 (2023-04-27)
13
26
  ^^^^^^^^^^^^^^^^^^^
14
27
 
15
28
  - Use a custom SQL construct for refreshing materialized views in
16
- `refresh_materialized_view` (#703)
29
+ ``refresh_materialized_view`` (#703)
17
30
 
18
31
 
19
32
  0.41.0 (2023-04-13)
@@ -58,7 +71,7 @@ Here you can see the full list of changes between each SQLAlchemy-Utils release.
58
71
  0.38.2 (2021-12-29)
59
72
  ^^^^^^^^^^^^^^^^^^^
60
73
 
61
- - Added inherit_cache=False in order to avoid SQLAlchemy warnings in `cast_locale_expr` (#571)
74
+ - Added inherit_cache=False in order to avoid SQLAlchemy warnings in ``cast_locale_expr`` (#571)
62
75
 
63
76
 
64
77
  0.38.1 (2021-12-21)
@@ -98,7 +111,7 @@ Here you can see the full list of changes between each SQLAlchemy-Utils release.
98
111
  0.37.6 (2021-06-02)
99
112
  ^^^^^^^^^^^^^^^^^^^
100
113
 
101
- - Added `cache_ok=True` for TSVectorType
114
+ - Added ``cache_ok=True`` for TSVectorType
102
115
 
103
116
 
104
117
  0.37.5 (2021-05-31)
@@ -116,7 +129,7 @@ Here you can see the full list of changes between each SQLAlchemy-Utils release.
116
129
  0.37.3 (2021-05-16)
117
130
  ^^^^^^^^^^^^^^^^^^^
118
131
 
119
- - Added `cache_ok=True` for all custom types
132
+ - Added ``cache_ok=True`` for all custom types
120
133
  - Added CockroachDB support for UUIDType (#526, pull request courtesy of chrishemmings)
121
134
 
122
135
 
@@ -138,7 +151,7 @@ Here you can see the full list of changes between each SQLAlchemy-Utils release.
138
151
  - Added SQLAlchemy 1.4 support
139
152
  - Fixed database_exists() on PostgreSQL (#462)
140
153
  - Added create_database support pymssql (#486)
141
- - Removed `sort_query`, `get_query_entities` and `get_query_entity_by_alias` functions
154
+ - Removed ``sort_query``, ``get_query_entities`` and ``get_query_entity_by_alias`` functions
142
155
 
143
156
 
144
157
  0.36.8 (2020-07-08)
@@ -193,7 +206,7 @@ Here you can see the full list of changes between each SQLAlchemy-Utils release.
193
206
  ^^^^^^^^^^^^^^^^^^^
194
207
 
195
208
  - Added support for CASCADE option when dropping views (#406, pull request courtesy of amicks)
196
- - Added `aliases` parameter to create_materialized_view function.
209
+ - Added ``aliases`` parameter to create_materialized_view function.
197
210
 
198
211
 
199
212
  0.36.0 (2019-12-08)
@@ -283,7 +296,7 @@ Here you can see the full list of changes between each SQLAlchemy-Utils release.
283
296
  0.33.4 (2018-09-11)
284
297
  ^^^^^^^^^^^^^^^^^^^
285
298
 
286
- - Made PasswordType use `hash` function instead of deprecated `encrypt` function (#341, pull request courtesy of libre-man)
299
+ - Made PasswordType use ``hash`` function instead of deprecated ``encrypt`` function (#341, pull request courtesy of libre-man)
287
300
 
288
301
 
289
302
  0.33.3 (2018-04-29)
@@ -323,7 +336,7 @@ Here you can see the full list of changes between each SQLAlchemy-Utils release.
323
336
  0.32.20 (2017-11-04)
324
337
  ^^^^^^^^^^^^^^^^^^^^
325
338
 
326
- - Added `__hash__` method for choice objects (#294, pull request courtesy of havelock)
339
+ - Added ``__hash__`` method for choice objects (#294, pull request courtesy of havelock)
327
340
 
328
341
 
329
342
  0.32.19 (2017-10-17)
@@ -1,4 +1,4 @@
1
- include CHANGES.rst LICENSE README.rst conftest.py .isort.cfg
1
+ include CHANGES.rst LICENSE README.rst
2
2
  recursive-include tests *
3
3
  recursive-exclude tests *.pyc
4
4
  recursive-include docs *
@@ -1,29 +1,26 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: SQLAlchemy-Utils
3
- Version: 0.41.2
3
+ Version: 0.42.0
4
4
  Summary: Various utility functions for SQLAlchemy.
5
- Home-page: https://github.com/kvesteri/sqlalchemy-utils
6
- Author: Konsta Vesterinen, Ryan Leckey, Janne Vanhala, Vesa Uimonen
7
- Author-email: konsta@fastmonkeys.com
8
- License: BSD
9
- Platform: any
5
+ Author: Ryan Leckey, Janne Vanhala, Vesa Uimonen
6
+ Author-email: Konsta Vesterinen <konsta@fastmonkeys.com>
7
+ License-Expression: BSD-3-Clause
8
+ Project-URL: Homepage, https://github.com/kvesteri/sqlalchemy-utils
10
9
  Classifier: Environment :: Web Environment
11
10
  Classifier: Intended Audience :: Developers
12
- Classifier: License :: OSI Approved :: BSD License
13
11
  Classifier: Operating System :: OS Independent
14
12
  Classifier: Programming Language :: Python
15
- Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.7
17
- Classifier: Programming Language :: Python :: 3.8
18
13
  Classifier: Programming Language :: Python :: 3.9
19
14
  Classifier: Programming Language :: Python :: 3.10
20
15
  Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
21
18
  Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
22
19
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
- Requires-Python: >=3.7
20
+ Requires-Python: >=3.9
21
+ Description-Content-Type: text/x-rst
24
22
  License-File: LICENSE
25
- Requires-Dist: SQLAlchemy>=1.3
26
- Requires-Dist: importlib_metadata; python_version < "3.8"
23
+ Requires-Dist: SQLAlchemy>=1.4
27
24
  Provides-Extra: test
28
25
  Requires-Dist: pytest==7.4.4; extra == "test"
29
26
  Requires-Dist: Pygments>=1.2; extra == "test"
@@ -36,7 +33,6 @@ Requires-Dist: psycopg2cffi>=2.8.1; extra == "test"
36
33
  Requires-Dist: pg8000>=1.12.4; extra == "test"
37
34
  Requires-Dist: pytz>=2014.2; extra == "test"
38
35
  Requires-Dist: python-dateutil>=2.6; extra == "test"
39
- Requires-Dist: backports.zoneinfo; python_version < "3.9" and extra == "test"
40
36
  Requires-Dist: pymysql; extra == "test"
41
37
  Requires-Dist: flake8>=2.4.0; extra == "test"
42
38
  Requires-Dist: isort>=4.2.2; extra == "test"
@@ -62,35 +58,52 @@ Requires-Dist: furl>=0.4.1; extra == "url"
62
58
  Provides-Extra: encrypted
63
59
  Requires-Dist: cryptography>=0.6; extra == "encrypted"
64
60
  Provides-Extra: test-all
65
- Requires-Dist: Babel>=1.3; extra == "test-all"
66
- Requires-Dist: Jinja2>=2.3; extra == "test-all"
61
+ Requires-Dist: pytest==7.4.4; extra == "test-all"
67
62
  Requires-Dist: Pygments>=1.2; extra == "test-all"
68
- Requires-Dist: arrow>=0.3.4; extra == "test-all"
69
- Requires-Dist: backports.zoneinfo; python_version < "3.9" and extra == "test-all"
70
- Requires-Dist: colour>=0.0.4; extra == "test-all"
71
- Requires-Dist: cryptography>=0.6; extra == "test-all"
63
+ Requires-Dist: Jinja2>=2.3; extra == "test-all"
72
64
  Requires-Dist: docutils>=0.10; extra == "test-all"
73
- Requires-Dist: flake8>=2.4.0; extra == "test-all"
74
65
  Requires-Dist: flexmock>=0.9.7; extra == "test-all"
75
- Requires-Dist: furl>=0.4.1; extra == "test-all"
76
- Requires-Dist: intervals>=0.7.1; extra == "test-all"
77
- Requires-Dist: isort>=4.2.2; extra == "test-all"
78
- Requires-Dist: passlib<2.0,>=1.6; extra == "test-all"
79
- Requires-Dist: pendulum>=2.0.5; extra == "test-all"
80
- Requires-Dist: pg8000>=1.12.4; extra == "test-all"
81
- Requires-Dist: phonenumbers>=5.9.2; extra == "test-all"
66
+ Requires-Dist: psycopg>=3.1.8; extra == "test-all"
82
67
  Requires-Dist: psycopg2>=2.5.1; extra == "test-all"
83
68
  Requires-Dist: psycopg2cffi>=2.8.1; extra == "test-all"
84
- Requires-Dist: psycopg>=3.1.8; extra == "test-all"
69
+ Requires-Dist: pg8000>=1.12.4; extra == "test-all"
70
+ Requires-Dist: pytz>=2014.2; extra == "test-all"
71
+ Requires-Dist: python-dateutil>=2.6; extra == "test-all"
85
72
  Requires-Dist: pymysql; extra == "test-all"
73
+ Requires-Dist: flake8>=2.4.0; extra == "test-all"
74
+ Requires-Dist: isort>=4.2.2; extra == "test-all"
86
75
  Requires-Dist: pyodbc; extra == "test-all"
87
- Requires-Dist: pytest==7.4.4; extra == "test-all"
76
+ Requires-Dist: Babel>=1.3; extra == "test-all"
77
+ Requires-Dist: arrow>=0.3.4; extra == "test-all"
78
+ Requires-Dist: pendulum>=2.0.5; extra == "test-all"
79
+ Requires-Dist: intervals>=0.7.1; extra == "test-all"
80
+ Requires-Dist: phonenumbers>=5.9.2; extra == "test-all"
81
+ Requires-Dist: passlib<2.0,>=1.6; extra == "test-all"
82
+ Requires-Dist: colour>=0.0.4; extra == "test-all"
88
83
  Requires-Dist: python-dateutil; extra == "test-all"
89
- Requires-Dist: python-dateutil>=2.6; extra == "test-all"
90
- Requires-Dist: pytz>=2014.2; extra == "test-all"
91
-
84
+ Requires-Dist: furl>=0.4.1; extra == "test-all"
85
+ Requires-Dist: cryptography>=0.6; extra == "test-all"
86
+ Dynamic: license-file
92
87
 
93
88
  SQLAlchemy-Utils
94
- ----------------
89
+ ================
90
+
91
+ |Build| |Version Status| |Downloads|
92
+
93
+ Various utility functions, new data types and helpers for SQLAlchemy.
94
+
95
+
96
+ Resources
97
+ ---------
98
+
99
+ - `Documentation <https://sqlalchemy-utils.readthedocs.io/>`_
100
+ - `Issue Tracker <https://github.com/kvesteri/sqlalchemy-utils/issues>`_
101
+ - `Code <https://github.com/kvesteri/sqlalchemy-utils/>`_
95
102
 
96
- Various utility functions and custom data types for SQLAlchemy.
103
+ .. |Build| image:: https://github.com/kvesteri/sqlalchemy-utils/actions/workflows/test.yaml/badge.svg?branch=master
104
+ :target: https://github.com/kvesteri/sqlalchemy-utils/actions/workflows/test.yaml
105
+ :alt: Tests
106
+ .. |Version Status| image:: https://img.shields.io/pypi/v/SQLAlchemy-Utils.svg
107
+ :target: https://pypi.python.org/pypi/SQLAlchemy-Utils/
108
+ .. |Downloads| image:: https://img.shields.io/pypi/dm/SQLAlchemy-Utils.svg
109
+ :target: https://pypi.python.org/pypi/SQLAlchemy-Utils/
@@ -1,29 +1,26 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: SQLAlchemy-Utils
3
- Version: 0.41.2
3
+ Version: 0.42.0
4
4
  Summary: Various utility functions for SQLAlchemy.
5
- Home-page: https://github.com/kvesteri/sqlalchemy-utils
6
- Author: Konsta Vesterinen, Ryan Leckey, Janne Vanhala, Vesa Uimonen
7
- Author-email: konsta@fastmonkeys.com
8
- License: BSD
9
- Platform: any
5
+ Author: Ryan Leckey, Janne Vanhala, Vesa Uimonen
6
+ Author-email: Konsta Vesterinen <konsta@fastmonkeys.com>
7
+ License-Expression: BSD-3-Clause
8
+ Project-URL: Homepage, https://github.com/kvesteri/sqlalchemy-utils
10
9
  Classifier: Environment :: Web Environment
11
10
  Classifier: Intended Audience :: Developers
12
- Classifier: License :: OSI Approved :: BSD License
13
11
  Classifier: Operating System :: OS Independent
14
12
  Classifier: Programming Language :: Python
15
- Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.7
17
- Classifier: Programming Language :: Python :: 3.8
18
13
  Classifier: Programming Language :: Python :: 3.9
19
14
  Classifier: Programming Language :: Python :: 3.10
20
15
  Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
21
18
  Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
22
19
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
- Requires-Python: >=3.7
20
+ Requires-Python: >=3.9
21
+ Description-Content-Type: text/x-rst
24
22
  License-File: LICENSE
25
- Requires-Dist: SQLAlchemy>=1.3
26
- Requires-Dist: importlib_metadata; python_version < "3.8"
23
+ Requires-Dist: SQLAlchemy>=1.4
27
24
  Provides-Extra: test
28
25
  Requires-Dist: pytest==7.4.4; extra == "test"
29
26
  Requires-Dist: Pygments>=1.2; extra == "test"
@@ -36,7 +33,6 @@ Requires-Dist: psycopg2cffi>=2.8.1; extra == "test"
36
33
  Requires-Dist: pg8000>=1.12.4; extra == "test"
37
34
  Requires-Dist: pytz>=2014.2; extra == "test"
38
35
  Requires-Dist: python-dateutil>=2.6; extra == "test"
39
- Requires-Dist: backports.zoneinfo; python_version < "3.9" and extra == "test"
40
36
  Requires-Dist: pymysql; extra == "test"
41
37
  Requires-Dist: flake8>=2.4.0; extra == "test"
42
38
  Requires-Dist: isort>=4.2.2; extra == "test"
@@ -62,35 +58,52 @@ Requires-Dist: furl>=0.4.1; extra == "url"
62
58
  Provides-Extra: encrypted
63
59
  Requires-Dist: cryptography>=0.6; extra == "encrypted"
64
60
  Provides-Extra: test-all
65
- Requires-Dist: Babel>=1.3; extra == "test-all"
66
- Requires-Dist: Jinja2>=2.3; extra == "test-all"
61
+ Requires-Dist: pytest==7.4.4; extra == "test-all"
67
62
  Requires-Dist: Pygments>=1.2; extra == "test-all"
68
- Requires-Dist: arrow>=0.3.4; extra == "test-all"
69
- Requires-Dist: backports.zoneinfo; python_version < "3.9" and extra == "test-all"
70
- Requires-Dist: colour>=0.0.4; extra == "test-all"
71
- Requires-Dist: cryptography>=0.6; extra == "test-all"
63
+ Requires-Dist: Jinja2>=2.3; extra == "test-all"
72
64
  Requires-Dist: docutils>=0.10; extra == "test-all"
73
- Requires-Dist: flake8>=2.4.0; extra == "test-all"
74
65
  Requires-Dist: flexmock>=0.9.7; extra == "test-all"
75
- Requires-Dist: furl>=0.4.1; extra == "test-all"
76
- Requires-Dist: intervals>=0.7.1; extra == "test-all"
77
- Requires-Dist: isort>=4.2.2; extra == "test-all"
78
- Requires-Dist: passlib<2.0,>=1.6; extra == "test-all"
79
- Requires-Dist: pendulum>=2.0.5; extra == "test-all"
80
- Requires-Dist: pg8000>=1.12.4; extra == "test-all"
81
- Requires-Dist: phonenumbers>=5.9.2; extra == "test-all"
66
+ Requires-Dist: psycopg>=3.1.8; extra == "test-all"
82
67
  Requires-Dist: psycopg2>=2.5.1; extra == "test-all"
83
68
  Requires-Dist: psycopg2cffi>=2.8.1; extra == "test-all"
84
- Requires-Dist: psycopg>=3.1.8; extra == "test-all"
69
+ Requires-Dist: pg8000>=1.12.4; extra == "test-all"
70
+ Requires-Dist: pytz>=2014.2; extra == "test-all"
71
+ Requires-Dist: python-dateutil>=2.6; extra == "test-all"
85
72
  Requires-Dist: pymysql; extra == "test-all"
73
+ Requires-Dist: flake8>=2.4.0; extra == "test-all"
74
+ Requires-Dist: isort>=4.2.2; extra == "test-all"
86
75
  Requires-Dist: pyodbc; extra == "test-all"
87
- Requires-Dist: pytest==7.4.4; extra == "test-all"
76
+ Requires-Dist: Babel>=1.3; extra == "test-all"
77
+ Requires-Dist: arrow>=0.3.4; extra == "test-all"
78
+ Requires-Dist: pendulum>=2.0.5; extra == "test-all"
79
+ Requires-Dist: intervals>=0.7.1; extra == "test-all"
80
+ Requires-Dist: phonenumbers>=5.9.2; extra == "test-all"
81
+ Requires-Dist: passlib<2.0,>=1.6; extra == "test-all"
82
+ Requires-Dist: colour>=0.0.4; extra == "test-all"
88
83
  Requires-Dist: python-dateutil; extra == "test-all"
89
- Requires-Dist: python-dateutil>=2.6; extra == "test-all"
90
- Requires-Dist: pytz>=2014.2; extra == "test-all"
91
-
84
+ Requires-Dist: furl>=0.4.1; extra == "test-all"
85
+ Requires-Dist: cryptography>=0.6; extra == "test-all"
86
+ Dynamic: license-file
92
87
 
93
88
  SQLAlchemy-Utils
94
- ----------------
89
+ ================
90
+
91
+ |Build| |Version Status| |Downloads|
92
+
93
+ Various utility functions, new data types and helpers for SQLAlchemy.
94
+
95
+
96
+ Resources
97
+ ---------
98
+
99
+ - `Documentation <https://sqlalchemy-utils.readthedocs.io/>`_
100
+ - `Issue Tracker <https://github.com/kvesteri/sqlalchemy-utils/issues>`_
101
+ - `Code <https://github.com/kvesteri/sqlalchemy-utils/>`_
95
102
 
96
- Various utility functions and custom data types for SQLAlchemy.
103
+ .. |Build| image:: https://github.com/kvesteri/sqlalchemy-utils/actions/workflows/test.yaml/badge.svg?branch=master
104
+ :target: https://github.com/kvesteri/sqlalchemy-utils/actions/workflows/test.yaml
105
+ :alt: Tests
106
+ .. |Version Status| image:: https://img.shields.io/pypi/v/SQLAlchemy-Utils.svg
107
+ :target: https://pypi.python.org/pypi/SQLAlchemy-Utils/
108
+ .. |Downloads| image:: https://img.shields.io/pypi/dm/SQLAlchemy-Utils.svg
109
+ :target: https://pypi.python.org/pypi/SQLAlchemy-Utils/
@@ -1,18 +1,13 @@
1
- .isort.cfg
2
1
  CHANGES.rst
3
2
  LICENSE
4
3
  MANIFEST.in
5
4
  README.rst
6
- conftest.py
7
- setup.cfg
8
- setup.py
5
+ pyproject.toml
9
6
  SQLAlchemy_Utils.egg-info/PKG-INFO
10
7
  SQLAlchemy_Utils.egg-info/SOURCES.txt
11
8
  SQLAlchemy_Utils.egg-info/dependency_links.txt
12
- SQLAlchemy_Utils.egg-info/not-zip-safe
13
9
  SQLAlchemy_Utils.egg-info/requires.txt
14
10
  SQLAlchemy_Utils.egg-info/top_level.txt
15
- docs/Makefile
16
11
  docs/aggregates.rst
17
12
  docs/conf.py
18
13
  docs/data_types.rst
@@ -24,7 +19,6 @@ docs/installation.rst
24
19
  docs/internationalization.rst
25
20
  docs/license.rst
26
21
  docs/listeners.rst
27
- docs/make.bat
28
22
  docs/models.rst
29
23
  docs/observers.rst
30
24
  docs/orm_helpers.rst
@@ -97,11 +91,11 @@ sqlalchemy_utils/types/enriched_datetime/enriched_datetime_type.py
97
91
  sqlalchemy_utils/types/enriched_datetime/pendulum_date.py
98
92
  sqlalchemy_utils/types/enriched_datetime/pendulum_datetime.py
99
93
  tests/__init__.py
94
+ tests/conftest.py
100
95
  tests/mixins.py
101
96
  tests/test_asserts.py
102
97
  tests/test_auto_delete_orphans.py
103
98
  tests/test_case_insensitive_comparator.py
104
- tests/test_compat.py
105
99
  tests/test_expressions.py
106
100
  tests/test_instant_defaults_listener.py
107
101
  tests/test_instrumented_list.py
@@ -1,7 +1,4 @@
1
- SQLAlchemy>=1.3
2
-
3
- [:python_version < "3.8"]
4
- importlib_metadata
1
+ SQLAlchemy>=1.4
5
2
 
6
3
  [arrow]
7
4
  arrow>=0.3.4
@@ -44,38 +41,32 @@ flake8>=2.4.0
44
41
  isort>=4.2.2
45
42
  pyodbc
46
43
 
47
- [test:python_version < "3.9"]
48
- backports.zoneinfo
49
-
50
44
  [test_all]
51
- Babel>=1.3
52
- Jinja2>=2.3
45
+ pytest==7.4.4
53
46
  Pygments>=1.2
54
- arrow>=0.3.4
55
- colour>=0.0.4
56
- cryptography>=0.6
47
+ Jinja2>=2.3
57
48
  docutils>=0.10
58
- flake8>=2.4.0
59
49
  flexmock>=0.9.7
60
- furl>=0.4.1
61
- intervals>=0.7.1
62
- isort>=4.2.2
63
- passlib<2.0,>=1.6
64
- pendulum>=2.0.5
65
- pg8000>=1.12.4
66
- phonenumbers>=5.9.2
50
+ psycopg>=3.1.8
67
51
  psycopg2>=2.5.1
68
52
  psycopg2cffi>=2.8.1
69
- psycopg>=3.1.8
53
+ pg8000>=1.12.4
54
+ pytz>=2014.2
55
+ python-dateutil>=2.6
70
56
  pymysql
57
+ flake8>=2.4.0
58
+ isort>=4.2.2
71
59
  pyodbc
72
- pytest==7.4.4
60
+ Babel>=1.3
61
+ arrow>=0.3.4
62
+ pendulum>=2.0.5
63
+ intervals>=0.7.1
64
+ phonenumbers>=5.9.2
65
+ passlib<2.0,>=1.6
66
+ colour>=0.0.4
73
67
  python-dateutil
74
- python-dateutil>=2.6
75
- pytz>=2014.2
76
-
77
- [test_all:python_version < "3.9"]
78
- backports.zoneinfo
68
+ furl>=0.4.1
69
+ cryptography>=0.6
79
70
 
80
71
  [timezone]
81
72
  python-dateutil
@@ -0,0 +1,47 @@
1
+ import pathlib
2
+
3
+
4
+ def get_version() -> str:
5
+ path = pathlib.Path(__file__).parent.parent / "sqlalchemy_utils/__init__.py"
6
+ content = path.read_text()
7
+ for line in content.splitlines():
8
+ if line.strip().startswith("__version__"):
9
+ _, _, version_ = line.partition("=")
10
+ return version_.strip("'\" ")
11
+
12
+
13
+ # -- General configuration -----------------------------------------------------
14
+
15
+ # Add any Sphinx extension module names here, as strings. They can be extensions
16
+ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
17
+ extensions = [
18
+ "sphinx.ext.autodoc",
19
+ "sphinx.ext.doctest",
20
+ "sphinx.ext.intersphinx",
21
+ "sphinx.ext.todo",
22
+ "sphinx.ext.coverage",
23
+ "sphinx.ext.ifconfig",
24
+ "sphinx.ext.viewcode",
25
+ ]
26
+
27
+ # Add any paths that contain templates here, relative to this directory.
28
+ templates_path = ["_templates"]
29
+
30
+ # The master toctree document.
31
+ master_doc = "index"
32
+
33
+ # General information about the project.
34
+ project = "SQLAlchemy-Utils"
35
+ copyright = "2013-2022, Konsta Vesterinen"
36
+
37
+ version = get_version()
38
+ release = version
39
+
40
+ # List of patterns, relative to source directory, that match files and
41
+ # directories to ignore when looking for source files.
42
+ exclude_patterns = ["_build"]
43
+
44
+ # The name of the Pygments (syntax highlighting) style to use.
45
+ # pygments_style = "sphinx"
46
+
47
+ html_theme = "sphinx_rtd_theme"
@@ -74,12 +74,11 @@ EmailType
74
74
  EncryptedType
75
75
  -------------
76
76
 
77
- .. module:: sqlalchemy_utils.types.encrypted.encrypted_type
78
-
79
77
  .. deprecated:: 0.36.6
80
78
  Use StringEncryptedType instead
81
79
 
82
- .. autoclass:: EncryptedType
80
+ .. autoclass:: sqlalchemy_utils.types.encrypted.encrypted_type.EncryptedType
81
+
83
82
 
84
83
  JSONType
85
84
  --------
@@ -0,0 +1,50 @@
1
+ Database helpers
2
+ ================
3
+
4
+
5
+ database_exists
6
+ ---------------
7
+
8
+ .. autofunction:: sqlalchemy_utils.functions.database_exists
9
+
10
+
11
+ create_database
12
+ ---------------
13
+
14
+ .. autofunction:: sqlalchemy_utils.functions.create_database
15
+
16
+
17
+ drop_database
18
+ -------------
19
+
20
+ .. autofunction:: sqlalchemy_utils.functions.drop_database
21
+
22
+
23
+ has_index
24
+ ---------
25
+
26
+ .. autofunction:: sqlalchemy_utils.functions.has_index
27
+
28
+
29
+ has_unique_index
30
+ ----------------
31
+
32
+ .. autofunction:: sqlalchemy_utils.functions.has_unique_index
33
+
34
+
35
+ json_sql
36
+ --------
37
+
38
+ .. autofunction:: sqlalchemy_utils.functions.json_sql
39
+
40
+
41
+ render_expression
42
+ -----------------
43
+
44
+ .. autofunction:: sqlalchemy_utils.functions.render_expression
45
+
46
+
47
+ render_statement
48
+ ----------------
49
+
50
+ .. autofunction:: sqlalchemy_utils.functions.render_statement
@@ -0,0 +1,32 @@
1
+ Foreign key helpers
2
+ ===================
3
+
4
+
5
+ dependent_objects
6
+ -----------------
7
+
8
+ .. autofunction:: sqlalchemy_utils.functions.dependent_objects
9
+
10
+
11
+ get_referencing_foreign_keys
12
+ ----------------------------
13
+
14
+ .. autofunction:: sqlalchemy_utils.functions.get_referencing_foreign_keys
15
+
16
+
17
+ group_foreign_keys
18
+ ------------------
19
+
20
+ .. autofunction:: sqlalchemy_utils.functions.group_foreign_keys
21
+
22
+
23
+ merge_references
24
+ ----------------
25
+
26
+ .. autofunction:: sqlalchemy_utils.functions.merge_references
27
+
28
+
29
+ non_indexed_foreign_keys
30
+ ------------------------
31
+
32
+ .. autofunction:: sqlalchemy_utils.functions.non_indexed_foreign_keys
@@ -6,13 +6,12 @@ This part of the documentation covers the installation of SQLAlchemy-Utils.
6
6
  Supported platforms
7
7
  -------------------
8
8
 
9
- SQLAlchemy-Utils is currently tested against the following Python platforms.
9
+ SQLAlchemy-Utils is currently tested against the following Python platforms:
10
10
 
11
- - cPython 3.7
12
- - cPython 3.8
13
- - cPython 3.9
14
- - cPython 3.10
15
- - cPython 3.11
11
+ - CPython 3.9
12
+ - CPython 3.10
13
+ - CPython 3.11
14
+ - CPython 3.12
16
15
 
17
16
 
18
17
  Installing an official release
@@ -0,0 +1,14 @@
1
+ Model mixins
2
+ ============
3
+
4
+
5
+ Timestamp
6
+ ---------
7
+
8
+ .. autoclass:: sqlalchemy_utils.models.Timestamp
9
+
10
+
11
+ generic_repr
12
+ ------------
13
+
14
+ .. autofunction:: sqlalchemy_utils.models.generic_repr