Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Cross-runtime consistency fixes

Open
#178 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
aws, python
Domain
backend, cloud

Research direction

Compare contract_event_handler.py, contract_status_changed_event_handler.py, and publication_evaluation_event_handler.py with the Java, TypeScript, and .NET runtimes. Review the listed timestamp, DynamoDB, environment-variable, validation, and metric behaviors first, then run the relevant service tests if available. Done means the Python handlers match the stated cross-runtime contracts without unintended writes or duplicate metrics.

Written by the indexing model from the issue text.

Description

pending-release

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
Dominant language
Python
Stars
47
Forks
20
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

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

All issues in aws-samples/aws-serverless-developer-experience-workshop-python

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.