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 typing import Optional
|
||||
|
||||
|
||||
def format_timestamp(ts: Optional[datetime]) -> str:
|
||||
"""Format a datetime for display."""
|
||||
if ts is None:
|
||||
return "unknown"
|
||||
return ts.strftime("%Y-%m-%d %H:%M:%S")
|
||||
def normalize_command(command: str) -> str:
|
||||
"""Normalize a shell command for comparison."""
|
||||
return command.strip()
|
||||
|
||||
|
||||
def format_duration_hours(hours: float) -> str:
|
||||
"""Format duration in hours to human readable format."""
|
||||
if hours < 1:
|
||||
return f"{int(hours * 60)}m"
|
||||
elif hours < 24:
|
||||
return f"{int(hours)}h"
|
||||
else:
|
||||
return f"{int(hours / 24)}d"
|
||||
def extract_command_keywords(command: str) -> list[str]:
|
||||
"""Extract keywords from a command."""
|
||||
parts = command.split()
|
||||
keywords = [p for p in parts if not p.startswith("-")]
|
||||
return keywords
|
||||
|
||||
|
||||
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