Contributing
Entwicklungsumgebung einrichten
Repository klonen
Abhängigkeiten installieren
Code-Stil
Formatierung
Das Projekt verwendet black
für Code-Formatierung:
Linting
Type Checking
Tests
Tests ausführen
# Alle Tests
pytest
# Mit Coverage
pytest --cov=form_download_helper
# Spezifische Tests
pytest tests/test_download.py
Test-Struktur
tests/
├── test_download.py # Download-Funktionalität
├── test_formatting.py # Versionierungslogik
├── test_templates.py # Template-Generierung
└── fixtures/ # Test-Daten
├── schema.json
└── deptree.json
Neue Features entwickeln
1. Issue erstellen
Erstellen Sie ein Issue für neue Features oder Bugfixes:
- Gehen Sie zu GitLab Issues
- Beschreiben Sie das Problem/Feature detailliert
- Fügen Sie Labels hinzu (bug, enhancement, etc.)
2. Branch erstellen
# Feature Branch
git checkout -b feature/neue-funktionalität
# Bugfix Branch
git checkout -b bugfix/fehler-beschreibung
3. Entwicklung
# Änderungen machen
# Tests schreiben
# Code formatieren
black src/
flake8 src/
# Tests ausführen
pytest
4. Commit Guidelines
Verwenden Sie aussagekräftige Commit-Messages:
# Format: type(scope): description
git commit -m "feat(download): add support for multiple versions"
git commit -m "fix(auth): handle authentication errors gracefully"
git commit -m "docs(readme): update installation instructions"
Commit Types:
- feat
: Neue Features
- fix
: Bugfixes
- docs
: Dokumentation
- style
: Code-Stil (kein funktioneller Unterschied)
- refactor
: Code-Refactoring
- test
: Tests hinzufügen/ändern
- chore
: Build/Tooling Änderungen
5. Merge Request
- Push Branch:
git push origin feature/neue-funktionalität
- Erstellen Sie eine Merge Request in GitLab
- Beschreiben Sie Änderungen detailliert
- Verlinken Sie relevante Issues
- Fügen Sie Reviewer hinzu
Dokumentation
MkDocs entwickeln
Docstrings
Verwenden Sie Google-Style Docstrings:
def download(path: Path, username: str, password: str, version: int, uri: str):
"""Download form data and generate files.
Args:
path: Target directory for downloads
username: Username for authentication
password: Password for authentication
version: Form version number
uri: Form URI to download from
Returns:
None
Raises:
requests.RequestException: If download fails
IOError: If file operations fail
Example:
>>> download(Path("/tmp"), "user", "pass", 2, "https://example.com")
"""
Release-Prozess
1. Version erhöhen
2. Changelog aktualisieren
Dokumentieren Sie Änderungen in CHANGELOG.md
:
## [0.2.0] - 2024-01-15
### Added
- Support for multiple form versions
- Improved error handling
### Changed
- Updated dependencies
- Refactored download logic
### Fixed
- Authentication timeout issues
3. Tag erstellen
Debugging
Logging aktivieren
Häufige Probleme
Import Fehler:
Test Fehler:
# Cache leeren
pytest --cache-clear
# Einzelne Tests debuggen
pytest -v -s tests/test_download.py::test_specific_function
Authentifizierung testen:
# Mit curl testen
curl -u username:password "https://formulare.uv-kooperation.de/ozg/rul/ozg-90/@@schema-view?version=2"
Code Review
Checkliste für Reviewer
- [ ] Code folgt Stil-Guidelines
- [ ] Tests sind vorhanden und funktionieren
- [ ] Dokumentation ist aktualisiert
- [ ] Keine sensiblen Daten im Code
- [ ] Performance-Impact berücksichtigt
- [ ] Backward-Kompatibilität gewährleistet
Feedback geben
- Seien Sie konstruktiv und höflich
- Erklären Sie das "Warum" bei Änderungsvorschlägen
- Schlagen Sie Alternativen vor
- Anerkennen Sie gute Lösungen
Community
Fragen stellen
- Nutzen Sie GitLab Issues für Bugs und Features
- Diskussionen über GitLab Discussions
- E-Mail an Maintainer bei dringenden Problemen
Code of Conduct
- Respektvoller Umgang miteinander
- Konstruktive Kritik
- Inklusives Verhalten
- Fokus auf technische Verbesserungen