python-aidot-cameras 1.0.0rc45__tar.gz → 1.0.0rc46__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.
- {python_aidot_cameras-1.0.0rc45/python_aidot_cameras.egg-info → python_aidot_cameras-1.0.0rc46}/PKG-INFO +1 -1
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/client.py +29 -4
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/go2rtc.py +4 -2
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/protocol.py +23 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/pyproject.toml +1 -1
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46/python_aidot_cameras.egg-info}/PKG-INFO +1 -1
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/python_aidot_cameras.egg-info/SOURCES.txt +1 -0
- python_aidot_cameras-1.0.0rc46/tests/test_battery_cap_spans_sessions.py +67 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/LICENSE +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/MANIFEST.in +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/README.md +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/__init__.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/__main__.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_log_redaction.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_upstream.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/__init__.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/LICENSE +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/__init__.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/clock.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/codecs/__init__.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/codecs/base.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/codecs/g711.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/codecs/g722.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/codecs/h264.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/codecs/opus.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/codecs/vpx.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/contrib/__init__.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/contrib/media.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/contrib/signaling.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/events.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/exceptions.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/jitterbuffer.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/mediastreams.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rate.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcconfiguration.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcdatachannel.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcdtlstransport.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcicetransport.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcpeerconnection.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcrtpparameters.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcrtpreceiver.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcrtpsender.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcrtptransceiver.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcsctptransport.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtcsessiondescription.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/rtp.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/sdp.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/stats.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/aiortc/utils.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/__init__.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/aac_track.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/constants.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/controls.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/h264_sps.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/hls_ts.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/hwaccel.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/lan_control.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/models.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/playback.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/recording.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/rtp_h264.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/rtsp_publish.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/sd_events.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/sd_listing.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/sd_playback.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/sdes.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/sdes_open.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/ts_fanout.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/ts_tee.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/tutk.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/webrtc.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/webrtc_open.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/client.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/cloud_auth.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/const.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/credentials.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/crypto.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/device_client.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/discover.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/exceptions.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/g711.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/lan_retry.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/py.typed +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/python_aidot_cameras.egg-info/dependency_links.txt +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/python_aidot_cameras.egg-info/entry_points.txt +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/python_aidot_cameras.egg-info/requires.txt +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/python_aidot_cameras.egg-info/top_level.txt +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/setup.cfg +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_aac_track.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_abandoned_attempt_skips_the_doomed_serve.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_abandoned_wait_still_maps_audio.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_aioice_compat.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_alarm_event.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_answer_pt_kinds.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_answer_sdp_video_pt.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_answer_section_selection.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_arrival_timestamps.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_audio_mux_offline.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_auth_error_routing.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_auto_alarm.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_auto_light_settings.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_avio_ctrl_uses_the_session_dseq.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_avio_request.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_avio_response_parse.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_avio_response_router.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_backoff.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_battery_detection.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_battery_evidence_corroboration.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_battery_stale_offer_is_abandoned_early.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_battery_wake_settles_before_the_command.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_ble_gateway_is_gone.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_bridge_state_sentinels.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_busy_backoff.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_camera_properties.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_canary_log_names_the_camera.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_cloud_count.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_cloud_error_log_names_the_exception.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_cloud_error_severity.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_cloud_plan.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_constants_imports_resolve.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_control_verdicts.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_declared_properties.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_deferred_hardening.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_detection_types.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_device_cmd_seq_match.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_device_login_guard.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_device_user_info_cache.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_direct_publish_attaches_negotiated_audio.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_direct_ts_keyframe_signal.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_direct_ts_serve.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_direct_ts_serve_only_for_http.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dormant_camera_cleanup.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_drain_is_cancellable.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_mux_terminal_write.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_not_ready_burst.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_pinning.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_recorder_wiring.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_resolution_ack.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_serve_decode_skip.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_serve_ice_wait.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_serve_open_timeout.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_skip_signaling_wait.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_slow_probe.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_stdout_producer.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_tap_states_no_reorder.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_ts_copy_recording.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_video_presence.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_egress_guard.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_env_seams.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_feature_probe_needs_a_live_session.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_ffmpeg_signal_exit_is_not_a_crash.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_first_media_abandon_rules.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_futile_keepalive.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_gate_requires_a_decoded_frame.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_go2rtc.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_go2rtc_cli.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_h264_decode_rate_limit.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_h264_sps.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_highport_nomination.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_hls_ts_end_to_end.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_hls_ts_wiring.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_hwaccel_probe.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_ice_config_cache.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_ice_credentials_match_the_app.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_ice_peer_reflexive.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_idle_release_both_loops.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_keepalive_renew.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_key_restart_sdp.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_keyframe_prompter.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_lan_control.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_lan_login_accessors.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_lan_retry_reaches_the_storming_devices.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_lan_retry_silences_upstream_over_ceiling.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_lan_sweep_only_with_lights.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_late_repeats_are_dropped.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_light_active_color_mode.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_live_session_carries_talk.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_live_stream_param.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_live_validate_policy.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_live_validate_token_refresh.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_live_video_canary.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_liveplay_echo_timeout.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_local_only_controls.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_log_hygiene.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_logging_caps.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_login_connect_deadline.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_login_reconnect_backoff.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_media_counted_only_when_plaintext.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_media_path_is_reported.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_media_socket_rcvbuf.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_media_wait_floor.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_motion_poll.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_mqtt_client_id_is_exact.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_mqtt_credential_refetch.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_mqtt_credential_self_heal.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_mqtt_password_not_persisted.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_mqtt_session_reconnect.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_mqtt_thread_not_orphaned.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_nack.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_nack_cannot_add_load_in_a_burst.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_narrow_pc_ice.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_no_key_material_in_logs.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_no_private_notes_on_the_public_surface.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_no_self_referential_go2rtc.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_no_unbounded_hex_dumps.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_no_undefined_names.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_nominates_as_soon_as_the_answer_lands.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_off_subnet_candidate.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_offer_keeps_rtcp_feedback.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_offline_keepalive_pause.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_on_frame_is_an_av_frame.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_open_fail_logger.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_open_gate_delay.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_peer_id_class_env.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_peer_id_client_type.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_peerid_reuse.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_persistent_mqtt.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_persistent_mqtt_robustness.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_playback_tls.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_post_merge_hardening.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_ptz_probe_reads_what_it_is_told.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_public_signature_matches_impl.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_publish_target_readiness.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_quality_campaign_in_session.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_reboot_action.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_recent_recordings.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_remb.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_remb_goes_out_the_relay_aware_sender.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_removed_keepalive_arguments_are_tolerated.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_resent_frames_are_dropped.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_resolution_persists.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_restart_cycle.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_retry_policy.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_rtp_h264.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_rtsp_publish.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_rtsp_publish_go2rtc.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_scripts_importable.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sctp_init_ack_tsn.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sctp_reassembly.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sctp_sack.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sd_card_presence.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sd_event_decode.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sd_event_probe_payloads.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sd_listing.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sd_playback.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_avio_dispatch.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_bridge_break_gate.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_connection_mode.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_echo_wait_is_not_dead_time.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_fast_liveplay.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_ffmpeg_stderr_log.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_first_media_stall_report.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_ice_teardown.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_idle_release.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_nack_bridge.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_offer_video_pin.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_open_cleanup.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_pinned_codec_retry.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_sctp_abort.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_serve_audio.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_serve_cmd.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_serve_stderr_drain.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_session_cap.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_sprop.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_talk.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_teardown_exit_log.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_terminal_ack.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_terminal_ack_latency.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdes_watchdog.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdp_narrowing_properties.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sdp_payload_type_narrowing.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_security_hardening.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_self_peer_is_an_address_not_an_ip.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_serializable_login_info.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_serve_bound_survives_arrival_stamping.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_serve_input_timeout.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_serve_loss_tolerance.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_serve_pt_respects_the_pin.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_serve_relay.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_serve_stderr_keeps_the_reason.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_session_stats.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_session_stop_twice.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_shared_house_seam.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_signalling_is_attributable_to_a_camera.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_skip_guard.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_snapshot_cancellation.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_speak.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sprop_capture_gate.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sprop_staleness.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sprop_unstable_public.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_sprop_write_is_reported_truthfully.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_srtp_rx_rekey.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_srtp_tx_key_note.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stable_terminal_id.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stall_nudge_policy.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stall_report_says_what_the_answer_carried.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stall_report_says_whether_the_trigger_was_answered.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stall_report_separates_silence_from_undecryptable.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stall_report_survives_a_caller_giving_up.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stall_reports_reach_the_artifact.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_status_and_trace_channels.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stream_cap.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stream_drain_ownership.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stream_idle.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stream_slot_cap.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_stream_teardown.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_talk.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_talk_reports_a_speaker_that_never_opened.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_tap_to_mux_end_to_end.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_terminal_ack.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_tmmbr.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_token_file_robustness.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_token_refresh.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_transport_failure_reporting.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_ts_fanout.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_ts_tee.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_turn_create_permission.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_tutk_path_is_out_of_reach.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_unbuildable_summary_repeats_at_debug.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_unreachable_nominee_is_abandoned_early.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_upstream_compat.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_upstream_seam_adapter.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_upstream_secrets_redacted.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_validator_shares_one_token.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_vendored_aiortc_integrity.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_video_presence_needs_a_keyframe.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_video_profile_log.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_video_pts_dts.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_video_ts_unwrap.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_viewer_check_throttle.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_viewer_presence.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_viewer_present_push_mode.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_wait_or_event.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_wake_gate_camera_evidence.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_wake_readiness_retry.py +0 -0
- {python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_webrtc_answer_race.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-aidot-cameras
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0rc46
|
|
4
4
|
Summary: Control AiDot/Leedarson WiFi lights and cameras (WebRTC streaming, two-way audio, PTZ, controls)
|
|
5
5
|
Author-email: cbrightly <chris.brightly@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/client.py
RENAMED
|
@@ -97,6 +97,7 @@ from .protocol import ( # noqa: F401 - used here and/or by the webrtc_open mixi
|
|
|
97
97
|
_grab_free_port,
|
|
98
98
|
_tcp_table_has_established_on_port,
|
|
99
99
|
_idle_release_due,
|
|
100
|
+
_battery_cap_spans_sessions_due,
|
|
100
101
|
_battery_unknown_release_s,
|
|
101
102
|
_stream_startup_grace_s,
|
|
102
103
|
_DirectTsServer,
|
|
@@ -4834,8 +4835,10 @@ class CameraMixin(
|
|
|
4834
4835
|
def _sdes_serve_consumer_present(self, port: int) -> "Optional[bool]":
|
|
4835
4836
|
"""True if a TCP client is connected to the SDES serve ``port`` (a viewer
|
|
4836
4837
|
is pulling), False if none, None if the TCP table can't be read (non-Linux
|
|
4837
|
-
/ sandboxed host).
|
|
4838
|
-
|
|
4838
|
+
/ sandboxed host). None is 'unknown': a mains camera is not released on
|
|
4839
|
+
it, and since 1.0.0rc45 a battery camera is, once
|
|
4840
|
+
AIDOT_BATTERY_UNKNOWN_VIEWER_RELEASE_S has passed without a known viewer
|
|
4841
|
+
(protocol._idle_release_due)."""
|
|
4839
4842
|
read_any = False
|
|
4840
4843
|
found = False
|
|
4841
4844
|
for _path in ("/proc/net/tcp", "/proc/net/tcp6"):
|
|
@@ -5095,6 +5098,13 @@ class CameraMixin(
|
|
|
5095
5098
|
# burst stays on ONE peerid: a fresh peerid registers another camera-side
|
|
5096
5099
|
# session, which is what wedged the L2 in the first place (0.12.16).
|
|
5097
5100
|
_not_ready_burst = 0
|
|
5101
|
+
# The battery unknown-viewer cap counts from the last viewer KNOWN
|
|
5102
|
+
# present in any session of this keepalive, not from each session's
|
|
5103
|
+
# open: a loop of sessions that end on their own (a refused publish
|
|
5104
|
+
# ends the serve in seconds) re-anchored every 35-60 s and never
|
|
5105
|
+
# reached it, re-waking a battery camera for as long as the cause
|
|
5106
|
+
# lasted. See _battery_cap_spans_sessions_due.
|
|
5107
|
+
_last_known_viewer = time.monotonic()
|
|
5098
5108
|
|
|
5099
5109
|
while self._streaming_active:
|
|
5100
5110
|
if self._serve_relay is not None:
|
|
@@ -5328,10 +5338,14 @@ class CameraMixin(
|
|
|
5328
5338
|
_present = await self._viewer_present(_serve_port)
|
|
5329
5339
|
if _present: # True -> a viewer is pulling; stay alive
|
|
5330
5340
|
_last_consumer = time.monotonic()
|
|
5341
|
+
_last_known_viewer = _last_consumer
|
|
5331
5342
|
_viewer_seen = True
|
|
5332
5343
|
elif _idle_release_due(
|
|
5333
5344
|
_present,
|
|
5334
|
-
|
|
5345
|
+
# Unknown counts across reopens; a known absence
|
|
5346
|
+
# keeps its per-session window, so a viewer
|
|
5347
|
+
# re-attaching after a camera-side drop is not cut.
|
|
5348
|
+
_last_known_viewer if _present is None else _last_consumer,
|
|
5335
5349
|
time.monotonic(),
|
|
5336
5350
|
_idle_secs,
|
|
5337
5351
|
battery=_battery,
|
|
@@ -5344,7 +5358,7 @@ class CameraMixin(
|
|
|
5344
5358
|
"SDES serve: %s released - viewer state "
|
|
5345
5359
|
"unknown for %.0f s on a battery camera",
|
|
5346
5360
|
self.device_id,
|
|
5347
|
-
time.monotonic() -
|
|
5361
|
+
time.monotonic() - _last_known_viewer,
|
|
5348
5362
|
)
|
|
5349
5363
|
_idle_release = True
|
|
5350
5364
|
break
|
|
@@ -5358,6 +5372,17 @@ class CameraMixin(
|
|
|
5358
5372
|
finally:
|
|
5359
5373
|
self._stream_session = None
|
|
5360
5374
|
|
|
5375
|
+
if not _idle_release and _battery_cap_spans_sessions_due(
|
|
5376
|
+
_battery, _unknown_cap, _last_known_viewer, time.monotonic()
|
|
5377
|
+
):
|
|
5378
|
+
_LOGGER.info(
|
|
5379
|
+
"SDES serve: %s released - no viewer known for %.0f s across"
|
|
5380
|
+
" sessions that ended on their own, on a battery camera",
|
|
5381
|
+
self.device_id,
|
|
5382
|
+
time.monotonic() - _last_known_viewer,
|
|
5383
|
+
)
|
|
5384
|
+
_idle_release = True
|
|
5385
|
+
|
|
5361
5386
|
if _idle_release:
|
|
5362
5387
|
# No HA consumer for the idle window: go dormant instead of
|
|
5363
5388
|
# reconnecting forever. camera.stream_source() restarts us (and
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/go2rtc.py
RENAMED
|
@@ -108,8 +108,10 @@ class Go2rtcClient:
|
|
|
108
108
|
not a viewer exists. Idle-release keyed on the socket therefore never
|
|
109
109
|
fires and every camera streams forever after a single view.
|
|
110
110
|
|
|
111
|
-
None means unknown (go2rtc unreachable or the stream absent)
|
|
112
|
-
|
|
111
|
+
None means unknown (go2rtc unreachable or the stream absent). A mains
|
|
112
|
+
camera is not released on it; since 1.0.0rc45 a battery camera is, after
|
|
113
|
+
AIDOT_BATTERY_UNKNOWN_VIEWER_RELEASE_S without a known viewer
|
|
114
|
+
(protocol._idle_release_due).
|
|
113
115
|
"""
|
|
114
116
|
streams = await self.list_streams()
|
|
115
117
|
entry = streams.get(name)
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/protocol.py
RENAMED
|
@@ -1656,6 +1656,29 @@ def _idle_release_due(
|
|
|
1656
1656
|
return (now - last_consumer) > _window
|
|
1657
1657
|
|
|
1658
1658
|
|
|
1659
|
+
def _battery_cap_spans_sessions_due(
|
|
1660
|
+
battery: bool,
|
|
1661
|
+
unknown_cap_s: "Optional[float]",
|
|
1662
|
+
last_known_viewer: float,
|
|
1663
|
+
now: float,
|
|
1664
|
+
) -> bool:
|
|
1665
|
+
"""Whether a battery keepalive should stop instead of opening another session.
|
|
1666
|
+
|
|
1667
|
+
Checked when an SDES session has ended on its own. ``last_known_viewer`` is
|
|
1668
|
+
the last time a viewer was KNOWN present in any session of this keepalive
|
|
1669
|
+
(or the keepalive's start), so it is not reset by a reopen. The per-session
|
|
1670
|
+
checks cannot see a loop of sessions that end before their first viewer
|
|
1671
|
+
check - a publish the target refuses ends the serve in seconds, and a fresh
|
|
1672
|
+
session opens 10 s later - so without this a battery camera was re-woken
|
|
1673
|
+
every 35-60 s for as long as the cause lasted. A camera being watched keeps
|
|
1674
|
+
``last_known_viewer`` fresh from each session's checks and is not stopped.
|
|
1675
|
+
Uses the same cap as the unknown-viewer release; <= 0 disables it.
|
|
1676
|
+
"""
|
|
1677
|
+
if not battery or not unknown_cap_s or unknown_cap_s <= 0:
|
|
1678
|
+
return False
|
|
1679
|
+
return (now - last_known_viewer) > unknown_cap_s
|
|
1680
|
+
|
|
1681
|
+
|
|
1659
1682
|
#: Default for ``AIDOT_BATTERY_UNKNOWN_VIEWER_RELEASE_S``.
|
|
1660
1683
|
_BATTERY_UNKNOWN_RELEASE_S = 300.0
|
|
1661
1684
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-aidot-cameras"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.0rc46"
|
|
8
8
|
description = "Control AiDot/Leedarson WiFi lights and cameras (WebRTC streaming, two-way audio, PTZ, controls)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-aidot-cameras
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0rc46
|
|
4
4
|
Summary: Control AiDot/Leedarson WiFi lights and cameras (WebRTC streaming, two-way audio, PTZ, controls)
|
|
5
5
|
Author-email: cbrightly <chris.brightly@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -101,6 +101,7 @@ tests/test_avio_request.py
|
|
|
101
101
|
tests/test_avio_response_parse.py
|
|
102
102
|
tests/test_avio_response_router.py
|
|
103
103
|
tests/test_backoff.py
|
|
104
|
+
tests/test_battery_cap_spans_sessions.py
|
|
104
105
|
tests/test_battery_detection.py
|
|
105
106
|
tests/test_battery_evidence_corroboration.py
|
|
106
107
|
tests/test_battery_stale_offer_is_abandoned_early.py
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""The battery unknown-viewer cap must survive a reopened SDES session.
|
|
2
|
+
|
|
3
|
+
Found by the 2026-10-11 review: the cap, the idle window and the start-up grace
|
|
4
|
+
were all measured from each session's open. A publish the target refuses ends
|
|
5
|
+
the serve before the first viewer check, a fresh session opens 10 s later, and
|
|
6
|
+
the anchors reset, so a battery camera was re-woken every 35-60 s for as long as
|
|
7
|
+
the cause lasted (reproduced against integration 2.37.2 on a bundled-only
|
|
8
|
+
install, and an add-on outage does the same).
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import inspect
|
|
12
|
+
|
|
13
|
+
import aidot_cameras.camera.client as cc
|
|
14
|
+
from aidot_cameras.camera.protocol import _battery_cap_spans_sessions_due as due
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_a_battery_keepalive_with_no_known_viewer_past_the_cap_stops():
|
|
18
|
+
assert due(True, 300.0, last_known_viewer=0.0, now=301.0) is True
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_inside_the_cap_it_reopens():
|
|
22
|
+
assert due(True, 300.0, last_known_viewer=0.0, now=299.0) is False
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_a_mains_camera_is_never_stopped_this_way():
|
|
26
|
+
assert due(False, 300.0, last_known_viewer=0.0, now=10_000.0) is False
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_a_cap_of_zero_or_none_disables_it():
|
|
30
|
+
assert due(True, 0.0, last_known_viewer=0.0, now=10_000.0) is False
|
|
31
|
+
assert due(True, None, last_known_viewer=0.0, now=10_000.0) is False
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _src():
|
|
35
|
+
return inspect.getsource(cc.CameraMixin._sdes_keepalive_loop_inner)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_the_anchor_is_set_once_per_keepalive_not_per_session():
|
|
39
|
+
src = _src()
|
|
40
|
+
loop = src.index("while self._streaming_active:")
|
|
41
|
+
first = src.index("_last_known_viewer = time.monotonic()")
|
|
42
|
+
assert first < loop, "the keepalive-wide anchor must sit above the session loop"
|
|
43
|
+
assert src.count("_last_known_viewer = time.monotonic()") == 1
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def test_a_known_viewer_refreshes_the_keepalive_anchor():
|
|
47
|
+
src = _src()
|
|
48
|
+
seen = src.index("_viewer_seen = True")
|
|
49
|
+
assert (
|
|
50
|
+
"_last_known_viewer = _last_consumer"
|
|
51
|
+
in src[src.rindex("if _present:", 0, seen) : seen]
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def test_unknown_uses_the_keepalive_anchor_and_absence_the_session_one():
|
|
56
|
+
src = _src()
|
|
57
|
+
call = src[src.index("_idle_release_due(") :]
|
|
58
|
+
call = call[: call.index("_idle_release = True")]
|
|
59
|
+
assert "_last_known_viewer if _present is None else _last_consumer" in call
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_a_session_that_ended_on_its_own_is_checked_before_reopening():
|
|
63
|
+
src = _src()
|
|
64
|
+
check = src.index("_battery_cap_spans_sessions_due(")
|
|
65
|
+
release = src.index("if _idle_release:", check)
|
|
66
|
+
assert check < release
|
|
67
|
+
assert "_battery, _unknown_cap, _last_known_viewer" in src[check:release]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_log_redaction.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_upstream.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/_vendor/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/__init__.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/aac_track.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/constants.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/controls.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/h264_sps.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/hls_ts.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/hwaccel.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/models.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/playback.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/recording.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/rtp_h264.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/sd_events.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/sd_listing.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/sdes.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/sdes_open.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/ts_fanout.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/ts_tee.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/tutk.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/camera/webrtc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/cloud_auth.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/credentials.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/device_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/aidot_cameras/lan_retry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_aioice_compat.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_answer_pt_kinds.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_answer_sdp_video_pt.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_arrival_timestamps.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_audio_mux_offline.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_auth_error_routing.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_auto_light_settings.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_avio_request.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_avio_response_parse.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_avio_response_router.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_battery_detection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_ble_gateway_is_gone.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_busy_backoff.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_camera_properties.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_cloud_error_severity.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_control_verdicts.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_declared_properties.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_deferred_hardening.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_detection_types.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_device_cmd_seq_match.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_device_login_guard.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_direct_ts_serve.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_drain_is_cancellable.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_not_ready_burst.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_pinning.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_recorder_wiring.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_resolution_ack.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_serve_ice_wait.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_slow_probe.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_stdout_producer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_dtls_video_presence.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0rc45 → python_aidot_cameras-1.0.0rc46}/tests/test_egress_guard.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|