Traces
parse-json
| project "elements"
| extend "label"="pen.label"
| mv-expand "points"
| extend "x"="points.x", "y"="points.y"
| project "label", "x", "y"
| pivot sum("y"), "x", "label"
| project "label", "x", "y"
Source code in src/trendify/server.py
| @app.route('/data_products/<analysis>/<tag>')
@app.route('/data_products/<analysis>/<tag>/')
@app.route('/data_products/<analysis>/<tag>/<product_type>')
@app.route('/data_products/<analysis>/<tag>/<product_type>/')
def get_data_products(
analysis: str = 'workdir.products',
tag: str = 'trace_plots',
product_type: str = 'DataProduct',
):
"""
Example: Traces
parse-json
| project "elements"
| extend "label"="pen.label"
| mv-expand "points"
| extend "x"="points.x", "y"="points.y"
| project "label", "x", "y"
| pivot sum("y"), "x", "label"
| project "label", "x", "y"
"""
FAILED_RETURN_VALUE = None
query_return = FAILED_RETURN_VALUE
product_type = str(product_type)
match product_type:
case DataProduct.__name__:
filter_type = DataProduct
case XYData.__name__:
filter_type = XYData
case Trace2D.__name__:
filter_type = Trace2D
case Point2D.__name__:
filter_type = Point2D
case TableEntry.__name__:
filter_type = TableEntry
case HistogramEntry.__name__:
filter_type = HistogramEntry
case _:
query_return = f'{product_type = } should be in {valid_types_names_list}'
return query_return
try:
analysis = str(analysis)
analysis_path_components = analysis.split('.') if '.' in analysis else [analysis]
tag = str(tag)
tag_path_components = tag.split('.') if '.' in tag else [tag]
collection_path_components = analysis_path_components + tag_path_components
data_dir = DATABASE_ROOT.joinpath(*tuple(analysis_path_components))
collection_dir = data_dir.joinpath(*tuple(tag_path_components))
assert not any(('.' in x) for x in collection_path_components)
assert collection_dir.is_relative_to(data_dir)
except AssertionError:
query_return = f'Do not try to access stuff outside of {data_dir = }'
print(f'Do not try to access stuff outside of {data_dir = }')
return query_return
data: DataProductCollection = DataProductCollection.collect_from_all_jsons(collection_dir)
if data is None:
return f'Did not find data product jsons in {collection_dir}'
formatted_tag = (
tag_path_components[0]
if len(tag_path_components) == 1
else tuple(tag_path_components)
)
filtered_data = data.get_products(
tag=formatted_tag,
object_type=filter_type,
)
query_return = filtered_data.model_dump_json()
return query_return
|