Grammar¶
Query grammar definition.
-
class
cumin.grammar.
Backend
(keyword, name, cls)¶ Bases:
tuple
collections.namedtuple()
that define a Backend object.Keyword Arguments: -
cls
¶ See the Keyword Arguments description.
-
keyword
¶ See the Keyword Arguments description.
-
name
¶ See the Keyword Arguments description.
-
-
cumin.grammar.
get_registered_backends
(external=())[source]¶ Get a mapping of all the registered backends with their keyword.
Parameters: external (list, tuple, optional) -- external backend modules to register. Returns: A dictionary with a {keyword: Backend object}
mapping for each available backend.Return type: dict Raises: cumin.CuminError
-- If unable to register a backend.
-
cumin.grammar.
grammar
(backend_keys)[source]¶ Define the main multi-query grammar.
Cumin provides a user-friendly generic query language that allows to combine the results of subqueries for multiple backends:
- Each query part can be composed with the others using boolean operators
and
,or
,and not
,xor
. - Multiple query parts can be grouped together with parentheses
(
,)
. - Specific backend query
I{backend-specific query syntax}
, whereI
is an identifier for the specific backend. - Alias replacement, according to aliases defined in the configuration file
A:group1
. - The identifier
A
is reserved for the aliases replacement and cannot be used to identify a backend. - A complex query example:
(D{host1 or host2} and (P{R:Class = Role::MyClass} and not A:group1)) or D{host3}
Backus-Naur form (BNF) of the grammar:
<grammar> ::= <item> | <item> <boolean> <grammar> <item> ::= <backend_query> | <alias> | "(" <grammar> ")" <backend_query> ::= <backend> "{" <query> "}" <alias> ::= A:<alias_name> <boolean> ::= "and not" | "and" | "xor" | "or"
Given that the pyparsing library defines the grammar in a BNF-like style, for the details of the tokens not specified above check directly the source code.
Parameters: backend_keys (list) -- list of the GRAMMAR_PREFIX for each registered backend. Returns: the grammar parser. Return type: pyparsing.ParserElement - Each query part can be composed with the others using boolean operators