Skip to content
Snippets Groups Projects
Commit 95a424ac authored by geant-release-service's avatar geant-release-service
Browse files

Finished release 0.9.

parents 676d5a98 9d11debb
Branches
Tags
No related merge requests found
# Changelog # Changelog
## [0.9] - 2025-03-28
- Add version endpoint
- Fix the encoding issue with the windows clients
## [0.8] - 2025-03-27 ## [0.8] - 2025-03-27
- No change, just a new release - No change, just a new release
......
...@@ -76,7 +76,9 @@ class CSVUploadForm(forms.Form): ...@@ -76,7 +76,9 @@ class CSVUploadForm(forms.Form):
self._validate_file_type(file) self._validate_file_type(file)
# Step 2: Parse file and validate headers # Step 2: Parse file and validate headers
csv_file = file.read().decode("utf-8").splitlines() raw_data = file.read().decode("utf-8-sig")
normalized_data = raw_data.replace("\r\n", "\n").replace("\r", "\n")
csv_file = normalized_data.splitlines()
reader = csv.DictReader(csv_file, delimiter=",") reader = csv.DictReader(csv_file, delimiter=",")
fieldnames = reader.fieldnames if reader.fieldnames is not None else [] fieldnames = reader.fieldnames if reader.fieldnames is not None else []
self._validate_headers(fieldnames) self._validate_headers(fieldnames)
......
"""Views for the file_validator app.""" """Views for the file_validator app."""
import csv import csv
import io import io
from importlib.metadata import PackageNotFoundError
from importlib.metadata import version as get_version
from typing import ClassVar from typing import ClassVar
from django.http import HttpRequest, HttpResponse from django.http import HttpRequest, HttpResponse
from django.http.response import JsonResponse
from django.shortcuts import render from django.shortcuts import render
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils import timezone from django.utils import timezone
...@@ -23,6 +26,14 @@ def index_view(request: HttpRequest) -> HttpResponse: ...@@ -23,6 +26,14 @@ def index_view(request: HttpRequest) -> HttpResponse:
return render(request, "index.html") return render(request, "index.html")
def version_view(_request: HttpRequest) -> JsonResponse:
"""Return the module version as JSON."""
try:
module_version = get_version("sage-validation")
except PackageNotFoundError:
module_version = "unknown"
return JsonResponse({"module": module_version})
def upload_page_view(request: HttpRequest) -> HttpResponse: def upload_page_view(request: HttpRequest) -> HttpResponse:
"""Render the file upload page.""" """Render the file upload page."""
return render(request, "upload.html") return render(request, "upload.html")
...@@ -42,7 +53,7 @@ class CSVUploadAPIView(APIView): ...@@ -42,7 +53,7 @@ class CSVUploadAPIView(APIView):
csv_file = form.cleaned_data["file"] csv_file = form.cleaned_data["file"]
csv_file.seek(0) csv_file.seek(0)
decoded_file = csv_file.read().decode("utf-8").strip() decoded_file = csv_file.read().decode("utf-8-sig").strip()
if not decoded_file: if not decoded_file:
return Response({"status": "error", "message": "Uploaded file is empty."}, return Response({"status": "error", "message": "Uploaded file is empty."},
......
...@@ -3,7 +3,7 @@ from django.contrib import admin ...@@ -3,7 +3,7 @@ from django.contrib import admin
from django.urls import path from django.urls import path
from django.urls.conf import include from django.urls.conf import include
from sage_validation.file_validator.views import index_view from sage_validation.file_validator.views import index_view, version_view
urlpatterns = [ urlpatterns = [
path("admin/", admin.site.urls), path("admin/", admin.site.urls),
...@@ -11,4 +11,5 @@ urlpatterns = [ ...@@ -11,4 +11,5 @@ urlpatterns = [
path("", index_view, name="index"), path("", index_view, name="index"),
path("", include("social_django.urls", namespace="social")), path("", include("social_django.urls", namespace="social")),
path("accounts/", include("sage_validation.accounts.urls")), path("accounts/", include("sage_validation.accounts.urls")),
path("version/", version_view, name="version"),
] ]
...@@ -3,7 +3,7 @@ from setuptools import find_packages, setup ...@@ -3,7 +3,7 @@ from setuptools import find_packages, setup
setup( setup(
name="sage-validation", name="sage-validation",
version="0.8", version="0.9",
packages=find_packages(), packages=find_packages(),
include_package_data=True, include_package_data=True,
install_requires=[ install_requires=[
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment