1+ from typing import Any , Dict , Optional
2+
3+ from .base import Resource
4+ from ..constants .url import URL
5+ from ..constants .device import DeviceMode
6+ from ..errors import BadRequestError
7+
8+
9+ class DeviceActivity (Resource ):
10+ def __init__ (self , client = None ):
11+ super (DeviceActivity , self ).__init__ (client )
12+ self .base_url = URL .V1 + URL .DEVICE_ACTIVITY_URL
13+
14+ def _validate_device_mode (self , mode : Optional [str ]) -> Optional [str ]:
15+ """
16+ Validate device communication mode
17+
18+ Args:
19+ mode: Device communication mode ("wired" or "wireless")
20+
21+ Returns:
22+ Validated mode or None if mode is None
23+
24+ Raises:
25+ BadRequestError: If mode is invalid
26+ """
27+ if mode is not None :
28+ if mode not in (DeviceMode .WIRED , DeviceMode .WIRELESS ):
29+ raise BadRequestError ("Invalid device mode. Allowed values are 'wired' and 'wireless'." )
30+ return mode
31+ return None
32+
33+ def create (self , data : Dict [str , Any ], mode : Optional [str ] = None , ** kwargs ) -> Dict [str , Any ]:
34+ """
35+ Create a new device activity for POS gateway
36+
37+ Args:
38+ data: Dictionary containing device activity data in the format expected by rzp-pos-gateway
39+ mode: Device communication mode ("wired" or "wireless")
40+
41+ Returns:
42+ DeviceActivity object
43+ """
44+ device_mode = self ._validate_device_mode (mode )
45+
46+ url = self .base_url
47+ return self .post_url (url , data , device_mode = device_mode , use_public_auth = True , ** kwargs )
48+
49+ def get_status (self , activity_id : str , mode : Optional [str ] = None , ** kwargs ) -> Dict [str , Any ]:
50+ """
51+ Get the status of a device activity
52+
53+ Args:
54+ activity_id: Activity ID to fetch status for
55+ mode: Device communication mode ("wired" or "wireless")
56+
57+ Returns:
58+ DeviceActivity object with current status
59+ """
60+ if not activity_id :
61+ raise BadRequestError ("Activity ID must be provided" )
62+
63+ device_mode = self ._validate_device_mode (mode )
64+
65+ url = f"{ self .base_url } /{ activity_id } "
66+ return self .get_url (url , {}, device_mode = device_mode , use_public_auth = True , ** kwargs )
0 commit comments