aws-samples / aws-samples/aws-serverless-developer-experience-workshop-python

Cross-runtime consistency fixes

Ouverte
#178 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
pending-release
Langage dominant
Python
Étoiles
47
Forks
20
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

## Summary

A set of fixes to align the Python runtime with the other runtimes (Java, TypeScript, .NET) for functional equivalence and cross-runtime consistency.

---

## Contracts Service

### Timestamp format (`contract_event_handler.py`)
- `create_contract`: replaced `datetime.now().strftime("%d/%m/%Y %H:%M:%S")` with `datetime.now(timezone.utc).isoformat()` for both `contract_created` and `contract_last_modified_on`
- `update_contract`: replaced `datetime.now().strftime(...)` with `datetime.now(timezone.utc).isoformat()`
- Format change: custom `DD/MM/YYYY HH:MM:SS` → ISO 8601 `YYYY-MM-DDTHH:MM:SS.ffffff+00:00`
- Uses the non-deprecated timezone-aware API (`timezone.utc`) instead of `datetime.utcnow()`

### DynamoDB attribute name (`contract_event_handler.py`)
- `update_contract`: changed `UpdateExpression` from `"set contract_status=:t, modified_date=:m"` to `"set contract_status=:t, contract_last_modified_on=:m"`
- This corrects a bug where `update_contract` wrote to a non-existent `modified_date` attribute instead of the correct `contract_last_modified_on` attribute used in `create_contract`

### Observability metrics (`contract_event_handler.py`)
- Added `metrics.add_metric(name="ContractCreated", unit=MetricUnit.Count, value=1)` to `create_contract` success path

---

## Approvals Service

### Per-invocation timestamp (`contract_status_changed_event_handler.py`)
- Removed module-level `now = datetime.now()` and `current_date` variable assignments
- Moved timestamp computation inside the handler function body to ensure each invocation captures its own execution time rather than the container initialisation time

### Environment variable error type (`contract_status_changed_event_handler.py`)
- Replaced `raise InternalServerError(...)` with `raise EnvironmentError(...)` for both `SERVICE_NAMESPACE` and `CONTRACT_STATUS_TABLE` missing variable checks
- Removed the now-unused `InternalServerError` import from `aws_lambda_powertools.event_handler.exceptions`

---

## Web Service

### Evaluation result validation (`publication_evaluation_event_handler.py`)
- Added validation guard: only updates DynamoDB when `evaluation_result` is `"APPROVED"` or `"DECLINED"` (case-insensitive)
- Logs a warning and returns without writing to DynamoDB for any other value

### Metric name correction (`publication_evaluation_event_handler.py`)
- Removed duplicate `metrics.add_metric(name="PropertiesAdded", ...)` call
- Retained `metrics.add_metric(name="PropertiesApproved", ...)` as the single metric for this path

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.