feat: optimize and enhance IssueActivity class - Issue #126
Enhanced IssueActivity dataclass with convenient methods and properties: - Added activity_type_value, activity_type_display properties - Added formatted_date, formatted_datetime properties - Added truncated_details property for display - Added contains_keyword() and has_implementation_activity() methods - Added to_dict() method for clean serialization Simplified code across the codebase: - Reduced JSON serialization from 18 lines to 1 line (94% reduction) - Reduced implementation detection from 13 lines to 3 lines (77% reduction) - Improved table formatting using property access - Fixed test inconsistencies using proper IssueActivity objects - Removed complex helper code for dict/dataclass handling Benefits: - Single source of truth for all IssueActivity operations - Consistent interface across all usage patterns - Better encapsulation and maintainability - Enhanced code readability and reliability - All tests passing (1329/1329) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -72,18 +72,7 @@ def show(issue_id: int, limit: int, offset: int, output_format: str):
|
||||
|
||||
if output_format == 'json':
|
||||
import json
|
||||
activity_data = []
|
||||
for activity in activities:
|
||||
data = {
|
||||
'id': activity.id,
|
||||
'issue_id': activity.issue_id,
|
||||
'activity_type': activity.activity_type.value,
|
||||
'activity_date': activity.activity_date.isoformat() if activity.activity_date else None,
|
||||
'period_id': activity.period_id,
|
||||
'activity_details': activity.activity_details,
|
||||
'created_at': activity.created_at.isoformat() if activity.created_at else None
|
||||
}
|
||||
activity_data.append(data)
|
||||
activity_data = [activity.to_dict() for activity in activities]
|
||||
click.echo(json.dumps(activity_data, indent=2))
|
||||
|
||||
else:
|
||||
@@ -96,11 +85,11 @@ def show(issue_id: int, limit: int, offset: int, output_format: str):
|
||||
for activity in activities:
|
||||
rows.append([
|
||||
activity.id,
|
||||
activity.activity_type.value.title(),
|
||||
activity.activity_date.strftime('%Y-%m-%d') if activity.activity_date else 'N/A',
|
||||
activity.activity_type_display,
|
||||
activity.formatted_date,
|
||||
activity.period_id or 'N/A',
|
||||
(activity.activity_details[:40] + '...') if activity.activity_details and len(activity.activity_details) > 40 else (activity.activity_details or ''),
|
||||
activity.created_at.strftime('%Y-%m-%d %H:%M') if activity.created_at else 'N/A'
|
||||
activity.truncated_details,
|
||||
activity.formatted_datetime
|
||||
])
|
||||
|
||||
click.echo(tabulate(rows, headers=headers, tablefmt='grid'))
|
||||
@@ -139,18 +128,7 @@ def list(period_id: Optional[int], activity_type: List[str], output_format: str)
|
||||
|
||||
if output_format == 'json':
|
||||
import json
|
||||
activity_data = []
|
||||
for activity in activities:
|
||||
data = {
|
||||
'id': activity.id,
|
||||
'issue_id': activity.issue_id,
|
||||
'activity_type': activity.activity_type.value,
|
||||
'activity_date': activity.activity_date.isoformat() if activity.activity_date else None,
|
||||
'period_id': activity.period_id,
|
||||
'activity_details': activity.activity_details,
|
||||
'created_at': activity.created_at.isoformat() if activity.created_at else None
|
||||
}
|
||||
activity_data.append(data)
|
||||
activity_data = [activity.to_dict() for activity in activities]
|
||||
click.echo(json.dumps(activity_data, indent=2))
|
||||
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user