ToolsParametersXml librairy

Généralités

Cette librairie permet de stocker des données dans le même format qu’un fichier XML, ce qui permet de lire et d’écrire facilement dans ce type de format. De plus, le format est optimisé pour des variables autre que des chaines de caractère, et en particulier les nombres avec unités.

Lorsqu’une donnée sera sauvegardé, son type sera également sauvegardé, en tant qu’attribut au paramètre xml. Si un objet pint est enregistré, son unité sera également sauvegardé en tant qu’attribut. Lors de la récupération de la donnée, on récupérera la varaible en fonction de son type.

Certains attributs sont parfaitement codifiés :

Attributes names

Description

Possibility

type

type of the variable

string, int, float, bool, path, relativepath

unit

Unit of the variable

pint format (exemple: m, km**2, K**-1)

separator

Separator of variables

Cette librairie contient 1 classe et 2 fonctions :

  • classe ParametersFromXml: classe principale, qui permet de lire et d’écrire dans un fichier xml

  • la fonction to_bool : elle permet de transformer une chaine de caractère en booléun

  • la fonction xml_deep_copy : permet de copier un objet de la classe ParametersFromXml

La classe ParametersFromXml

Cette classe contient 3 attributs :

  • _parameter_filename: nom du fichier paramètre

  • _xml_root: ET root, objet de base où sont stockées toutes les données du fichier xml

  • _xml_tree: ET tree, permettant de créer un nouveau fichier xml

L’appel de cette fonction peut se faire de 3 façons différentes :

  • Sans input: les 3 attributs seront alors vide, et les fonctions de lecture ne seront pas disponibles

  • avec un nom de fichier xml à lire : à la création de l’objet, le fichier xml est lu et les données disponibles dans l’attribut _xml_root

  • avec un objet de type ET.Element: une nouvelle classe est créée à partir de d’élement ET

L’import de cette classe se fait de la façon suivante :

from SignalCreation.Utils.ToolsParametersXml import ParametersFromXml

Ajouter une variable

Ajouter une chaine de caractère

Pour ajouter une variable, on utilise la fonction set_param_xml. Cette commande nécessite deux entrées : une clé et une valeur. La clé représente le chemin d’accès dans le fichier XML, et la valeur correspond à la variable qu’on va ajouter.

Exemple de création d’une variable chaine de caractère et de la création du fichier xml associé :

param = ParametersFromXml()
param.set_param_xml('example', 'value_A')
param.write('test.xml')

Le fichier xml ainsi créé sera le suivant :

<Lidar>
        <example>value_A</example>
</Lidar>

De base, le premier attribut du fichier xml est “Lidar”, mais il peut facilement être changé en utilisant l’input name_of_init_element :

param = ParametersFromXml()
param.set_param_xml('example', 'value_A', name_of_init_element='dalek')
param.write('test.xml')

Alors, le fichier ainsi créé sera :

<dalek>
        <example>value_A</example>
</dalek>

Si on veut écrire une variable dans des sous-élements du fichier xml, il suffit d’utiliser la lettre “/” comme séparateur. Exemple :

param = ParametersFromXml()
param.set_param_xml('example/sub_exemple_1', 'value_A')
param.set_param_xml('example/sub_exemple_2', 'value_B')
param.set_param_xml('dalek', 'blue')
param.set_param_xml('dalek/red', 'True')
param.write('test.xml')

Le fichier ainsi créé aura la forme suivante :

<Lidar>
        <example>
                <sub_exemple_1>value_A</sub_exemple_1>
                <sub_exemple_2>value_B</sub_exemple_2>
        </example>
        <dalek>blue
                <red>True</red>
        </dalek>
</Lidar>

Ajouter une variable numérique

Cette fois ci, avec ajoutant une variable au format float, l’attribut de la variable sera écrit automatiquement dans le fichier xml.

param = ParametersFromXml()
param.set_param_xml('example', 3.25)
param.write('test.xml')

Alors, dans le fichier créé, on verra apparaitre le type de la variable :

<Lidar>
        <example type="float">3.25</example>
</Lidar>

Ajouter un objet pint

Un objet pint est un objet qui a une valeur et une unité. On utilise pour cela la librairie Pint :

import pint

La fonction suivante va sauvegarder la valeur de 6.78 GHz.

unit_registry = pint.UnitRegistry()
param = ParametersFromXml()
param.set_param_xml('example', 6.78 * unit_registry('GHz'))
param.write('test.xml')

Alors, dans le fichier créé, on verra apparaitre le type de la variable et son unité :

<Lidar>
        <example type="float" unit="gigahertz">6.78</example>
</Lidar>

Ajouter une variable avec des attributs

On peut ajouter des attributs à chaque variable qu’on ajoute, en utilisant l’entrée ‘attrs’ de la fonction. Cette entrée nécessite un dictionnaire. On peut ajouter un attribut utilisé par la classe (exemple : type, ou unité), mais également utiliser n’importe quel nom d’attribut. Exemple :

param = ParametersFromXml()
param.set_param_xml('variable', 3.25, attrs={'unit':'km', 'other_attribute': 'class'})
param.write('test.xml')

Le fichier xml ainsi créé sera de la forme :

<Lidar>
        <variable unit="km" other_attribute="class" type="float">3.25</variable>
</Lidar>

Lire une variable

Pour lire une variable, on va utiliser

Classe ParametersFromXml

class SignalCreation.Utils.ToolsParametersXml.ParametersFromXml(parameter_filename=None, use_reference_parameter=False, parameter_filename_ref=None)
Parameters:
  • parameter_filename (str | Element | None)

  • use_reference_parameter (bool)

  • parameter_filename_ref (Element | str | None)

clean_variables(tag_to_clean, level_tag=None, recursive=False)

Clean all the parameters where the tag is “tag_name_to_clean”, with a begining to the element “main_tag”

Parameters:
  • tag_to_clean (str or None) – name of the tag where the text will be remove (default: filename)

  • level_tag (str or None) – level to begining the search (default: None => begin to the root)

  • recursive (bool) – True if the search is recursive within the various sub-elements (default: False)

exist(tag)

Search if the element exist (the variable can be empty)

Parameters:

tag (str) – tag to search

Returns:

true is the element exist, False else

get_element_attrs_from_xml(keys, attrs_name_to_find=None)

Get attribute of element from parameters

Parameters:
  • keys – key of the parameter

  • attrs_name_to_find (str | list | None) – get only the attributes listed here

Returns:

a dictionary contained the attribute of the element

Return type:

dict | None

get_filename_from_path(xml_element_name, super_xml_element_name=None, tag_dt='Read/date_to_process/date', dt=None, tag_hours='Read/date_to_process/hours', tag_acquisition_time='Read/date_to_process/acquisition_time')

Return the filename from parameters in xml file and in function of the date.

Parameters:
  • xml_element_name (str) – Name of the element repertory in the xml file

  • super_xml_element_name (: str or None) – String, super element, which can replace information in xml_element_name

  • tag_dt (str) – tag where data is saved (default: “Read/date_to_process/date”)

  • dt (str or date or datetime or None) – date to use for the filename (if necessary) (default: None)

  • tag_hours (str) – tag where hours is saved (default: “Read/date_to_process/hours”)

  • tag_acquisition_time (str) – tag where acquisition time is saved (default: “Read/date_to_process/acquisition_time”)

Returns:

String, name of the filename

Return type:

str or list or None

get_list_options(key, attrs_name_to_find='options')

Get the possibles options for an option in the xml parameter file. If no options, read the value of the parameter, and create the list of possible options

Parameters:
  • key (str) – key of the value in the xml file

  • attrs_name_to_find (str) – attribute name to search (default: options)

Returns:

the list of options

Return type:

list or None

get_param(keys, value_separator=',', clean=True, num_output=-1, value_unit=None, value_type='str', cond_keys=None, cond_value=None, default_value=None, default_attrs=None)

Get parameter from XML file with optional conditional filtering and default value insertion.

Parameters:
  • keys (str) – tag of the variable in the XML root file

  • value_separator (str | None) – separator for lists (default: ‘,’)

  • clean (bool) – clean string values (default: True)

  • num_output (int | None) – index of the value to return (default: -1 for auto)

  • value_unit (str | None) – unit of the value (optional)

  • value_type (str) – type of the value (default: ‘str’)

  • cond_keys (str | None) – conditional key for filtering (optional)

  • cond_value (str | int | float | bool | None) – value to match for conditional filtering (optional)

  • default_value (str | float | int | list | ndarray | Quantity | None) – default value if parameter not found (optional)

  • default_attrs (dict | None) – default attributes to set if parameter not found (optional)

Returns:

extracted value(s)

Return type:

list | str | None

get_param_xml(keys, value_separator=',', clean=True, num_output=-1, value_unit=None, value_type='str')

Get parameter value from XML file

Parameters:
  • keys (str) – tag of the variable in the xml root file

  • value_separator (str or None) – separator in case of list of value (default: None)

  • clean (bool) – apply of clean function of the variable (remove space and invalid characters) (default: True)

  • num_output (int or None) – index of the variable to return, None return all the list (default: 0)

  • value_unit (str or None) – unit of the value if not in the attribute of the parameter (default: )

  • value_type (str) – type of the value if not in the attribute of the parameter (default: str)

Returns:

A dictionary with the parameter and the attribute.

Return type:

list or str or None

get_param_xml_to_dict(keys, value_separator=',', clean=True, num_output=-1, value_unit=None, value_type='str')

List the variables in a xml element and return a dictionary with tag and values

Parameters:
  • keys (str) – tag of the variable in the xml root file

  • value_separator (str or None) – separator in case of list of value (default: None)

  • clean (bool) – apply of clean function of the variable (remove space and invalid characters) (default: False)

  • num_output (int | None)

  • value_unit (str | None)

  • value_type (str)

Return type:

dict

:type clean; bool :param num_output: index of the variable to return, None return all the list (default: 0) :type num_output: int or None :param value_unit: unit of the value if not in the attribute of the parameter (default: ) :type value_unit: str or None :param value_type: type of the value if not in the attribute of the parameter (default: str) :type value_type: str

Returns:

return dictionary with parameters of the xml

Return type:

dict

Parameters:
  • keys (str)

  • value_separator (str | None)

  • clean (bool)

  • num_output (int | None)

  • value_unit (str | None)

  • value_type (str)

get_param_xml_with_default_param(keys, value_separator=',', clean=True, num_output=-1, value_unit=None, value_type='str', default_value=None, default_attrs=None)

Get the value of a xml parameters file, and insert default data when there is no data

Parameters:
  • keys (str) – key of the parameter

  • value_separator (str | None) – separator if more than one term (default: ,)

  • clean (bool) – apply of clean function of the variable (remove space and invalid characters) (default: False)

  • num_output (int | None) – index of the variable to return, None return all the list (default: 0)

  • value_unit (str | None) – unit of the value if not in the attribute of the parameter (default: )

  • value_type (str) – type of the value if not in the attribute of the parameter (default: str)

  • default_value (str | float | int | list | ndarray | Quantity | None) – default value if get value is None (default: None)

  • default_attrs (dict | None) – default attributes if get value is None (default: None)

read_filename_from_path(xml_element_name, super_xml_element_name=None)

Read the filename from parameters in xml file and in function of the date, check if file(s) exists, and insert filename(s) into the xml file.

Parameters:
  • xml_element_name (str) – Name of the element repertory in the xml file

  • super_xml_element_name (: str | None) – String, super element, which can replace information in xml_element_name

Returns:

String, name of the filename

Return type:

str | list | None

read_xml_file(parameter_filename, ref=False)

Read the parameters file in XML format

Parameters:
  • parameter_filename (str) – full pathname of the parameters file

  • ref (bool) – False if there is not the reference parameter, else True

remove_with_condition(cond_keys, conds_to_remove)

Remove data where there is a condition :param cond_keys: :param cond_to_remove: :return:

Parameters:
  • cond_keys (str)

  • conds_to_remove (list | str | int | float | bool)

set_param_xml(keys, value=None, attrs=None, separator=',', name_of_init_element='Lidar', num_output=None)

Set parameters into the xml root

Parameters:
  • keys (str) – key of the parameter

  • value (str | float | int | list | bool | ndarray | Quantity | date | None) – value of the parameter

  • attrs (dict | None) – attributes to the parameter (default: None)

  • separator (str | None) – separator if more than one term (default: ,)

  • name_of_init_element (str) – name of the initial element, if creation of the parameter (default: Lidar)

  • num_output (int | None) – index of the variable to return, None return all the list (default: 0)

write(filename_out)

Write the parameter file into xml format

Parameters:

filename_out (str) – name of the filename

Returns: