Source code for tests.test_int_type

import collections
import importlib
import pkgutil
import unittest

from troposphere import AWSObject


[docs]class TestIntTypeShouldNotBeUsed(unittest.TestCase):
[docs] def test_there_should_not_be_any_awsobject_with_int_in_props(self): """ Anything that requires an integer should use `validators.integer` rather than `int`, because `int` does not work with types that behave like an integer (i.e. `long` in Python 2). """ aws_objects = self.get_aws_objects() for obj in aws_objects: self.assertNoIntType(obj)
[docs] def get_aws_objects(self): result = [] modules = self._import_all_modules() for module in modules: for name in dir(module): obj = getattr(module, name) if ( isinstance(obj, type) and obj != AWSObject and issubclass(obj, AWSObject) ): result.append(obj) return result
[docs] def assertNoIntType(self, obj): for prop_name, (types, required) in obj.props.items(): error_msg = ( "{}.props['{}'] should have `validators.integer` " "rather than `int`".format(obj.__name__, prop_name) ) if isinstance(types, collections.abc.Iterable): assert int not in types, error_msg else: assert types != int, error_msg
def _get_all_troposphere_modules(self, dirname): return [ pkg_name for importer, pkg_name, is_pkg in pkgutil.walk_packages([dirname]) if not is_pkg and pkg_name.startswith("troposphere") ] def _import_all_modules(self): module_names = self._get_all_troposphere_modules(".") return [importlib.import_module(m) for m in module_names]