requirements.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. from alembic import util
  2. from . import exclusions
  3. if util.sqla_094:
  4. from sqlalchemy.testing.requirements import Requirements
  5. else:
  6. class Requirements(object):
  7. pass
  8. class SuiteRequirements(Requirements):
  9. @property
  10. def schemas(self):
  11. """Target database must support external schemas, and have one
  12. named 'test_schema'."""
  13. return exclusions.open()
  14. @property
  15. def unique_constraint_reflection(self):
  16. def doesnt_have_check_uq_constraints(config):
  17. if not util.sqla_084:
  18. return True
  19. from sqlalchemy import inspect
  20. insp = inspect(config.db)
  21. try:
  22. insp.get_unique_constraints('x')
  23. except NotImplementedError:
  24. return True
  25. except TypeError:
  26. return True
  27. except Exception:
  28. pass
  29. return False
  30. return exclusions.skip_if(
  31. lambda config: not util.sqla_084,
  32. "SQLAlchemy 0.8.4 or greater required"
  33. ) + exclusions.skip_if(doesnt_have_check_uq_constraints)
  34. @property
  35. def foreign_key_match(self):
  36. return exclusions.fails_if(
  37. lambda config: not util.sqla_08,
  38. "MATCH for foreign keys added in SQLAlchemy 0.8.0"
  39. )
  40. @property
  41. def check_constraints_w_enforcement(self):
  42. """Target database must support check constraints
  43. and also enforce them."""
  44. return exclusions.open()
  45. @property
  46. def reflects_pk_names(self):
  47. return exclusions.closed()
  48. @property
  49. def reflects_fk_options(self):
  50. return exclusions.closed()
  51. @property
  52. def fail_before_sqla_079(self):
  53. return exclusions.fails_if(
  54. lambda config: not util.sqla_079,
  55. "SQLAlchemy 0.7.9 or greater required"
  56. )
  57. @property
  58. def fail_before_sqla_080(self):
  59. return exclusions.fails_if(
  60. lambda config: not util.sqla_08,
  61. "SQLAlchemy 0.8.0 or greater required"
  62. )
  63. @property
  64. def fail_before_sqla_083(self):
  65. return exclusions.fails_if(
  66. lambda config: not util.sqla_083,
  67. "SQLAlchemy 0.8.3 or greater required"
  68. )
  69. @property
  70. def fail_before_sqla_084(self):
  71. return exclusions.fails_if(
  72. lambda config: not util.sqla_084,
  73. "SQLAlchemy 0.8.4 or greater required"
  74. )
  75. @property
  76. def fail_before_sqla_09(self):
  77. return exclusions.fails_if(
  78. lambda config: not util.sqla_09,
  79. "SQLAlchemy 0.9.0 or greater required"
  80. )
  81. @property
  82. def fail_before_sqla_100(self):
  83. return exclusions.fails_if(
  84. lambda config: not util.sqla_100,
  85. "SQLAlchemy 1.0.0 or greater required"
  86. )
  87. @property
  88. def fail_before_sqla_099(self):
  89. return exclusions.fails_if(
  90. lambda config: not util.sqla_099,
  91. "SQLAlchemy 0.9.9 or greater required"
  92. )
  93. @property
  94. def fail_before_sqla_110(self):
  95. return exclusions.fails_if(
  96. lambda config: not util.sqla_110,
  97. "SQLAlchemy 1.1.0 or greater required"
  98. )
  99. @property
  100. def sqlalchemy_08(self):
  101. return exclusions.skip_if(
  102. lambda config: not util.sqla_08,
  103. "SQLAlchemy 0.8.0b2 or greater required"
  104. )
  105. @property
  106. def sqlalchemy_09(self):
  107. return exclusions.skip_if(
  108. lambda config: not util.sqla_09,
  109. "SQLAlchemy 0.9.0 or greater required"
  110. )
  111. @property
  112. def sqlalchemy_092(self):
  113. return exclusions.skip_if(
  114. lambda config: not util.sqla_092,
  115. "SQLAlchemy 0.9.2 or greater required"
  116. )
  117. @property
  118. def sqlalchemy_094(self):
  119. return exclusions.skip_if(
  120. lambda config: not util.sqla_094,
  121. "SQLAlchemy 0.9.4 or greater required"
  122. )
  123. @property
  124. def sqlalchemy_110(self):
  125. return exclusions.skip_if(
  126. lambda config: not util.sqla_110,
  127. "SQLAlchemy 1.1.0 or greater required"
  128. )