.. Copyright (C) European XFEL GmbH Schenefeld. All rights reserved. *************************** What's New in Karabo 2.19.4 *************************** This patch release contains **Redhat9** support and two fixes for the `karaboGUI` client. Now the Region Of Interest of the Graph Widgets can be moved around freely and the editor can be raised from the scene view again. - ci(RedHat 9): Add RedHat 9 support to the CI !8121 - GUI: Remove setting boundary for ROI !8132 - fix(GUI): fix raising of editor on scene view !8139 *************************** What's New in Karabo 2.19.3 *************************** This patch release is directed towards the latest topology errors. Before, an instance update received a device that is not yet present in the topology is rejected. This is correct behavior, but did lead to a lot of false topologies. Now an instance update will complete a topology again. Note that for 2.20.X this behavior is reverted again. - Revert "C++: Protect from false instanceUpdate receival --- be verbose on faulty messages" (Cherry pick 2.19.X) *************************** What's New in Karabo 2.19.2 *************************** This patch release is directed to the dataloggers. After the change in 2.19.0 to always create a new client for an influx request, schema retrievals did cause the dataloggers to segfault. Now a single client is retained and always disconnected after the requests. - perf(InfluxLogger): single DbClient for reading, disconnect when idle (2.19.X-hotfix) *************************** What's New in Karabo 2.19.1 *************************** This patch release brings a few **concert** fixes and improvements and aligns *nan* value behavior in the trendline widget to 2.18.X. - GUI: Add target window to concert open scene (2.19.1 hotfix) !7969 - GUI: Add karabo concert directory (2.19.1 hotfix) !7973 - GUI: karabo-concert from GUI (2.19.1 hotfix) !7985 - GUI: Fix levels dialog accounting zero values (Cherry-pick hotfix 2.19) !8000 - GUI: Trendlines always draw connect array dots (Cherry-pick hotfix) !8005 - C++: Explicitly disable connections in OutputChannel destructor (Backport to 2.19) !7986 - C++: Enable TCP keep alive via configuration options (Backport to 2.19) !7987 - C++: Input channel uses TCP keep-alive (Backport to 2.19) !7988 - MDL: Declare default socket variables for pipeline channel table (2.19.X hotfix) !7990 - Influx: Avoid access to the front of an empty queue (UB) (2.19.X-hotfix) !8007 *************************** What's New in Karabo 2.19.0 *************************** Release date was November 13, 2023. Summary – Release highlights ++++++++++++++++++++++++++++ GUI Logbook, AMQP broker production ready, C++/Bound pipeline enhancements, dependency updates, and more: - GUI: **LogBook support!** Scenes, configs, etc. can be send with annotation to an electronic log book backend. Device was developed for Zulip ELOG at EuXFEL. - GUI: A new application mode besides *karabo-cinema* and *karabo-theatre* is provided, the **karabo-concert**. From a running GUI, a yaml file can be created that stores information about open scenes and their position on the screen. If this yaml file is passed to *karabo-concert*, scenes are positioned accordingly. - GUI: XY Plots now gracefully accept vectors of different length. - All API: First official production release supporting the Rabbit MQ (AMQP) broker. - C++: To auto start devices, device servers now support an `init` configuration option with the same (json) syntax as MDL (`autoStart` still supported). - Bound: As in C++, *updateState* now supports to update further properties in one go with the state. - C++/Bound: Under the hood, output channels now send data asynchronously. *Device.writeChannel* and *OutputChannel.update* stay synchronous for backward compatibility, but *OutputChannel.asyncUpdate[NoWait]* offers the full benefit of being asynchronous. - C++/Bound: To control which of the input channels connected with "shared" data distribution, device code can now register a *SharedInputSelector* at an output channel. - All API: A new *slotGetSystemInfo* for devices provides information about their broker connection, timing information and user. - Python API: All device templates are now provided with a toml structure. The framework supports and is now aligned to PEP621 (https://peps.python.org/pep-0621/). All device tags must follow PEP440 (https://peps.python.org/pep-0440/). - Various dependency updates (`boost`, `numpy`,...) as outlined below. Breaking Changes ++++++++++++++++ - Macro: Before 2.19.0, the class name was appended to the original deviceId, resulting in DeviceID-ClassName. From 2.19.0 onwards, this has been removed and all gui scenes referring to macros need to be adjusted. - C++/Bound ImageData header has been removed, see migration guidelines. - C++/Bound: DetectorGeometry has been removed, see migration guidelines. - C++: Removal of the Motor and Camera interface class. - Bound/C++: The default value of the *safeNDArray* flag of the methods *Device.writeChannel* and *OutputChannel.update* have been switched back to true (as was the case before 2.18.0) for safety. On the other hand the *copyAllData* flag of *OutputChannel.write* is ignored now and the method behaves as if previously the flag was false. - C++: The 'disributionMode' configuration for shared connections of an OutputChannel is now ignored. The behaviour matches the old default (load-balanced) except if the new *SharedInputSelector* feature is used. - MDL: The `Injectable` class, being an empty class placeholder for quite a while, has been removed. See migration guidelines. - MDL: The middlelayer_api namespace is not anymore availabe, see migration guidelines. - AlarmService: The alarm service has been removed from the framework. A new alarm device implementation will be provided outside of the framework. Change of behaviour +++++++++++++++++++ - Macro: instanceInfo status is always `ok` - All API: device servers don't regularly scan plugins anymore. This feature has been removed from C++ and MDL. The device plugins are only scanned once on startup. - All API: The pipeline option `queue` has been deprecated and is treated as `queueDrop` if configured. - GUI: All runtime attribute configurations are not available anymore. This fades out the alarm attribute configuration from the Configurator. - C++/Bound: Output channel schema default values are not included anymore in the device configuration. This is visible when calling *slotGetConfiguration*. - All API: The heartbeat information does not include anymore the full instance info, only the instance type and interval. Dependency Updates ++++++++++++++++++ This release contains a major boost update to **1.82** (was 1.68). Additionally, several updates for python packages have been done:: atomicwrites==1.4.1, was 1.4.0 backports-abc==0.5, was 0.4 backports.ssl-match-hostname==3.7.0.1, was 3.5.0.1 chardet==5.1.0, was 3.0.4 Cython==0.29.35, was 0.29.24 dill==0.3.6, was 0.2.5 ecdsa==0.18.0, was 0.11 flake8==6.0.0, was 3.8.4 flit==3.9.0, was 3.8.0 httplib2==0.22.0, was 0.9.1 importlib-metadata==6.7.0, was 3.3.0 matplotlib==3.7.1, was 2.1.1 msgpack-numpy==0.4.8, was 0.4.3 nose==1.3.7, was 1.3.0 parse==1.19.1, was 1.6.3 peewee==3.16.2, was 3.14.0 pg8000==1.29.8, was 1.21.2 platformdirs==3.8.0, was 3.5.1 psutil==5.9.5, was 4.3.1 pyusb==1.2.1, was 1.0.0b1 tabulate==0.9.0, was 0.8.9 tzlocal==5.0.1, was 1.1.1 numpy==1.22.4, was 1.21.4 scipy==1.7.3, was 1.6.3 Packages that have been **removed**: h5py Packages that have been **added**: pytz==2020.5 (before 2.18.0 was 2013.9; missing in 2.18.0) Detailed Merge-Log ++++++++++++++++++ MDL/Native core =============== - MDL: Timer can reference to an instance !7648 - MDL: Increase timeout in pipeline test !7687 - MDL: Take care of race condition when destructing device twice via signal slotable (garbage collector) !7697 - MDL: Make project manager test more robust !7709 - MDL: remove DeviceNode warning !7700 - MDL: increase timeout in ipython_test !7705 - MDL: Test inject options for strings with no defaultvalue !7711 - MDL: Macros always have instance info status ok !7775 - MDL: Describe output channel schema with displayType !7729 - MDL: Delete macro_api namespace !7728 - MDL: Remove Injectable from public namespace. !7736 - MDL: Remove weakref example for localdevice !7738 - MDL: Don't send instanceInfo via heartbeats !7708 - MDL: Create instance task wrapper !7741 - MDL: Remove DeviceClient project !7786 - MDL: Make middlelayer a real package !7716 - MDL: Provide slotGetSystemInfo. Closes #271 !7897 - MDL: Fix slot reply for non existent slots or wrong parameters settings !7877 - MDL: Macros don't append the class name to the deviceId !7876 - MDL: Removal of scanning plugins for MDL. Closes #616 !7868 - MDL: Use ignorelist instead of blacklist !7870 - MDL: Provide conftest with event_loop fixture !7861 - MDL: Remove pipeline "queue" option, silently converted to "queueDrop" !7841 - MDL: Include ProxyFactory in namespace !7854 - MDL: Template: remove email from toml !7847 - MDL: Remove assert display type on pipeline schema !7864 - MDL: Remove legacy alarm implementation !7790 - MDL: Remove MQTT Broker implementation !7789 - MDL: Increase timeout in device_server_test.py !7803 - MDL: ConfigurationManager does not use runtime attributes anymore !7800 - MDL: Remove flakyness for test_count for monitors !7806 - MDL: Remove attr fast deepcopy and extract attribute modifications !7805 - MDL: Cleanup eventloop implementations !7846 - Common: Rename base64 image functions !7712 Bound/cpp core ============== - Py11: Fix exception printing Closes #576 !7916 - Py11: Completing Hash, Schema, time classes, etc. !7647 - Py11: Binding for SignalSlotable... without IO channels Closes #346 !7616 - Py11: Binding for EventLoop !7623 - Py11: Add SLOT_ELEMENT and unit tests for SignalSlotable !7621 - Py11: Optimize castPySequenceToStdVector !7677 - Py11 xms: pipeline schema elements" Closes #351 !7644 - Py11: BYTEARRAY_ELEMENT Closes #421 !7680 - Py11: Use call_once in FromNumpy singleton Closes #373 !7681 - Py11: Check that all commented `allowedActions` are uncommented and correctly working. Closes #377 !7685 - Py11: ndarray binding missing 'deepcopy' Closes #372 !7686 - Py11: karabo/io+net binding !7750 - Py11: Test bindings of synchronous TCP read and write !7813 - Py11: Logger binding !7767 - Py11: Add tests (and fix) for async Tcp read/write and Broker bindings Closes #557 !7829 - Py11: Try to fix hanging test !7836 - Py11: Add test for NDArray created on C++ side. Closes #376 !7688 - C++: karabo-cppserver can use the init keyword for autostart. !7904 - C++ Integration Tests: Tweak some timings to avoid failures on a loaded CI. !7943 - C++: Add rescue thread in OutputChannel if event loop blocked !7947 - C++: Get rid of one mutex in OutputChannel and minor cleaning !7913 - C++: Provide slotGetSystemInfo !7898 - C++: remove output channel schema from slotGetConfiguration. !7892 - C++: OutputChannel cleaning and properly test asyncUpdate !7917 - C++: Small fix for message logger for AMQP !7926 - C++: Proper array de-allocator in NDArray corner case !7927 - C++: semi-async OutputChannel::asyncUpdate for simple use Closes #660 !7924 - C++ tests: Increase timeout in xms test !7951 - C++: Little code cleaning !7723 - C++: AmqpClient always uses configurable timeout !7720 - C++ int. test: Try few times to get updates from influx !7725 - C++ Data logging: Log everything received to stabilize tests !7722 - C++ int. tests: Longer timeout to instantiate logger/logreader devices !7734 - C++ tests: Fix flakiness of xms tests !7739 - C++: Move "activateKarabo.in". Distinct "activate" for build tree. !7737 - C++ tests: unify timeout !7643 - C++: Shared pipeline with user defined distribution !7655 - C++: Update doc of bind_weak. Also use `bind_weak` in pipeline selector test and clean `MetaTools_Test::testWeakBind`. !7656 - C++: Increase DeviceClient timeout !7695 - C++ integration tests: Use AMQP broker Closes #436 !7679 - C++: Treat corner case of coincident reply arrival and timeout !7704 - C++: Remove unused handler copy from AmqpBroker !7703 - C++ test: Robuster SignalSlotable::testAutoConnectSlot !7670 - C++: Do not run Karabo [un]subscribe handlers on AMQP event loop Closes #456 !7718 - C++ template: set RPATH to be relative and include extern/lib64 directory !7678 - C++: Update cmake external dependency from 3.17.5 to 3.27.1 !7755 - C++: Use boost::beast directly for http(s) client (no Belle library) !7742 - C++: Add "certify" header-only library dependency. !7771 - C++: Async TCP writing of BufferSets !7810 - C++: (Tcp)Channel cleaning* remove methods not in inherited interface !7821 - C++ signalHeartbeat heartbeatInfo reduced to type, heartbeatInterval !7730 - C++: heartbeatInterval type in heartbeatInfo corrected to to int !7828 - C++: Minor cleaning, test timeout increase !7838 - C++: Remove 'disributionMode' from OutputChannel behaviour for shared connections !7837 - C++: Remove pipeline "queue" option, use "queueDrop" !7840 - C++: Unit tests for HttpClient !7791 - C++: Silent log message, only once ask for topology in gui server !7801 - C++ Integration Test: Tweak Influx safe schema retention test timing. !7866 - C++: Remove periodic scan of plugins by the DeviceServer. !7852 - C++: Define common Influx constants in a single place. !7856 - C++ Remove digit separator from numerical constants in header file(requires C++14). !7881 - C++: Ensure that WriteCompleteHandler is called even if TcpChannel destructed !7857 - C++: Protect from false instanceUpdate receival --- be verbose on faulty messages !7772 - C++: Take care that InputChannel data handler are called without mutex lock !7894 - C++: Asynchronous tcp when OutputChannel sends data !7858 - C++/test: allow logs in C++ device integration tests !7867 - C++/test: Add debug info to pipeline chain test !7689 - C++: Remove Motor and Camera interface !7787 - C++: Amqp with less copies of Hash for message header and body !7726 - Bound: flake8 failure on modern flake8: del is not a function !7675 - Bound: Semi-async OutputChannel::asyncUpdate !7937 - Bound: Add async sending of EOS !7938 - Bound: Longer timeout before restarting device with same id !7676 - Bound: updateState with extra arguments Closes #502 !7701 - Bound: Pass cfg to device as binary - fixes vector string with comma in string !7817 - Bound: Robust test of injected channels !7818 - Bound: Bindings for OutputChannel.registerSharedInputSelector. Closes #583 !7834 - Bound: use a toml instead of setup.py !7848 - Bound: python server replies on errors on deviceinstantiation if it happens on the `__init__` stage. !7879 - Bound/C++ tests: Need more wait to ensure pipeline connection !7641 - Bound/C++: Describe output channel schema with displayType !7735 - Bound/C++: Remove legacy alarm implementation !7774 - Bound/C++: OutputChannel default safeNDArray flag back to false, ignore copyAllData !7661 - Bound/C++: Remove InputChannel schema !7746 - Bound/C++: Remove MQTT implementation and Redis !7788 - Bound/C++: Remove DetectorGeometry !7785 - All API: Provide displayType for lockedBy property !7936 Graphical User Interface ======================== - GUI: Sort scene data for logbook Closes #652 !7903 - GUI: post styles in the Logbook Closes #648 !7902 - GUI: Fix button state in logbook preview dialog Closes #647 !7907 - GUI: Rename dataType in logbook from image to text_image !7905 - GUI: Prevent catching ListOfNodes or ChoiceOfNodes for scene panel data !7906 - GUI: Use timingId instead of trainId !7909 - GUI: karabo-concert Closes #11 !7908 - GUI: Add logbook icon !7919 - GUI: Add pyyaml to the dependencies !7914 - GUI: Option to write yaml for karabo-concert Closes #654 !7910 - GUI: Logbook - option to upload table (csv). Closes #650 !7920 - GUI: Singleton configuration for logbook title style. Closes #655 !7925 - GUI: Create a new topic from logbook dialog Closes #656 !7930 - GUI: Set invalid index on combo delegate in table !7931 - GUI: Logbook - option to copy entry to other proposal of different karabo topic. Closes #651 !7934 - GUI: Find segfault in logbook drawing tests !7933 - GUI: Remove toggle of logbook toolbar Closes #665 !7935 - GUI: Close logbook dialog on connection closure !7950 - GUI: Icons for add/remove destinations in logbook !7939 - GUI: Adjust logbook dialog size and policies !7940 - GUI: Fix create topic behaviour: !7941 - GUI: Concurrency in stream combobox of multiple opened logbook dialogs Closes #679 !7942 - GUI: Fix levels dialog for floats !7607 - GUI: Fix pyinstaller script including pyflakes !7665 - GUI: Align single bit unit label and formatting !7663 - GUI: Remove logging panel and subscribe logs !7673 - GUI: Data Analysis Dialog from VectorXY Graph/Scatter. Closes #134 !7645 - GUI: Remove attribute injection on project configuration !7672 - GUI: Protect fitting in Data Analysis Dialog from no data !7692 - GUI: Data Analysis Dialog: Implement Sech Square fitting option Closes #453 !7698 - GUI: Validate the order of the alarm conditions Closes #505 !7706 - GUI: KaraboLogBook preview !7684 - GUI: Abstract more the logbook interface !7714 - GUI: Remove comparison warning for base label with higher numpy version !7707 - GUI: Provide karabo logbook icon !7715 - GUI: Fix simple validator from corner case input 000X !7710 - GUI: LogBook image preview !7717 - GUI: Fit image to the LogbookView on opening the dialog Closes #518!7721 - GUI: More abstraction on logbook panel info !7724 - GUI: Disable logbook save button if no destinations available !7743 - GUI: bugfix enable/disable save button correctly !7744 - GUI: Initial parameters for fitting functions in Data Analysis Dialog. !7751 - GUI: User friendly zooming on axis. Closes #35 !7777 - GUI: Remove attributes from configurator !7778 - GUI: KaraboLogBook - Table Preview. Closes #467 !7740 - GUI: Upgrade pyqtgraph to latest version Closes #361 !7792 - GUI: Logbook Preview- annotate image !7763 - GUI: Update Qt to 5.15.9 !7776 - GUI: Attr fast deepcopy has no runtime attrs !7804 - GUI: Do not allow set log values on X-axis in Bar Graph. Closes #572 !7809 - GUI: Highlight filter search with changing color !7784 - GUI: LogBook: grab pixmap from GraphicsScene. !7815 - GUI: Option to change font for Text annotation in Logbook image preview. Closes #551 !7816 - GUI: Logbook annotation: Don't loose drawing tool. !7819 - GUI: Configurator Panel Search does not have validation !7824 - GUI: Provide error message on missing scheduled big data request !7823 - GUI: LogBook option to edit the title Closes #578 !7827 - GUI: Data Analysis Dialog should auto-update the plot. Closes #454 !7822 - GUI: Vector XY Scatter Graph aligns to different sizes !7826 - GUI: Option to change Pen color for Logbook image annotations. Closes #550 !7831 - GUI: Account different vector sizes in vector xy graph !7825 - GUI: Logbook - remove reference to eLog !7844 - GUI: Synchronize scrollbars in configuration preview dialog. Closes #621 !7865 - GUI: Preserve type for list edit dialog in comma separation !7814 - GUI: Option to select topic from the stream in the Logbook dialog !7878 - GUI: Preserve latest configuration for text edit in logbook dialog. Closes #579 !7851 - GUI: Editing/Saving Macro throws traceback. Closes #164 !7835 - GUI: Add string attribute icon !7794 - GUI: ui changes in Logbook dialog !7885 - GUI: Provide a repr for the ProjectPanel !7886 - GUI: Provide a nice repr for the TopologyPanel !7887 - GUI: Representation string for WidgetControllerPanel !7888 - GUI: Repr for MacroPanel !7889 - GUI: Representation for DeviceToplogy Panel !7890 - GUI: remove alarm panel. Closes #574 !7882 - GUI: Avoid test failure. !7891 - GUI: Logbook dialog store the selected Stream name. !7883 - GUI: Editable topics for logbook dialog !7896 - GUI: npy, npz to csv converter tool. Closes #635 !7899 - GUI: Color dialog hides the logbook dialog behind the main window. !7850 Core Devices ============ - Alarms: Remove AlarmService device !7691 - Influx/C++: Avoid unneeded map look-ups in the log reader (review suggestion for MR 7657). !7659 - Influx/C++: Avoid potential silent failure during schema writing !7918 - Influx/C++: Preserve schemas older than the database safe retention time. !7832 - Influx/C++: InfluxDbClient instances with per slot lifetimes in InfluxLogReader. !7758 - Influx/C++: Fix reading of new schema if old schema was written pre-2.17.0 !7657 Dependencies, Documentation and Tools ===================================== - CI: Fix some holes about tests to run !7929 - DEPS: use conan to build log4cpp !7911 - DEPS: use conan to build daemontools !7915 - DEPS: Use fixed tag from tecki daemontools !7921 - DEPS: Upgrade jedi to 0.17.2 !7949 - DEPS: pkgconfig file patching should also include files that we build from sources, and not via conan. !7664 - DEPS: Use pyexistdb instead of hand-patched eulexistdb !7667 - DEPS: Upgrade to boost-1.82.0 !7666 - DEPS: Update packages !7671 - DEPS: Evaluate QScintilla update 2.14.0 Closes #434 !7699 - DEPS: Upgrade pillow to 10.0 and pip to 22.3.1 !7702 - DEPS: remove hdf5 as build dependency, cleanup resources directory !7768 - DEPS: Fix for karaboPackageDependencies.pc !7795 - DEPS: Remove h5py !7781 - DEPS: move pillow into the --no-binary list of dependencies !7731 - DEPS: copy certify headers when boost pkg is exported !7783 - DEPS: remove manual patchelf build !7780 - DEPS: simply use pre-built numpy/scipy !7872 - DEPS: Do not build libzmq with CentOS-7 incompatible version of libsodium. !7875 - DEPS: Pin jedi for autocompletion bug in ikarabo/ipython Closes #630 !7880 - DEPS: Remove MQTT and Redis dependencies !7799 - DEPS: Remove certify dependency. !7808 - DEPS: Add pytz dependency and rollback pyzmq to 22.3.0.. !7843 - DEPS: Set KARABO variable for pkg-config in CMake template !7747 - DOC: Document release date !7952 - DOC: Add mergelog until 2.19.0rc3 !7901 - DOC: Document 2.18.0 !7650 - DOC: Document: Removal of items move in 2.18 !7651 - DOC: Emphasize removal of dependencies !7802 - DOC: Document latest dependency updates !7693 - DOC: Update build from sources document !7757 - DOC: Unlink outdated text file data logging doc. Add content to current data logging doc. !7760 - DOC: Document 2.17.1 !7782 - DOC: Update versions of pytz and pyzmq dependencies in the documentation. !7845 - DOC: Install miniconda using script. !7833 - DOC: Document migration guidelines !7853 - DOC: Add 2.19 to index !7855 - DOC: Document 2.17.2 hotfix !7859 - TOOLS: fix import check for . imports !7646 - TOOLS: replace setup.py with pyproject.toml in MDL template !7694 - TOOLS: bootstrap python using conan !7759 - TOOLS: bootstrap cmake using conan !7764 - TOOLS: move boost build into conanfile.txt !7766 - TOOLS: Enter clang-precommit -i and karabind to the files !7773 - TOOLS: move nss build to conanfile-bootstrap !7765 - TOOLS: run pip install when pyproject.toml files present !7732 - TOOLS: add pre-commit examples to device templates !7719 - TOOLS: Fix for invalid zip when generating Karabo package. !7796 - TOOLS: Improve Pybind11 requirement specification and update the CMake project. !7748 - TOOLS: Cmake karaboPackageDependencies.pc now brings in patch level version as wellPut full version of karabo into its pkgconfig file !7830 - TOOLS: Lint IntegrationTests Python !7862 - TOOLS: Provide AutoPep8 in precommit !7863 - TOOLS: Align device_scm_version with pep440 !7869 - TOOLS: Align docs to markdown and remove os script !7871 - TOOLS: Use default git describe command for versioning !7895 - TOOLS: Remove alarm server from jms default eservices Closes #580 !7884 - TOOLS: CMake - `Framework/src/karabo` may be compiled in isolation !7893 - TOOLS: Provide explicit options, by default linting is active !7928 Migration Guidelines ++++++++++++++++++++ General remarks: - A lot of device repositories (python) make use of the *isort* package. This package orders the imports. Please activate a karabo installation and type *isort .* in the repository folder in case imports are not ordered according to CI failure. 1. From 2.19.X onwards the namespace **middlelayer_api** has been removed. The only supported namespaces for device developers to import from are: *karabo.middlelayer*, *karabo.bound* .. code-block:: python from karabo.middlelayer_api.tests.eventloop import DeviceTest, async_tst # Imports moved, please use from karabo.middlelayer.testing import DeviceTest, async_tst 2. Since March 2021, the `Injectable` class is not required anymore in device code and has been deprecated. Finally, from 2.19.X onwards, the class is removed from karabo. .. code-block:: python from karabo.middlelayer_api.injectable import Injectable class GATTPhysicalUnit(Injectable, Device): ... # Injectable is not required anymore and will throw, remove import and use class GATTPhysicalUnit(Device): ... 3. Dependency upgrade: yaml -> use `yaml.safe_load` instead of `yaml.load` .. code-block:: python # The following line will throw, yaml.load requires a kwarg `loader` data = yaml.load(file.read()) # use data = yaml.safe_load(file.read()) 4. C++ Boost placeholders (e.g. ::_1) need to be explicitly declared, otherwise code is not compiling To make the code working again, please add on top of the file .. code-block:: C++ using boost::placeholders::_1; using boost::placeholders::_2; 5. `ImageData` *header* functionality has been **removed** from the Framework for both C++ and Bound. Hence, code containing this functionality will throw or prevent compilation. 6. `DetectorGeometry` has been removed from C++ and Bound due to non-use in operation. An import will throw an exception. 7. Use the `central CI template` (https://git.xfel.eu/Karabo/gitlabci) C++ example: https://git.xfel.eu/karaboDevices/scanlabGalvo/-/merge_requests/37/diffs Python example: https://git.xfel.eu/karaboDevices/vacuumSection/-/merge_requests/27/diffs Please be aware that the central CI template utilizes pytest instead of nosetests. If your test file lacks the prefix 'test_', it will not be able to test the device. To resolve this issue, kindly rename your test files to include 'test_' in the name. For example, you can rename 'TestBeckhoffAssistant.py' to 'test_beckhoff_assistant.py'.