Upload Handler¶
upload_handler ¶
Upload Handler - Process file uploads with validation.
This module provides functionality to handle file upload operations, including content validation, parsing, and result packaging. It acts as the entry point for user data processing.
Classes:
| Name | Description |
|---|---|
UploadHandler | Handles file upload validation and processing |
Examples:
>>> handler = UploadHandler()
>>> result = handler.process_upload(
... content="data:text/plain;base64,..base64_content..",
... filename="samples.txt"
... )
>>> if result.success:
... print(f"Uploaded {result.sample_count} samples")
Classes¶
UploadHandler ¶
UploadHandler(parser: Optional[SampleParser] = None, validation_service: Optional[ValidationService] = None)
Handle file upload operations with validation.
This class coordinates file upload processing including content decoding, format validation, parsing, and result packaging.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
parser | Optional[SampleParser] | Parser instance (injected for testing, creates default if None) | None |
validation_service | Optional[ValidationService] | Validation service (injected for testing, uses default if None) | None |
Attributes:
| Name | Type | Description |
|---|---|---|
_parser | SampleParser | Parser for converting content to entities |
_validation_service | ValidationService | Service for validation logic |
Methods:
| Name | Description |
|---|---|
process_upload | Process uploaded file and return result DTO |
decode_content | Decode base64 content from Dash upload |
validate_and_parse | Validate content and parse into dataset |
Notes
Uses dependency injection for parser and validation service, following SOLID principles (Dependency Inversion Principle).
Examples:
>>> handler = UploadHandler()
>>> content = "data:text/plain;base64,PlNhbXBsZTEKSzAwMDAx"
>>> result = handler.process_upload(content, "test.txt")
>>> result.success
True
Initialize UploadHandler with dependencies.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
parser | Optional[SampleParser] | Parser instance (creates default if None) | None |
validation_service | Optional[ValidationService] | Validation service (uses class methods if None) | None |
Source code in src/application/core/upload_handler.py
Functions¶
process_upload ¶
Process uploaded file and return result DTO.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
content | str | Base64-encoded content from Dash upload component | required |
filename | str | Name of uploaded file | required |
Returns:
| Type | Description |
|---|---|
UploadResultDTO | Result DTO with success status and parsed data or errors |
Examples:
>>> handler = UploadHandler()
>>> result = handler.process_upload(content_b64, "data.txt")
>>> if result.success:
... print(f"Uploaded {result.filename}")
Source code in src/application/core/upload_handler.py
decode_content ¶
Decode base64 content from Dash upload component.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
content | str | Base64-encoded content with data URI prefix | required |
Returns:
| Type | Description |
|---|---|
str | Decoded text content |
Raises:
| Type | Description |
|---|---|
ValueError | If content format is invalid or decoding fails |
Notes
Expected format: "data:text/plain;base64,
Examples:
>>> handler = UploadHandler()
>>> encoded = "data:text/plain;base64,SGVsbG8="
>>> handler.decode_content(encoded)
'Hello'
Source code in src/application/core/upload_handler.py
validate_and_parse ¶
Validate content and parse into dataset.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
content | str | Raw text content to validate and parse | required |
Returns:
| Type | Description |
|---|---|
tuple | (is_valid: bool, dataset: Dataset|None, metrics: ParsingMetrics|None, errors: List[str]) |
Notes
Validation steps: 1. Format validation (file structure) 2. Content validation (non-empty samples, valid KOs) 3. Domain validation (Dataset.validate())
Examples:
>>> handler = UploadHandler()
>>> content = ">Sample1\nK00001"
>>> is_valid, dataset, metrics, errors = handler.validate_and_parse(content)
>>> is_valid
True