name: dignified-python description: This skill should be used when the user asks to "write Python code", "review Python", "refactor Python", "fix Python types", "improve error handling", "use pathlib", "create ABC interface", "fix mypy errors", "add type hints", "make this pythonic", "LBYL vs EAFP", or mentions "Python", ".py files", "type annotations", "pathlib", "subprocess", or Python CLI patterns. Provides opinionated production Python standards with automatic version detection (3.10-3.13), modern type syntax, explicit condition checks where practical, pathlib operations, interface guidance, and pragmatic production patterns. references: - dignified-python-core - cli-patterns - versions/python-3.10 - versions/python-3.11 - versions/python-3.12 - versions/python-3.13 - references/advanced/api-design - references/advanced/exception-handling - references/advanced/interfaces - references/advanced/typing-advanced
Dignified Python
Opinionated Python guidance for writing clean, maintainable, modern Python code (versions 3.10-3.13).
When to Use This Skill
Auto-invoke when users ask about:
- "make this pythonic" / "is this good python"
- "type hints" / "type annotations" / "typing"
- "LBYL vs EAFP" / "exception handling"
- "pathlib vs os.path" / "path operations"
- "CLI patterns" / "click usage"
- "code review" / "improve this code"
- Any Python code quality or standards question
Note: This skill is general-purpose Python style guidance, not Dagster-specific. It captures one explicit, LBYL-leaning set of conventions; project conventions can override it when needed.
When to Use This Skill vs. Others
| User Need | Use This Skill | Alternative Skill |
|---|---|---|
| "make this pythonic" | ✅ Yes - Python standards | |
| "is this good python" | ✅ Yes - code quality | |
| "type hints" | ✅ Yes - typing guidance | |
| "LBYL vs EAFP" | ✅ Yes - exception patterns | |
| "pathlib vs os.path" | ✅ Yes - path handling | |
| "best practices for dagster" | ❌ No | /dagster-best-practices |
| "implement X pipeline" | ❌ No | /dg for implementation |
| "which integration to use" | ❌ No | /dagster-expert |
| "CLI argument parsing" | ✅ Yes - CLI patterns |
Core Knowledge (ALWAYS Loaded)
@dignified-python-core.md
Version Detection
Identify the project's minimum Python version by checking (in order):
pyproject.toml- Look forrequires-pythonfield (e.g.,requires-python = ">=3.12")setup.pyorsetup.cfg- Look forpython_requires.python-versionfile - Contains version like3.12or3.12.0- Default to Python 3.12 if no version specifier found
Once identified, load the appropriate version-specific file:
- Python 3.10: Load
versions/python-3.10.md - Python 3.11: Load
versions/python-3.11.md - Python 3.12: Load
versions/python-3.12.md - Python 3.13: Load
versions/python-3.13.md
Conditional Loading (Load Based on Task Patterns)
Core files above cover 80%+ of Python code patterns. Only load these additional files when you detect specific patterns:
Pattern detection examples:
- If task mentions "click" or "CLI" -> Load
cli-patterns.md - If task mentions "subprocess" -> Load
subprocess.md
Reference Documentation Structure
This skill's reference material is organized by topic:
Core References
dignified-python-core.md- Essential standards (always loaded)cli-patterns.md- Command-line interface patterns (click, argparse)
Version-Specific References (versions/)
python-3.10.md- Features available in Python 3.10+python-3.11.md- Features available in Python 3.11+python-3.12.md- Features available in Python 3.12+python-3.13.md- Features available in Python 3.13+
Advanced Topics (references/advanced/)
exception-handling.md- LBYL patterns, error boundariesinterfaces.md- ABC and Protocol patternstyping-advanced.md- Advanced typing patternsapi-design.md- API design principles
When to Read Each Reference Document
references/advanced/exception-handling.md
Read when:
- Writing try/except blocks
- Wrapping third-party APIs that may raise
- Seeing or writing
from eorfrom None - Unsure if LBYL alternative exists
references/advanced/interfaces.md
Read when:
- Creating ABC or Protocol classes
- Writing @abstractmethod decorators
- Designing gateway layer interfaces
- Choosing between ABC and Protocol
references/advanced/typing-advanced.md
Read when:
- Using typing.cast()
- Creating Literal type aliases
- Narrowing types in conditional blocks
references/module-design.md
Read when:
- Creating new Python modules
- Adding module-level code (beyond simple constants)
- Using @cache decorator at module level
- Seeing Path() or computation at module level
- Considering inline imports
references/advanced/api-design.md
Read when:
- Adding default parameter values to functions
- Defining functions with 5 or more parameters
- Using ThreadPoolExecutor.submit()
- Reviewing function signatures
references/checklists.md
Read when:
- Final review before committing Python code
- Unsure if you've followed all rules
- Need a quick lookup of requirements
How to Use This Skill
- Core knowledge is loaded automatically (defaults, pathlib, imports, anti-patterns)
- Version detection happens once - identify the minimum Python version and load the appropriate version file
- Reference documents are loaded on-demand based on the triggers above
- Additional patterns may require extra loading (CLI patterns, subprocess)
- Each file is self-contained with complete guidance for its domain