@@ -148,29 +148,43 @@ class RQLQuery: # noqa: WPS214
148148
149149 def __init__ ( # noqa: WPS211
150150 self ,
151- _field : str | None = None ,
152- * ,
153- _op : str = EXPRESSION ,
154- _children : list ["RQLQuery" ] | set ["RQLQuery" ] | None = None ,
155- _negated : bool = False ,
156- _expr : str | None = None ,
151+ namespace_ : str | None = None , # noqa: WPS120
157152 ** kwargs : QueryValue ,
158153 ) -> None :
159- self .op = _op
160- self .children : list [RQLQuery ] = list ( _children ) if _children else []
161- self .negated = _negated
162- self .expr = _expr
154+ self .op : str = self . EXPRESSION
155+ self .children : list [RQLQuery ] = []
156+ self .negated : bool = False
157+ self .expr : str | None = None
163158 self ._path : list [str ] = []
164159 self ._field : str | None = None
165- if _field :
166- self .n (_field )
160+ if namespace_ :
161+ self .n (namespace_ )
167162 if len (kwargs ) == 1 :
168163 self .op = self .EXPRESSION
169164 self .expr = parse_kwargs (kwargs )[0 ]
170165 if len (kwargs ) > 1 :
171166 self .op = self .AND
172167 for token in parse_kwargs (kwargs ):
173- self .children .append (self .__class__ (_expr = token ))
168+ self .children .append (self .new (expr = token ))
169+
170+ @classmethod
171+ def new (
172+ cls ,
173+ expr : str | None = None ,
174+ * ,
175+ negated : bool = False ,
176+ op : str | None = None ,
177+ children : list ["RQLQuery" ] | set ["RQLQuery" ] | None = None ,
178+ ) -> Self :
179+ """Create a new RQLQuery object from a expression or from a set of op and children."""
180+ if isinstance (children , set ):
181+ children = list (children )
182+ query = cls ()
183+ query .op = op or cls .EXPRESSION
184+ query .children = children or []
185+ query .negated = negated
186+ query .expr = expr
187+ return query
174188
175189 def __len__ (self ) -> int :
176190 if self .op == self .EXPRESSION :
@@ -221,10 +235,10 @@ def __or__(self, other: object) -> Self:
221235 return self ._join (other , self .OR )
222236
223237 def __invert__ (self ) -> Self :
224- inverted_query = self .__class__ (
225- _op = self .AND ,
226- _expr = self .expr ,
227- _negated = True ,
238+ inverted_query = self .new (
239+ op = self .AND ,
240+ expr = self .expr ,
241+ negated = True ,
228242 )
229243 inverted_query ._append (self ) # noqa: SLF001
230244 return inverted_query
@@ -449,10 +463,10 @@ def _to_string(self, query: "RQLQuery") -> str:
449463 return f"{ query .op } ({ str_tokens } )"
450464
451465 def _copy (self , other : "RQLQuery" ) -> Self :
452- return self .__class__ (
453- _op = other .op ,
454- _children = other .children .copy (),
455- _expr = other .expr ,
466+ return self .new (
467+ op = other .op ,
468+ children = other .children .copy (),
469+ expr = other .expr ,
456470 )
457471
458472 def _join (self , other : "RQLQuery" , op : str ) -> Self :
@@ -463,7 +477,7 @@ def _join(self, other: "RQLQuery", op: str) -> Self:
463477 if not self :
464478 return self ._copy (other )
465479
466- query = self .__class__ ( _op = op )
480+ query = self .new ( op = op )
467481 query ._append (self ) # noqa: SLF001
468482 query ._append (other ) # noqa: SLF001
469483 return query
0 commit comments