1.9 KiB
1.9 KiB
AlpineBits Action Mapping System
Problem Solved
The AlpineBits specification uses different names for the same action:
- Capability JSON:
"action_OTA_Read"(advertised in handshake) - Request Action:
"OTA_Read:GuestRequests"(actual request parameter)
Solution Architecture
1. Enhanced AlpineBitsActionName Enum
# Maps capability names to request names
OTA_READ = ("action_OTA_Read", ["OTA_Read:GuestRequests", "OTA_Read"])
2. Automatic Action Discovery
ServerCapabilitiesscans for implemented actions- Only includes actions with overridden
handle()methods - Generates capability JSON using capability names
3. Request Routing
AlpineBitsServer.handle_request()accepts request action names- Maps request names back to capability names
- Routes to appropriate action handler
- Validates version support
Key Features
✅ Automatic Discovery: New action implementations are automatically detected ✅ Name Mapping: Handles capability vs request name differences ✅ Version Support: Actions can support multiple versions ✅ Error Handling: Proper HTTP status codes (200, 400, 401, 500) ✅ Capability Generation: Dynamic JSON generation for handshakes
Usage Example
# Server automatically discovers implemented actions
server = AlpineBitsServer()
# Handle request with different name format
response = await server.handle_request(
"OTA_Read:GuestRequests", # Request name
xml_content,
"2024-10"
)
# Capability JSON uses "action_OTA_Read" automatically
capabilities = server.get_capabilities_json()
Adding New Actions
- Create action class inheriting from
AlpineBitsAction - Add mapping to
AlpineBitsActionNameenum - Implement
handle()method - Deploy - action automatically appears in capabilities
The system is now production-ready for handling AlpineBits protocol quirks!