python-development
Skill409 starsChanged 6 months agoMITView on GitHub
Python and wxPython development: packaging (PyInstaller/Nuitka), testing, desktop accessibility APIs, cross-platform paths, and framework patterns.
13 other projects use a version of this.
Adopted by
Most recently taken up by
- kinhluan/skillstheir own version, first seen Nov 8, 2026
- salasebas/skillstheir own version, first seen Nov 8, 2026
- microsoft/agent-frameworktheir own version, first seen Oct 13, 2026
- tstapler/dotfilestheir own version, first seen Oct 10, 2026
- ProjAnvil/MindForgetheir own version, first seen Oct 9, 2026
- sammcj/agentic-codingtheir own version, first seen Oct 8, 2026
Used with
Projects with it also use javascript-typescript, typescript-development and 8 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
pepebot-spaceSkilljavascript-typescript
JavaScript and TypeScript development with ES6+, Node.js, React, and modern web frameworks. Use for frontend, backend, or full-stack JavaScript/TypeScript projects.
Also in 4 projects that use this
carloss765Skilltypescript-development
Comprehensive guidelines for writing type-safe, scalable TypeScript applications. Use when working with .ts files, TypeScript projects, or when adding type safety to JavaScript code.
Also in 4 projects that use this
kinhluanSkillgolang-development
Implement, review, debug, or modernize Go code and modules with idiomatic APIs, concurrency, error handling, testing, profiling, and tooling. Use for Go services, libraries, CLIs, goroutine/channel issues, module management, or performance work.
Also in 3 projects that use this
carloss765Skillrust-development
Comprehensive guidelines for writing safe, concurrent, and performant Rust code. Use when working with .rs files, building systems software, or high-performance applications.
Also in 3 projects that use this
harrissohail6Skilldatabase-design
Database schema design and SQL best practices. Use when designing tables, writing queries, or optimizing database performance.
Also in 3 projects that use this
NVIDIASkillgithub
Interact with GitHub using the gh CLI restricted to REST API only (no GraphQL). Use when the user wants to work with GitHub issues, pull requests, repos, releases, or Actions — especially in sandboxed environments where the GraphQL endpoint may be blocked. Trigger keywords - github, gh, pull request, PR, github issue, github actions, workflow, release, gh api.
Also in 3 projects that use this
Other versions13 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 13
- microsoft/agent-framework★ 15ksame name
- sammcj/agentic-coding★ 169same name
- d-padmanabhan/agent-engineering-handbook★ 17same name
- tstapler/dotfiles★ 8same name
- HK-hub/AgentSkills★ 6same name
- kinhluan/skills★ 6same name
- ProjAnvil/MindForge★ 3same name
- CODE-SAURABH/OpenSkills★ 2same name
- pepebot-space/skills★ 2same name
- carloss765/agent-skills★ 1same name
3 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository31 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .claude/AGENTS.mdAGENTS.md
- claude-code-plugin/AGENTS.mdAGENTS.md
- claude-code-plugin/CLAUDE.mdCLAUDE.md
- CLAUDE.mdCLAUDE.md
- .github/copilot-instructions.mdCopilot instructions
- accessibility-rulesSkill
- ci-integrationSkill
- cognitive-accessibilitySkill
- data-visualization-accessibilitySkill
- design-systemSkill
- document-scanningSkill
- email-accessibilitySkill
- framework-accessibilitySkill
- github-a11y-scannerSkill
- github-analytics-scoringSkill
- github-scanningSkill
- github-workflow-standardsSkill
- help-url-referenceSkill
- legal-compliance-mappingSkill
- lighthouse-scannerSkill
- markdown-accessibilitySkill
- media-accessibilitySkill
- mobile-accessibilitySkill
- office-remediationSkill
- playwright-testingSkill
- report-generationSkill
- severity-mappingSkill
- testing-strategySkill
- web-scanningSkill
- web-severity-scoringSkill
The file
We split this skill into the rules it gives an agent
9 rules. 0 are common, 2 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 10 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 141
String concatenation in loops: Use "".join() or io.StringIO instead.
- Very specific: line 145
GUI from worker thread: Always use wx.CallAfter() or wx.PostEvent().
- Very specific: line 147
Timer not stopped: Stop timers in EVT_CLOSE handler to prevent callbacks after destruction.
- Very specific: line 148
AUI not uninitialized: Call _mgr.UnInit() in close handler.
- Very specific: line 149
Dialog not destroyed: Use context managers (with MyDialog(...) as dlg:) for automatic cleanup.
- Distinctive: line 150
Wrong parent for sizer items: All controls in a sizer must have the same parent panel.
- Very specific: line 151
Absolute positioning: Never use SetPosition() or SetSize() for layout.
- Very specific: line 248
Every control has a meaningful name (preceding wx.StaticText for inputs, label= for buttons, SetToolTip() for image-only controls)
- Distinctive: line 259
When audit mode is activated, agents use these structured detection rule sets:
“Common” is measured: kept by at least 6 in 10 of the 10 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Python Development Skill
Reference data for the Developer Hub, Python Specialist, and wxPython Specialist agents.
Python Version Quick Reference
| Version | Key Features | EOL |
| 3.10 | match/case, X | Y unions, ParamSpec | Oct 2026 |
| 3.11 | Exception groups, Self type, tomllib, faster CPython | Oct 2027 |
| 3.12 | Type parameter syntax def f[T](), @override, f-string nesting | Oct 2028 |
| 3.13 | Experimental free-threaded mode, improved error messages | Oct 2029 |
| 3.14 | async pdb.set_trace_async(), template strings (PEP 750) | Oct 2030 |
pyproject.toml Skeleton
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "my-app"
version = "1.0.0"
requires-python = ">=3.10"
dependencies = []
[project.optional-dependencies]
dev = ["pytest>=8.0", "ruff>=0.6", "mypy>=1.11"]
[project.scripts]
myapp = "my_app.__main__:main"
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-ra --strict-markers"
[tool.ruff]
target-version = "py310"
line-length = 100
[tool.ruff.lint]
select = ["E", "F", "W", "I", "N", "UP", "B", "SIM", "TCH"]
[tool.mypy]
python_version = "3.10"
strict = truePyInstaller Quick Reference
One-File Mode
exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas,
name='MyApp', console=False, icon='icon.ico')One-Folder Mode
exe = EXE(pyz, a.scripts, exclude_binaries=True,
name='MyApp', console=False, icon='icon.ico')
coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, name='MyApp')Common Hidden Imports
pkg_resources.externaccessible_output2(for a11y desktop apps)keyring.backends(for credential storage)platformdirshttpx._transports/httpcore._backendsencodings(always needed)
wxPython Quick Reference
Sizer Cheat Sheet
| Sizer | When to Use |
wx.BoxSizer(wx.VERTICAL) | Stack items top-to-bottom |
wx.BoxSizer(wx.HORIZONTAL) | Lay items left-to-right |
wx.GridBagSizer(vgap, hgap) | Form layouts with labels + controls |
wx.FlexGridSizer(rows, cols, vgap, hgap) | Even grid layouts |
wx.WrapSizer | Flow layout that wraps |
wx.StaticBoxSizer(wx.VERTICAL, parent, "Label") | Grouped controls with border |
Thread-Safe GUI Updates
# From worker thread:
wx.CallAfter(self.update_status, "Done")
wx.PostEvent(self, CustomEvent(data=result))
# NEVER do this from a worker thread:
self.status_bar.SetStatusText("Done") # CRASH or CORRUPTIONStandard IDs
| ID | Purpose |
wx.ID_OK | OK button |
wx.ID_CANCEL | Cancel button |
wx.ID_SAVE | Save action |
wx.ID_OPEN | Open action |
wx.ID_EXIT | Exit / Quit |
wx.ID_HELP | Help action |
wx.ID_NEW | New document |
wx.ID_UNDO / wx.ID_REDO | Undo / Redo |
Event Types
| Event | Trigger |
wx.EVT_BUTTON | Button click |
wx.EVT_MENU | Menu item selected |
wx.EVT_CLOSE | Window close requested |
wx.EVT_SIZE | Window resized |
wx.EVT_TIMER | Timer fired |
wx.EVT_TEXT | Text control content changed |
wx.EVT_LIST_ITEM_SELECTED | List item selected |
wx.EVT_TREE_SEL_CHANGED | Tree selection changed |
wx.EVT_UPDATE_UI | UI state update check |
Common Pitfalls
Python
- Mutable default arguments:
def f(items=[])shares the list across calls. UseNoneand create inside. - Late binding closures:
lambda: xin a loop captures the variable, not the value. Uselambda x=x: x. - Circular imports: Move imports inside functions, use
TYPE_CHECKINGblock, or restructure modules. field()outside dataclass:field()is only valid inside@dataclassclasses. Use plain type annotations elsewhere.isvs==:ischecks identity,==checks equality. Useisonly forNone,True,False.- String concatenation in loops: Use
"".join()orio.StringIOinstead.
wxPython
- GUI from worker thread: Always use
wx.CallAfter()orwx.PostEvent(). - Missing
event.Skip(): Other handlers won't fire. Callevent.Skip()unless you intentionally consume the event. - Timer not stopped: Stop timers in
EVT_CLOSEhandler to prevent callbacks after destruction. - AUI not uninitialized: Call
_mgr.UnInit()in close handler. - Dialog not destroyed: Use context managers (
with MyDialog(...) as dlg:) for automatic cleanup. - Wrong parent for sizer items: All controls in a sizer must have the same parent panel.
- Absolute positioning: Never use
SetPosition()orSetSize()for layout. Always use sizers.
Cross-Platform Paths
from platformdirs import user_config_dir, user_data_dir, user_cache_dir
config = user_config_dir("MyApp", "MyCompany") # %APPDATA% / ~/Library/... / ~/.config/
data = user_data_dir("MyApp", "MyCompany")
cache = user_cache_dir("MyApp", "MyCompany")Testing Quick Reference
# Run all tests
pytest
# Run specific test file
pytest tests/test_queue.py
# Run specific test
pytest tests/test_queue.py::test_submit_job -v
# With coverage
pytest --cov=mypackage --cov-report=term-missing
# Stop on first failure
pytest -x
# Show locals on failure
pytest -lLogging Setup Template
import logging
def setup_logging(level: int = logging.INFO) -> None:
logging.basicConfig(
level=level,
format="%(asctime)s %(name)s %(levelname)s %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
# Quiet noisy libraries
logging.getLogger("httpx").setLevel(logging.WARNING)
logging.getLogger("httpcore").setLevel(logging.WARNING)Desktop Accessibility Quick Reference
Platform API Summary
| Platform | API | Python Binding | Use For |
| Windows | UI Automation (UIA) | comtypes, pywinauto | Modern apps, NVDA/Narrator |
| Windows | MSAA / IAccessible2 | comtypes, pywinauto | Legacy apps, JAWS |
| macOS | NSAccessibility | pyobjc | VoiceOver |
wxPython Accessibility Essentials
# Name every control that lacks a visible label
# CORRECT: use StaticText immediately before the control in the sizer
label = wx.StaticText(panel, label="Scan progress:")
# ctrl = wx.Gauge(panel) -- add label to sizer right before ctrl
# WRONG: SetName() is ignored by screen readers
# ctrl.SetName("Scan progress") -- only affects FindWindowByName()
# Tab order follows sizer insertion order; override with:
ctrl2.MoveAfterInTabOrder(ctrl1)
# Keyboard shortcuts via accelerator table
accel = wx.AcceleratorTable([
(wx.ACCEL_CTRL, ord('S'), wx.ID_SAVE),
(wx.ACCEL_CTRL, ord('Q'), wx.ID_EXIT),
])
frame.SetAcceleratorTable(accel)
# Platform-correct button order in dialogs
sizer.Add(dialog.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL))Screen Reader Interaction Model
Screen readers expose controls as: Name + Role + Value + State
| Property | wxPython Source | Example |
| Name | Preceding wx.StaticText, label= parameter, or SetToolTip() | "Scan progress" |
| Role | Widget type (automatic) | button, text field, list |
| Value | Widget content | "75%", "Hello world" |
| State | Widget flags | focused, disabled, checked |
Desktop A11y Checklist
- Every control has a meaningful name (preceding
wx.StaticTextfor inputs,label=for buttons,SetToolTip()for image-only controls) - Keyboard-only operation -- every action reachable via Tab/Enter/Space/arrows
- Focus visible -- never suppress focus indicators
- Tab order is logical (generally top-to-bottom, left-to-right)
- Color is not the sole information carrier
- High contrast mode supported (use system colors, not hardcoded)
- Dialogs use
CreateStdDialogButtonSizer()for platform-correct button order - AUI panes are keyboard-navigable
Structured Audit Rule Sets
When audit mode is activated, agents use these structured detection rule sets:
| Rule Prefix | Agent | Scope | Count |
| WX-A11Y-001..012 | wxpython-specialist | wxPython-specific patterns (StaticText labels, AcceleratorTable, mouse-only events, dialogs) | 12 rules |
| DTK-A11Y-001..012 | desktop-a11y-specialist | Platform-level API patterns (Name/Role/State/Value, focus, UIA/NSAccessibility) | 12 rules |
| TST-A11Y-001..010 | desktop-a11y-testing-coach | Test coverage gaps (automated tests, SR testing, keyboard plans, CI integration) | 10 rules |
Rule sets don't overlap -- WX covers wxPython widget patterns, DTK covers platform APIs, TST covers testing process gaps.
Agent Routing
For deeper expertise, the skill routes to these specialists:
desktop-a11y-specialist-- Platform API implementation, wx.Accessible, custom widget patterns (DTK-A11Y-* audit rules)desktop-a11y-testing-coach-- NVDA/JAWS/Narrator testing, Accessibility Insights, automated UIA tests (TST-A11Y-* audit rules)a11y-tool-builder-- Rule engine architecture, document parsers, severity scoring, report generators
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

