refactor: unify exception handling, add ISO 8601 time, dedup commands, expand tests
- Replace _error_code_for_message() string matching with error_code attribute on exception classes - Add error_code to all TwitterError subclasses (AuthenticationError, RateLimitError, etc.) - Add InvalidInputError exception class - TwitterAPIError derives error_code from HTTP status code automatically - auth.py: use AuthenticationError instead of RuntimeError - cli.py: catch (TwitterError, RuntimeError) for backward compat - Extract _fetch_and_display_users() to deduplicate followers/following commands - Add format_iso8601() to timeutil.py - Add createdAtISO field to tweet and user profile serialization - New test files: test_output.py, test_cache.py, test_timeutil.py - Expand test_filter.py (topN, score mode, custom weights, empty input) - Tests: 152 → 194 unit tests, all passing
This commit is contained in:
@@ -69,3 +69,14 @@ def format_relative_time(created_at: str) -> str:
|
||||
return "%dmo ago" % months
|
||||
years = days // 365
|
||||
return "%dy ago" % years
|
||||
|
||||
|
||||
def format_iso8601(created_at: str) -> str:
|
||||
"""Convert Twitter timestamp to ISO 8601 format.
|
||||
|
||||
Returns e.g. "2026-03-08T12:00:00+00:00" or the original string on failure.
|
||||
"""
|
||||
dt = _parse_twitter_time(created_at)
|
||||
if dt is None:
|
||||
return created_at
|
||||
return dt.isoformat()
|
||||
|
||||
Reference in New Issue
Block a user