Skip to content

Commit 656d92c

Browse files
[executors] feat: add support for building context via CLI
Add end-to-end tests
1 parent 0d62528 commit 656d92c

File tree

3 files changed

+40
-26
lines changed

3 files changed

+40
-26
lines changed

libs/executors/garf_executors/entrypoints/cli.py

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@
2525
from garf_io import reader
2626

2727
import garf_executors
28-
from garf_executors import exceptions
28+
from garf_executors import config, exceptions
2929
from garf_executors.entrypoints import utils
3030

3131

3232
def main():
3333
parser = argparse.ArgumentParser()
3434
parser.add_argument('query', nargs='*')
35-
parser.add_argument('-c', '--config', dest='garf_config', default=None)
35+
parser.add_argument('-c', '--config', dest='config', default=None)
3636
parser.add_argument('--source', dest='source', default=None)
3737
parser.add_argument('--output', dest='output', default='console')
3838
parser.add_argument('--input', dest='input', default='file')
@@ -64,34 +64,39 @@ def main():
6464
raise exceptions.GarfExecutorError(
6565
'Please provide one or more queries to run'
6666
)
67-
config = utils.ConfigBuilder('garf').build(vars(args), kwargs)
68-
logger.debug('config: %s', config)
69-
70-
if config.params:
71-
config = utils.initialize_runtime_parameters(config)
72-
logger.debug('initialized config: %s', config)
73-
74-
extra_parameters = utils.ParamsParser(['source']).parse(kwargs)
75-
source_parameters = extra_parameters.get('source', {})
7667
reader_client = reader.create_reader(args.input)
77-
78-
context = garf_executors.api_executor.ApiExecutionContext(
79-
query_parameters=config.params,
80-
writer=args.output,
81-
writer_parameters=config.writer_params,
82-
fetcher_parameters=source_parameters,
83-
)
84-
query_executor = garf_executors.setup_executor(
85-
args.source, context.fetcher_parameters
86-
)
87-
if args.parallel_queries:
88-
logger.info('Running queries in parallel')
68+
if config_file := args.config:
69+
execution_config = config.Config.from_file(config_file)
70+
if not (context := execution_config.sources.get(args.source)):
71+
raise exceptions.GarfExecutorError('Missing context')
72+
query_executor = garf_executors.setup_executor(
73+
args.source, context.fetcher_parameters
74+
)
8975
batch = {query: reader_client.read(query) for query in args.query}
9076
query_executor.execute_batch(batch, context, args.parallel_queries)
9177
else:
92-
logger.info('Running queries sequentially')
93-
for query in args.query:
94-
query_executor.execute(reader_client.read(query), query, context)
78+
extra_parameters = utils.ParamsParser(
79+
['source', args.writer, 'macro', 'template']
80+
).parse(kwargs)
81+
source_parameters = extra_parameters.get('source', {})
82+
83+
context = garf_executors.api_executor.ApiExecutionContext(
84+
query_parameters=config.params,
85+
writer=args.output,
86+
writer_parameters=config.writer_params,
87+
fetcher_parameters=source_parameters,
88+
)
89+
query_executor = garf_executors.setup_executor(
90+
args.source, context.fetcher_parameters
91+
)
92+
if args.parallel_queries:
93+
logger.info('Running queries in parallel')
94+
batch = {query: reader_client.read(query) for query in args.query}
95+
query_executor.execute_batch(batch, context, args.parallel_queries)
96+
else:
97+
logger.info('Running queries sequentially')
98+
for query in args.query:
99+
query_executor.execute(reader_client.read(query), query, context)
95100

96101

97102
if __name__ == '__main__':
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
fake:
2+
writer: console
3+
fetcher_parameters:
4+
data_location: ./test.json
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
SELECT
2+
resource,
3+
dimensions.name AS name,
4+
metrics.clicks AS clicks
5+
FROM resource

0 commit comments

Comments
 (0)