|
from dataclasses import dataclass |
|
from typing import Optional |
|
from datetime import datetime |
|
|
|
@dataclass |
|
class Source: |
|
"""Source model representing an RSS source.""" |
|
id: str |
|
user_id: str |
|
source: str |
|
category: Optional[str] = None |
|
last_update: Optional[datetime] = None |
|
created_at: Optional[datetime] = None |
|
|
|
@classmethod |
|
def from_dict(cls, data: dict): |
|
"""Create a Source instance from a dictionary.""" |
|
return cls( |
|
id=data['id'], |
|
user_id=data['user_id'], |
|
source=data['source'], |
|
category=data.get('category'), |
|
last_update=datetime.fromisoformat(data['last_update'].replace('Z', '+00:00')) if data.get('last_update') else None, |
|
created_at=datetime.fromisoformat(data['created_at'].replace('Z', '+00:00')) if data.get('created_at') else None |
|
) |
|
|
|
def to_dict(self): |
|
"""Convert Source instance to dictionary.""" |
|
return { |
|
'id': self.id, |
|
'user_id': self.user_id, |
|
'source': self.source, |
|
'category': self.category, |
|
'last_update': self.last_update.isoformat() if self.last_update else None, |
|
'created_at': self.created_at.isoformat() if self.created_at else None |
|
} |