1
+ import importlib
1
2
import inspect
3
+ import pkgutil
2
4
from .exceptions import CheckError
3
5
4
6
5
7
class Check :
6
8
7
9
NUMERIC_TYPES = (int , float , complex )
10
+ ASSERTIONS_PACKAGE = 'fluentcheck.assertions'
11
+
12
+ def _import_assertion_modules (self ):
13
+ ass = importlib .import_module (Check .ASSERTIONS_PACKAGE )
14
+ assertion_modules = list ()
15
+ for _1 , module_name , _2 in pkgutil .iter_modules (ass .__path__ ):
16
+ assertion_modules .append (importlib .import_module (ass .__name__ + '.' + module_name ))
17
+ return assertion_modules
8
18
9
19
def __new__ (cls , * args , ** kwargs ):
10
- # import assertion functions from submodules
11
- from fluentcheck .assertions import numbers as ass_numb
12
- from fluentcheck .assertions import sequences as ass_seq
13
- from fluentcheck .assertions import strings as ass_str
14
- from fluentcheck .assertions import booleans as ass_bool
15
- from fluentcheck .assertions import dicts as ass_dicts
16
- from fluentcheck .assertions import types as ass_types
17
- from fluentcheck .assertions import geo as ass_geo
18
- from fluentcheck .assertions import uuids as ass_uuids
19
- from fluentcheck .assertions import collections as ass_colls
20
+ # retrieve all modules in assertion package
21
+ assertion_modules = cls ._import_assertion_modules (cls )
22
+ # bind Check object instance with assertion functions from assertion modules
20
23
instance = super (Check , cls ).__new__ (cls )
21
- for module in [ass_numb , ass_seq , ass_str , ass_bool , ass_dicts , ass_types ,
22
- ass_geo , ass_uuids , ass_colls ]:
24
+ for module in assertion_modules :
23
25
for item in inspect .getmembers (module , inspect .isfunction ):
24
26
func_name = item [0 ]
25
27
func = item [1 ]
@@ -34,7 +36,7 @@ def __init__(self, value):
34
36
def value (self ):
35
37
return self ._val
36
38
37
- # Nonethiness
39
+ # Basic checks
38
40
39
41
def is_none (self ):
40
42
try :
0 commit comments