Kompleksowa aplikacja do zarządzania zadaniami zbudowana w Pythonie z wykorzystaniem wzorców projektowych i nowoczesnego interfejsu GUI w Streamlit.
TaskManager to zaawansowany system zarządzania zadaniami, który demonstruje praktyczne zastosowanie programowania obiektowego, wzorców projektowych i najlepszych praktyk tworzenia aplikacji w Pythonie. Projekt został stworzony w ramach kursu programowania obiektowego.
- Różne typy zadań: Standard, Cykliczne, Projektowe, Spotkania
- System priorytetów: URGENT, HIGH, MEDIUM, LOW
- Statusy zadań: TODO, IN_PROGRESS, COMPLETED, CANCELLED
- Elastyczne terminy: z obsługą zadań bez terminu
- Edycja i usuwanie: pełna kontrola nad cyklem życia zadań
- Email Observer: powiadomienia e-mail o ważnych zdarzeniach
- Logging Observer: szczegółowe logowanie wszystkich operacji
- Smart Observer: inteligentne powiadomienia z analizą priorytetów
- Konfigurowalność: elastyczne ustawienia powiadomień
- Wykresy priorytetów: wizualizacja rozkładu zadań
- Analiza statusów: śledzenie postępów
- Metryki wydajności: statystyki ukończonych zadań
- Dashboard: przegląd najważniejszych informacji
- Filtry: według statusu, priorytetu, typu zadania
- Strategie sortowania: priorytet, data utworzenia, termin wykonania
- Elastyczne wyszukiwanie: intuicyjny interfejs
- Singleton: TaskManager jako pojedyncza instancja
- Factory: Fabryka do tworzenia różnych typów zadań
- Observer: System powiadomień reagujący na zmiany
- Strategy: Wymienne strategie sortowania i filtrowania
TaskManager/
├── base/ # Klasy bazowe
├── tasks/ # Implementacje zadań
├── managers/ # Menedżery i kolekcje
├── factories/ # Fabryki tworzące obiekty
├── observers/ # System powiadomień
├── strategies/ # Strategie sortowania/filtrowania
├── protocols/ # Interfejsy (protokoły)
├── enums/ # Definicje enumów
├── exceptions/ # Obsługa wyjątków
└── streamlit_app.py # Interfejs GUI
- Python: 3.12+
- System operacyjny: Windows, macOS, Linux
- Plotly (do wykresów)
- Inne zależności w
requirements.txt
python --version
# lub
python3 --versionUwaga: Projekt został przetestowany z Python 3.12-3.13. Starsze wersje mogą nie być w pełni kompatybilne z używanymi funkcjami (np. typing protocols).
# Tworzenie środowiska wirtualnego
python -m venv venv
# Aktywacja środowiska
venv\Scripts\activate
# Weryfikacja aktywacji (powinien pojawić się prefix (venv))
where python# Tworzenie środowiska wirtualnego
python3 -m venv venv
# Aktywacja środowiska
source venv/bin/activate
# Weryfikacja aktywacji (powinien pojawić się prefix (venv))
which python
### Instalacja
```bash
# Utworzenie środowiska wirtualnego (opcjonalne)
python -m venv venv
venv\Scripts\activate # Windows
# lub
source venv/bin/activate # Linux/Mac
# Instalacja zależności
pip install -r requirements.txt# Uruchomienie aplikacji GUI
streamlit run streamlit_app.py
# Uruchomienie demo konsolowego
python demo.py- Otwórz przeglądarkę pod adresem
http://localhost:8501 - Korzystaj z menu bocznego do nawigacji między sekcjami:
- 🏠 Dashboard: przegląd zadań i statystyk
- ➕ Nowe zadanie: tworzenie nowych zadań
- 📝 Lista zadań: zarządzanie istniejącymi zadaniami
- 📊 Statystyki: analizy i wykresy
- 🔔 Powiadomienia: historia powiadomień
- ⚙️ Ustawienia: konfiguracja aplikacji
from managers.task_manager import TaskManager
from factories.default_task_factory import DefaultTaskFactory
from enums.priority import Priority
# Uzyskanie instancji menedżera (Singleton)
manager = TaskManager.get_instance()
# Tworzenie zadania przez fabrykę
factory = DefaultTaskFactory()
task = factory.create_task(
task_type="standard",
title="Przykładowe zadanie",
description="Opis zadania",
priority=Priority.HIGH
)
# Dodanie zadania do menedżera
manager.add_task(task)
# Pobranie wszystkich zadań
tasks = manager.get_all_tasks()# Uruchomienie testów jednostkowych
python -m pytest tests/
# Uruchomienie z pokryciem kodu
python -m pytest --cov=. tests/TaskManager: Singleton zarządzający kolekcją zadańBaseTask: Abstrakcyjna klasa bazowa dla wszystkich zadańStandardTask: Podstawowy typ zadaniaRecurringTask: Zadania cykliczneTaskFactory: Fabryka abstrakcyjna do tworzenia zadańBaseObserver: Interfejs dla obserwatorów
class TaskManager:
_instance = None
@classmethod
def get_instance(cls):
if cls._instance is None:
cls._instance = cls()
return cls._instanceclass DefaultTaskFactory(TaskFactory):
def create_task(self, task_type: str, **kwargs) -> BaseTask:
if task_type == "standard":
return StandardTask(**kwargs)
elif task_type == "recurring":
return RecurringTask(**kwargs)
# ...class EmailObserver(BaseObserver):
def update(self, task: BaseTask, event_type: str):
# Wysyłanie powiadomienia e-mail
pass- Utwórz nową klasę dziedziczącą po
BaseTask - Zarejestruj ją w fabryce zadań
- Dodaj obsługę w interfejsie GUI
Stworzony w ramach kursu programowania obiektowego w Pythonie.
Projekt TaskManager - praktyczna nauka programowania obiektowego przez tworzenie rzeczywistej aplikacji.