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

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.

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

# 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

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’.