From 6de151868e3f5aec2b7450b71f33429f87e380cd Mon Sep 17 00:00:00 2001 From: Tyagiquamar Date: Sat, 19 Sep 2026 01:59:50 +0530 Subject: [PATCH] fix config: honor explicit args instead of returning cached default --- test/test_configuration.py | 44 ++++++++++++++++++++++++++++++++++ upstox_client/configuration.py | 3 +++ 2 files changed, 47 insertions(+) create mode 100644 test/test_configuration.py diff --git a/test/test_configuration.py b/test/test_configuration.py new file mode 100644 index 0000000..21ad6ce --- /dev/null +++ b/test/test_configuration.py @@ -0,0 +1,44 @@ +# coding: utf-8 +"""Unit tests for Configuration sandbox/live switching (no network).""" + +import unittest + +from upstox_client.configuration import Configuration + + +class TestConfigurationSandboxSwitch(unittest.TestCase): + def setUp(self): + Configuration._default = None + + def tearDown(self): + Configuration._default = None + + def test_sandbox_flag_honored_after_live_default_cached(self): + live = Configuration() + self.assertEqual(live.host, "https://api.upstox.com") + sandbox = Configuration(sandbox=True) + self.assertTrue(sandbox.sandbox) + self.assertEqual(sandbox.host, "https://api-sandbox.upstox.com") + self.assertEqual(sandbox.order_host, "https://api-sandbox.upstox.com") + + def test_positional_sandbox_arg_honored(self): + Configuration() + sandbox = Configuration(True) + self.assertEqual(sandbox.host, "https://api-sandbox.upstox.com") + + def test_bare_calls_still_share_cached_default(self): + first = Configuration() + second = Configuration() + self.assertIsNot(first, second) + self.assertEqual(first.host, second.host) + self.assertEqual(first.host, "https://api.upstox.com") + + def test_explicit_live_after_sandbox(self): + Configuration(sandbox=True) + live = Configuration(sandbox=False) + self.assertEqual(live.host, "https://api.upstox.com") + self.assertEqual(live.order_host, "https://api-hft.upstox.com") + + +if __name__ == "__main__": + unittest.main() diff --git a/upstox_client/configuration.py b/upstox_client/configuration.py index 857ad7d..039a47f 100644 --- a/upstox_client/configuration.py +++ b/upstox_client/configuration.py @@ -30,6 +30,9 @@ def __init__(cls, name, bases, dct): def __call__(cls, *args, **kwargs): if cls._default is None: cls._default = type.__call__(cls, *args, **kwargs) + return copy.copy(cls._default) + if args or kwargs: + return type.__call__(cls, *args, **kwargs) return copy.copy(cls._default) def set_default(cls, default):