From 624610c9b601959b1c36ac0e76865a5ed65cc10d Mon Sep 17 00:00:00 2001 From: Alexander Schlemmer <a.schlemmer@indiscale.com> Date: Tue, 14 Jan 2025 10:46:28 +0100 Subject: [PATCH] Revert "DOC: added documentaiton on how to use custom transformers" This reverts commit 224730bc32436e2ee08916777a565b0edcb5ce52. --- src/doc/converters/transform_functions.rst | 85 ---------------------- 1 file changed, 85 deletions(-) diff --git a/src/doc/converters/transform_functions.rst b/src/doc/converters/transform_functions.rst index 3021b47d..ecd47d2d 100644 --- a/src/doc/converters/transform_functions.rst +++ b/src/doc/converters/transform_functions.rst @@ -70,88 +70,3 @@ the usual ``$`` notation: There are a number of transform functions that are defined by default (see ``src/caoscrawler/default_transformers.yml``). You can define custom transform functions by adding them to the cfood definition (see :doc:`CFood Documentation<../cfood>`). - - -Custom Transformers -=================== - -Custom transformers are basically python functions having a special form/signature. They need to -be registered in the cfood definition in order to be available during the scanning process. - -Let's assume we want to implement a transformer that replaces all occurrences of single letters -in the value of a variable with a different letter each. So passing "abc" as `in_letters` and -"xyz" as `out_letters` would result in a replacement of a value of "scan started" to -"szxn stxrted". We could implement this in python using the -following code: - -.. code-block:: python - - def replace_letters(in_value: Any, in_parameters: dict) -> Any: - """ - Replace letters in variables - """ - - # The arguments to the transformer (as given by the definition in the cfood) - # are contained in `in_parameters`. We need to make sure they are set or - # set their defaults otherwise: - - if "in_letter" not in in_parameters: - raise RuntimeError("Parameter `in_letters` missing.") - - if "out_letter" not in in_parameters: - raise RuntimeError("Parameter `out_letters` missing.") - - l_in = in_parameters["in_letters"] - l_out = in_parameters["out_letters"] - - - if len(l_in) != len(l_out): - raise RuntimeError("`in_letters` and `out_letters` must have the same length.") - - for l1, l2 in zip(l_in, l_out): - in_value = in_value.replace(l1, l2) - - return in_value - - -This code needs to be put into a module that can be found during runtime of the crawler. -One possibility is to install the package into the same virtual environment that is used -to run the crawler. - -In the cfood the transfomer needs to be registered: - -.. code-block:: yaml - - --- - metadata: - crawler-version: 0.10.2 - macros: - --- - Converters: # put custom converters here - Transformers: - replace_letters: # This name will be made available in the cfood - function: replace_letters - package: utilities.replace_letters - -This would assume that the code for the function `replace_letters` is residing in a file -called `replace_letters.py` that is stored in a package called `utilities`. - -The transformer can then be used in a converter, e.g.: - - -.. code-block:: yaml - - Experiment: - type: Dict - match: ".*" - transform: - replace_letters: - in: $a - out: $b - functions: - - replace_letters: # This is the name of our custom transformer - in_letters: "abc" - out_letters: "xyz" - records: - Report: - tags: $b -- GitLab