mirror of
				https://github.com/python-kasa/python-kasa.git
				synced 2025-10-31 04:31:54 +00:00 
			
		
		
		
	Remove experimental support (#1256)
This commit is contained in:
		| @@ -309,10 +309,6 @@ async def cli( | ||||
|     if debug: | ||||
|         logging.basicConfig(level=logging.DEBUG) | ||||
|  | ||||
|     from kasa.experimental import Experimental | ||||
|  | ||||
|     Experimental.set_enabled(True) | ||||
|  | ||||
|     credentials = Credentials(username=username, password=password) | ||||
|     if host is not None: | ||||
|         if discovery_info: | ||||
| @@ -356,8 +352,7 @@ async def cli( | ||||
|                 await handle_device(basedir, autosave, protocol, batch_size=batch_size) | ||||
|             else: | ||||
|                 raise KasaException( | ||||
|                     "Could not find a protocol for the given parameters. " | ||||
|                     + "Maybe you need to enable --experimental." | ||||
|                     "Could not find a protocol for the given parameters." | ||||
|                 ) | ||||
|         else: | ||||
|             click.echo("Host given, performing discovery on %s." % host) | ||||
|   | ||||
| @@ -16,7 +16,6 @@ if TYPE_CHECKING: | ||||
|     from kasa import Device | ||||
|  | ||||
| from kasa.deviceconfig import DeviceEncryptionType | ||||
| from kasa.experimental import Experimental | ||||
|  | ||||
| from .common import ( | ||||
|     SKIP_UPDATE_COMMANDS, | ||||
| @@ -220,14 +219,6 @@ def _legacy_type_to_class(_type: str) -> Any: | ||||
|     envvar="KASA_CREDENTIALS_HASH", | ||||
|     help="Hashed credentials used to authenticate to the device.", | ||||
| ) | ||||
| @click.option( | ||||
|     "--experimental/--no-experimental", | ||||
|     default=None, | ||||
|     is_flag=True, | ||||
|     type=bool, | ||||
|     envvar=Experimental.ENV_VAR, | ||||
|     help="Enable experimental mode for devices not yet fully supported.", | ||||
| ) | ||||
| @click.version_option(package_name="python-kasa") | ||||
| @click.pass_context | ||||
| async def cli( | ||||
| @@ -249,7 +240,6 @@ async def cli( | ||||
|     username, | ||||
|     password, | ||||
|     credentials_hash, | ||||
|     experimental, | ||||
| ): | ||||
|     """A tool for controlling TP-Link smart home devices."""  # noqa | ||||
|     # no need to perform any checks if we are just displaying the help | ||||
| @@ -261,12 +251,6 @@ async def cli( | ||||
|     if target != DEFAULT_TARGET and host: | ||||
|         error("--target is not a valid option for single host discovery") | ||||
|  | ||||
|     if experimental is not None: | ||||
|         Experimental.set_enabled(experimental) | ||||
|  | ||||
|     if Experimental.enabled(): | ||||
|         echo("Experimental support is enabled") | ||||
|  | ||||
|     logging_config: dict[str, Any] = { | ||||
|         "level": logging.DEBUG if debug > 0 else logging.INFO | ||||
|     } | ||||
| @@ -332,10 +316,6 @@ async def cli( | ||||
|         dev = _legacy_type_to_class(type)(host, config=config) | ||||
|     elif type in {"smart", "camera"} or (device_family and encrypt_type): | ||||
|         if type == "camera": | ||||
|             if not experimental: | ||||
|                 error( | ||||
|                     "Camera is an experimental type, please enable with --experimental" | ||||
|                 ) | ||||
|             encrypt_type = "AES" | ||||
|             https = True | ||||
|             device_family = "SMART.IPCAMERA" | ||||
|   | ||||
| @@ -129,7 +129,6 @@ from kasa.exceptions import ( | ||||
|     TimeoutError, | ||||
|     UnsupportedDeviceError, | ||||
| ) | ||||
| from kasa.experimental import Experimental | ||||
| from kasa.iot.iotdevice import IotDevice | ||||
| from kasa.json import DataClassJSONMixin | ||||
| from kasa.json import dumps as json_dumps | ||||
| @@ -589,9 +588,8 @@ class Discover: | ||||
|         main_device_families = { | ||||
|             Device.Family.SmartTapoPlug, | ||||
|             Device.Family.IotSmartPlugSwitch, | ||||
|             Device.Family.SmartIpCamera, | ||||
|         } | ||||
|         if Experimental.enabled(): | ||||
|             main_device_families.add(Device.Family.SmartIpCamera) | ||||
|         candidates: dict[ | ||||
|             tuple[type[BaseProtocol], type[BaseTransport], type[Device]], | ||||
|             tuple[BaseProtocol, DeviceConfig], | ||||
|   | ||||
| @@ -1,28 +0,0 @@ | ||||
| """Package for experimental.""" | ||||
|  | ||||
| from __future__ import annotations | ||||
|  | ||||
| import os | ||||
|  | ||||
|  | ||||
| class Experimental: | ||||
|     """Class for enabling experimental functionality.""" | ||||
|  | ||||
|     _enabled: bool | None = None | ||||
|     ENV_VAR = "KASA_EXPERIMENTAL" | ||||
|  | ||||
|     @classmethod | ||||
|     def set_enabled(cls, enabled: bool) -> None: | ||||
|         """Set the enabled value.""" | ||||
|         cls._enabled = enabled | ||||
|  | ||||
|     @classmethod | ||||
|     def enabled(cls) -> bool: | ||||
|         """Get the enabled value.""" | ||||
|         if cls._enabled is not None: | ||||
|             return cls._enabled | ||||
|  | ||||
|         if env_var := os.getenv(cls.ENV_VAR): | ||||
|             return env_var.lower() in {"true", "1", "t", "on"} | ||||
|  | ||||
|         return False | ||||
| @@ -84,9 +84,6 @@ include = [ | ||||
| [tool.coverage.run] | ||||
| source = ["kasa"] | ||||
| branch = true | ||||
| omit = [ | ||||
|   "kasa/experimental/*" | ||||
| ] | ||||
|  | ||||
| [tool.coverage.report] | ||||
| exclude_lines = [ | ||||
|   | ||||
| @@ -861,9 +861,6 @@ async def test_host_auth_failed(discovery_mock, mocker, runner): | ||||
| @pytest.mark.parametrize("device_type", TYPES) | ||||
| async def test_type_param(device_type, mocker, runner): | ||||
|     """Test for handling only one of username or password supplied.""" | ||||
|     if device_type == "camera": | ||||
|         pytest.skip(reason="camera is experimental") | ||||
|  | ||||
|     result_device = FileNotFoundError | ||||
|     pass_dev = click.make_pass_decorator(Device) | ||||
|  | ||||
| @@ -873,7 +870,9 @@ async def test_type_param(device_type, mocker, runner): | ||||
|         result_device = dev | ||||
|  | ||||
|     mocker.patch("kasa.cli.device.state", new=_state) | ||||
|     if device_type == "smart": | ||||
|     if device_type == "camera": | ||||
|         expected_type = SmartCamera | ||||
|     elif device_type == "smart": | ||||
|         expected_type = SmartDevice | ||||
|     else: | ||||
|         expected_type = _legacy_type_to_class(device_type) | ||||
| @@ -1253,39 +1252,3 @@ async def test_discover_config_invalid(mocker, runner): | ||||
|     ) | ||||
|     assert res.exit_code == 1 | ||||
|     assert "--target is not a valid option for single host discovery" in res.output | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize( | ||||
|     ("option", "env_var_value", "expectation"), | ||||
|     [ | ||||
|         pytest.param("--experimental", None, True), | ||||
|         pytest.param("--experimental", "false", True), | ||||
|         pytest.param(None, None, False), | ||||
|         pytest.param(None, "true", True), | ||||
|         pytest.param(None, "false", False), | ||||
|         pytest.param("--no-experimental", "true", False), | ||||
|     ], | ||||
| ) | ||||
| async def test_experimental_flags(mocker, option, env_var_value, expectation): | ||||
|     """Test the experimental flag is set correctly.""" | ||||
|     mocker.patch("kasa.discover.Discover.try_connect_all", return_value=None) | ||||
|  | ||||
|     # reset the class internal variable | ||||
|     from kasa.experimental import Experimental | ||||
|  | ||||
|     Experimental._enabled = None | ||||
|  | ||||
|     KASA_VARS = {k: None for k, v in os.environ.items() if k.startswith("KASA_")} | ||||
|     if env_var_value: | ||||
|         KASA_VARS["KASA_EXPERIMENTAL"] = env_var_value | ||||
|     args = [ | ||||
|         "--host", | ||||
|         "127.0.0.2", | ||||
|         "discover", | ||||
|         "config", | ||||
|     ] | ||||
|     if option: | ||||
|         args.insert(0, option) | ||||
|     runner = CliRunner(env=KASA_VARS) | ||||
|     res = await runner.invoke(cli, args) | ||||
|     assert ("Experimental support is enabled" in res.output) is expectation | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Steven B.
					Steven B.