mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-08 22:58:01 -05:00
ref(backend): time/date blocks to support ISO 8601 and custom formats (#10576)
Introduces discriminated unions for time, date, and date-time format selection, supporting both strftime and ISO 8601 (with timezone and microsecond options). Updates schemas, test cases, and block logic to handle the new format types, improving flexibility and standards compliance for time and date outputs. <!-- Clearly explain the need for these changes: --> ### Why these changes are needed Users need to output timestamps in ISO 8601/RFC 3339 format for API integrations and standardized data exchange. The previous implementation only supported strftime formatting, which made it difficult to generate properly formatted timestamps with timezone information. This change enables: - **Standards compliance**: ISO 8601 and RFC 3339 compliant timestamps - **Timezone support**: 38 timezone options covering all UTC offsets globally - **API compatibility**: Many APIs require RFC 3339 timestamps (e.g., "2011-06-03T10:00:00-07:00") - **Backward compatibility**: Existing workflows continue to work with default strftime format ### Changes 🏗️ <!-- Concisely describe all of the changes made in this pull request: --> - **Added discriminated union format types** for all time/date blocks: - `GetCurrentTimeBlock`: Now supports `TimeStrftimeFormat` and `TimeISO8601Format` - `GetCurrentDateBlock`: Now supports `DateStrftimeFormat` and `DateISO8601Format` - `GetCurrentDateAndTimeBlock`: Now supports `StrftimeFormat` and `ISO8601Format` - **Implemented shared timezone support**: - Created `TimezoneLiteral` type with 38 timezone options (all UTC offsets) - Supports fractional offsets (e.g., India UTC+05:30, Nepal UTC+05:45) - Deduplicated timezone lists across all format classes - **Added ISO 8601 format features**: - Timezone-aware timestamps with proper offset formatting - Optional microseconds inclusion - RFC 3339 compliance (subset of ISO 8601 with mandatory timezone) - **Updated test cases** for all three blocks to verify: - Default behavior unchanged (backward compatibility) - Custom strftime formats still work - ISO 8601 format produces correct output ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [x] Verified backward compatibility - default strftime format unchanged - [x] Tested ISO 8601 format with UTC timezone - [x] Tested ISO 8601 format with various timezones (India, New York, etc.) - [x] Tested microseconds option for ISO formats - [x] Verified all existing tests pass for GetCurrentTimeBlock - [x] Verified all existing tests pass for GetCurrentDateBlock - [x] Verified all existing tests pass for GetCurrentDateAndTimeBlock - [x] Manually tested each block with different format configurations - [x] Confirmed RFC 3339 compliance for timestamps with mandatory timezone --------- Co-authored-by: Claude <claude@users.noreply.github.com>
This commit is contained in:
@@ -30,6 +30,12 @@ poetry run test
|
||||
# Run specific test
|
||||
poetry run pytest path/to/test_file.py::test_function_name
|
||||
|
||||
# Run block tests (tests that validate all blocks work correctly)
|
||||
poetry run pytest backend/blocks/test/test_block.py -xvs
|
||||
|
||||
# Run tests for a specific block (e.g., GetCurrentTimeBlock)
|
||||
poetry run pytest 'backend/blocks/test/test_block.py::test_available_blocks[GetCurrentTimeBlock]' -xvs
|
||||
|
||||
# Lint and format
|
||||
# prefer format if you want to just "fix" it and only get the errors that can't be autofixed
|
||||
poetry run format # Black + isort
|
||||
|
||||
Reference in New Issue
Block a user