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.
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/CHANGES.rst +22 -9
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/MANIFEST.in +1 -1
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/PKG-INFO +49 -36
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/SQLAlchemy_Utils.egg-info/PKG-INFO +49 -36
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/SQLAlchemy_Utils.egg-info/SOURCES.txt +2 -8
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/SQLAlchemy_Utils.egg-info/requires.txt +18 -27
- sqlalchemy_utils-0.42.0/docs/conf.py +47 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/data_types.rst +2 -3
- sqlalchemy_utils-0.42.0/docs/database_helpers.rst +50 -0
- sqlalchemy_utils-0.42.0/docs/foreign_key_helpers.rst +32 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/installation.rst +5 -6
- sqlalchemy_utils-0.42.0/docs/models.rst +14 -0
- sqlalchemy_utils-0.42.0/docs/orm_helpers.rst +110 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/range_data_types.rst +0 -2
- sqlalchemy_utils-0.42.0/docs/view.rst +20 -0
- sqlalchemy_utils-0.42.0/pyproject.toml +116 -0
- sqlalchemy_utils-0.42.0/setup.cfg +4 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/__init__.py +6 -6
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/aggregates.py +18 -55
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/asserts.py +4 -6
- sqlalchemy_utils-0.42.0/sqlalchemy_utils/compat.py +12 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/expressions.py +5 -11
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/__init__.py +3 -3
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/database.py +56 -73
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/foreign_keys.py +11 -28
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/mock.py +3 -8
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/orm.py +14 -34
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/sort_query.py +1 -3
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/generic.py +17 -20
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/i18n.py +6 -5
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/listeners.py +8 -26
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/models.py +15 -8
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/observer.py +22 -43
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/operators.py +4 -9
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/path.py +7 -24
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/country.py +3 -5
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/currency.py +2 -4
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/ltree.py +10 -17
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/weekday.py +3 -12
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/weekdays.py +2 -7
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/proxy_dict.py +1 -3
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/query_chain.py +3 -1
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/relationships/__init__.py +13 -35
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/relationships/chained_join.py +4 -14
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/__init__.py +5 -4
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/arrow.py +4 -9
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/bit.py +1 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/choice.py +4 -18
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/color.py +2 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/country.py +2 -1
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/currency.py +1 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/email.py +1 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/encrypted/encrypted_type.py +19 -35
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/encrypted/padding.py +13 -9
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/arrow_datetime.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/enriched_date_type.py +1 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/enriched_datetime_type.py +1 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/pendulum_datetime.py +7 -13
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/json.py +4 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/locale.py +1 -3
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/ltree.py +6 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/password.py +4 -17
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/pg_composite.py +23 -57
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/phone_number.py +5 -5
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/range.py +22 -26
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/scalar_list.py +5 -9
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/timezone.py +6 -18
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/ts_vector.py +2 -3
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/uuid.py +5 -10
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/utils.py +2 -4
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/view.py +13 -41
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0/tests}/conftest.py +24 -39
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_cast_if.py +2 -7
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_type.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_json_sql.py +2 -3
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_jsonb_sql.py +2 -3
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_make_order_by_deterministic.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_render.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/relationships/test_select_correlated_expression.py +8 -10
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_expressions.py +3 -3
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_models.py +7 -5
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_views.py +12 -17
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_arrow.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_choice.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_color.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_composite.py +1 -6
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_country.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_currency.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_date_range.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_datetime_range.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_email.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_encrypted.py +3 -15
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_enriched_date_pendulum.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_enriched_datetime_arrow.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_enriched_datetime_pendulum.py +9 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_int_range.py +2 -3
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_ip_address.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_json.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_locale.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_ltree.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_numeric_range.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_password.py +5 -22
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_phonenumber.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_scalar_list.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_timezone.py +2 -6
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_url.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_uuid.py +1 -2
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/test_weekdays.py +1 -2
- SQLAlchemy-Utils-0.41.2/.isort.cfg +0 -6
- SQLAlchemy-Utils-0.41.2/SQLAlchemy_Utils.egg-info/not-zip-safe +0 -1
- SQLAlchemy-Utils-0.41.2/docs/Makefile +0 -153
- SQLAlchemy-Utils-0.41.2/docs/conf.py +0 -246
- SQLAlchemy-Utils-0.41.2/docs/database_helpers.rst +0 -53
- SQLAlchemy-Utils-0.41.2/docs/foreign_key_helpers.rst +0 -40
- SQLAlchemy-Utils-0.41.2/docs/make.bat +0 -190
- SQLAlchemy-Utils-0.41.2/docs/models.rst +0 -18
- SQLAlchemy-Utils-0.41.2/docs/orm_helpers.rst +0 -124
- SQLAlchemy-Utils-0.41.2/docs/view.rst +0 -22
- SQLAlchemy-Utils-0.41.2/setup.cfg +0 -15
- SQLAlchemy-Utils-0.41.2/setup.py +0 -98
- SQLAlchemy-Utils-0.41.2/sqlalchemy_utils/compat.py +0 -86
- SQLAlchemy-Utils-0.41.2/tests/test_compat.py +0 -20
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/LICENSE +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/README.rst +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/SQLAlchemy_Utils.egg-info/dependency_links.txt +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/SQLAlchemy_Utils.egg-info/top_level.txt +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/aggregates.rst +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/generic_relationship.rst +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/index.rst +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/internationalization.rst +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/license.rst +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/listeners.rst +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/observers.rst +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/testing.rst +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/docs/utility_classes.rst +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/exceptions.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/functions/render.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/primitives/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/encrypted/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/enriched_datetime/pendulum_date.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/ip_address.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/scalar_coercible.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/url.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/sqlalchemy_utils/types/weekdays.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_backrefs.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_custom_select_expressions.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_join_table_inheritance.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_m2m.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_m2m_m2m.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_multiple_aggregates_per_class.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_o2m_m2m.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_o2m_o2m.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_o2m_o2m_o2m.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_search_vectors.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_simple_paths.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_with_column_alias.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/aggregate/test_with_ondelete_cascade.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_database.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_dependent_objects.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_escape_like.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_bind.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_class_by_table.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_column_key.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_columns.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_hybrid_properties.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_mapper.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_primary_keys.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_referencing_foreign_keys.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_get_tables.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_getdotattr.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_has_changes.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_has_index.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_has_unique_index.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_identity.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_is_loaded.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_merge_references.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_naturally_equivalent.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_non_indexed_foreign_keys.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_quote.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/functions/test_table_name.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/test_abstract_base_class.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/test_column_aliases.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/test_composite_keys.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/test_hybrid_properties.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/generic_relationship/test_single_table_inheritance.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/mixins.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_column_property.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_dynamic_relationship.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_m2m_m2m_m2m.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_o2m_o2m_o2m.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_o2m_o2o_o2m.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_o2o_o2o.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/observes/test_o2o_o2o_o2o.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/primitives/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/primitives/test_country.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/primitives/test_currency.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/primitives/test_ltree.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/primitives/test_weekdays.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/relationships/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/relationships/test_chained_join.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_asserts.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_auto_delete_orphans.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_case_insensitive_comparator.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_instant_defaults_listener.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_instrumented_list.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_path.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_proxy_dict.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_query_chain.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/test_translation_hybrid.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/__init__.py +0 -0
- {SQLAlchemy-Utils-0.41.2 → sqlalchemy_utils-0.42.0}/tests/types/encrypted/test_padding.py +0 -0
- {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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,29 +1,26 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: SQLAlchemy-Utils
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.42.0
|
|
4
4
|
Summary: Various utility functions for SQLAlchemy.
|
|
5
|
-
|
|
6
|
-
Author: Konsta Vesterinen
|
|
7
|
-
|
|
8
|
-
|
|
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.
|
|
20
|
+
Requires-Python: >=3.9
|
|
21
|
+
Description-Content-Type: text/x-rst
|
|
24
22
|
License-File: LICENSE
|
|
25
|
-
Requires-Dist: SQLAlchemy>=1.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
90
|
-
Requires-Dist:
|
|
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
|
-
|
|
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
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: SQLAlchemy-Utils
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.42.0
|
|
4
4
|
Summary: Various utility functions for SQLAlchemy.
|
|
5
|
-
|
|
6
|
-
Author: Konsta Vesterinen
|
|
7
|
-
|
|
8
|
-
|
|
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.
|
|
20
|
+
Requires-Python: >=3.9
|
|
21
|
+
Description-Content-Type: text/x-rst
|
|
24
22
|
License-File: LICENSE
|
|
25
|
-
Requires-Dist: SQLAlchemy>=1.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
90
|
-
Requires-Dist:
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
52
|
-
Jinja2>=2.3
|
|
45
|
+
pytest==7.4.4
|
|
53
46
|
Pygments>=1.2
|
|
54
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
75
|
-
|
|
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
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
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
|