mirror of
https://github.com/DRYTRIX/TimeTracker.git
synced 2026-05-06 20:40:38 -05:00
443a797e2d
Implement comprehensive CalDAV calendar integration to import calendar events as time entries from CalDAV-compatible servers (Zimbra, Nextcloud, ownCloud). Features: - CalDAV client with calendar discovery and event fetching - Automatic calendar discovery from server URL - Import calendar events (VEVENT) as time entries - Project matching from event titles with fallback to default project - Idempotent sync using IntegrationExternalEventLink to prevent duplicates - Per-user integration setup (similar to Google Calendar) - Support for both server URL (with discovery) and direct calendar URL - SSL certificate verification toggle for self-signed certificates - Configurable lookback period for event import Components: - CalDAVCalendarConnector: Main integration connector with sync logic - CalDAVClient: Low-level CalDAV client using PROPFIND/REPORT requests - IntegrationExternalEventLink: Model for tracking imported events (idempotency) - Setup UI: User-friendly form for configuration - Comprehensive validation and error handling - Full test coverage (unit, integration, route tests) - Documentation: Setup guide and troubleshooting Technical details: - Uses icalendar library for parsing VEVENT components - Handles timezone conversion (CalDAV UTC to app local timezone) - Skips all-day events (only imports timed events) - Stores credentials securely (password in access_token, username in extra_data) - Automatic calendar discovery on first sync if only server URL provided Migration: - Adds integration_external_event_links table for sync tracking - Unique constraint on (integration_id, external_uid) prevents duplicates Documentation: - CALDAV_INTEGRATION.md: Complete feature documentation - CALDAV_QUICK_SETUP.md: Step-by-step setup guide with examples Closes feature request for CalDAV/Zimbra integration.
89 lines
1.3 KiB
Plaintext
89 lines
1.3 KiB
Plaintext
# Core Flask dependencies
|
|
Flask==3.0.0
|
|
Flask-SQLAlchemy==3.1.1
|
|
Flask-Migrate==4.0.5
|
|
Flask-Login==0.6.3
|
|
Flask-SocketIO==5.3.6
|
|
|
|
# OAuth / OIDC
|
|
Authlib==1.3.1
|
|
PyJWT==2.8.0
|
|
|
|
# Database
|
|
SQLAlchemy==2.0.23
|
|
alembic==1.13.1
|
|
psycopg2-binary==2.9.9
|
|
|
|
# Web server
|
|
gunicorn==23.0.0
|
|
eventlet==0.40.3
|
|
|
|
# Security and forms
|
|
Flask-WTF==1.2.1
|
|
Flask-Limiter==3.8.0
|
|
|
|
# Utilities
|
|
python-dotenv==1.0.0
|
|
pytz==2023.3
|
|
python-dateutil==2.8.2
|
|
Werkzeug==3.0.6
|
|
requests==2.32.4
|
|
|
|
# Email
|
|
Flask-Mail==0.9.1
|
|
|
|
# Excel export
|
|
openpyxl==3.1.2
|
|
|
|
# PDF Generation
|
|
WeasyPrint==60.2
|
|
pydyf==0.10.0
|
|
Pillow==10.4.0
|
|
reportlab==4.0.7
|
|
|
|
# Background tasks
|
|
APScheduler==3.10.4
|
|
|
|
# Internationalization
|
|
Flask-Babel==4.0.0
|
|
Babel==2.14.0
|
|
|
|
# Development and testing
|
|
pytest==7.4.3
|
|
pytest-flask==1.3.0
|
|
pytest-cov==4.1.0
|
|
coverage[toml]==7.4.0
|
|
black==24.8.0
|
|
flake8==6.1.0
|
|
|
|
# Security
|
|
cryptography==45.0.6
|
|
markdown==3.6
|
|
bleach==6.1.0
|
|
|
|
# Analytics and Monitoring
|
|
python-json-logger==2.0.7
|
|
sentry-sdk==1.40.0
|
|
prometheus-client==0.19.0
|
|
posthog==3.1.0
|
|
|
|
# API Documentation
|
|
flask-swagger-ui==5.21.0
|
|
apispec==6.3.0
|
|
marshmallow==3.20.1
|
|
|
|
# OCR for receipt scanning
|
|
pytesseract==0.3.10
|
|
|
|
# Payment Gateway Integration
|
|
stripe==7.0.0
|
|
|
|
# Calendar Integration
|
|
google-api-python-client==2.100.0
|
|
google-auth-httplib2==0.1.1
|
|
google-auth-oauthlib==1.1.0
|
|
icalendar==6.3.1
|
|
|
|
# Redis for caching
|
|
redis==5.0.1
|
|
hiredis==2.2.3 |