Skip to content

Commit ddfbf2c

Browse files
[fl] feat: add support for writing dashboard sources
Change-Id: I93d8ff2fd8d8da7b1e70692f39c8ae4a39f4d3a2
1 parent 86e6d34 commit ddfbf2c

File tree

10 files changed

+532
-137
lines changed

10 files changed

+532
-137
lines changed

docs/get-started/quickstart.md

Lines changed: 70 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ creative_map.save('creative_map')
5454
/// tab | curl
5555
```bash
5656
curl -X 'POST' \
57-
'http://127.0.0.1:8000/creative_maps/generate:googleads' \
57+
'http://127.0.0.1:8000/filonov/creative_map/googleads' \
5858
-H 'accept: application/json' \
5959
-H 'Content-Type: application/json' \
6060
-d '{
@@ -118,7 +118,7 @@ creative_map.save('creative_map')
118118
/// tab | curl
119119
```bash hl_lines="10"
120120
curl -X 'POST' \
121-
'http://127.0.0.1:8000/creative_maps/generate:googleads' \
121+
'http://127.0.0.1:8000/filonov/creative_map/googleads' \
122122
-H 'accept: application/json' \
123123
-H 'Content-Type: application/json' \
124124
-d '{
@@ -174,7 +174,7 @@ creative_map.save('creative_map')
174174
/// tab | curl
175175
```bash hl_lines="8-10"
176176
curl -X 'POST' \
177-
'http://127.0.0.1:8000/creative_maps/generate:googleads' \
177+
'http://127.0.0.1:8000/filonov/creative_map/googleads' \
178178
-H 'accept: application/json' \
179179
-H 'Content-Type: application/json' \
180180
-d '{
@@ -231,7 +231,7 @@ creative_map.save('creative_map')
231231
/// tab | curl
232232
```bash hl_lines="8-10"
233233
curl -X 'POST' \
234-
'http://127.0.0.1:8000/creative_maps/generate:googleads' \
234+
'http://127.0.0.1:8000/filonov/creative_map/googleads' \
235235
-H 'accept: application/json' \
236236
-H 'Content-Type: application/json' \
237237
-d '{
@@ -294,7 +294,7 @@ creative_map.save('creative_map')
294294
Expose `MEDIA_TAGGING_DB_URL` environmental variable and restart service.
295295
```bash
296296
curl -X 'POST' \
297-
'http://127.0.0.1:8000/creative_maps/generate:googleads' \
297+
'http://127.0.0.1:8000/filonov/creative_map/googleads' \
298298
-H 'accept: application/json' \
299299
-H 'Content-Type: application/json' \
300300
-d '{
@@ -344,7 +344,7 @@ creative_map.save('creative_map')
344344
/// tab | curl
345345
```bash hl_lines="11"
346346
curl -X 'POST' \
347-
'http://127.0.0.1:8000/creative_maps/generate:googleads' \
347+
'http://127.0.0.1:8000/filonov/creative_map/googleads' \
348348
-H 'accept: application/json' \
349349
-H 'Content-Type: application/json' \
350350
-d '{
@@ -360,7 +360,68 @@ curl -X 'POST' \
360360

361361
### Output
362362

363-
By default the results are saved into `creative_map.json` file in the current folder.
363+
By default the after running `filonov` you get a JSON file (`creative_map.json`) that contains all necessary information to visualize the results.
364+
365+
366+
#### Dashboardgenerate:
367+
368+
/// tab | cli
369+
```bash hl_lines="4-5"
370+
filonov --source googleads --media-type IMAGE \
371+
--tagger gemini \
372+
--googleads.account=GOOGLE_ADS_ACCOUNT_ID \
373+
--output dashboard --writer bq \
374+
--bq.project=BQ_PROJECT --bq.dataset=BQ_DATASETgenerate:
375+
```
376+
///
377+
378+
/// tab | python
379+
380+
```python hl_lines="10-20"
381+
import filonov
382+
383+
service = filonov.FilonovService()
384+
385+
request = filonov.CreativeMapGenerateRequest(
386+
source='googleads',
387+
media_type='IMAGE',
388+
tagger='gemini',
389+
source_parameters={'account': 'GOOGLE_ADS_ACCOUNT_ID'},
390+
output_parameters={'output': 'dashboard'},
391+
)
392+
393+
service.generate_dashboard(
394+
request,
395+
writer='bq',
396+
writer_parameters={
397+
'project': 'BQ_PROJECT',
398+
'dataset': 'BQ_DATASET'
399+
}
400+
)
401+
402+
```
403+
///
404+
405+
/// tab | curl
406+
```bash hl_lines="11-13"
407+
curl -X 'POST' \
408+
'http://127.0.0.1:8000/filonov/creative_map/googleads' \
409+
-H 'accept: application/json' \
410+
-H 'Content-Type: application/json' \
411+
-d '{
412+
"media_type": "IMAGE",
413+
"tagger": "gemini",
414+
"source_parameters": {
415+
"account": "GOOGLE_ADS_ACCOUNT_ID"
416+
},
417+
"output_parameters": {
418+
"output": "dashboard"
419+
}
420+
}'
421+
```
422+
///
423+
424+
#### Map
364425

365426
You can overwrite it with `output-name` option.
366427

@@ -401,7 +462,7 @@ creative_map.save('creative_map')
401462
/// tab | curl
402463
```bash hl_lines="11-13"
403464
curl -X 'POST' \
404-
'http://127.0.0.1:8000/creative_maps/generate:googleads' \
465+
'http://127.0.0.1:8000/filonov/creative_map/googleads' \
405466
-H 'accept: application/json' \
406467
-H 'Content-Type: application/json' \
407468
-d '{
@@ -464,7 +525,7 @@ creative_map.save('creative_map')
464525
/// tab | curl
465526
```bash hl_lines="11"
466527
curl -X 'POST' \
467-
'http://127.0.0.1:8000/creative_maps/generate:googleads' \
528+
'http://127.0.0.1:8000/filonov/creative_map/googleads' \
468529
-H 'accept: application/json' \
469530
-H 'Content-Type: application/json' \
470531
-d '{

libs/filonov/filonov/__init__.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,17 @@
2020
"""
2121

2222
from filonov.creative_map import CreativeMap
23-
from filonov.filonov_service import CreativeMapGenerateRequest, FilonovService
23+
from filonov.filonov_service import (
24+
FilonovService,
25+
GenerateCreativeMapRequest,
26+
GenerateDashboardRequest,
27+
)
2428

2529
__all__ = [
2630
'FilonovService',
27-
'CreativeMapGenerateRequest',
31+
'GenerateCreativeMapRequest',
32+
'GenerateDashboardRequest',
2833
'CreativeMap',
2934
]
3035

31-
__version__ = '0.9.0'
36+
__version__ = '0.10.0'

libs/filonov/filonov/entrypoints/cli.py

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,18 @@ def main(
7171
case_sensitive=False,
7272
),
7373
] = None,
74+
output: Annotated[
75+
str,
76+
typer.Option(
77+
help='Type of output',
78+
),
79+
] = 'map',
80+
writer: Annotated[
81+
str,
82+
typer.Option(
83+
help='Type of writer',
84+
),
85+
] = 'csv',
7486
output_name: Annotated[
7587
str,
7688
typer.Option(
@@ -143,7 +155,7 @@ def main(
143155
media_fetching.enrichers.enricher.AVAILABLE_MODULES.keys()
144156
)
145157
parsed_param_keys = set(
146-
[source, 'tagger', 'similarity'] + list(supported_enrichers)
158+
[source, 'tagger', 'similarity', writer] + list(supported_enrichers)
147159
)
148160
extra_parameters = garf_utils.ParamsParser(parsed_param_keys).parse(ctx.args)
149161
fetching_service = media_fetching.MediaFetchingService.from_source_alias(
@@ -179,33 +191,44 @@ def main(
179191
if source == 'youtube':
180192
media_type = 'YOUTUBE_VIDEO'
181193
tagger = 'gemini'
182-
request = filonov.CreativeMapGenerateRequest(
183-
source=source,
184-
media_type=media_type,
185-
tagger=tagger,
186-
tagger_parameters=extra_parameters.get('tagger'),
187-
similarity_parameters=extra_parameters.get('similarity'),
188-
source_parameters=extra_parameters.get(source),
189-
output_parameters=filonov.filonov_service.OutputParameters(
190-
output_name=output_name
191-
),
192-
parallel_threshold=parallel_threshold,
193-
trim_tags_threshold=trim_tags_threshold,
194-
embed_previews=embed_previews,
195-
omit_series=omit_series,
196-
context=extra_parameters,
197-
)
198-
span.set_attribute(
199-
'filonov.cli.command', utils.build_cli_command(request, db_uri)
200-
)
194+
params = {
195+
'source': source,
196+
'media_type': media_type,
197+
'tagger': tagger,
198+
'tagger_parameters': extra_parameters.get('tagger'),
199+
'similarity_parameters': extra_parameters.get('similarity'),
200+
'source_parameters': extra_parameters.get(source),
201+
'parallel_threshold': parallel_threshold,
202+
'trim_tags_threshold': trim_tags_threshold,
203+
'context': extra_parameters,
204+
}
201205
filonov_service = filonov.FilonovService(
202206
fetching_service, tagging_service, similarity_service
203207
)
204-
generated_map = filonov_service.generate_creative_map(request)
205-
destination = utils.build_creative_map_destination(
206-
request.output_parameters.output_name
208+
if output == 'dashboard':
209+
request = filonov.GenerateDashboardRequest(
210+
**params,
211+
writer=writer,
212+
writer_parameters=extra_parameters.get(writer, {}),
213+
)
214+
filonov_service.generate_dashboard(request)
215+
else:
216+
request = filonov.GenerateCreativeMapRequest(
217+
**params,
218+
output_parameters=filonov.filonov_service.OutputParameters(
219+
output_name=output_name
220+
),
221+
embed_previews=embed_previews,
222+
omit_series=omit_series,
223+
)
224+
generated_map = filonov_service.generate_creative_map(request)
225+
destination = utils.build_creative_map_destination(
226+
request.output_parameters.output_name
227+
)
228+
generated_map.save(destination)
229+
span.set_attribute(
230+
'filonov.cli.command', utils.build_cli_command(request, db_uri)
207231
)
208-
generated_map.save(destination)
209232

210233

211234
if __name__ == '__main__':

0 commit comments

Comments
 (0)