Skip to content

Commit 7ad6e88

Browse files
committed
Abstract _make_dsl_class into utils
1 parent 6a2acef commit 7ad6e88

File tree

2 files changed

+12
-14
lines changed

2 files changed

+12
-14
lines changed

elasticsearch_dsl/query.py

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from six import add_metaclass
22

3-
from .utils import DslMeta, DslBase, BoolMixin
3+
from .utils import DslMeta, DslBase, BoolMixin, _make_dsl_class
44
from .function import SF, ScoreFunction
55

66
class QueryMeta(DslMeta):
@@ -41,7 +41,6 @@ def __add__(self, other):
4141
def __or__(self, other):
4242
return self
4343
__ror__ = __or__
44-
4544
EMPTY_QUERY = MatchAll()
4645

4746
class Bool(BoolMixin, Query):
@@ -51,7 +50,6 @@ class Bool(BoolMixin, Query):
5150
'should': {'type': 'query', 'multi': True},
5251
'must_not': {'type': 'query', 'multi': True},
5352
}
54-
5553
# register this as Bool for Query
5654
Query._bool = Bool
5755

@@ -117,17 +115,8 @@ def __init__(self, **kwargs):
117115
('wildcard', None),
118116
)
119117

120-
def _make_query_class(name, params_def=None):
121-
"""
122-
Generate a query class based on the name of the query and it's parameters
123-
"""
124-
attrs = {'name': name}
125-
if params_def:
126-
attrs['_param_defs'] = params_def
127-
cls_name = ''.join(s.title() for s in name.split('_'))
128-
globals()[cls_name] = type(cls_name, (Query, ), attrs)
129-
130118
# generate the query classes dynamicaly
131119
for qname, params_def in QUERIES:
132-
_make_query_class(qname, params_def)
120+
qclass = _make_dsl_class(Query, qname, params_def)
121+
globals()[qclass.__name__] = qclass
133122

elasticsearch_dsl/utils.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@ def _wrap(val):
1111
return AttrList(val)
1212
return val
1313

14+
def _make_dsl_class(base, name, params_def=None):
15+
"""
16+
Generate a DSL class based on the name of the DSL object and it's parameters
17+
"""
18+
attrs = {'name': name}
19+
if params_def:
20+
attrs['_param_defs'] = params_def
21+
cls_name = ''.join(s.title() for s in name.split('_'))
22+
return type(cls_name, (base, ), attrs)
1423

1524
class AttrList(list):
1625
def __getitem__(self, k):

0 commit comments

Comments
 (0)