Skip to content
Snippets Groups Projects
Commit b6700474 authored by Neda Moeini's avatar Neda Moeini
Browse files

Validate Source and TraderType values.

parent 17e2f68a
Branches
Tags
No related merge requests found
"""Forms for the file_validator app.""" """Forms for the file_validator app."""
import csv import csv
from collections.abc import Sequence from collections.abc import Iterable, Sequence
from typing import ClassVar from typing import ClassVar
from django import forms from django import forms
...@@ -69,6 +69,9 @@ class CSVUploadForm(forms.Form): ...@@ -69,6 +69,9 @@ class CSVUploadForm(forms.Form):
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)
# Step 3: Validate 'Source' and 'SYSTraderTranType' values
self._validate_source_and_trader_type(reader)
return file return file
@staticmethod @staticmethod
...@@ -108,3 +111,18 @@ class CSVUploadForm(forms.Form): ...@@ -108,3 +111,18 @@ class CSVUploadForm(forms.Form):
if missing_columns: if missing_columns:
msg = f"Missing required columns: {', '.join(missing_columns)}" msg = f"Missing required columns: {', '.join(missing_columns)}"
raise forms.ValidationError(msg) raise forms.ValidationError(msg)
@staticmethod
def _validate_source_and_trader_type(data: Iterable[dict]) -> None:
"""Validate that 'Source' is always 80 and 'SYSTraderTranType' is always 4."""
errors = []
for index, row in enumerate(data, start=1):
if row.get("Source") != "80":
errors.append(f"Row {index}: 'Source' must be 80, but found {row.get('Source')}.")
if row.get("SYSTraderTranType") != "4":
errors.append(f"Row {index}: 'SYSTraderTranType' must be 4, but found {row.get('SYSTraderTranType')}.")
if errors:
raise forms.ValidationError(errors)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment