citext.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import warnings
  2. from django.db.models import CharField, EmailField, TextField
  3. from django.test.utils import ignore_warnings
  4. from django.utils.deprecation import RemovedInDjango51Warning
  5. __all__ = ["CICharField", "CIEmailField", "CIText", "CITextField"]
  6. # RemovedInDjango51Warning.
  7. class CIText:
  8. def __init__(self, *args, **kwargs):
  9. warnings.warn(
  10. "django.contrib.postgres.fields.CIText mixin is deprecated.",
  11. RemovedInDjango51Warning,
  12. stacklevel=2,
  13. )
  14. super().__init__(*args, **kwargs)
  15. def get_internal_type(self):
  16. return "CI" + super().get_internal_type()
  17. def db_type(self, connection):
  18. return "citext"
  19. class CICharField(CIText, CharField):
  20. system_check_deprecated_details = {
  21. "msg": (
  22. "django.contrib.postgres.fields.CICharField is deprecated. Support for it "
  23. "(except in historical migrations) will be removed in Django 5.1."
  24. ),
  25. "hint": (
  26. 'Use CharField(db_collation="…") with a case-insensitive non-deterministic '
  27. "collation instead."
  28. ),
  29. "id": "fields.W905",
  30. }
  31. def __init__(self, *args, **kwargs):
  32. with ignore_warnings(category=RemovedInDjango51Warning):
  33. super().__init__(*args, **kwargs)
  34. class CIEmailField(CIText, EmailField):
  35. system_check_deprecated_details = {
  36. "msg": (
  37. "django.contrib.postgres.fields.CIEmailField is deprecated. Support for it "
  38. "(except in historical migrations) will be removed in Django 5.1."
  39. ),
  40. "hint": (
  41. 'Use EmailField(db_collation="…") with a case-insensitive '
  42. "non-deterministic collation instead."
  43. ),
  44. "id": "fields.W906",
  45. }
  46. def __init__(self, *args, **kwargs):
  47. with ignore_warnings(category=RemovedInDjango51Warning):
  48. super().__init__(*args, **kwargs)
  49. class CITextField(CIText, TextField):
  50. system_check_deprecated_details = {
  51. "msg": (
  52. "django.contrib.postgres.fields.CITextField is deprecated. Support for it "
  53. "(except in historical migrations) will be removed in Django 5.1."
  54. ),
  55. "hint": (
  56. 'Use TextField(db_collation="…") with a case-insensitive non-deterministic '
  57. "collation instead."
  58. ),
  59. "id": "fields.W907",
  60. }
  61. def __init__(self, *args, **kwargs):
  62. with ignore_warnings(category=RemovedInDjango51Warning):
  63. super().__init__(*args, **kwargs)