Skip to content

Commit

Permalink
Merge branch 'main' into 927-status-page
Browse files Browse the repository at this point in the history
  • Loading branch information
nrozanov committed Mar 19, 2024
2 parents 2b0c2e3 + 27c8b70 commit 9ef1ddb
Show file tree
Hide file tree
Showing 9 changed files with 25 additions and 17 deletions.
1 change: 1 addition & 0 deletions documentation/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ Infrastructure / Support
* Support deleting beliefs via CLI for all offspring assets at once [see `PR #1003 <https://github.com/FlexMeasures/flexmeasures/pull/1003>`_]
* Add setting ``FLEXMEASURES_FORCE_HTTPS`` to explicitly toggle if HTTPS should be used for all requests [see `PR #1008 <https://github.com/FlexMeasures/flexmeasures/pull/1008>`_]
* Make flexmeasures installable locally on macOS [see `PR #1000 <https://github.com/FlexMeasures/flexmeasures/pull/1000>`_]
* Align API endpoint policy w.r.t. trailing slash [see `PR #1014 <https://github.com/FlexMeasures/flexmeasures/pull/1014>`_]


v0.19.2 | March 1, 2024
Expand Down
15 changes: 9 additions & 6 deletions flexmeasures/api/dev/sensors.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@ class SensorAPI(FlaskView):
"""

route_base = "/sensor"
trailing_slash = False
# Note: when promoting these endpoints to the main API, we aim to be strict with trailing slashes, see #1014

@route("/<id>/chart/")
@route("/<id>/chart", strict_slashes=False)
@use_kwargs(
{"sensor": SensorIdField(data_key="id")},
location="path",
Expand Down Expand Up @@ -64,7 +66,7 @@ def get_chart(self, id: int, sensor: Sensor, **kwargs):
- "event_ends_before" (see the `timely-beliefs documentation <https://github.com/SeitaBV/timely-beliefs/blob/main/timely_beliefs/docs/timing.md/#events-and-sensors>`_)
- "beliefs_after" (see the `timely-beliefs documentation <https://github.com/SeitaBV/timely-beliefs/blob/main/timely_beliefs/docs/timing.md/#events-and-sensors>`_)
- "beliefs_before" (see the `timely-beliefs documentation <https://github.com/SeitaBV/timely-beliefs/blob/main/timely_beliefs/docs/timing.md/#events-and-sensors>`_)
- "include_data" (if true, chart specs include the data; if false, use the `GET /api/dev/sensor/(id)/chart_data/ <../api/dev.html#get--api-dev-sensor-(id)-chart_data->`_ endpoint to fetch data)
- "include_data" (if true, chart specs include the data; if false, use the `GET /api/dev/sensor/(id)/chart_data <../api/dev.html#get--api-dev-sensor-(id)-chart_data->`_ endpoint to fetch data)
- "chart_type" (currently 'bar_chart' and 'daily_heatmap' are supported types)
- "width" (an integer number of pixels; without it, the chart will be scaled to the full width of the container (hint: use ``<div style="width: 100%;">`` to set a div width to 100%)
- "height" (an integer number of pixels; without it, FlexMeasures sets a default, currently 300)
Expand All @@ -73,7 +75,7 @@ def get_chart(self, id: int, sensor: Sensor, **kwargs):
set_session_variables("event_starts_after", "event_ends_before", "chart_type")
return json.dumps(sensor.chart(**kwargs))

@route("/<id>/chart_data/")
@route("/<id>/chart_data", strict_slashes=False)
@use_kwargs(
{"sensor": SensorIdField(data_key="id")},
location="path",
Expand Down Expand Up @@ -108,7 +110,7 @@ def get_chart_data(self, id: int, sensor: Sensor, **kwargs):
"""
return sensor.search_beliefs(as_json=True, **kwargs)

@route("/<id>/chart_annotations/")
@route("/<id>/chart_annotations", strict_slashes=False)
@use_kwargs(
{"sensor": SensorIdField(data_key="id")},
location="path",
Expand Down Expand Up @@ -146,7 +148,7 @@ def get_chart_annotations(self, id: int, sensor: Sensor, **kwargs):
df["source"] = df["source"].astype(str)
return df.to_json(orient="records")

@route("/<id>/")
@route("/<id>", strict_slashes=False)
@use_kwargs(
{"sensor": SensorIdField(data_key="id")},
location="path",
Expand All @@ -168,8 +170,9 @@ class AssetAPI(FlaskView):
"""

route_base = "/asset"
trailing_slash = False

@route("/<id>/")
@route("/<id>", strict_slashes=False)
@use_kwargs(
{"asset": AssetIdField(data_key="id")},
location="path",
Expand Down
6 changes: 4 additions & 2 deletions flexmeasures/api/v3_0/assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ def delete(self, id: int, asset: GenericAsset):
current_app.logger.info("Deleted asset '%s'." % asset_name)
return {}, 204

@route("/<id>/chart/")
@route("/<id>/chart", strict_slashes=False) # strict on next version? see #1014
@use_kwargs(
{"asset": AssetIdField(data_key="id")},
location="path",
Expand Down Expand Up @@ -291,7 +291,9 @@ def get_chart(self, id: int, asset: GenericAsset, **kwargs):
set_session_variables("event_starts_after", "event_ends_before")
return json.dumps(asset.chart(**kwargs))

@route("/<id>/chart_data/")
@route(
"/<id>/chart_data", strict_slashes=False
) # strict on next version? see #1014
@use_kwargs(
{"asset": AssetIdField(data_key="id")},
location="path",
Expand Down
1 change: 1 addition & 0 deletions flexmeasures/ui/crud/assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ class AssetCrudUI(FlaskView):
"""

route_base = "/assets"
trailing_slash = False

@login_required
def index(self, msg=""):
Expand Down
8 changes: 4 additions & 4 deletions flexmeasures/ui/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@
var controller = new AbortController();
var signal = controller.signal;

const initialData = fetch(dataPath + '/chart_data/?event_starts_after=' + '{{ event_starts_after }}' + '&event_ends_before=' + '{{ event_ends_before }}', {
const initialData = fetch(dataPath + '/chart_data?event_starts_after=' + '{{ event_starts_after }}' + '&event_ends_before=' + '{{ event_ends_before }}', {
method: "GET",
headers: {"Content-Type": "application/json"},
signal: signal,
Expand Down Expand Up @@ -391,7 +391,7 @@
checkDSTTransitions(startDate, endDate)
Promise.all([
// Fetch time series data
fetch(dataPath + '/chart_data/?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate, {
fetch(dataPath + '/chart_data?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate, {
method: "GET",
headers: {"Content-Type": "application/json"},
signal: signal,
Expand All @@ -400,7 +400,7 @@

/**
// Fetch annotations
fetch(dataPath + '/chart_annotations/?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate, {
fetch(dataPath + '/chart_annotations?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate, {
method: "GET",
headers: {"Content-Type": "application/json"},
signal: signal,
Expand Down Expand Up @@ -553,7 +553,7 @@
$("#spinner").show();
Promise.all([
// Fetch time series data (all data, not only the most recent beliefs)
fetch(dataPath + '/chart_data/?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate + '&most_recent_beliefs_only=false', {
fetch(dataPath + '/chart_data?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate + '&most_recent_beliefs_only=false', {
method: "GET",
headers: {"Content-Type": "application/json"},
signal: signal,
Expand Down
4 changes: 2 additions & 2 deletions flexmeasures/ui/templates/crud/asset.html
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
{% endif %}
{% if user_can_delete_asset %}
<div class="">
<form action="/assets/delete_with_data/{{ asset.id }}/" method="get">
<form action="/assets/delete_with_data/{{ asset.id }}" method="get">
<button id="delete-asset-button" class="btn btn-sm btn-responsive btn-danger delete-button" type="submit">Delete this asset</button>
</form>
<script>
Expand All @@ -69,7 +69,7 @@
<div class="sidepanel-container">
<div class="left-sidepanel-label">Edit asset</div>
<div class="sidepanel left-sidepanel">
<form class="form-horizontal" method="POST" action="/assets/{{ asset.id }}/">
<form class="form-horizontal" method="POST" action="/assets/{{ asset.id }}">
{{ asset_form.csrf_token }}
{{ asset_form.hidden_tag() }}
<fieldset>
Expand Down
2 changes: 1 addition & 1 deletion flexmeasures/ui/templates/crud/asset_new.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<div class="col-sm-10">
</div>
</div>
<form class="new-asset-form form-horizontal" method="POST" action="/assets/create/">
<form class="new-asset-form form-horizontal" method="POST" action="/assets/create">
{{ asset_form.csrf_token }}
{{ asset_form.hidden_tag() }}
<fieldset>
Expand Down
2 changes: 1 addition & 1 deletion flexmeasures/ui/tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def test_get_ancestry(app, db):
# ancestry of a parentless asset
assert get_ancestry(assets[0]) == [
{"url": f"/accounts/{account_id}", "name": "Test Account", "type": "Account"},
{"url": f"/assets/{assets[0].id}/", "name": "Parent", "type": "Asset"},
{"url": f"/assets/{assets[0].id}", "name": "Parent", "type": "Asset"},
]

# check that the number of elements of the ancestry of each assets corresponds to 2 + levels
Expand Down
3 changes: 2 additions & 1 deletion flexmeasures/ui/views/sensors.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@ class SensorUI(FlaskView):
"""

route_base = "/sensors"
trailing_slash = False

@auth_required()
@route("/<id>/chart/")
@route("/<id>/chart")
@use_kwargs(
{
"event_starts_after": AwareDateTimeField(format="iso", required=False),
Expand Down

0 comments on commit 9ef1ddb

Please sign in to comment.