matter-python-client 1.3.3__tar.gz → 1.4.0a0.dev20260731__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/PKG-INFO +1 -1
  2. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_python_client.egg-info/PKG-INFO +1 -1
  3. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_python_client.egg-info/SOURCES.txt +1 -0
  4. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/client/client.py +25 -0
  5. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/common/models.py +74 -0
  6. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/pyproject.toml +1 -1
  7. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/tests/test_integration.py +2 -2
  8. matter_python_client-1.4.0a0.dev20260731/tests/test_network_topology.py +194 -0
  9. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/README.md +0 -0
  10. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/ChipUtility.py +0 -0
  11. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/__init__.py +0 -0
  12. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/ClusterObjects.py +0 -0
  13. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/Objects.py +0 -0
  14. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/Types.py +0 -0
  15. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/__init__.py +0 -0
  16. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/AccessControl.py +0 -0
  17. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/AccountLogin.py +0 -0
  18. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Actions.py +0 -0
  19. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ActivatedCarbonFilterMonitoring.py +0 -0
  20. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/AdministratorCommissioning.py +0 -0
  21. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/AirQuality.py +0 -0
  22. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/AmbientContextSensing.py +0 -0
  23. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ApplicationBasic.py +0 -0
  24. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ApplicationLauncher.py +0 -0
  25. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/AudioOutput.py +0 -0
  26. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/BasicInformation.py +0 -0
  27. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Binding.py +0 -0
  28. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/BooleanState.py +0 -0
  29. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/BooleanStateConfiguration.py +0 -0
  30. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/BridgedDeviceBasicInformation.py +0 -0
  31. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/CameraAvSettingsUserLevelManagement.py +0 -0
  32. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/CameraAvStreamManagement.py +0 -0
  33. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/CarbonDioxideConcentrationMeasurement.py +0 -0
  34. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/CarbonMonoxideConcentrationMeasurement.py +0 -0
  35. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Channel.py +0 -0
  36. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Chime.py +0 -0
  37. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ClosureControl.py +0 -0
  38. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ClosureDimension.py +0 -0
  39. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ColorControl.py +0 -0
  40. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/CommissionerControl.py +0 -0
  41. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/CommodityMetering.py +0 -0
  42. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/CommodityPrice.py +0 -0
  43. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/CommodityTariff.py +0 -0
  44. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ContentAppObserver.py +0 -0
  45. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ContentControl.py +0 -0
  46. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ContentLauncher.py +0 -0
  47. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Descriptor.py +0 -0
  48. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/DeviceEnergyManagement.py +0 -0
  49. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/DeviceEnergyManagementMode.py +0 -0
  50. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/DiagnosticLogs.py +0 -0
  51. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/DishwasherAlarm.py +0 -0
  52. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/DishwasherMode.py +0 -0
  53. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/DoorLock.py +0 -0
  54. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/DraftElectricalMeasurementCluster.py +0 -0
  55. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/EcosystemInformation.py +0 -0
  56. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ElectricalEnergyMeasurement.py +0 -0
  57. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ElectricalGridConditions.py +0 -0
  58. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ElectricalPowerMeasurement.py +0 -0
  59. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/EnergyEvse.py +0 -0
  60. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/EnergyEvseMode.py +0 -0
  61. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/EnergyPreference.py +0 -0
  62. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/EthernetNetworkDiagnostics.py +0 -0
  63. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/EveCluster.py +0 -0
  64. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/FanControl.py +0 -0
  65. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/FixedLabel.py +0 -0
  66. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/FlowMeasurement.py +0 -0
  67. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/FormaldehydeConcentrationMeasurement.py +0 -0
  68. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/GeneralCommissioning.py +0 -0
  69. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/GeneralDiagnostics.py +0 -0
  70. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Globals.py +0 -0
  71. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/GroupKeyManagement.py +0 -0
  72. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Groupcast.py +0 -0
  73. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Groups.py +0 -0
  74. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/HeimanCluster.py +0 -0
  75. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/HepaFilterMonitoring.py +0 -0
  76. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/IcdManagement.py +0 -0
  77. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Identify.py +0 -0
  78. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/IlluminanceMeasurement.py +0 -0
  79. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/InovelliCluster.py +0 -0
  80. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/JointFabricAdministrator.py +0 -0
  81. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/JointFabricDatastore.py +0 -0
  82. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/KeypadInput.py +0 -0
  83. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/LaundryDryerControls.py +0 -0
  84. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/LaundryWasherControls.py +0 -0
  85. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/LaundryWasherMode.py +0 -0
  86. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/LevelControl.py +0 -0
  87. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/LocalizationConfiguration.py +0 -0
  88. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/LowPower.py +0 -0
  89. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/MediaInput.py +0 -0
  90. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/MediaPlayback.py +0 -0
  91. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Messages.py +0 -0
  92. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/MeterIdentification.py +0 -0
  93. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/MicrowaveOvenControl.py +0 -0
  94. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/MicrowaveOvenMode.py +0 -0
  95. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ModeSelect.py +0 -0
  96. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/NeoCluster.py +0 -0
  97. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/NetworkCommissioning.py +0 -0
  98. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/NitrogenDioxideConcentrationMeasurement.py +0 -0
  99. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/OccupancySensing.py +0 -0
  100. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/OnOff.py +0 -0
  101. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/OperationalCredentials.py +0 -0
  102. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/OperationalState.py +0 -0
  103. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/OtaSoftwareUpdateProvider.py +0 -0
  104. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/OtaSoftwareUpdateRequestor.py +0 -0
  105. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/OvenCavityOperationalState.py +0 -0
  106. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/OvenMode.py +0 -0
  107. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/OzoneConcentrationMeasurement.py +0 -0
  108. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Pm10ConcentrationMeasurement.py +0 -0
  109. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Pm1ConcentrationMeasurement.py +0 -0
  110. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Pm25ConcentrationMeasurement.py +0 -0
  111. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/PowerSource.py +0 -0
  112. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/PowerSourceConfiguration.py +0 -0
  113. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/PowerTopology.py +0 -0
  114. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/PressureMeasurement.py +0 -0
  115. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/PumpConfigurationAndControl.py +0 -0
  116. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/PushAvStreamTransport.py +0 -0
  117. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/RadonConcentrationMeasurement.py +0 -0
  118. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/RefrigeratorAlarm.py +0 -0
  119. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/RefrigeratorAndTemperatureControlledCabinetMode.py +0 -0
  120. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/RelativeHumidityMeasurement.py +0 -0
  121. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/RvcCleanMode.py +0 -0
  122. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/RvcOperationalState.py +0 -0
  123. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/RvcRunMode.py +0 -0
  124. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ScenesManagement.py +0 -0
  125. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ServiceArea.py +0 -0
  126. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/SmokeCoAlarm.py +0 -0
  127. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/SoftwareDiagnostics.py +0 -0
  128. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/SoilMeasurement.py +0 -0
  129. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Switch.py +0 -0
  130. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/TargetNavigator.py +0 -0
  131. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/TclDehumidifierCluster.py +0 -0
  132. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/TemperatureAlarm.py +0 -0
  133. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/TemperatureControl.py +0 -0
  134. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/TemperatureMeasurement.py +0 -0
  135. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/Thermostat.py +0 -0
  136. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ThermostatUserInterfaceConfiguration.py +0 -0
  137. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ThirdRealityMeteringCluster.py +0 -0
  138. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ThreadBorderRouterManagement.py +0 -0
  139. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ThreadNetworkDiagnostics.py +0 -0
  140. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ThreadNetworkDirectory.py +0 -0
  141. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/TimeFormatLocalization.py +0 -0
  142. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/TimeSynchronization.py +0 -0
  143. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/TlsCertificateManagement.py +0 -0
  144. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/TlsClientManagement.py +0 -0
  145. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/TotalVolatileOrganicCompoundsConcentrationMeasurement.py +0 -0
  146. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/UnitLocalization.py +0 -0
  147. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/UserLabel.py +0 -0
  148. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ValveConfigurationAndControl.py +0 -0
  149. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/WakeOnLan.py +0 -0
  150. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/WaterHeaterManagement.py +0 -0
  151. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/WaterHeaterMode.py +0 -0
  152. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/WaterTankLevelMonitoring.py +0 -0
  153. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/WebRtcTransportDefinitions.py +0 -0
  154. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/WebRtcTransportProvider.py +0 -0
  155. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/WebRtcTransportRequestor.py +0 -0
  156. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/WiFiNetworkDiagnostics.py +0 -0
  157. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/WiFiNetworkManagement.py +0 -0
  158. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/WindowCovering.py +0 -0
  159. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/ZoneManagement.py +0 -0
  160. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/cluster_defs/__init__.py +0 -0
  161. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/clusters/enum.py +0 -0
  162. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/tlv/__init__.py +0 -0
  163. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/chip/tlv/tlvlist.py +0 -0
  164. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_python_client.egg-info/dependency_links.txt +0 -0
  165. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_python_client.egg-info/not-zip-safe +0 -0
  166. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_python_client.egg-info/requires.txt +0 -0
  167. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_python_client.egg-info/top_level.txt +0 -0
  168. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/__init__.py +0 -0
  169. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/client/__init__.py +0 -0
  170. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/client/connection.py +0 -0
  171. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/client/exceptions.py +0 -0
  172. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/client/models/__init__.py +0 -0
  173. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/client/models/device_types.py +0 -0
  174. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/client/models/node.py +0 -0
  175. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/common/__init__.py +0 -0
  176. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/common/const.py +0 -0
  177. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/common/custom_clusters.py +0 -0
  178. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/common/errors.py +0 -0
  179. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/common/helpers/__init__.py +0 -0
  180. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/common/helpers/api.py +0 -0
  181. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/common/helpers/json.py +0 -0
  182. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/common/helpers/util.py +0 -0
  183. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/matter_server/py.typed +0 -0
  184. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/setup.cfg +0 -0
  185. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/tests/test_client_integration.py +0 -0
  186. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/tests/test_credentials.py +0 -0
  187. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/tests/test_event_dispatch.py +0 -0
  188. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/tests/test_icd.py +0 -0
  189. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/tests/test_imports.py +0 -0
  190. {matter_python_client-1.3.3 → matter_python_client-1.4.0a0.dev20260731}/tests/test_webrtc_protocol.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matter-python-client
3
- Version: 1.3.3
3
+ Version: 1.4.0a0.dev20260731
4
4
  Summary: Python Client for the OHF Matter Server
5
5
  Author-email: Open Home Foundation <hello@openhomefoundation.io>
6
6
  License-Expression: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matter-python-client
3
- Version: 1.3.3
3
+ Version: 1.4.0a0.dev20260731
4
4
  Summary: Python Client for the OHF Matter Server
5
5
  Author-email: Open Home Foundation <hello@openhomefoundation.io>
6
6
  License-Expression: Apache-2.0
@@ -184,4 +184,5 @@ tests/test_event_dispatch.py
184
184
  tests/test_icd.py
185
185
  tests/test_imports.py
186
186
  tests/test_integration.py
187
+ tests/test_network_topology.py
187
188
  tests/test_webrtc_protocol.py
@@ -30,6 +30,7 @@ from matter_server.common.models import (
30
30
  MatterNodeEvent,
31
31
  MatterSoftwareVersion,
32
32
  MessageType,
33
+ NetworkTopology,
33
34
  NodePingResult,
34
35
  ResultMessageBase,
35
36
  ServerDiagnostics,
@@ -308,6 +309,26 @@ class MatterClient:
308
309
  """
309
310
  await self.send_command(APICommand.RESYNC_ICD, require_schema=12, node_id=node_id)
310
311
 
312
+ async def get_network_topology(self, refresh: bool = False) -> NetworkTopology:
313
+ """Return the derived network topology graph (Thread mesh + Wi-Fi).
314
+
315
+ Issuing this command also subscribes the connection to
316
+ EventType.NETWORK_TOPOLOGY_UPDATED pushes. With refresh=True the server
317
+ re-reads the Thread/Wi-Fi diagnostics from every online node before
318
+ building the snapshot (slower - seconds); otherwise it builds from the
319
+ current attribute cache.
320
+
321
+ refresh=True costs real radio traffic on every online node, so it is a
322
+ user-initiated action - never poll it. The push event is the intended
323
+ source for keeping a graph current.
324
+
325
+ Requires schema 13 (OHF Matter Server).
326
+ """
327
+ data = await self.send_command(
328
+ APICommand.GET_NETWORK_TOPOLOGY, require_schema=13, refresh=refresh
329
+ )
330
+ return dataclass_from_dict(NetworkTopology, data)
331
+
311
332
  async def open_commissioning_window(
312
333
  self,
313
334
  node_id: int,
@@ -869,6 +890,10 @@ class MatterClient:
869
890
  node_id=node_event.node_id,
870
891
  )
871
892
  return
893
+ if msg.event == EventType.NETWORK_TOPOLOGY_UPDATED:
894
+ topology = dataclass_from_dict(NetworkTopology, msg.data)
895
+ self._signal_event(EventType.NETWORK_TOPOLOGY_UPDATED, data=topology)
896
+ return
872
897
  # An event type unknown to this (older) client is passed through by parse_value as a raw
873
898
  # string; forwarding it would crash on `event.value` in _signal_event. Drop it instead so a
874
899
  # newer server emitting a new event type can never disconnect the client.
@@ -25,6 +25,7 @@ class EventType(Enum):
25
25
  ENDPOINT_REMOVED = "endpoint_removed"
26
26
  WEBRTC_CALLBACK = "webrtc_callback"
27
27
  THREAD_DIAGNOSTICS_UPDATED = "thread_diagnostics_updated" # schema 12+
28
+ NETWORK_TOPOLOGY_UPDATED = "network_topology_updated" # schema 13+
28
29
 
29
30
 
30
31
  class APICommand(str, Enum):
@@ -66,6 +67,7 @@ class APICommand(str, Enum):
66
67
  REGISTER_ICD = "register_icd"
67
68
  RESYNC_ICD = "resync_icd"
68
69
  UNREGISTER_ICD = "unregister_icd"
70
+ GET_NETWORK_TOPOLOGY = "get_network_topology"
69
71
 
70
72
 
71
73
  EventCallBackType = Callable[[EventType, Any], None]
@@ -270,6 +272,78 @@ class IcdStateData:
270
272
  next_expected_checkin: int | None
271
273
 
272
274
 
275
+ @dataclass
276
+ class TopologyDirectionInfo:
277
+ """One direction's observed link quality on a topology connection.
278
+
279
+ Note: Only available with OHF Matter Server (schema 13+).
280
+ """
281
+
282
+ strength: str
283
+ lqi: int | None = None
284
+ rssi: int | None = None
285
+
286
+
287
+ @dataclass
288
+ class NetworkTopologyNode:
289
+ """A node in the network topology graph.
290
+
291
+ `kind`/`role` values are open string sets so a newer server can
292
+ introduce values without breaking older clients.
293
+ Note: Only available with OHF Matter Server (schema 13+).
294
+ """
295
+
296
+ # pylint: disable=too-many-instance-attributes
297
+
298
+ id: str
299
+ kind: str # matter | border_router | thread_unknown | wifi_ap
300
+ network_type: str # thread | wifi | ethernet | unknown
301
+ node_id: int | None = None
302
+ role: str | None = None
303
+ available: bool | None = None
304
+ is_bridge: bool | None = None
305
+ ext_address: str | None = None
306
+ rloc16: int | None = None
307
+ ext_pan_id: str | None = None
308
+ network_name: str | None = None
309
+ vendor_name: str | None = None
310
+ model_name: str | None = None
311
+ last_seen: int | None = None
312
+
313
+
314
+ @dataclass
315
+ class NetworkTopologyConnection:
316
+ """An edge between two topology nodes.
317
+
318
+ Thread links may be asymmetric: `source_to_target`/`target_to_source` carry
319
+ each observed direction; the top-level `strength` is the strongest of them.
320
+ Note: Only available with OHF Matter Server (schema 13+).
321
+ """
322
+
323
+ source: str
324
+ target: str
325
+ network: str # thread | wifi
326
+ strength: str # strong | medium | weak | none
327
+ source_to_target: TopologyDirectionInfo | None = None
328
+ target_to_source: TopologyDirectionInfo | None = None
329
+ via_route_table: bool | None = None
330
+ path_cost: int | None = None
331
+
332
+
333
+ @dataclass
334
+ class NetworkTopology:
335
+ """Snapshot of the Matter network topology (Thread mesh + Wi-Fi).
336
+
337
+ Returned by the 'get_network_topology' command and pushed via the
338
+ 'network_topology_updated' event.
339
+ Note: Only available with OHF Matter Server (schema 13+).
340
+ """
341
+
342
+ collected_at: int
343
+ nodes: list[NetworkTopologyNode]
344
+ connections: list[NetworkTopologyConnection]
345
+
346
+
273
347
  class UpdateSource(Enum):
274
348
  """Enum with possible sources for a software update."""
275
349
 
@@ -25,7 +25,7 @@ license = "Apache-2.0"
25
25
  name = "matter-python-client"
26
26
  readme = "README.md"
27
27
  requires-python = ">=3.12"
28
- version = "1.3.3"
28
+ version = "1.4.0a0.dev20260731"
29
29
 
30
30
  [project.urls]
31
31
  Homepage = "https://github.com/matter-js/matterjs-server"
@@ -162,7 +162,7 @@ class TestServerCommands:
162
162
 
163
163
  assert "fabric_id" in info
164
164
  assert "compressed_fabric_id" in info
165
- assert info["schema_version"] == 12
165
+ assert info["schema_version"] == 13
166
166
  assert info["min_supported_schema_version"] == 11
167
167
  assert "matter-server" in info["sdk_version"]
168
168
  assert "matter.js" in info["sdk_version"]
@@ -207,7 +207,7 @@ class TestServerCommands:
207
207
  client: MatterTestClient = env["client"]
208
208
  diag = await client.get_diagnostics()
209
209
  assert diag.info is not None
210
- assert diag.info.schema_version == 12
210
+ assert diag.info.schema_version == 13
211
211
  assert isinstance(diag.nodes, list)
212
212
  assert isinstance(diag.events, list)
213
213
 
@@ -0,0 +1,194 @@
1
+ """Unit tests for the network topology command, schema gating, and event parsing."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from unittest.mock import AsyncMock, MagicMock
6
+
7
+ import pytest
8
+
9
+ from matter_server.client import MatterClient
10
+ from matter_server.client.exceptions import ServerVersionTooOld
11
+ from matter_server.common.models import (
12
+ APICommand,
13
+ EventMessage,
14
+ EventType,
15
+ NetworkTopology,
16
+ NetworkTopologyConnection,
17
+ NetworkTopologyNode,
18
+ ServerInfoMessage,
19
+ TopologyDirectionInfo,
20
+ )
21
+
22
+
23
+ def _bare_client() -> MatterClient:
24
+ """Construct a MatterClient without connecting (for monkeypatching send_command)."""
25
+ return MatterClient.__new__(MatterClient)
26
+
27
+
28
+ def _gated_client(schema_version: int) -> MatterClient:
29
+ """Construct a MatterClient with a stub connection that reports a given schema version."""
30
+ client = MatterClient.__new__(MatterClient)
31
+ server_info = ServerInfoMessage(
32
+ fabric_id=1,
33
+ compressed_fabric_id=1,
34
+ schema_version=schema_version,
35
+ min_supported_schema_version=1,
36
+ sdk_version="0.0.0",
37
+ wifi_credentials_set=False,
38
+ thread_credentials_set=False,
39
+ bluetooth_enabled=False,
40
+ )
41
+ connection = MagicMock()
42
+ connection.connected = True
43
+ connection.server_info = server_info
44
+ client.connection = connection
45
+ return client
46
+
47
+
48
+ _WIRE_TOPOLOGY = {
49
+ "collected_at": 1767888000000,
50
+ "nodes": [
51
+ {
52
+ "id": "1",
53
+ "kind": "matter",
54
+ "network_type": "thread",
55
+ "node_id": 1,
56
+ "role": "leader",
57
+ "available": True,
58
+ "ext_address": "AABBCCDDEEFF0001",
59
+ "rloc16": 1024,
60
+ "ext_pan_id": "1122334455667788",
61
+ "network_name": "OpenThread",
62
+ },
63
+ {
64
+ "id": "br_1122AABBCC334455",
65
+ "kind": "border_router",
66
+ "network_type": "thread",
67
+ "role": "router",
68
+ "ext_address": "1122AABBCC334455",
69
+ "vendor_name": "Apple",
70
+ "last_seen": 1767887990000,
71
+ },
72
+ {"id": "5", "kind": "matter", "network_type": "wifi", "node_id": 5, "role": "station"},
73
+ {"id": "ap_112233445566", "kind": "wifi_ap", "network_type": "wifi", "role": "ap"},
74
+ ],
75
+ "connections": [
76
+ {
77
+ "source": "1",
78
+ "target": "br_1122AABBCC334455",
79
+ "network": "thread",
80
+ "strength": "medium",
81
+ "source_to_target": {"strength": "medium", "lqi": 2, "rssi": -70},
82
+ },
83
+ {
84
+ "source": "5",
85
+ "target": "ap_112233445566",
86
+ "network": "wifi",
87
+ "strength": "strong",
88
+ "source_to_target": {"strength": "strong", "rssi": -55},
89
+ },
90
+ ],
91
+ }
92
+
93
+
94
+ async def test_get_network_topology_uses_schema_13() -> None:
95
+ c = _bare_client()
96
+ c.send_command = AsyncMock(return_value=_WIRE_TOPOLOGY)
97
+ result = await c.get_network_topology()
98
+ args, kwargs = c.send_command.call_args
99
+ assert args[0] == APICommand.GET_NETWORK_TOPOLOGY
100
+ assert kwargs.get("require_schema") == 13
101
+ assert kwargs.get("refresh") is False
102
+
103
+ assert isinstance(result, NetworkTopology)
104
+ assert result.collected_at == 1767888000000
105
+ assert [n.id for n in result.nodes] == ["1", "br_1122AABBCC334455", "5", "ap_112233445566"]
106
+ node1 = result.nodes[0]
107
+ assert node1 == NetworkTopologyNode(
108
+ id="1",
109
+ kind="matter",
110
+ network_type="thread",
111
+ node_id=1,
112
+ role="leader",
113
+ available=True,
114
+ ext_address="AABBCCDDEEFF0001",
115
+ rloc16=1024,
116
+ ext_pan_id="1122334455667788",
117
+ network_name="OpenThread",
118
+ )
119
+ thread_link = result.connections[0]
120
+ assert thread_link == NetworkTopologyConnection(
121
+ source="1",
122
+ target="br_1122AABBCC334455",
123
+ network="thread",
124
+ strength="medium",
125
+ source_to_target=TopologyDirectionInfo(strength="medium", lqi=2, rssi=-70),
126
+ )
127
+ assert thread_link.target_to_source is None
128
+
129
+
130
+ async def test_get_network_topology_refresh_passthrough() -> None:
131
+ c = _bare_client()
132
+ c.send_command = AsyncMock(return_value=_WIRE_TOPOLOGY)
133
+ await c.get_network_topology(refresh=True)
134
+ _, kwargs = c.send_command.call_args
135
+ assert kwargs.get("refresh") is True
136
+
137
+
138
+ def test_get_network_topology_rejected_on_schema_12() -> None:
139
+ """Prove require_schema=13 actually enforces the gate against a schema-12 server."""
140
+ c = _gated_client(schema_version=12)
141
+ with pytest.raises(ServerVersionTooOld):
142
+ c._prepare_message(APICommand.GET_NETWORK_TOPOLOGY, require_schema=13, refresh=False)
143
+
144
+
145
+ async def test_wire_dict_with_unknown_keys_and_values_parses() -> None:
146
+ """A newer server's extra fields and new kind/role/strength values must not break parsing."""
147
+ wire = {
148
+ "collected_at": 1,
149
+ "future_field": "ignored",
150
+ "nodes": [
151
+ {
152
+ "id": "x",
153
+ "kind": "quantum_relay", # unknown future kind
154
+ "network_type": "thread",
155
+ "role": "overlord", # unknown future role
156
+ "another_future_field": {"nested": True},
157
+ }
158
+ ],
159
+ "connections": [
160
+ {
161
+ "source": "x",
162
+ "target": "y",
163
+ "network": "thread",
164
+ "strength": "superb", # unknown future strength
165
+ "future_metric": 42,
166
+ }
167
+ ],
168
+ }
169
+ c = _bare_client()
170
+ c.send_command = AsyncMock(return_value=wire)
171
+ result = await c.get_network_topology()
172
+ assert result.nodes[0].kind == "quantum_relay"
173
+ assert result.nodes[0].role == "overlord"
174
+ assert result.nodes[0].node_id is None
175
+ assert result.connections[0].strength == "superb"
176
+ assert result.connections[0].source_to_target is None
177
+
178
+
179
+ def test_network_topology_updated_event_parses_typed() -> None:
180
+ """The event payload reaches subscribers as a parsed NetworkTopology."""
181
+ client = MatterClient("ws://localhost:5580/ws", MagicMock())
182
+ received: list[tuple[object, object]] = []
183
+ client.subscribe_events(lambda event, data: received.append((event, data)))
184
+
185
+ client._handle_event_message(
186
+ EventMessage(event=EventType.NETWORK_TOPOLOGY_UPDATED, data=_WIRE_TOPOLOGY)
187
+ )
188
+
189
+ assert len(received) == 1
190
+ event, data = received[0]
191
+ assert event == EventType.NETWORK_TOPOLOGY_UPDATED
192
+ assert isinstance(data, NetworkTopology)
193
+ assert len(data.nodes) == 4
194
+ assert data.connections[1].source_to_target == TopologyDirectionInfo(strength="strong", rssi=-55)