mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-05-06 17:01:07 -04:00
ef04a40110
hash_limit_string works by doing a modulus of a hash value so that the range of possible numbers is 0-N. however, there's a chance we might not populate every 0-N value in unusual cases on CI, even after iterating 500 times apparently. Loosen the change by making sure we got at least N/2 unique hash messages but not greater than N. Change-Id: I5cd2845697ec0a718ddca1c95fbc4867b06eabee
83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
from sqlalchemy import testing
|
|
from sqlalchemy.exc import SADeprecationWarning
|
|
from sqlalchemy.testing import eq_
|
|
from sqlalchemy.testing import expect_deprecated
|
|
from sqlalchemy.testing import fixtures
|
|
from sqlalchemy.util.deprecations import _decorate_cls_with_warning
|
|
from sqlalchemy.util.deprecations import warn_deprecated_limited
|
|
from sqlalchemy.util.langhelpers import _hash_limit_string
|
|
|
|
|
|
class WarnDeprecatedLimitedTest(fixtures.TestBase):
|
|
__backend__ = False
|
|
|
|
def test_warn_deprecated_limited_text(self):
|
|
with expect_deprecated("foo has been deprecated"):
|
|
warn_deprecated_limited(
|
|
"%s has been deprecated [%d]", ("foo", 1), "1.3"
|
|
)
|
|
|
|
def test_warn_deprecated_limited_cap(self):
|
|
"""warn_deprecated_limited() and warn_limited() use
|
|
_hash_limit_string
|
|
|
|
actually just verifying that _hash_limit_string works as expected
|
|
"""
|
|
occurrences = 500
|
|
cap = 10
|
|
|
|
printouts = set()
|
|
messages = set()
|
|
for i in range(occurrences):
|
|
message = _hash_limit_string(
|
|
"this is a unique message: %d", cap, (i,)
|
|
)
|
|
printouts.add(str(message))
|
|
messages.add(message)
|
|
|
|
eq_(len(printouts), occurrences)
|
|
assert cap / 2 < len(messages) <= cap
|
|
|
|
|
|
class ClsWarningTest(fixtures.TestBase):
|
|
@testing.fixture
|
|
def dep_cls_fixture(self):
|
|
class Connectable:
|
|
"""a docstring"""
|
|
|
|
some_member = "foo"
|
|
|
|
Connectable = _decorate_cls_with_warning(
|
|
Connectable,
|
|
None,
|
|
SADeprecationWarning,
|
|
"a message",
|
|
"2.0",
|
|
"another message",
|
|
)
|
|
|
|
return Connectable
|
|
|
|
def test_dep_inspectable(self, dep_cls_fixture):
|
|
"""test #8115"""
|
|
|
|
import inspect
|
|
|
|
class PlainClass:
|
|
some_member = "bar"
|
|
|
|
pc_keys = dict(inspect.getmembers(PlainClass()))
|
|
insp_keys = dict(inspect.getmembers(dep_cls_fixture()))
|
|
|
|
assert set(insp_keys).intersection(
|
|
(
|
|
"__class__",
|
|
"__doc__",
|
|
"__eq__",
|
|
"__dict__",
|
|
"__weakref__",
|
|
"some_member",
|
|
)
|
|
)
|
|
eq_(set(pc_keys), set(insp_keys))
|