x509 ProvisioningDeviceClient register method does not raise when called a second time if certificate chain is missing

Context

OS and version used: Windows 10, WSL2 Ubuntu
Python version: Python 3.8.2
pip version: pip 21.0.1
list of installed packages:

Package             Version
------------------- ---------
azure-iot-device    2.7.1
certifi             2021.5.30
chardet             4.0.0
deprecation         2.1.0
idna                2.10
janus               0.4.0
packaging           20.9
paho-mqtt           1.5.1
pip                 21.0.1
pyparsing           2.4.7
PySocks             1.7.1
requests            2.25.1
requests-unixsocket 0.2.0
setuptools          54.1.2
six                 1.16.0
urllib3             1.26.5
wheel               0.36.2

Description of the issue
An incomplete certificate file can cause the device provisioning service client to enter an infinite loop. Steps to reproduce:

Configure a DPS and enrollment group with validated root certificate and signed intermediate certificate.
Create an azure.iot.device.X509 object using a certificate file with only the device certificate present (intermediate certificate missing).
Create a ProvisioningDeviceClient using ProvisioningDeviceClient.create_from_x509_certificate and the X509 object with missing chain data.
Observe that calling register on the ProvisioningDeviceClient causes a ClientError to be raised.
Observe that calling register on the ProvisioningDeviceClient a second time initiates an infinite loop.

Code sample exhibiting the issue
Running the sample below, "REGISTERING" will be logged twice, but "CLIENT RAISED" will only be logged once. The client will continue to emit logs though. Depending on the duration of the sleep, I have seen "REGISTERING" and "CLIENT_RAISED" printed one extra time before the aparently infinite loop started.
import asyncio
import logging
from azure.iot.device.aio import ProvisioningDeviceClient
from azure.iot.device import X509

logging.basicConfig(level=logging.INFO)
azure_logger = logging.getLogger("azure")
azure_logger.setLevel(logging.INFO)
logger = logging.getLogger(__name__)

async def start():
    print("Creating client")
    cert = X509(
        cert_file=PATH_TO_CERT_FILE_WITH_MISSING_CHAIN,
        key_file=PATH_TO_KEY_FILE,
        pass_phrase=None,
    )
    client = ProvisioningDeviceClient.create_from_x509_certificate(
        provisioning_host=PROVISIONING_HOST,
        registration_id=REGISTRATION_ID_MATCHING_CERTIFICATE_CN,
        id_scope=ID_SCOPE,
        x509=cert,
    )
    while True:
        try:
            await asyncio.sleep(1)
            logger.info("REGISTERING.")
            result = await client.register()
            break
        except Exception as e:
            logger.exception("CLIENT RAISED", exc_info=e)

    logger.info(result)

if __name__ == "__main__":
    asyncio.run(start())

Console log of the issue
Creating client
INFO:azure.iot.device.common.mqtt_transport:Creating client for connecting using MQTT over TCP
INFO:__main__:REGISTERING.
INFO:azure.iot.device.provisioning.aio.async_provisioning_device_client:Registering with Provisioning Service...
INFO:azure.iot.device.provisioning.aio.async_provisioning_device_client:Enabling reception of response from Device Provisioning Service...
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:ReconnectStage(ConnectOperation): State changes LOGICALLY_DISCONNECTED->LOGICALLY_CONNECTED.  Adding to wait list and sending new connect op down
INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.mqtt_transport:subscribing to $dps/registrations/res/# with qos 1
INFO:azure.iot.device.common.mqtt_transport:suback received for 1
INFO:azure.iot.device.provisioning.aio.async_provisioning_device_client:Successfully subscribed to Device Provisioning Service to receive responses
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=7bbafae9-dbe7-4822-baf3-1f0458bcbfe7
INFO:azure.iot.device.common.mqtt_transport:payload published for 2
INFO:azure.iot.device.common.mqtt_transport:message received on $dps/registrations/res/401/?$rid=7bbafae9-dbe7-4822-baf3-1f0458bcbfe7
INFO:azure.iot.device.provisioning.pipeline.pipeline_stages_provisioning:RegistrationStage(RequestAndResponseOperation): Received error with status code 401 for register request operation
INFO:azure.iot.device.common.async_adapter:Callback completed with error ServiceError('register request returned a service error status code 401')
INFO:azure.iot.device.common.async_adapter:["azure.iot.device.exceptions.ServiceError: ServiceError('register request returned a service error status code 401')\n"]
ERROR:__main__:CLIENT RAISED
Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/provisioning/aio/async_provisioning_device_client.py", line 29, in handle_result
    return await callback.completion()
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/async_adapter.py", line 94, in completion
    return await self.future
azure.iot.device.exceptions.ServiceError: ServiceError('register request returned a service error status code 401')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "test.py", line 37, in start
    result = await client.register()
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/provisioning/aio/async_provisioning_device_client.py", line 81, in register
    result = await handle_result(register_complete)
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/provisioning/aio/async_provisioning_device_client.py", line 41, in handle_result
    raise exceptions.ClientError(message="Unexpected failure", cause=e)
azure.iot.device.exceptions.ClientError: ClientError('Unexpected failure') caused by ServiceError('register request returned a service error status code 401')
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:__main__:REGISTERING.
INFO:azure.iot.device.provisioning.aio.async_provisioning_device_client:Registering with Provisioning Service...
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 3
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 4
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 5
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 6
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 7
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 8
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 9
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 10
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 11
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 12
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 13
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 14
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 15
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:CoordinateRequestAndResponseStage: ConnectedEvent: re-publishing request e4f4f8f3-e8e5-4528-b0fd-5efb056a3669 for PUT register
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=e4f4f8f3-e8e5-4528-b0fd-5efb056a3669
INFO:azure.iot.device.common.mqtt_transport:payload published for 16
INFO:azure.iot.device.common.mqtt_transport:disconnected with result code: 1
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: _on_mqtt_disconnect called: ConnectionDroppedError('Paho returned rc==1')
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:MQTTTransportStage: disconnection was unexpected
INFO:azure.iot.device.common.handle_exceptions:Unexpected disconnection
INFO:azure.iot.device.common.handle_exceptions:azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError('Paho returned rc==1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/c/Users/hibbe/Code/azure_test/.venv/lib/python3.8/site-packages/azure/iot/device/common/handle_exceptions.py", line 43, in swallow_unraised_exception
    raise e
azure.iot.device.common.transport_exceptions.ConnectionDroppedError: ConnectionDroppedError(None) caused by ConnectionDroppedError('Paho returned rc==1')

We are looking into this issue and will reach out if we require more information, thank you.

Just needed verification on the following things :

You have created a group enrollment record with the Intermediate Certificate option (toggling the Certificate Type = Intermediate Certificate) on the creation of the enrollment group, which means the intermediate certificate needs to be uploaded while creating this group.
You have performed a proof of possession on the the Root Certificate already prior to this.

Yes, I have done both of these things. Replacing the certificate file with one that contains the correct chain produces a valid enrollment on the first call as expected. I should be able to upload logs from a successful enrollment tomorrow.

Here are logs from the same script provided above, for the case where PATH_TO_CERT_FILE_WITH_MISSING_CHAIN points to a file containing the certificate chain (device followed by intermediate CA for enrollment group). Device registration completes correctly.
Creating client
INFO:azure.iot.device.common.mqtt_transport:Creating client for connecting using MQTT over TCP
INFO:__main__:REGISTERING.
INFO:azure.iot.device.provisioning.aio.async_provisioning_device_client:Registering with Provisioning Service...
INFO:azure.iot.device.provisioning.aio.async_provisioning_device_client:Enabling reception of response from Device Provisioning Service...
INFO:azure.iot.device.common.pipeline.pipeline_stages_base:ReconnectStage(ConnectOperation): State changes LOGICALLY_DISCONNECTED->LOGICALLY_CONNECTED.  Adding to wait list and sending new connect op down
INFO:azure.iot.device.common.mqtt_transport:Connect using port 8883 (TCP)
INFO:azure.iot.device.common.mqtt_transport:connected with result code: 0
INFO:azure.iot.device.common.pipeline.pipeline_stages_mqtt:_on_mqtt_connected called
INFO:azure.iot.device.common.mqtt_transport:subscribing to $dps/registrations/res/# with qos 1
INFO:azure.iot.device.common.mqtt_transport:suback received for 1
INFO:azure.iot.device.provisioning.aio.async_provisioning_device_client:Successfully subscribed to Device Provisioning Service to receive responses
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/PUT/iotdps-register/?$rid=4f42c6a5-f739-4ea9-9752-7b20a6b8ac29
INFO:azure.iot.device.common.mqtt_transport:payload published for 2
INFO:azure.iot.device.common.mqtt_transport:message received on $dps/registrations/res/202/?$rid=4f42c6a5-f739-4ea9-9752-7b20a6b8ac29&retry-after=3
INFO:azure.iot.device.provisioning.pipeline.pipeline_stages_provisioning:RegistrationStage(RequestAndResponseOperation): polling
INFO:azure.iot.device.common.mqtt_transport:publishing on $dps/registrations/GET/iotdps-get-operationstatus/?$rid=1beb7a85-ff5a-42be-bd96-2799db319f8e&operationId=4.ca45f7e33ef8dee6.0a92ac3c-c511-4866-941c-2d5f052306ac
INFO:azure.iot.device.common.mqtt_transport:payload published for 3
INFO:azure.iot.device.common.mqtt_transport:message received on $dps/registrations/res/200/?$rid=1beb7a85-ff5a-42be-bd96-2799db319f8e
INFO:azure.iot.device.provisioning.abstract_provisioning_device_client:Successfully registered with Provisioning Service
INFO:azure.iot.device.common.mqtt_transport:Forcing paho disconnect to prevent it from automatically reconnecting
INFO:__main__:azuretestdevice
dev-iot-hub-iot.azure-devices.net
initialAssignment
null
assigned

I have looked into the issue.
Once you send a wrong certificate (or one with the missing chain) , the Service responds with a 401 but then closes the connection.
Hence on repeated retries from our SDK we will never get the same response.
We will discuss with the service team and try to understand the difference in their behavior.
For now , avoiding using the infinite loop will stop the future retries.
I have ran the sample with trying to call exactly twice and the sample doss exit after the second time.
import os
import asyncio
from azure.iot.device import X509
from azure.iot.device.aio import ProvisioningDeviceClient
from azure.iot.device.aio import IoTHubDeviceClient
from azure.iot.device import Message
import uuid
import logging

logging.basicConfig(level=logging.INFO)
azure_logger = logging.getLogger("azure")
azure_logger.setLevel(logging.DEBUG)
logger = logging.getLogger(__name__)

PROVISIONING_HOST = "global.azure-devices-provisioning.net"
ID_SCOPE = "<>"
REGISTRATION_ID_MATCHING_CERTIFICATE_CN = "<>"

async def start():
    print("Creating client")
    cert = X509(
        cert_file="cert/device_cert1.pem",
        key_file="cert/device_key1.pem",
        pass_phrase="<>",
    )
    client = ProvisioningDeviceClient.create_from_x509_certificate(
        provisioning_host=PROVISIONING_HOST,
        registration_id=REGISTRATION_ID_MATCHING_CERTIFICATE_CN,
        id_scope=ID_SCOPE,
        x509=cert,
    )
    try:
        await asyncio.sleep(2)
        logger.info("REGISTERING 1st time.....")
        result = await client.register()
        # print(result)
        await asyncio.sleep(2)
    except Exception as e:
        # raise e
        logger.exception("CLIENT RAISED", exc_info=e)
        logger.info("REGISTERING 2nd time.....")
        result = await client.register()
        # print(result)
        await asyncio.sleep(2)
    except Exception as e:
        # raise e
        logger.exception("CLIENT RAISED", exc_info=e)
        logger.info("Stopping REGISTERING.....")
if __name__ == "__main__":
    asyncio.run(start())

Closed due to inactivity.

Apologies for the lack of a reply and thanks for the feedback @olivakar, we will change our code to avoid calling register in a loop for now.


Connections creates a nodes field as well as an edges and pageInfo field

I am not really sure if this is intentional, but it seems weird.
When i use the built in cursor connection, i expect to have two top-level fields to query, namely edges and pageInfo, however, it seems that a new nodes field has been added that returns, well, the list of nodes. Is this intentional?
Specifications

Version: 4.0.4, using actix-web

This is intentional, see #952 🙂

According to the documentation linked in #952

This leads to a potential usability improvement for connections; instead of just exposing the edges list, we could also expose a dedicated list of just the nodes, to avoid a layer of indirection.

So this means that nodes should be optional the simplest solution I came up would be to add feature "connection-without-nodes"  that will disable this endpoint from schema. @sunli829  would you accept nodes to be optional? Is my solution acceptable so I could prepare PR?

@xoac welcome to PR 🙂


Implement small changes to acceptance test data

As an IMPROVER developer I want to implement the small changes to acceptance test data that were suggested in IMPRO-397. This does not require the decimation of data, but rather the changing of some values in 1 or 2 tests to better reflect realistic values.
Related issues: IMPRO-397
The key suggestions to consider are:

recursive-filter/option-alphas/alphasx.nc - I wonder if this is a suitable test given that the contents of the x and y files are identical, and don't vary.
spot-extract/basic/*screen_level.nc - populated with a range of temperatures from 0 to 800 Kelvin. Seems a bit extreme.

Acceptance criteria:

Implement changes that are recommended where suitable.
Ensure tests pass following the changes.
Close this ticket with no changes if the fixes are decided to be unnecessary.

Done.


Simplify the install instruction

I think ember install ... is better instruction to install add-on.

Thank you @snoozer05!


Privacy manifest file in gelocator_apple 2.3.7 and update status of geolocator plugin

Please check the following before submitting a new issue.

[X] I have searched the existing issues.
[X] I have carefully read the documentation.

Please select for which platform(s) you need help

[ ] Android
[X] iOS
[ ] Linux
[ ] macOS
[ ] Web
[ ] Windows

Your question
I noticed that the geolocator_apple 2.3.7 has a Privacy manifest file. However, the latest version of geolocator still uses  geolocator_apple version 2.3.0. I'm curious about when the geolocator plugin will be updated to include the latest version of geolocator_apple.
Version
11.0.0

Hi @Ultranmus,
The geolocator package uses the ^2.3.0 constraint for its dependency on the geolocator_apple package, this is short for writing geolocator_apple: ">=2.3.0 <3.0.0". This means that Flutter will automatically download the latest version of the geolocator_apple dependency that fits within the contraints.
If you are in doubt which version of the geolocator_apple plugin your application is using, checkout the pubspec.lock file, it should list all packages and the actual version number being used by your application. If your application is still using an outdated version run flutter pub upgrade which will update all dependencies automatically.
More information about version contraints can be found in the Dart documentation.

@mvanbeusekom Thank you for your response. I'll investigate further for exact version in my application.


WIP Do not merge - just testing something

Testing fix to https://github.com/docker/swarmkit/pull/2631/

Please sign your commits following these rules:
https://github.com/moby/moby/blob/master/CONTRIBUTING.md#sign-your-work
The easiest way to do this is to amend the last commit:
$ git clone -b "thaJeztah-update-grpc-etc" git@github.com:cyli/swarmkit.git somewhere
$ cd somewhere
$ git rebase -i HEAD~842354264416
editor opens
change each 'pick' to 'edit'
save the file and quit
$ git commit --amend -s --no-edit
$ git rebase --continue # and repeat the amend for each commit
$ git push -f

Amending updates the existing PR. You DO NOT need to open a new one.


Upgrade Jaxon-PHP from 2.0-beta.24 to 2.2.6

Hello,
i worked successful for years with xajax and afterwards with jaxon-php. The last version i worked with is Jaxon2.0-beta.24. In the meantime i changed to codeigniter as framework and could successful integrate jaxon-php (with jaxon-codeigniter).
Now i tried to update with "composer update" to the current jaxon-php (2.2.6) but have no success.
I changed the old

use Jaxon\Sentry\Classes\Base as JaxonClass;
to
use Jaxon\Sentry\Armada as JaxonClass;
and the Classes registers successful. I can call from the Javascriptconsole the functions, but the response is empty. I inserted some checkpoints into the code (in the __constructer), but they are never past. It seams that the registered functions are not called:

Jaxon.App.auswertungen_austritt_ajax.hole_liste();
false

Parameter =>

jxncls | Jaxon.App.auswertungen_austritt_ajax
jxnmthd | hole_liste
jxnr |<PHONE_NUMBER>596

Answer => {"jxnobj":[]}
do you have a glue what i missed ?
Code:

class Auswertungen extends MY_Controller {
public function __construct()
{
parent::__construct();
// Load the Jaxon library
$this->load->library('jaxon');
}
public function Austritt() {
$this->jaxon->register();
$this->smarty->view('benutzer-listenAustritt2-index.tpl', array(
"jaxonCss" => $this->jaxon->css(),
"jaxonJs" => $this->jaxon->js(),
"jaxonScript" => $this->jaxon->script(),
));
}`

auswertungen_austritt_ajax.php

namespace Jaxon\App;
use Jaxon\Sentry\Armada as JaxonClass;
// use Jaxon\Sentry\Classes\Base as JaxonClass;
class auswertungen_austritt_ajax extends JaxonClass {
protected $ci=0;
public function __construct() {
log_message("info","__construct");
echo "HIER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
parent::__construct();
}

Hello again,
i go back until Version 2.0-beta.28 (i had 2.0-beta24 before) and there it works. With the update to 2.0.0 all the responses are empty. I followed the examples (btw: the online example show´s an error) with no success.
I cant find a document where is described what is to do by changing from 2.0-beta to stable :(
I checked the commit from the 2.0.0-Verison of jaxon-core and realize that there is the step to Armanda. Could it be that the jaxon-codeigniter is outdated ? The last version is after the commit of jaxon-core 2.0.0, but i can not find a glue to bring it back to work >= 2.0.0....
kR Tom

Hello again,
i recognized that only some functions are working. Only the functions with a return $this->response are working. With 2.0-beta.24 all response methods are working and give responses - also without a explicit return $this->response.
It seams that i stuck on this beta release :(
kr Tom

Hi,
In the case you have some classes which do not return the jaxon response, you have to add your response to the returned reponse by yourself. You will then need to edit the the jaxon controller provided in the CodeIgniter plugin.
https://github.com/jaxon-php/jaxon-codeigniter/blob/master/app/controllers/jaxon/Process.php
    /**
     * Callback after processing a Jaxon request.
     *
     * @param object            $instance               The Jaxon class instance called
     * @param string            $method                 The Jaxon class method called
     *
     * @return void
     */
    public function afterRequest($instance, $method)
    {
        $xResponseManager = jaxon()->getResponseManager();
        $xResponseManager->clear();
        $xResponseManager->append(jaxon()->getResponse());
    }

Dear feuzeu,
thx for your response. It seams that my problem is a little bit deeper :(
i wrote this sample code:
<?php

 namespace Jaxon\App;
 use Jaxon\Sentry\Armada as JaxonClass;

 class welcome_ajax extends JaxonClass {

         public function index() {
            log_message('info','Bin hier');
            $this->response->assign('testtom','innerHTML','HALLLO');
            return $this->response;
        }
 }

 ?\>

The Method index() will is not called, but i get a (empty) response, if i entered in the JavaScript-Console of the browser :
Jaxon.App.welcome_ajax.index();
false

so - in my opinion, that JS-Callback-function is build, but is not called :(
In the Developertools i see the request to process.php with the right parameter:
jxncls      | Jaxon.App.welcome_ajax
jxnmthd     | index
jxnr        |<PHONE_NUMBER>097

(it´s a complete new build up installation of CI 3 with all defaults and last stable versions....)
i implement your suggestion :
<?php
defined('BASEPATH') or exit('No direct script access allowed');

class Process extends CI_Controller
{
    /**
     * Load the Jaxon and Session libraries.
     */
    public function __construct()
    {
        parent::__construct();
        // Load the Jaxon library
        $this->load->library('jaxon');
        // Load the session library
        $this->load->library('session');
    }

    /**
     * Callback for initializing a Jaxon class instance.
     *
     * This function is called anytime a Jaxon class is instanciated.
     *
     * @param object            $instance               The Jaxon class instance
     *
     * @return void
     */
    public function initInstance($instance)
    {
    }

    /**
     * Callback before processing a Jaxon request.
     *
     * @param object            $instance               The Jaxon class instance to call
     * @param string            $method                 The Jaxon class method to call
     * @param boolean           $bEndRequest            Whether to end the request or not
     *
     * @return void
     */
    public function beforeRequest($instance, $method, &$bEndRequest)
    {
    }

    /**
     * Callback after processing a Jaxon request.
     *
     * @param object            $instance               The Jaxon class instance called
     * @param string            $method                 The Jaxon class method called
     *
     * @return void
     */
    public function afterRequest($instance, $method)
    {
        $xResponseManager = jaxon()->getResponseManager();
        $xResponseManager->clear();
        $xResponseManager->append(jaxon()->getResponse());
    }

    /**
     * Process a Jaxon request.
     *
     * The HTTP response is automatically sent back to the browser
     *
     * @return void
     */
    public function index()
    {
        $this->jaxon->onInit(function ($instance) {
            $this->initInstance($instance);
        });
        $this->jaxon->onBefore(function ($instance, $method, &$bEndRequest) {
            $this->beforeRequest($instance, $method, $bEndRequest);
        });
        $this->jaxon->onAfter(function ($instance, $method) {
            $this->afterRequest($instance, $method);
        });

        // Process the Jaxon request
        if($this->jaxon->canProcessRequest())
        {
            $this->jaxon->processRequest();
            // $this->jaxon->httpResponse();
        }
    }
}

kr Tom

Hi Tom,
I suggest first to use the beforeRequest() to make sure the right method is called.
    public function beforeRequest($instance, $method, &$bEndRequest)
    {
        log_message('info', "Jaxon class name is " . get_class($instance) . " and method is $method");
    }

You can then make sure the response and response manager class return the same output.
    public function afterRequest($instance, $method)
    {
        log_message('info', "Jaxon response output is " . jaxon()->getResponse()->getOutput());
        log_message('info', "Jaxon response manager output is " . jaxon()->getResponseManager()->getOutput());
    }

The outputs must contain the instructions you added in your Jaxon class.

Dear Feuzeu,
thanks for your response. Jaxon-php didn´t :)
the 'BeforeRequest' is not passed:
INFO - 2019-10-16 10:39:00 --> Config Class Initialized
INFO - 2019-10-16 10:39:00 --> Hooks Class Initialized
DEBUG - 2019-10-16 10:39:00 --> UTF-8 Support Enabled
INFO - 2019-10-16 10:39:00 --> Utf8 Class Initialized
INFO - 2019-10-16 10:39:00 --> URI Class Initialized
INFO - 2019-10-16 10:39:00 --> Router Class Initialized
INFO - 2019-10-16 10:39:00 --> Output Class Initialized
INFO - 2019-10-16 10:39:00 --> Security Class Initialized
DEBUG - 2019-10-16 10:39:00 --> Global POST, GET and COOKIE data sanitized
INFO - 2019-10-16 10:39:00 --> Input Class Initialized
INFO - 2019-10-16 10:39:00 --> Language Class Initialized
INFO - 2019-10-16 10:39:00 --> Loader Class Initialized
INFO - 2019-10-16 10:39:00 --> Controller Class Initialized
DEBUG - 2019-10-16 10:39:00 --> Config file loaded: /home/tom/entwicklung/CI-Test-Jaxon/application/config/jaxon.php
DEBUG - 2019-10-16 10:39:00 --> Session: "sess_save_path" is empty; using "session.save_path" value from php.ini.
INFO - 2019-10-16 10:39:00 --> Session: Class initialized using 'files' driver.
INFO - 2019-10-16 10:39:00 --> Jaxon response output is {"jxnobj":[]}
INFO - 2019-10-16 10:39:00 --> Jaxon response manager output is {"jxnobj":[]}

the index() in Process.php show´s now:
/**
     * Process a Jaxon request.
     *
     * The HTTP response is automatically sent back to the browser
     *
     * @return void
     */
    public function index()
    {
            $this->jaxon->onInit(function ($instance) {
            $this->initInstance($instance);
        });
        $this->jaxon->onBefore(function ($instance, $method, &$bEndRequest) {
            $this->beforeRequest($instance, $method, $bEndRequest);
        });
        $this->jaxon->onAfter(function ($instance, $method) {
            $this->afterRequest($instance, $method);
        });

        // Process the Jaxon request
        if($this->jaxon->canProcessRequest())
        {
            $this->jaxon->processRequest();
           // $this->jaxon->httpResponse();
        }
    }

i double checked the checked out version from 'composer info' :
composer info
Deprecation warning: require-dev.mikey179/vfsStream is invalid, it should not contain uppercase characters. Please use mikey179/vfsstream instead. Make sure you fix this as Composer 2.0 will error.
doctrine/instantiator              1.2.0   A small, lightweight utility to instantiate objects in PHP without invoking their constructors
jaxon-php/jaxon-codeigniter        v2.0.2  Jaxon library integration for the CodeIgniter framework
jaxon-php/jaxon-core               v2.2.10 Jaxon is an open source PHP library for easily creating Ajax web applications
jaxon-php/jaxon-sentry             v2.0.7  Common classes providing advanced features to the Jaxon library
lemonphp/event                     v1.0.0  Simple event dispatcher
matthiasmullie/minify              1.3.61  CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shor...
matthiasmullie/path-converter      1.1.2   Relative path converter
mikey179/vfsstream                 v1.1.0
myclabs/deep-copy                  1.9.3   Create deep copies (clones) of your objects
phpdocumentor/reflection-common    2.0.0   Common reflection classes used by phpdocumentor to reflect the code structure
phpdocumentor/reflection-docblock  4.3.2   With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.
phpdocumentor/type-resolver        1.0.1   A PSR-5 based resolver of Class names, Types and Structural Element Names
phpspec/prophecy                   1.9.0   Highly opinionated mocking framework for PHP 5.3+
phpunit/php-code-coverage          4.0.8   Library that provides collection, processing, and rendering functionality for PHP code coverage information.
phpunit/php-file-iterator          1.4.5   FilterIterator implementation that filters files based on a list of suffixes.
phpunit/php-text-template          1.2.1   Simple template engine.
phpunit/php-timer                  1.0.9   Utility class for timing
phpunit/php-token-stream           2.0.2   Wrapper around PHP's tokenizer extension.
phpunit/phpunit                    5.7.27  The PHP Unit Testing framework.
phpunit/phpunit-mock-objects       3.4.4   Mock Object library for PHPUnit
pimple/pimple                      v3.0.2  Pimple, a simple Dependency Injection Container
sebastian/code-unit-reverse-lookup 1.0.1   Looks up which function or method a line of code belongs to
sebastian/comparator               1.2.4   Provides the functionality to compare PHP values for equality
sebastian/diff                     1.4.3   Diff implementation
sebastian/environment              2.0.0   Provides functionality to handle HHVM/PHP environments
sebastian/exporter                 2.0.0   Provides the functionality to export PHP variables for visualization
sebastian/global-state             1.1.1   Snapshotting of global state
sebastian/object-enumerator        2.0.1   Traverses array structures and object graphs to enumerate all referenced objects
sebastian/recursion-context        2.0.0   Provides functionality to recursively process PHP variables
sebastian/resource-operations      1.0.0   Provides a list of PHP built-in functions that operate on resources
sebastian/version                  2.0.1   Library that helps with managing the version number of Git-hosted PHP projects
symfony/polyfill-ctype             v1.12.0 Symfony polyfill for ctype functions
symfony/yaml                       v4.3.5  Symfony Yaml Component
webmozart/assert                   1.5.0   Assertions to validate method input/output with nice error messages.

From the point of version, i don´t see any wrong here
btw. i´m working on Fedora 30 - currently with PHP 7.3.10.
kr Tom

the Debug Output:
jaxon debug output
Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

JAXON CALL (Response Complete, {"debugging":true})

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

DONE [109ms]

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

RECEIVED [status: 200, size: 13 bytes, time: 108ms]:
{"jxnobj":[]}

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

<-- jaxon.request( { jxncls: "Jaxon.App.welcome_ajax", jxnmthd: "index" } , { parameters: [Object] } ); returns "false"

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

SENT [62 bytes]

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

SENDING REQUEST

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

CALLING:
jxncls: Jaxon.App.welcome_ajax
jxnmthd: index

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

POST: jaxon/process
jxncls=Jaxon.App.welcome_ajax
&jxnmthd=index
&jxnr=1571215140304

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

INITIALIZING REQUEST OBJECT

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

PREPARING REQUEST

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

PROCESSING PARAMETERS [0]

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

INITIALIZING REQUEST

Wed Oct 16 2019 10:39:00 GMT+0200 (Mitteleuropäische Sommerzeit)

--> jaxon.request( { jxncls: "Jaxon.App.welcome_ajax", jxnmthd: "index" } , { parameters: [Object] } );

Hi,
Seems like the library is not able to find the invoked Jaxon class.
Have you setup the autoloading?

Dear Feuzeu,
before i recocnized that CI-3 has its implementation of autoloading, i put this lines into index.php (=> the old stil ).
/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
 * --------------------------------------------------------------------
 *
 * And away we go...
 */
require_once BASEPATH.'../vendor/autoload.php';
require_once BASEPATH.'core/CodeIgniter.php';

The direction seams to be the right one, but the javascript functions are build up, so i can call in the console the Jaxon.App.welcome_ajax.index() ?!?! So in the initialization he found the *.php-files in the /jaxon/classes directory. But if he likes to call them, they seams to be ignored/not found....
There is the point i am lost :(
The access-log from nginx :
[16/Oct/2019:11:56:55 +0200] "POST /jaxon/process HTTP/1.1" 200 23

no error is logged on the call...
the config.php
$config['app'] = array(
    'classes' => array(
        array(
            'directory' => rtrim(APPPATH, '/') . '/jaxon/classes',
            'namespace' => '\\Jaxon\\App',
            // 'separator' => '', // '.' or '_'
            // 'protected.' => array(),
        ),
    ),
);
$config['lib'] = array(
    'core' => array(
        'language' => 'en',
        'encoding' => 'UTF-8',
        'request' => array(
            'uri' => 'jaxon/process',
        ),
        'prefix' => array(
            'class' => '',
        ),
        'debug' => array(
            'on' => true,
            'verbose' => true,
        ),
        'error' => array(
            'handle' => false,
        ),
    ),
    'js' => array(
        'lib' => array(
            // 'uri' => '',
        ),
        'app' => array(
            // 'uri' => '',
            // 'dir' => '',
            'extern' => false,
            'minify' => false,
            'options' => '',
        ),
    ),
);

i added a log_message in the process.php and it will be passed:
INFO - 2019-10-16 12:03:28 --> Config Class Initialized
INFO - 2019-10-16 12:03:28 --> Hooks Class Initialized
DEBUG - 2019-10-16 12:03:28 --> UTF-8 Support Enabled
INFO - 2019-10-16 12:03:28 --> Utf8 Class Initialized
INFO - 2019-10-16 12:03:28 --> URI Class Initialized
INFO - 2019-10-16 12:03:28 --> Router Class Initialized
INFO - 2019-10-16 12:03:28 --> Output Class Initialized
INFO - 2019-10-16 12:03:28 --> Security Class Initialized
DEBUG - 2019-10-16 12:03:28 --> Global POST, GET and COOKIE data sanitized
INFO - 2019-10-16 12:03:28 --> Input Class Initialized
INFO - 2019-10-16 12:03:28 --> Language Class Initialized
INFO - 2019-10-16 12:03:28 --> Loader Class Initialized
INFO - 2019-10-16 12:03:28 --> Controller Class Initialized
DEBUG - 2019-10-16 12:03:28 --> Config file loaded: /home/tom/entwicklung/CI-Test-Jaxon/application/config/jaxon.php
DEBUG - 2019-10-16 12:03:28 --> Session: "sess_save_path" is empty; using "session.save_path" value from php.ini.
INFO - 2019-10-16 12:03:28 --> Session: Class initialized using 'files' driver.
INFO - 2019-10-16 12:03:28 --> Process.php constructer ....
INFO - 2019-10-16 12:03:28 --> Jaxon response output is {"jxnobj":[]}
INFO - 2019-10-16 12:03:28 --> Jaxon response manager output is {"jxnobj":[]}

also in the initInstance() BUT this will not be passed !!!
/**
     * Callback for initializing a Jaxon class instance.
     *
     * This function is called anytime a Jaxon class is instanciated.
     *
     * @param object            $instance               The Jaxon class instance
     *
     * @return void
     */
    public function initInstance($instance)
    {
        log_message('info', "Init Jaxon class  " . get_class($instance));
    }

missing initialization ?
kr Thomas

I don't know how to include Jaxon classes in the CI-3 autoloading config.
Try to ask Jaxon to use the composer autoloader.
    public function index()
    {
        ∕∕ Use the composer autoloader
        jaxon()->useComposerAutoloader();

        $this->jaxon->onInit(function ($instance) {
            $this->initInstance($instance);
        });
        $this->jaxon->onBefore(function ($instance, $method, &$bEndRequest) {
            $this->beforeRequest($instance, $method, $bEndRequest);
        });
        $this->jaxon->onAfter(function ($instance, $method) {
            $this->afterRequest($instance, $method);
        });

        // Process the Jaxon request
        if($this->jaxon->canProcessRequest())
        {
            $this->jaxon->processRequest();
            // $this->jaxon->httpResponse();
        }
    }

it seams to be passed and loaded:
DEBUG - 2019-10-16 13:40:07 --> Config file loaded: /home/tom/entwicklung/CI-Test-Jaxon/application/config/jaxon.php
DEBUG - 2019-10-16 13:40:07 --> Session: "sess_save_path" is empty; using "session.save_path" value from php.ini.
INFO - 2019-10-16 13:40:07 --> Session: Class initialized using 'files' driver.
INFO - 2019-10-16 13:40:07 --> Process.php constructer ....
INFO - 2019-10-16 13:40:07 --> in index() of Process.php
INFO - 2019-10-16 13:40:07 --> Jaxon response output is {"jxnobj":[]}
INFO - 2019-10-16 13:40:07 --> Jaxon response manager output is {"jxnobj":[]}

the complete code of Process.php
<?php
defined('BASEPATH') or exit('No direct script access allowed');

class Process extends CI_Controller
{
    /**
     * Load the Jaxon and Session libraries.
     */
    public function __construct()
    {
        parent::__construct();
        // Load the Jaxon library
        $this->load->library('jaxon');
        // Load the session library
        $this->load->library('session');
        log_message("info","Process.php constructer ....");

    }

    /**
     * Callback for initializing a Jaxon class instance.
     *
     * This function is called anytime a Jaxon class is instanciated.
     *
     * @param object            $instance               The Jaxon class instance
     *
     * @return void
     */
    public function initInstance($instance)
    {
	log_message('info', "Init Jaxon class  " . get_class($instance));
    }

    /**
     * Callback before processing a Jaxon request.
     *
     * @param object            $instance               The Jaxon class instance to call
     * @param string            $method                 The Jaxon class method to call
     * @param boolean           $bEndRequest            Whether to end the request or not
     *
     * @return void
     */
    public function beforeRequest($instance, $method, &$bEndRequest)
    {
	log_message('info', "Jaxon class name is " . get_class($instance) . " and method is $method");
    }

    /**
     * Callback after processing a Jaxon request.
     *
     * @param object            $instance               The Jaxon class instance called
     * @param string            $method                 The Jaxon class method called
     *
     * @return void
     */
    public function afterRequest($instance, $method)
    {
		log_message('info', "Jaxon response output is " . jaxon()->getResponse()->getOutput());
        log_message('info', "Jaxon response manager output is " . jaxon()->getResponseManager()->getOutput());
		$xResponseManager = jaxon()->getResponseManager();
        $xResponseManager->clear();
        $xResponseManager->append(jaxon()->getResponse());
    }

    /**
     * Process a Jaxon request.
     *
     * The HTTP response is automatically sent back to the browser
     *
     * @return void
     */
    public function index()
    {
	log_message("info","in index() of Process.php");
	jaxon()->useComposerAutoloader();
	$this->jaxon->onInit(function ($instance) {
             $this->initInstance($instance);
        });
        $this->jaxon->onBefore(function ($instance, $method, &$bEndRequest) {
            $this->beforeRequest($instance, $method, $bEndRequest);
        });
        $this->jaxon->onAfter(function ($instance, $method) {
            $this->afterRequest($instance, $method);
        });

        // Process the Jaxon request
        if($this->jaxon->canProcessRequest())
        {
            $this->jaxon->processRequest();
    	    // $this->jaxon->httpResponse();
        }
    }
}

i insert a log_message in "onInit" - but it dosn´t enter it ....
$this->jaxon->onInit(function ($instance) {
	log_message("info","in onInit() of Process.php");
        $this->initInstance($instance);
});

i don´t know if this is important:
onInit will not be passed
onBefore will not be passed
onAfter will be passed
canProcess will be passed
kr Tom

the Order is : Constructor - Index() - canProcessRequest - on After
kr Tom

It most likely means Jaxon is not able to create an instance of the invoked class.
It is the case if following code returns null in the index() method.
$instance = $this->Jaxon->instance($_POST['jxncls']);

Are you able to instantiate the Jaxon\App\welcome_ajax class in index()?

not with "Jaxon" but with "jaxon" :
    {
		log_message("info","in index() of Process.php");
		jaxon()->useComposerAutoloader();

		$instance = $this->jaxon->instance($_POST['jxncls']);
		log_message("info","Instance = ".var_export($instance,true));
	....

the result is NULL - you are right...
so i inserted the creation of a instance
$welcome = new Jaxon\App\welcome_ajax;
		log_message("info","Welcome = ".var_export($welcome,true));

and it comes something back:
INFO - 2019-10-16 15:07:41 --> Welcome = Jaxon\App\welcome_ajax::__set_state(array(
   'response' => NULL,
   'rqFactory' =>
  Jaxon\Sentry\Factory\Request::__set_state(array(
     'instance' => NULL,
  )),
   'pgFactory' =>
  Jaxon\Sentry\Factory\Paginator::__set_state(array(
     'instance' => NULL,
     'nItemsTotal' => 0,
     'nItemsPerPage' => 0,
     'nCurrentPage' => 0,
  )),
   'xJaxonCallable' => NULL,
))

the NULL´s are OK ?
with a uppercase "J" it comes to this error :
<p>Severity: Notice</p>
<p>Message:  Undefined property: Process::$Jaxon</p>
<p>Filename: jaxon/Process.php</p>
<p>Line Number: 77</p>

I double check now the library Jaxon.php:
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');

class Jaxon
{
    use \Jaxon\Sentry\Traits\Armada;

    public function __construct()
    {
        // Initialize the Jaxon plugin
        $this->_jaxonSetup();
    }

    /**
     * Set the module specific options for the Jaxon library.
     *
     * @return void
     */
    protected function jaxonSetup()
    {
        // Load Jaxon config settings
        $ci = get_instance();
        $ci->config->load('jaxon', true);
        $libConfig = $ci->config->item('lib', 'jaxon');
        $appConfig = $ci->config->item('app', 'jaxon');

        // Jaxon library settings
        $jaxon = jaxon();
        $sentry = $jaxon->sentry();
        $jaxon->setOptions($libConfig);

        // Jaxon application settings
        $this->appConfig = $jaxon->newConfig();
        $this->appConfig->setOptions($appConfig);

        // Jaxon library default settings
        $isDebug = $ci->config->item('debug');
        $baseUrl = rtrim($ci->config->item('base_url'), '/') ;
        $baseDir = rtrim(FCPATH, '/');
        $sentry->setLibraryOptions(!$isDebug, !$isDebug, $baseUrl . '/jaxon/js', $baseDir . '/jaxon/js');

        // Set the default view namespace
        $sentry->addViewNamespace('default', '', '', 'codeigniter');
        $this->appConfig->setOption('options.views.default', 'default');

        // Add the view renderer
        $sentry->addViewRenderer('codeigniter', function () {
            return new \Jaxon\CI\View();
        });

        // Set the session manager
        $sentry->setSessionManager(function () {
            return new Jaxon\CI\Session();
        });
    }

    /**
     * Set the module specific options for the Jaxon library.
     *
     * This method needs to set at least the Jaxon request URI.
     *
     * @return void
     */
    protected function jaxonCheck()
    {
        // Todo: check the mandatory options
    }

    /**
     * Wrap the Jaxon response into an HTTP response.
     *
     * @param  $code        The HTTP Response code
     *
     * @return HTTP Response
     */
    public function httpResponse($code = '200')
    {
        // Create and return a CodeIgniter HTTP response
        get_instance()->output
            ->set_status_header($code)
            ->set_content_type($this->ajaxResponse()->getContentType(), $this->ajaxResponse()->getCharacterEncoding())
            ->set_output($this->ajaxResponse()->getOutput())
            ->_display();
    }
}

thx for your time and kr Tom

Hi,
You're right, there's a typo in my previous comment. It's $this->jaxon->instance($_POST['jxncls']);, sorry.
The first reason I can see why Jaxon cannot find your classes is they are not located where expected.
Check if the Jaxon library is able to export your PHP classes to Js.

hello,
it seams so - i can call in the Javascript-Console the "Jaxon.App.welcome_ajax.index()".
All my tests depends on the "knowledge" that this JS-Functions are build and i can call them. But the Functions are not entered/called and the response from the call is empty....
My question is: why the get not called ? The Process.php seams to be passed (except the init ?!).
As i understand, the Process.php calls the Jaxon-Classes, isn´t it ?
I placed two log_message into Jaxon.php in library:
if (! defined('BASEPATH')) exit('No direct script access allowed');

class Jaxon
{
    use \Jaxon\Sentry\Traits\Armada;

    public function __construct()
    {
        // Initialize the Jaxon plugin
        $this->_jaxonSetup();
    }

    /**
     * Set the module specific options for the Jaxon library.
     *
     * @return void
     */
    protected function jaxonSetup()
    {
        // Load Jaxon config settings
        $ci = get_instance();
        $ci->config->load('jaxon', true);
        $libConfig = $ci->config->item('lib', 'jaxon');
        $appConfig = $ci->config->item('app', 'jaxon');
		log_message("info","JaxonSetup()");

        // Jaxon library settings
        $jaxon = jaxon();
        $sentry = $jaxon->sentry();
        $jaxon->setOptions($libConfig);

        // Jaxon application settings
        $this->appConfig = $jaxon->newConfig();
        $this->appConfig->setOptions($appConfig);

        // Jaxon library default settings
        $isDebug = $ci->config->item('debug');
        $baseUrl = rtrim($ci->config->item('base_url'), '/') ;
        $baseDir = rtrim(FCPATH, '/');
        $sentry->setLibraryOptions(!$isDebug, !$isDebug, $baseUrl . '/jaxon/js', $baseDir . '/jaxon/js');

        // Set the default view namespace
        $sentry->addViewNamespace('default', '', '', 'codeigniter');
        $this->appConfig->setOption('options.views.default', 'default');

        // Add the view renderer
        $sentry->addViewRenderer('codeigniter', function () {
            return new \Jaxon\CI\View();
        });

        // Set the session manager
        $sentry->setSessionManager(function () {
            return new Jaxon\CI\Session();
        });
    }

    /**
     * Set the module specific options for the Jaxon library.
     *
     * This method needs to set at least the Jaxon request URI.
     *
     * @return void
     */
    protected function jaxonCheck()
    {
        // Todo: check the mandatory options
    }

    /**
     * Wrap the Jaxon response into an HTTP response.
     *
     * @param  $code        The HTTP Response code
     *
     * @return HTTP Response
     */
    public function httpResponse($code = '200')
    {
		log_message("info","httpResponse in Jaxon.lib");
        // Create and return a CodeIgniter HTTP response
        get_instance()->output
            ->set_status_header($code)
            ->set_content_type($this->ajaxResponse()->getContentType(), $this->ajaxResponse()->getCharacterEncoding())
            ->set_output($this->ajaxResponse()->getOutput())
            ->_display();
    }
}

and the result is :
DEBUG - 2019-10-17 16:21:02 --> Config file loaded: /home/tom/entwicklung/CI-Test-Jaxon/application/config/jaxon.php
INFO - 2019-10-17 16:21:02 --> JaxonSetup()
DEBUG - 2019-10-17 16:21:02 --> Session: "sess_save_path" is empty; using "session.save_path" value from php.ini.
INFO - 2019-10-17 16:21:02 --> Session: Class initialized using 'files' driver.
INFO - 2019-10-17 16:21:02 --> Process.php constructer ....
INFO - 2019-10-17 16:21:02 --> in index() of Process.php
INFO - 2019-10-17 16:21:02 --> Instance = NULL
INFO - 2019-10-17 16:21:02 --> in canProcess() of Process.php
INFO - 2019-10-17 16:21:02 --> in onAfter() of Process.php
INFO - 2019-10-17 16:21:02 --> Jaxon response output is {"jxnobj":[]}
INFO - 2019-10-17 16:21:02 --> Jaxon response manager output is {"jxnobj":[]}

it seams that the function httpResponse in the Library Jaxon.php is not called ....
kr Tom

Hi,
For example, your welcome_ajax PHP class should be located in the APPPATH/jaxon/classes/ dir, which in this case is /home/tom/entwicklung/CI-Test-Jaxon/application/jaxon/classes/.
The corresponding js class should also be declared in the generated js code.
Jaxon = {};
Jaxon.App = {};
Jaxon.App.welcome_ajax = {};
Jaxon.App.welcome_ajax.index = function() {
    return jaxon.request(
        { jxncls: 'Jaxon.App.welcome_ajax', jxnmthd: 'index' },
        { parameters: arguments }
    );
};

The /home/tom/entwicklung/CI-Test-Jaxon/jaxon/js/ dir contains the generated js files.

Dear Feuzeu,
ok - it seams we come closer to the problem. The Directory .../CI-Test-Jaxon/jaxon/js exists and has the right permissions.
SeLinux is disabled - no errors in nginx-logs, but : there are no generated files.
I checked my running project with jaxon-php-v2.0-beta24 and there are also no generated files....
Could it be that this "feature" of chached JS-Files comes after the V2.0-beta24 ?
That could be the point why the project didnt run with newer versions.... :(
Could you give me a glue where i can investigate the generation of the JS-Files ?
(to be honest - i thought that the JS-Code is only send out with the browsercode, so i don´t miss the generated JS-Files :( )
One further question to understand something more : If the code is not generated, why can i call the function in the JS-Console and have a (empty) jxnobj-response to it ? Are this two different parts ?
thx for you time & kr Tom

Dear Feuzeu,
in the transmitted code to the browser, i found the part you mentioned :

/* <![CDATA[ */
try {
    if(typeof jaxon.config == undefined)
        jaxon.config = {};
}
catch(e) {
    jaxon = {};
    jaxon.config = {};
};

jaxon.config.requestURI = "jaxon/process";
jaxon.config.statusMessages = false;
jaxon.config.waitCursor = true;
jaxon.config.version = "Jaxon 2.2.6";
jaxon.config.defaultMode = "asynchronous";
jaxon.config.defaultMethod = "POST";
jaxon.config.responseType = "JSON";
jaxon.debug.verbose.active = true;

jaxon.confirm = {
    skip: function(command) {
        numberOfCommands = command.id;
        while (0 < numberOfCommands) {
            jaxon.tools.queue.pop(command.response);
            --numberOfCommands;
        }
    }
};
/*
    Function: jaxon.confirm.commands

    A rewrite of the jaxon.confirm.commands function which uses the user configured confirm library.

    Parameters:
        command (object) - jaxon response object

    Returns:
        true - The operation completed successfully.
*/
jaxon.confirm.commands = function(command) {
    command.fullName = 'confirmCommands';
    var msg = command.data;
    /*
     * Unlike javascript confirm(), third party confirm() functions are not blocking.
     * Therefore, to prevent the next commands to run while the library is waiting for the user confirmation,
     * the remaining commands are moved to a new queue in the command object.
     * They will be processed in the confirm callbacks.
     * Note that only one confirm command will be allowed in a Jaxon response.
     */
    command.response = jaxon.tools.queue.create(jaxon.config.responseQueueSize);
    while((obj = jaxon.tools.queue.pop(jaxon.response)) != null)
    {
        jaxon.tools.queue.push(command.response, obj);
        delete obj;
    }
    if(confirm(msg)){jaxon.ajax.response.process(command.response);}else{jaxon.confirm.skip(command);jaxon.ajax.response.process(command.response);};
    return true;
};

jaxon.dom.ready(function() {
    jaxon.command.handler.register('cc', jaxon.confirm.commands);

jaxon.command.handler.register("jquery", function(args) {
    jaxon.cmd.script.execute(args);
});});

Jaxon = {};
Jaxon.App = {};
Jaxon.App.welcome_ajax = {};
Jaxon.App.welcome_ajax.index = function() {
    return jaxon.request(
        { jxncls: 'Jaxon.App.welcome_ajax', jxnmthd: 'index' },
        { parameters: arguments }
    );
};

/* ]]> */

so the code is send, but not stored in the /jaxon/js-directory ....
kR Tom

Hi Tom,
I finally found what's going wrong. Since a few versions now, dots and underscores can be used as separators in javascript class names.
As an unforeseen drawback of this feature, underscores can no more be used in Jaxon class or directory names. That's the cause of this issue. When processing your request, the Jaxon library looks for the Jaxon\App\welcome\ajax class, instead of Jaxon\App\welcome_ajax.
So you need to rename your classes and remove underscores. Unfortunatelly, there's no simple way for me to fix this issue now.
I should have been able to find this earlier. Sorry.

Regarding the generated js code, it is inserted into the HTML code because you have this in your configuration.
    'js' => array(
        'lib' => array(
            // 'uri' => '',
        ),
        'app' => array(
            // 'uri' => '',
            // 'dir' => '',
            'extern' => false,
            'minify' => false,
            'options' => '',
        ),
    ),

Change the extern and minify options to true, and set the dir and uri options with a writable directory path on your server and the corresponding url.

Dear Feuzeu,
sensationell - with the changing of "welcome_ajax.php" to "welcomeajax.php" (the classname in it too). The Response is working !!!!  :+1:
In the other project's it would be a heavy change to the code to remove all the "_" ....
Stupid question : Is there a other option to allow the underscore in method-names ? Let´s say every method of my code had a "_" in it :(
Of corse i can change to upper-/lowercase names, but there are thousands of method´s :(
kr Thomas

I searched a little bit around and the issue with "_" seams to be a new one. But, as i understand its for functions and variables that starts with a underscore. I could not find a proposal for functions or variables in the name....
Could it be that the method names are replaced/use the "_" in the whole string as separator and not only on the starting position ? Could it be a way to replace/use only the starting "_" ?
kr Thomas

I test it with methods with a "_" in the name and they works ! :+1:
So the only job will be the change of the Classnames - that should be possible with the usage of KDE´s KFileReplace....
Thank you for your time !!!
And last but not least - i love Jaxon-php again :D
kr Thomas

One further question before i close. Is it useful to generate the Jaxon-JS-Files on the filestore ? Bring it some performance benefits or something else ?
kr Thomas

One further question before i close. Is it useful to generate the Jaxon-JS-Files on the filestore ? Bring it some performance benefits or something else ?
kr Thomas

Yes, it has many benefits.
Browsers can cache the file allowing pages to load faster, and the library does not parse the classes to generate the js code when the file already exists.

Thank you again - i give it a try :)
best wishes - issue closed....


Tech tree + enable/disable recipes by tech

The default setting for production is fully unlocked recipes, the calculator choosing the most advanced recipe.
In large mods, the usual state is somewhere along the tech tree, with less recipes unlocked. This forces the user to select specific recipes.
The suggestion is to have an interface showing the tech tree (also a neat feature by itself, helps planning) and selecting techs that are researched or not. The system will know to research all dependencies on selection, and remove techs depending on it on deselection.
It would be useful if the tree state could be saved, so the player could update it progressively as they progress through the game.

Duplicate of #347
Oldest open issue in the repository at this point but I'm hoping to work on this in the current version (2.1).


Update dash-sonic-hld.md with Tunnel Scale

Adding for @prsunny to review

DASH is more flexible, current DASH covers this, marking as DONE
Do not need to Merge


Add support for the TerminologyCapabilities resource via the capabilities interaction

There is an optional "mode" parameter on the capabilities interaction than can be used to expose a TerminologyCapabilities resource:
<base>/fhir-server/api/v4/metadata?mode=terminology
TerminologyCapabilities resource:
http://hl7.org/fhir/terminologycapabilities.html
Capabilities interaction:
http://hl7.org/fhir/http.html#capabilities

I confirmed that a request to GET [base]/metadata?mode=terminology now returns a valid TerminologyCapabilities resource.
Additiionally, I started up a server with the serverRegistryResourceProvider enabled, posted a new codesystem, and confirmed that this codesystem appears in in the TerminologyCapabilities (after the cached copy times out).


feat(react-hooks): revocation notification events

Extends PR #114

Updates to latest AFJ version
Fixes validation warnings
Update credential, proof, connection and basic message provider hooks to listen for generic record events over specific state changed/revocation notification events

I was thinking, maybe we can remove all state changed and revocation notification events and just listen for the saved/updated/deleted events and update the store based on that?

I can update the rxjs operator in AFJ and further clean up the event listeners if we want.

@amanji this is based off of @TheTreek's PR #114 ? Or is it a duplication?

This is based off of @TheTreek PR. I checked out their commit and worked on top of it so their contributions are still included.

I'll update this to the official release

Should I reopen this against a different branch?

Ah yes sorry, this should now be opened against main. Didn't realize your pr would be closed


Demo beginner's guide

Write short instructions on how to run the demo on the Oculus Quest
Add a bash script equivalent run_on_device.ps1: run_on_device.sh

Thank you so much for this @pierre-l! I've made a couple small text changes just for consistency with Hotham's fun loving and upbeat brand, but otherwise this is a ⭐ ⭐ ⭐ ⭐ ⭐  PR.


[CM-7986] added log_user_feedback

@jynx10 Will be merged after the front end fixes issues from their side.

@Lothiraldan could you please take a look at docstrings? In particular, I'm interested in referring to "experiment".

Closing since it was moved to https://github.com/comet-ml/comet-llm/pull/84


I want to detect scrolling in WebView_Flutter and hide the padding

I am using Webview_Flutter.
The header of the site overlaps the position of the statusbar and I would like to add padding to avoid this.
This is the process of inserting padding to avoid the statusbar if the webview is opened or if there is a scroll position at the top.
    body: Padding(
          padding: (controller?.getScrollY() == null || controller?.getScrollY() == 0)
              ? EdgeInsets.only(top: height)
              : EdgeInsets.only(top: 0),
          child: Expanded(
                    child: Padding(
                      padding: const EdgeInsets.only(bottom: 0.0),
                      child: WebView(
                        javascriptMode: JavascriptMode.unrestricted,
                        initialUrl: Uri.parse(widget.link).toString(),
                        onWebResourceError: (error) {
                          // print(error.domain);
                        },
                        onWebViewCreated: (controller) {
                          this.controller = controller;
                        },
                        onProgress: (progress) {
                          setState(() {
                            this.progress = progress / 100;
                            progressPercent = progress;
                          });
                        },
                      ),

Hi @jtaxiexpress
This issue doesn't seem to describe a bug or a feature request. Please see https://flutter.dev/community for resources and asking questions like this,
you may also get some help if you post it on Stack Overflow and if you need help with your code, please see https://www.reddit.com/r/flutterhelp/
Closing, as this isn't an issue with Flutter itself. If you disagree, please write in the comments and I will reopen it.
Thank you


feat: add aria attributes for MiniToc

add aria-label to MiniToc and aria-current for MiniToc headings.
Task: https://github.com/orgs/diplodoc-platform/projects/2/views/1?pane=issue&itemId=55495812

Left some comments here
https://github.com/diplodoc-platform/components/issues/217#issuecomment-2210561173

aria-current already added for <li> elements
aria-label should be used with translation like aria-label={t('description')}in this file
translation can be added only for russian and english


feat: add environment variable interpolation to YAML script parser

Add YAML Configuration Parser with Environment Variable Support
Environment variable interpolation is very useful when sensitive data, such as user passwords and other PII data is used in the test. This PR introduced a {{VAR_NAME}} syntax in the YAML script to interpolate the environment variables.
Changes

Implemented environment variable interpolation in YAML configuration parser.
Added unit tests for YAML utilities including building, parsing, and flow item brief generation

Features

Environment variable interpolation using {{VAR_NAME}} syntax
Throws descriptive errors for undefined environment variables

Testing
Added test suite covering:

Environment variable interpolation
Error handling for undefined variables

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

Hi @georgezlei
Great job !
How about we replace the {{var_name}} syntax to the ${var_name} syntax? The ${var_name} syntax looks tidier and similar to the JavaScript template string syntax.
And remember to sign the CLA in this PR .


Implement NT-Xent loss (implicit negative samples)

Implement InfoNCE-style (e.g. NT-Xent from SimCLR) training objective for contrastive learning. This changes sampling strategy so it probably should be done with #123.

@ziw-liu as discussed, first implement NT-Xent loss for the "classical sampling strategy", which can be done with the current dataloader.
Based on the results, we can figure out our next steps.

Just to log our thoughts, a 'proper' implementation would be to treat each track as a sample instead of each node as a sample in the dataset, so that each track contributes one positive pair per epoch, and no batch will contain more than 2 patches from the same track.

@edyoshikun See also official tensorflow implementation and a pytorch reproduction.


Increase coverage on Master branch.

The current coverage  is only 48%. This must be addressed to get 95> coverage.

https://github.com/GluuFederation/cloud-native-edition/issues/294


chore(opensearchserverless): refactor cdk construct

Fixes https://github.com/awslabs/generative-ai-cdk-constructs/issues/737
refactor for opensearchserverless constructs that follows best practices https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md
created interface for VectorCollection extended from IResource - https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md#construct-interface
created VectorCollectionBase implements IVectorCollection - https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md#abstract-base
created default metrics - https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md#metrics
created import methods fromCollectionName, fromCollectionAttributes - https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md#imports
developed additional test cases for refactored lines.

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of the project license.

Thanks @erdemayyildiz ! Could you please run a full build locally, it seems the build was failing because of a mutation

Thanks @erdemayyildiz ! Could you please provide some information on how you tested those changes ? It would be great to deploy this with the bedrock agent sample from the constructs

hi @krokoko
yes i have deployed bedrock-agent to test my changes.

@erdemayyildiz pushed some changes with:

Exposed some missing props (description, collection type, tags)
Tested to deploy bedrock-agent, 2 knowledge bases with oss in the same stack, and oss collections separately with multiple variations (enable/disable standbyreplicas, different collection type, ...)
Added tests to cover the new changes

Hey @krokoko great, thanks!


Priority Shortcuts (1,2,3,4) stopped working on Chrome extension (Windows 10)

Hi!
I am using Todoist Shortcuts v. 170 on the latest Chrome Version 109.0.5414.75 (Official Build) (64-bit) on a Windows 10 PC and shortcuts 1,2,3,4 to assign priorities when browsing issues in list view no longer work.
Thanks!

Ooops... I updated chrome and it's fixed.  Sorry for the false alarm! 😏

No worries!  Probably just the extension not being updated yet, this was fixed yesterday in #233


Add missing comma in list declaration, fix #413

The missing comma makes the two distinct list items "insert_best_completion" and "typescript_format_on_key" concatenate into a single
"insert_best_completiontypescript_format_on_key" list item. The if condition then evaluates to true even when command_name is one of the two names which is clearly not intended.
This change should fix #413. Tab completion emits the "insert_best_completion" command which eventually takes the interpreter to the aforementioned if block and has it call the reload_buffer function. I was no longer able to reproduce #413 after this change.

Hi @cristiandima, I'm your friendly neighborhood Microsoft Pull Request Bot (You can call me MSBOT). Thanks for your contribution!

This seems like a small (but important) contribution, so no Contribution License Agreement is required at this point. Real humans will now evaluate your PR.

TTYL, MSBOT;

Awesome find! Thanks for fixing. This has been a pain for a while.

Oh man. Thanks for the finding @cristiandima !


processing archetype: generation of seed configuration should be optional

The generation of the configuration for the SEED XML Transformer should be made optional for those reasons:

If no XSLT stylesheet is given in the transformation set in the pom, then the build process fails.
Users may want to provide hand-written configurations instead.

Solution:

[x] move the generation into a build profile
[x] change the assembly descriptor to use either the generated config or handwritten config found in /${project.artifactId}.yaml.

marked the checklist item change the assembly descriptor to use either the generated config or handwritten config found in /${project.artifactId}.yaml. as completed

mentioned in commit 8d8bc9c5bae8350ae9a74b2414356b5b2b733207

mentioned in commit aacb5ed4c92b47dcb1f2331c483eee9142a88de2

marked the checklist item move the generation into a build profile as completed


Icon.Group withing message does not display properly

Bug Report
Steps
See codepen example.
Expected Result
Icon group should fit in the message similarly to the single icon.
Actual Result
Icon group does not fill properly in the Message component. Changing the size of group and icons within, does not allow to fix the problem.
Version
0.82.5
Testcase
https://codesandbox.io/s/6v6kyyq7rk

@jaworek this a valid bug, nice catch. However, we can't solve CSS problems in this repo, please post the issue in the main repo: https://github.com/Semantic-Org/Semantic-UI
I made a workaround for you: https://codesandbox.io/s/vn0lxr9647 Needs more styling, but I think that you will understand the way.


Yield content block before/after loop

I've found myself needing to add some content inside the scroll area, but before/after the loop. Maybe this isn't a common need, because I'm guessing in most cases this would mess with the DOM calculations.
In this case, however, I needed to inject a div for an ember-wormhole destination after the items, but inside the scroll container. This helps the content (dropdown menus) scroll with the collection view.
In the meantime, I've subclassed ember-collection to override the component template and add my own wormhole destination:
{{#ember-native-scrollable content-size=_contentSize scroll-left=_scrollLeft scroll-top=_scrollTop scrollChange=(action "scrollChange") clientSizeChange=(action "clientSizeChange")}}

    {{~#each _cells as |cell|~}}

{{yield cell.item cell.index }}

    {{~/each~}}

  {{!-- This is where all wormholed elements from collection items will appear --}}

{{/ember-native-scrollable}}

Would we be open to allowing users to add their own content there?
Is there a better way to accomplish this?

I have similar need. I wanted to display loading slider just after last loaded item or display message like "no more items". This is hardly achievable outside of scroll area due to its fixed height. Properties like afterItemsComponent and beforeItemsComponent accepting contextual components would be nice addition.


add enum support

now we can set value for enums in component inspector

Sorry been a bit busy, is all merged in now.


Feature/195 new _FLUSH events

@TomHAnderson check this out (see #195 and f7965f8 comments).

Edited and included in #213


Slow at Sniping?

The autobuyer seems to work pretty well. I am still finding good players at % to use but the program misses 100% of snipes.
Should I use a VPN in UK? So that there's less ping?

This autobuyer has a huge problem when it comes to sniping.
All other bots instantly try to snipe a card once a search shows one is availabe no matter what you RPM is set at, this is the only way sniping can ever work on a bot.
On this bot it can take up to 5 seconds before it tries to snipe a player it finds, you will NEVER snipe a player for a decent profit with this bot.
The only way to make the bot snipe at any kind of decent speed is to move to RPM to around 60, which will have you banned from bidding inside 3 minutes.
It hard saying this as the program is free and hunter does a great job, but this bot is only worthwhile for bidding and not sniping. If the sniping aspect was updated to work like every other bot I for one would be willing to donate at least $25.

I'll turn that around on you and say if you donate at least $25, I can update sniping functionality within a day.
I do this on my free time, when I have time.

@hunterjm I wasn't being rude, I do appriciate all the work you've done.
I've sent you $10 just now, I'll send the other $15 when I snipe my first player ha ha! Again thanks for you're work so far bro.

https://github.com/hunterjm/fifa-autobuyer/releases/tag/v0.4.3


Useful for Rhasspy 2.5.11 docker? Sound device in /dev/snd/ ?

Hello,
I am migrating from my Synology to an Unraid based Docker Server. I migrated now all of them - just one is missing: Rhasspy!
In my synology kernel I have my connected USB microphone and speaker in /dev/snd and route this in my Rhasspy docker contaier -> works like a charm.
Unfortunately, the /dev/snd folder in Unraid is empty and the docker container does not detect my microphone and speaker :-(
I installed your package, but this did not help. Could my maybe help me?
Thank you very much!

Please provide your Diagnostics or ehat kind of sound hardware that you have.
Please note that this plugin is nowadays mainly designed to support USB sound devices.

I have two different devices:

Jabra Speak 410 (USB)
Jabra Speak 510 (USB)
Razer Seiren mini (USB)

services:   rhasspy:     image: rhasspy/rhasspy     container_name: rhasspy     network_mode: bridge     restart: always     ports:       - 12101:12101       - 12183:12183     devices:       - /dev/snd:/dev/snd     volumes:       - /mnt/cache/appdata/rhasspy:/profiles       - /etc/localtime:/etc/localtime:ro     command: --profile de --user-profiles /profiles
What do I have to put into "devices" section of my compose file?

I think you have to use /dev/usb but I‘m not sure about that since I don‘t know and use that container nor the sound-driver anymore.
I know for sure that the driver is working for others but I don‘t know how they use the plugin and with which containers, sorry…

How is the installation process? I copied the tgz file to /boot/config/extra/ and rebooted, but I dont see the extracted files

This is definitely wrong.
Please remove the tgz file from /boot/extra
Go to your Plugin page within Unraid, click on the tab Install Plugin, paste that: https://raw.githubusercontent.com/ich777/unraid-sound-driver/master/sound-driver.plg in the text field, click Install and wait for the Done button to appear, after that reboot.

Oh my god, it is just working plug and play and Rhasspy is working! Thank you! Thank you! Thank you!

Glad to hear that it’s working. I‘ll close this issue.


Improve benchmark

Time is a lousy benchmark, especially with a low numbers of elements running on an OS.  There a lot of way of profiling but I would suggest using an LLVM based profiling solution like this one because it measures the number of intermediate language instructions executed.  This avoids compiler/microcode optimizations and gives you the most representative output for all platforms.

Wouldn't that fail to measure things like cache misses and branch mispredictions? It would be a useful metric to keep track of though.
What I have currently is within 1% accurate by measuring the best run out of 100. For low numbers of elements the number of repetitions can be increased to reduce the relative overhead of gettimeofday().

The idea is to measure the speed of the algorithm without regard to machine it runs on, specifically because not all machines are created equal.  It's fine to have "real world" results as well (though I would include more platforms) but nothing about them are empirical.


fix: don't replace err variable in nested check (#22416)

Backport #22416

#22425 has resolved the problem, I think this could be closed.