All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added all ports on localhost, 127.0.0.1 and 0.0.0.0 to CORS allowed origins.
- Altered the
/api/recent_routesendpoint to return routes from the last 24 hours. Previously it returned routes from the current calendar day. - Renamed and repositioned "Falklands" location to "Mare Harbour".
- Added missing migration.
- added ensure_adminuser command to add subtly more sophisticated behaviour to Django's createsuperuser - i.e. don't raise non-zero exit code if superuser already exists, add more useful output.
- Empty arrays to empty responses for a consistent response structure.
- Adding a "tags" field to the Route model. As an optional parameter, tags can be assigned to routes using a POST api/route request. This is implemented using django-taggit.
- Added environment variables for controlling logging behaviour: POLARROUTE_LOG_FILE_NAME, CELERY_LOG_DIR, CELERY_LOG_FILE_NAME (in addition to existing: POLARROUTE_LOG_DIR).
- Added rotating logging handler.
- Improved speed of route changelist admin page.
- Write logs with group-write permissions.
- Use uv in the docker image.
- Inappropriate use of 204 code: RecentRoutesView changed from 204 to 200 OK with an empty array and the original message ("No recent routes found for today.").
- Inappropriate use of 204 code: VehicleTypeListView changed from 204 to 200 OK with and empty array and the original message.
- MeshView - Changed from 204 to 404 Not Found when mesh doesn't exist.
- Updated tests to reflect corrected HTTP status codes.
- Remove one layer of error response nesting in failed job response.
- Made route admin panel more read-only and faster; hide full view of JSON fields.
- Corrected mesh data source checking and improved warning message to reduce confusion for missing current data.
- Add erroneously missing
rest_frameworkintoINSTALLED_APPS. - Remove unique constraint and add id field to locations fixture to prevent duplication.
- Corrected mesh metadata filename pattern.
- Corrected mesh id type in api schema.
- Catch more errors in route evaluation, return a better error message from evaluate route endpoint.
- Included migration for changes to location model.
- Inclusion of fixtures in source code distribution by using
MANIFEST.inin place ofpackage_datainpyproject.toml.
- This changelog!
- Restricted upper limit of Django support to version 5.2
- Name of maintainer from David Wilby to David Wyld.
- Moved the docker volume for the
dbservice to a managed volume instead of a bind-mount.
- utility move to its own module.
request_routeutility now does not wait for the delay period before the first status request, only after receipt of a 'PENDING' job status.
- Support for python 3.9
- Support for Django < 5.2
- Optimisation metrics exposure (time, fuel, distance) in route responses.
- Job ID inclusion in
recent_routesresponse for better tracking. - Recent routes output validation tests.
- Breaking: Route response structure now consistent regardless of optimisation types available.
- Improved
recent_routesendpoint performance by removing repeated job status calls and heavy JSON processing. - Route calculated timestamp only applied when both route optimisations are complete.
- Re-coupled
recent_routesstatus to Celery state using database instead of broker for better reliability/performance. - Removed top-level metadata duplication in route responses.
- Performance issues with
recent_routesendpoint loading unnecessary data.
- Response refactor for improved error code consistency.
- New
responses.pymodule for centralized response handling. - Response validation tests (
test_responses.py). - Location management functionality.
- Job status schema with all possible Celery states.
- Vehicle management with CRUD operations.
- Vehicle configuration validation using PolarRoute validator.
- Location fixtures for standard locations (Bird Island, Falklands, Halley, Rothera, etc.).
- Swagger UI served alongside the application.
- Breaking: Separated job and route endpoints - routes now accessed via job workflow.
- Breaking: Route cancellation moved from route endpoint to job endpoint.
- Unified error responses across all endpoints for consistency.
- Route model now cascades deletion when job is deleted.
- Vehicle model expanded with additional SDA properties (
beam,hull_type,force_limit). - LocationView refactored to
LocationViewSet.
- Route schema missing from API documentation after merge conflicts.
- Inconsistent error response formats across endpoints.
- Route cancellation bug where deletion didn't work properly.
- Redundant "no mesh available" response variations - now unified.
- Separate route cancellation endpoint (moved to job endpoint).