Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
## [0.2.2] - 2025-10-02
### Added
### Changed
### Deprecated
### Removed
### Fixed
- PATCH /api/site/<site_pk>/timeseries/<pk> was not working, now properly functions.
### Security


## [0.2.1] - 2025-07-01
### Added
### Changed
Expand Down
4 changes: 2 additions & 2 deletions LiveORC/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import boto3

# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
VERSION = "0.2.1"
VERSION = "0.2.2"
# Build paths inside the project like this: BASE_DIR / 'subdir'.
# try to get BASE_DIR from env variable
BASE_DIR = Path(__file__).resolve().parent.parent
Expand Down Expand Up @@ -158,7 +158,7 @@
SPECTACULAR_SETTINGS = {
'TITLE': 'LiveORC API',
'DESCRIPTION': 'Live OpenRiverCam REST API and administrator dashboard',
'VERSION': '0.1.0',
'VERSION': VERSION,
'SERVE_INCLUDE_SCHEMA': False,
# OTHER SETTINGS
}
Expand Down
2 changes: 1 addition & 1 deletion api/serializers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from .profile import ProfileSerializer, ProfileCreateSerializer
from .recipe import RecipeSerializer
from .video import VideoSerializer
from .time_series import TimeSeriesSerializer, TimeSeriesCreateSerializer
from .time_series import TimeSeriesSerializer, TimeSeriesCreateSerializer, TimeSeriesUpdateSerializer
from .server import ServerSerializer
from .task import TaskSerializer, TaskCreateSerializer
from .task_form import TaskFormSerializer
Expand Down
9 changes: 9 additions & 0 deletions api/serializers/time_series.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class Meta:
def validate(self, data):
user = User.objects.get(pk=self.initial_data["creator"])
institute_validator(institute=data.get("site").institute, user=user)
super().validate(data)
return data

class TimeSeriesCreateSerializer(TimeSeriesSerializer):
Expand All @@ -51,3 +52,11 @@ class Meta:
model = TimeSeries
exclude = ("site", )

class TimeSeriesUpdateSerializer(TimeSeriesCreateSerializer):
class Meta:
model = TimeSeries
exclude = ("site", "creator")

def validate(self, data):
"""Pass on the attributes as is, without user / creator / site check."""
return data
7 changes: 7 additions & 0 deletions api/tests/test_api_timeseries.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ def test_add_timeseries(self):
)
self.assertEqual(r.status_code, status.HTTP_200_OK)

# try to patch a time series object
r = client.patch(
'/api/site/1/timeseries/1',
data={"h": 1.0},
follow=True
)
self.assertEqual(r.status_code, status.HTTP_200_OK)
r = client.post(
'/api/site/1/timeseries/',
data={
Expand Down
8 changes: 7 additions & 1 deletion api/views/time_series.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from rest_framework.decorators import renderer_classes
from rest_framework.renderers import BrowsableAPIRenderer, JSONRenderer
from rest_framework.response import Response
from api.serializers import TimeSeriesSerializer, TimeSeriesCreateSerializer
from api.serializers import TimeSeriesSerializer, TimeSeriesCreateSerializer, TimeSeriesUpdateSerializer
from api.models import TimeSeries, Task, VideoStatus
from api.task_utils import get_task
from api.views import BaseModelViewSet
Expand Down Expand Up @@ -35,6 +35,8 @@ class TimeSeriesViewSet(BaseModelViewSet):
def get_serializer_class(self):
if self.action == 'create':
return TimeSeriesCreateSerializer
elif self.action in ['update', 'partial_update']:
return TimeSeriesUpdateSerializer
return TimeSeriesSerializer

def create(self, request, site_pk=None, *args, **kwargs):
Expand Down Expand Up @@ -72,6 +74,10 @@ def create(self, request, site_pk=None, *args, **kwargs):
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

def partial_update(self, request, *args, **kwargs):
return super().partial_update(request, *args, **kwargs)


def get_queryset(self):
# time series can also be retrieved nested per site, by filtering on the site of the cameraconfig property.
return TimeSeries.objects.filter(site=self.kwargs['site_pk'])
Expand Down