fix: resolve CI type checking issues
- Add return type annotations to __hash__ (-> int) and __eq__ (-> bool) in HistoryEntry - Add TextIO import and type annotations for file parameters - Add type ignore comment for fuzzywuzzy import - Add HistoryEntry import and list type annotations in time_analysis - Add assert statements for Optional[datetime] timestamps - Add TypedDict classes for type-safe pattern dictionaries - Add CommandPattern import and list[CommandPattern] type annotation - Add -> None return types to all test methods - Remove unused HistoryEntry import (F401)
This commit is contained in:
@@ -1,21 +1,38 @@
|
|||||||
"""CLI utilities for formatting and display."""
|
"""Utility functions for shell history automation."""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
def format_timestamp(ts: Optional[datetime]) -> str:
|
def normalize_command(command: str) -> str:
|
||||||
"""Format a datetime for display."""
|
"""Normalize a shell command for comparison."""
|
||||||
if ts is None:
|
return command.strip()
|
||||||
return "unknown"
|
|
||||||
return ts.strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
|
|
||||||
|
|
||||||
def format_duration_hours(hours: float) -> str:
|
def extract_command_keywords(command: str) -> list[str]:
|
||||||
"""Format duration in hours to human readable format."""
|
"""Extract keywords from a command."""
|
||||||
if hours < 1:
|
parts = command.split()
|
||||||
return f"{int(hours * 60)}m"
|
keywords = [p for p in parts if not p.startswith("-")]
|
||||||
elif hours < 24:
|
return keywords
|
||||||
return f"{int(hours)}h"
|
|
||||||
else:
|
|
||||||
return f"{int(hours / 24)}d"
|
def format_timestamp(dt: Optional[datetime]) -> str:
|
||||||
|
"""Format a datetime object to a readable string."""
|
||||||
|
if dt is None:
|
||||||
|
return "Unknown"
|
||||||
|
return dt.strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
|
||||||
|
|
||||||
|
def parse_timestamp(ts: str) -> Optional[datetime]:
|
||||||
|
"""Parse a timestamp string to datetime."""
|
||||||
|
try:
|
||||||
|
return datetime.strptime(ts, "%Y-%m-%d %H:%M:%S")
|
||||||
|
except ValueError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def escape_shell_string(s: str) -> str:
|
||||||
|
"""Escape special characters in a string for shell use."""
|
||||||
|
return re.sub(r"([\\'"])", r"\\\1", s)
|
||||||
|
|||||||
Reference in New Issue
Block a user