Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
community-access avatar

Python Development

  • 132 installs
  • 381 repo stars
  • Updated August 4, 2026
  • community-access/accessibility-agents

Authoring Python services, scripts, and agent tooling that automate accessibility audits, parse reports, and integrate remediation workflows into CI or review bots.

About

Covers Python development within the accessibility-agents ecosystem: building scanners, parsers, scoring helpers, and integration scripts that agents invoke to detect issues, rank severity, and propose concrete WCAG fixes in automated pipelines.

  • Python agents for a11y automation
  • Report parsing and remediation hooks
  • CI-friendly scripting patterns
  • API integration for audit tools
  • Extends accessibility-agents repo workflows

Python Development by the numbers

  • 132 all-time installs (skills.sh)
  • Ranked #88 of 290 Python skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/community-access/accessibility-agents --skill python-development

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs132
repo stars381
Last updatedAugust 4, 2026
Repositorycommunity-access/accessibility-agents

What it does

Authoring Python services, scripts, and agent tooling that automate accessibility audits, parse reports, and integrate remediation workflows into CI or review bots.

Files

SKILL.mdMarkdownGitHub ↗

<!-- CANONICAL SOURCE: .github/skills/python-development/SKILL.md -- Edit the canonical source; sync to Gemini via scripts/check-gemini-sync.ps1 -->

Python Development Skill

Reference data for the Developer Hub, Python Specialist, and wxPython Specialist agents.

Python Version Quick Reference

VersionKey FeaturesEOL
3.10match/case, `X \Y unions, ParamSpec`
3.11Exception groups, Self type, tomllib, faster CPythonOct 2027
3.12Type parameter syntax def f[T](), @override, f-string nestingOct 2028
3.13Experimental free-threaded mode, improved error messagesOct 2029
3.14async 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 = true

PyInstaller 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.extern
  • accessible_output2 (for a11y desktop apps)
  • keyring.backends (for credential storage)
  • platformdirs
  • httpx._transports / httpcore._backends
  • encodings (always needed)

wxPython Quick Reference

Sizer Cheat Sheet

SizerWhen 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.WrapSizerFlow 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 CORRUPTION

Standard IDs

IDPurpose
wx.ID_OKOK button
wx.ID_CANCELCancel button
wx.ID_SAVESave action
wx.ID_OPENOpen action
wx.ID_EXITExit / Quit
wx.ID_HELPHelp action
wx.ID_NEWNew document
wx.ID_UNDO / wx.ID_REDOUndo / Redo

Event Types

EventTrigger
wx.EVT_BUTTONButton click
wx.EVT_MENUMenu item selected
wx.EVT_CLOSEWindow close requested
wx.EVT_SIZEWindow resized
wx.EVT_TIMERTimer fired
wx.EVT_TEXTText control content changed
wx.EVT_LIST_ITEM_SELECTEDList item selected
wx.EVT_TREE_SEL_CHANGEDTree selection changed
wx.EVT_UPDATE_UIUI state update check

Common Pitfalls

Python

  • Mutable default arguments: def f(items=[]) shares the list across calls. Use None and create inside.
  • Late binding closures: lambda: x in a loop captures the variable, not the value. Use lambda x=x: x.
  • Circular imports: Move imports inside functions, use TYPE_CHECKING block, or restructure modules.
  • `field()` outside dataclass: field() is only valid inside @dataclass classes. Use plain type annotations elsewhere.
  • `is` vs `==`: is checks identity, == checks equality. Use is only for None, True, False.
  • String concatenation in loops: Use "".join() or io.StringIO instead.

wxPython

  • GUI from worker thread: Always use wx.CallAfter() or wx.PostEvent().
  • Missing `event.Skip()`: Other handlers won't fire. Call event.Skip() unless you intentionally consume the event.
  • Timer not stopped: Stop timers in EVT_CLOSE handler 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() or SetSize() 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 -l

Logging 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

PlatformAPIPython Binding
WindowsUI Automationcomtypes + UIAutomationCore
WindowsMSAA/IAccessible2pyia2, comtypes
macOSNSAccessibilitypyobjc-framework-Cocoa

wxPython Accessibility

# Set accessible name (screen reader label)
control.SetLabel("Descriptive Label")

# Set accessible description (supplementary info)
# Use wx.AccessibleDescription or wx.Accessible subclass

# Keyboard navigation
control.SetFocus()           # Move focus programmatically
panel.SetFocusIgnoringChildren()  # Focus the panel itself

Related skills

Pythonbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.