Accessibility

This module provides accessibility enhancements for QR code generation.

Accessibility System

Accessibility enhancement subsystem.

This package provides comprehensive accessibility features for QR code generation, ensuring compliance with accessibility standards and best practices for assistive technologies.

Key Components:

ARIA Support:
  • Role definitions and management

  • Label and description generation

  • Live region support

ID Management:
  • Stable, predictable ID generation

  • Configurable prefixes and schemes

  • Conflict resolution

Screen Reader Optimization:
  • Semantic SVG structure

  • Alternative text generation

  • Content description

Keyboard Navigation:
  • Focus management

  • Tab order optimization

  • Keyboard shortcuts

The accessibility subsystem handles:

  • ARIA attribute management

  • Screen reader compatibility

  • Keyboard navigation support

  • ID generation and management

  • Accessibility validation

  • WCAG compliance checking

  • Alternative content generation

Example

Basic accessibility enhancement:

from segnomms.a11y import AccessibilityEnhancer, ARIARole

enhancer = AccessibilityEnhancer(
    id_prefix="qr",
    default_role=ARIARole.IMG
)

# Generate stable IDs
module_id = enhancer.generate_id("module", 5, 3)

# Add ARIA attributes
aria_attrs = enhancer.get_aria_attributes(
    role=ARIARole.GRAPHICS_OBJECT,
    label="QR code module at position 5,3"
)

See also

segnomms.a11y.accessibility: Core accessibility features

class segnomms.a11y.AccessibilityEnhancer(config)[source]

Bases: object

Enhances SVG elements with comprehensive accessibility features.

Parameters:

config (AccessibilityConfig)

__init__(config)[source]
Parameters:

config (AccessibilityConfig)

create_description_element(parent_element, description, ref_id)[source]

Create a description element and return its ID.

Return type:

str

Parameters:
  • parent_element (Any)

  • description (str)

  • ref_id (str)

enhance_module_element(element, row, col, module_type='data')[source]

Enhance a QR module element with accessibility features.

Return type:

ElementAccessibility

Parameters:
enhance_pattern_group(group_element, pattern_type, index=0)[source]

Enhance a pattern group (finder, timing, etc.) with accessibility.

Return type:

ElementAccessibility

Parameters:
  • group_element (Any)

  • pattern_type (str)

  • index (int)

enhance_root_element(svg_element, title=None, description=None)[source]

Enhance the root SVG element with accessibility features.

Return type:

ElementAccessibility

Parameters:
  • svg_element (Element)

  • title (str | None)

  • description (str | None)

generate_accessibility_report()[source]

Generate a report of accessibility features applied.

Return type:

Dict[str, Any]

validate_accessibility(svg_root=None)[source]

Validate accessibility implementation and return issues.

Return type:

List[str]

Parameters:

svg_root (Any | None)

class segnomms.a11y.ARIARole(*values)[source]

Bases: str, Enum

Standard ARIA roles for QR code elements.

IMG = 'img'
GRAPHICS_DOCUMENT = 'graphics-document'
GRAPHICS_OBJECT = 'graphics-object'
APPLICATION = 'application'
GROUP = 'group'
PRESENTATION = 'presentation'
class segnomms.a11y.AccessibilityConfig(**data)[source]

Bases: BaseModel

Comprehensive accessibility configuration.

Parameters:
  • enabled (bool)

  • id_prefix (str)

  • use_stable_ids (bool)

  • include_coordinates (bool)

  • enable_aria (bool)

  • root_role (ARIARole)

  • module_role (ARIARole | None)

  • root_label (str)

  • root_description (str | None)

  • include_module_labels (bool)

  • include_pattern_labels (bool)

  • optimize_for_screen_readers (bool)

  • group_similar_elements (bool)

  • add_structural_markup (bool)

  • enable_keyboard_navigation (bool)

  • focus_visible_elements (List[str])

  • target_compliance (AccessibilityLevel)

  • custom_attributes (Dict[str, str])

model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'validate_default': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

classmethod validate_focus_elements(v)[source]

Validate focus element names.

Return type:

List[str]

Parameters:

v (List[str])

classmethod validate_id_prefix(v)[source]

Validate ID prefix follows HTML standards.

Return type:

str

Parameters:

v (str)

enabled: bool
id_prefix: str
use_stable_ids: bool
include_coordinates: bool
enable_aria: bool
root_role: ARIARole
module_role: Optional[ARIARole]
root_label: str
root_description: Optional[str]
include_module_labels: bool
include_pattern_labels: bool
optimize_for_screen_readers: bool
group_similar_elements: bool
add_structural_markup: bool
enable_keyboard_navigation: bool
focus_visible_elements: List[str]
target_compliance: AccessibilityLevel
custom_attributes: Dict[str, str]

Accessibility Enhancer

class segnomms.a11y.AccessibilityEnhancer(config)[source]

Bases: object

Enhances SVG elements with comprehensive accessibility features.

Parameters:

config (AccessibilityConfig)

__init__(config)[source]
Parameters:

config (AccessibilityConfig)

enhance_root_element(svg_element, title=None, description=None)[source]

Enhance the root SVG element with accessibility features.

Return type:

ElementAccessibility

Parameters:
  • svg_element (Element)

  • title (str | None)

  • description (str | None)

enhance_module_element(element, row, col, module_type='data')[source]

Enhance a QR module element with accessibility features.

Return type:

ElementAccessibility

Parameters:
enhance_pattern_group(group_element, pattern_type, index=0)[source]

Enhance a pattern group (finder, timing, etc.) with accessibility.

Return type:

ElementAccessibility

Parameters:
  • group_element (Any)

  • pattern_type (str)

  • index (int)

create_description_element(parent_element, description, ref_id)[source]

Create a description element and return its ID.

Return type:

str

Parameters:
  • parent_element (Any)

  • description (str)

  • ref_id (str)

generate_accessibility_report()[source]

Generate a report of accessibility features applied.

Return type:

Dict[str, Any]

validate_accessibility(svg_root=None)[source]

Validate accessibility implementation and return issues.

Return type:

List[str]

Parameters:

svg_root (Any | None)

ARIA Roles

class segnomms.a11y.ARIARole(*values)[source]

Bases: str, Enum

Standard ARIA roles for QR code elements.

IMG = 'img'
GRAPHICS_DOCUMENT = 'graphics-document'
GRAPHICS_OBJECT = 'graphics-object'
APPLICATION = 'application'
GROUP = 'group'
PRESENTATION = 'presentation'

Configuration

class segnomms.a11y.AccessibilityConfig(**data)[source]

Bases: BaseModel

Comprehensive accessibility configuration.

Parameters:
  • enabled (bool)

  • id_prefix (str)

  • use_stable_ids (bool)

  • include_coordinates (bool)

  • enable_aria (bool)

  • root_role (ARIARole)

  • module_role (ARIARole | None)

  • root_label (str)

  • root_description (str | None)

  • include_module_labels (bool)

  • include_pattern_labels (bool)

  • optimize_for_screen_readers (bool)

  • group_similar_elements (bool)

  • add_structural_markup (bool)

  • enable_keyboard_navigation (bool)

  • focus_visible_elements (List[str])

  • target_compliance (AccessibilityLevel)

  • custom_attributes (Dict[str, str])

model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'validate_default': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

enabled: bool
id_prefix: str
use_stable_ids: bool
include_coordinates: bool
enable_aria: bool
root_role: ARIARole
module_role: Optional[ARIARole]
root_label: str
root_description: Optional[str]
include_module_labels: bool
include_pattern_labels: bool
optimize_for_screen_readers: bool
group_similar_elements: bool
add_structural_markup: bool
enable_keyboard_navigation: bool
focus_visible_elements: List[str]
target_compliance: AccessibilityLevel
custom_attributes: Dict[str, str]
classmethod validate_id_prefix(v)[source]

Validate ID prefix follows HTML standards.

Return type:

str

Parameters:

v (str)

classmethod validate_focus_elements(v)[source]

Validate focus element names.

Return type:

List[str]

Parameters:

v (List[str])

Example Usage

Basic accessibility enhancement:

from segnomms.a11y import AccessibilityEnhancer, ARIARole

enhancer = AccessibilityEnhancer(
    id_prefix="qr",
    default_role=ARIARole.IMG
)

# Generate stable IDs
module_id = enhancer.generate_id("module", 5, 3)

# Add ARIA attributes
aria_attrs = enhancer.get_aria_attributes(
    role=ARIARole.GRAPHICS_OBJECT,
    label="QR code module at position 5,3"
)

Configuration setup:

from segnomms.a11y import AccessibilityConfig

config = AccessibilityConfig(
    enable_aria=True,
    enable_screen_reader=True,
    enable_keyboard_nav=True,
    default_title="Interactive QR Code",
    default_description="Scannable QR code with custom styling"
)