forked from couchbase/couchbase-python-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
importer.py
121 lines (94 loc) · 3.09 KB
/
importer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#
# Copyright 2013, Couchbase, Inc.
# All Rights Reserved
#
# Licensed under the Apache License, Version 2.0 (the "License")
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""
File which contains all the test cases.
This should be loaded after all the pre-test configuration has
been done.
"""
from __future__ import print_function
import os
import os.path
import pkgutil
from couchbase_tests import caseslist
testmods = []
testclasses = []
def get_imps(*caseslist):
our_imps = []
for cases in caseslist:
for module_finder, name, ispkg in pkgutil.walk_packages([os.path.dirname(cases.__file__)],
prefix=cases.__name__ + "."):
if name.startswith('__init__'):
continue
if not ispkg:
our_imps.append(name)
return our_imps
imps = get_imps(*caseslist)
def _get_packages():
"""
Returns a dictionary of { name: module_object } for all cases
"""
ret = {}
for modname in imps:
# print(repr(modname))
try:
module = __import__(modname, fromlist=str.split(modname, '.'))
ret[modname] = module
except Exception as e:
print(e)
pass
return ret
def _get_classes(modules):
"""
Returns an extracted dictionary of { name: test_class } as combined
from all the modules provided
"""
ret = {}
allowed = ["TestAcouchbaseConnection", "QueryStringTests"]
for module in modules:
for attrname in dir(module):
attrobj = getattr(module, attrname)
if not isinstance(attrobj, type):
continue
from couchbase_tests.base import CouchbaseTestCase
if not issubclass(attrobj, CouchbaseTestCase) and attrname not in allowed:
continue
ret[attrname] = attrobj
return ret
def get_configured_classes(implconfig, implstr=None, skiplist=None):
"""
returns a tuple of (module_dict, testcase_dict)
:param implstr: A unique string to be appended to each test case
:param implconfig: An ApiConfigurationMixin to use as the mixin for
the test class.
"""
d_mods = _get_packages()
d_cases = _get_classes(d_mods.values())
ret = {}
if not implstr:
implstr = "_" + implconfig.factory.__name__
if not skiplist:
skiplist = []
for name, case in d_cases.items():
if name in skiplist:
continue
cls = type(name+implstr, (case, implconfig), {})
ret[name+implstr] = cls
return ret
if __name__ == "__main__":
mods, classes = get_all()
for cls in classes.values():
print(cls.__name__)