From 6a750fde887ccbaeeb8e3a5d6e369b35a1ee006d Mon Sep 17 00:00:00 2001 From: manish soni Date: Thu, 28 Aug 2025 11:45:30 +0530 Subject: [PATCH 1/3] fix: standardize mode parameter across all APIs - Update client.py to use 'mode' instead of 'device_mode' for consistency - Update device_activity.py to pass 'mode' parameter consistently - All APIs (Device Activity and Order) now use unified 'mode' parameter - Eliminates confusion between 'mode' and 'device_mode' parameters - Maintains backward compatibility through **kwargs pattern --- razorpay/client.py | 6 +++--- razorpay/resources/device_activity.py | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/razorpay/client.py b/razorpay/client.py index d77e795..c82dfde 100644 --- a/razorpay/client.py +++ b/razorpay/client.py @@ -125,11 +125,11 @@ def request(self, method, path, **options): auth_to_use = (self.auth[0], '') # Use key_id only, empty key_secret # Inject device mode header if provided - device_mode = options.pop('device_mode', None) - if device_mode is not None: + mode = options.pop('mode', None) + if mode is not None: if 'headers' not in options: options['headers'] = {} - options['headers']['X-Razorpay-Device-Mode'] = device_mode + options['headers']['X-Razorpay-Device-Mode'] = mode url = "{}{}".format(self.base_url, path) diff --git a/razorpay/resources/device_activity.py b/razorpay/resources/device_activity.py index 722cbf6..44560fc 100644 --- a/razorpay/resources/device_activity.py +++ b/razorpay/resources/device_activity.py @@ -41,10 +41,10 @@ def create(self, data: Dict[str, Any], mode: Optional[str] = None, **kwargs) -> Returns: DeviceActivity object """ - device_mode = self._validate_device_mode(mode) + validated_mode = self._validate_device_mode(mode) url = self.base_url - return self.post_url(url, data, device_mode=device_mode, use_public_auth=True, **kwargs) + return self.post_url(url, data, mode=validated_mode, use_public_auth=True, **kwargs) def get_status(self, activity_id: str, mode: Optional[str] = None, **kwargs) -> Dict[str, Any]: """ @@ -60,7 +60,7 @@ def get_status(self, activity_id: str, mode: Optional[str] = None, **kwargs) -> if not activity_id: raise BadRequestError("Activity ID must be provided") - device_mode = self._validate_device_mode(mode) + validated_mode = self._validate_device_mode(mode) url = f"{self.base_url}/{activity_id}" - return self.get_url(url, {}, device_mode=device_mode, use_public_auth=True, **kwargs) \ No newline at end of file + return self.get_url(url, {}, mode=validated_mode, use_public_auth=True, **kwargs) \ No newline at end of file From 90b860fa9eeaa889f432c7c1ac70fb54703f30ce Mon Sep 17 00:00:00 2001 From: manish soni Date: Thu, 28 Aug 2025 14:18:56 +0530 Subject: [PATCH 2/3] fix: standardize device_mode parameter across all APIs - Update client.py to use device_mode instead of mode parameter - Update device_activity.py method signatures to use device_mode - Update tests to use device_mode consistently - Ensure consistent parameter naming across Device Activity and Order APIs --- razorpay/client.py | 6 +++--- razorpay/resources/device_activity.py | 16 ++++++++-------- tests/test_client_device_activity.py | 8 ++++---- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/razorpay/client.py b/razorpay/client.py index c82dfde..d77e795 100644 --- a/razorpay/client.py +++ b/razorpay/client.py @@ -125,11 +125,11 @@ def request(self, method, path, **options): auth_to_use = (self.auth[0], '') # Use key_id only, empty key_secret # Inject device mode header if provided - mode = options.pop('mode', None) - if mode is not None: + device_mode = options.pop('device_mode', None) + if device_mode is not None: if 'headers' not in options: options['headers'] = {} - options['headers']['X-Razorpay-Device-Mode'] = mode + options['headers']['X-Razorpay-Device-Mode'] = device_mode url = "{}{}".format(self.base_url, path) diff --git a/razorpay/resources/device_activity.py b/razorpay/resources/device_activity.py index 44560fc..2040cfb 100644 --- a/razorpay/resources/device_activity.py +++ b/razorpay/resources/device_activity.py @@ -30,29 +30,29 @@ def _validate_device_mode(self, mode: Optional[str]) -> Optional[str]: return mode return None - def create(self, data: Dict[str, Any], mode: Optional[str] = None, **kwargs) -> Dict[str, Any]: + def create(self, data: Dict[str, Any], device_mode: Optional[str] = None, **kwargs) -> Dict[str, Any]: """ Create a new device activity for POS gateway Args: data: Dictionary containing device activity data in the format expected by rzp-pos-gateway - mode: Device communication mode ("wired" or "wireless") + device_mode: Device communication mode ("wired" or "wireless") Returns: DeviceActivity object """ - validated_mode = self._validate_device_mode(mode) + validated_mode = self._validate_device_mode(device_mode) url = self.base_url - return self.post_url(url, data, mode=validated_mode, use_public_auth=True, **kwargs) + return self.post_url(url, data, device_mode=validated_mode, use_public_auth=True, **kwargs) - def get_status(self, activity_id: str, mode: Optional[str] = None, **kwargs) -> Dict[str, Any]: + def get_status(self, activity_id: str, device_mode: Optional[str] = None, **kwargs) -> Dict[str, Any]: """ Get the status of a device activity Args: activity_id: Activity ID to fetch status for - mode: Device communication mode ("wired" or "wireless") + device_mode: Device communication mode ("wired" or "wireless") Returns: DeviceActivity object with current status @@ -60,7 +60,7 @@ def get_status(self, activity_id: str, mode: Optional[str] = None, **kwargs) -> if not activity_id: raise BadRequestError("Activity ID must be provided") - validated_mode = self._validate_device_mode(mode) + validated_mode = self._validate_device_mode(device_mode) url = f"{self.base_url}/{activity_id}" - return self.get_url(url, {}, mode=validated_mode, use_public_auth=True, **kwargs) \ No newline at end of file + return self.get_url(url, {}, device_mode=validated_mode, use_public_auth=True, **kwargs) \ No newline at end of file diff --git a/tests/test_client_device_activity.py b/tests/test_client_device_activity.py index ca64f13..b2c6950 100644 --- a/tests/test_client_device_activity.py +++ b/tests/test_client_device_activity.py @@ -22,7 +22,7 @@ def test_create_device_activity(self): url = self.device_activity_base_url responses.add(responses.POST, url, status=200, body=json.dumps(result), match_querystring=True) - self.assertEqual(self.public_client.device_activity.create({'foo': 'bar'}, mode='wired'), result) + self.assertEqual(self.public_client.device_activity.create({'foo': 'bar'}, device_mode='wired'), result) @responses.activate def test_get_status_device_activity(self): @@ -31,8 +31,8 @@ def test_get_status_device_activity(self): url = f"{self.device_activity_base_url}/{activity_id}" responses.add(responses.GET, url, status=200, body=json.dumps(result), match_querystring=True) - self.assertEqual(self.public_client.device_activity.get_status(activity_id, mode='wireless'), result) + self.assertEqual(self.public_client.device_activity.get_status(activity_id, device_mode='wireless'), result) - def test_invalid_mode_raises(self): + def test_invalid_device_mode_raises(self): with self.assertRaises(BadRequestError): - self.public_client.device_activity.create({'foo': 'bar'}, mode='invalid') \ No newline at end of file + self.public_client.device_activity.create({'foo': 'bar'}, device_mode='invalid') \ No newline at end of file From c7b121460e13a755d09a8574d43e32bf16a3e355 Mon Sep 17 00:00:00 2001 From: manish soni Date: Thu, 28 Aug 2025 14:21:32 +0530 Subject: [PATCH 3/3] fix: update _validate_device_mode parameter name to device_mode - Change parameter name from 'mode' to 'device_mode' in _validate_device_mode method - Update docstring and all references for consistency - Ensure complete device_mode parameter standardization --- razorpay/resources/device_activity.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/razorpay/resources/device_activity.py b/razorpay/resources/device_activity.py index 2040cfb..fb0ecdd 100644 --- a/razorpay/resources/device_activity.py +++ b/razorpay/resources/device_activity.py @@ -11,23 +11,23 @@ def __init__(self, client=None): super(DeviceActivity, self).__init__(client) self.base_url = URL.V1 + URL.DEVICE_ACTIVITY_URL - def _validate_device_mode(self, mode: Optional[str]) -> Optional[str]: + def _validate_device_mode(self, device_mode: Optional[str]) -> Optional[str]: """ Validate device communication mode Args: - mode: Device communication mode ("wired" or "wireless") + device_mode: Device communication mode ("wired" or "wireless") Returns: - Validated mode or None if mode is None + Validated device_mode or None if device_mode is None Raises: - BadRequestError: If mode is invalid + BadRequestError: If device_mode is invalid """ - if mode is not None: - if mode not in (DeviceMode.WIRED, DeviceMode.WIRELESS): + if device_mode is not None: + if device_mode not in (DeviceMode.WIRED, DeviceMode.WIRELESS): raise BadRequestError("Invalid device mode. Allowed values are 'wired' and 'wireless'.") - return mode + return device_mode return None def create(self, data: Dict[str, Any], device_mode: Optional[str] = None, **kwargs) -> Dict[str, Any]: