From 70b6f3d274c57190899917c9a5a0ad1b61ee6fc9 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Thu, 8 May 2025 22:09:32 +0200 Subject: [PATCH] fix: use own undefined --- locale/fr/LC_MESSAGES/rougail.po | 84 +++++++++++-------- locale/rougail.pot | 80 ++++++++++-------- src/rougail/locale/fr/LC_MESSAGES/rougail.mo | Bin 13546 -> 13903 bytes src/rougail/object_model.py | 3 +- src/rougail/user_datas.py | 4 +- src/rougail/utils.py | 7 ++ 6 files changed, 105 insertions(+), 73 deletions(-) diff --git a/locale/fr/LC_MESSAGES/rougail.po b/locale/fr/LC_MESSAGES/rougail.po index 569f5168b..9d400540a 100644 --- a/locale/fr/LC_MESSAGES/rougail.po +++ b/locale/fr/LC_MESSAGES/rougail.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2025-05-03 22:50+0200\n" -"PO-Revision-Date: 2025-05-03 22:50+0200\n" +"POT-Creation-Date: 2025-05-08 21:35+0200\n" +"PO-Revision-Date: 2025-05-08 21:37+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -135,6 +135,12 @@ msgid "" msgstr "" "la variable \"{0}\" a la valeur par défaut invalide \"{1}\" devrait être {2}" +#: src/rougail/config.py:226 +msgid "Structure format version by default, if not specified in structure file" +msgstr "" +"La version du format de la structure par défaut, si non spécifier dans le " +"fichier de structure" + #: src/rougail/config.py:234 msgid "File with functions" msgstr "Fichier avec les fonctions" @@ -193,39 +199,47 @@ msgstr "Le patron de secret pour construire le nom de l'élément dans Bitwarden msgid "The pattern is in Jinja format" msgstr "Le patron est au format Jinja" -#: src/rougail/config.py:458 +#: src/rougail/config.py:378 +msgid "Select for {0}" +msgstr "Sélection pour {0}" + +#: src/rougail/config.py:457 +msgid "Override default parameters for option type" +msgstr "Sur charger les paramètre par défaut pour le type d'option" + +#: src/rougail/config.py:460 msgid "Default parameters for option type" msgstr "Paramètre par défaut pour le type d'option" -#: src/rougail/convert.py:281 +#: src/rougail/convert.py:280 msgid "unknown type {0} for {1}" msgstr "type {0} inconnu pour {1}" -#: src/rougail/convert.py:416 +#: src/rougail/convert.py:411 msgid "family \"{0}\" define multiple time" msgstr "la famille \"{0}\" est définit plusieurs fois" -#: src/rougail/convert.py:679 +#: src/rougail/convert.py:667 msgid "variable \"{0}\" define multiple time" msgstr "la variable \"{0}\" est définit plusieurs fois" -#: src/rougail/convert.py:782 +#: src/rougail/convert.py:767 msgid "params must be a dict for {0}" msgstr "params doit être une dict pour {0}" -#: src/rougail/convert.py:803 +#: src/rougail/convert.py:788 msgid "\"{0}\" has an invalid \"params\" for {1}: {2}" msgstr "\"{0}\" a un attribut \"params\" invalide pour {1}: {2}" -#: src/rougail/convert.py:817 +#: src/rougail/convert.py:802 msgid "secret_manager must be a dict for {0}" msgstr "secret_manager doit être une dict pour {0}" -#: src/rougail/convert.py:1147 +#: src/rougail/convert.py:1129 msgid "Cannot execute annotate multiple time" msgstr "Ne peut exécuter l'annotation plusieurs fois" -#: src/rougail/convert.py:1154 +#: src/rougail/convert.py:1136 msgid "" "invalid \"structural\" definition ({0}), we cannot load any structural file!" msgstr "" @@ -237,45 +251,45 @@ msgstr "" msgid "{0} in {1}" msgstr "{0} dans {1}" -#: src/rougail/object_model.py:51 +#: src/rougail/object_model.py:50 msgid "unknown boolean value \"{0}\"" msgstr "valeur du booléen inconnue \"{0}\"" -#: src/rougail/object_model.py:182 +#: src/rougail/object_model.py:181 msgid "cannot find variable \"{0}\" defined in attribute \"{1}\" for \"{2}\"" msgstr "" "ne peut trouver la variable \"{0}\" défini dans l'attribut \"{1}\" pour " "\"{2}\"" -#: src/rougail/object_model.py:186 +#: src/rougail/object_model.py:185 msgid "" "the variable \"{0}\" is in fact a family in attribute \"{1}\" for \"{2}\"" msgstr "" "la variable \"{0}\" est en faite une famille dans l'attribut \"{1}\" pour " "\"{2}\"" -#: src/rougail/object_model.py:189 src/rougail/object_model.py:479 +#: src/rougail/object_model.py:188 src/rougail/object_model.py:478 msgid "unknown object \"{0}\" in attribute \"{1}\" for \"{2}\"" msgstr "objet inconnu \"{0}\" dans l'attribut \"{1}\" pour \"{2}\"" -#: src/rougail/object_model.py:206 +#: src/rougail/object_model.py:205 msgid "" "identifier parameter for \"{0}\" in \"{1}\" cannot be set none dynamic family" msgstr "" "le paramètre identifier pour \"{0}\" dans \"{1}\" ne peut être placé pour " "une famille non dynamique" -#: src/rougail/object_model.py:229 +#: src/rougail/object_model.py:228 msgid "cannot find variable \"{0}\" defined in \"{1}\" for \"{2}\"" msgstr "ne peut trouver la variable \"{0}\" défini dans \"{1}\" pour \"{2}\"" -#: src/rougail/object_model.py:232 +#: src/rougail/object_model.py:231 msgid "variable \"{0}\" defined in \"{1}\" for \"{2}\" is a dynamic variable" msgstr "" "la variable \"{0}\" défini dans \"{1}\" pour \"{2}\" est une variable " "dynamique" -#: src/rougail/object_model.py:243 +#: src/rougail/object_model.py:242 msgid "" "the variable \"{0}\" is not a follower, so cannot have index type for param " "in \"{1}\"" @@ -283,7 +297,7 @@ msgstr "" "la variable \"{0}\" n'est pas suiveuse, donc ne peut avoir de type index " "comme paramètre dans \"{1}\"" -#: src/rougail/object_model.py:476 +#: src/rougail/object_model.py:475 msgid "" "a variable \"{0}\" is needs in attribute \"{1}\" for \"{2}\" but it's a " "family" @@ -291,7 +305,7 @@ msgstr "" "une variable \"{0}\" est nécessaire pour l'attribut \"{1}\" pour \"{2}\" " "mais c'est une famille" -#: src/rougail/object_model.py:496 +#: src/rougail/object_model.py:495 msgid "" "variable \"{0}\" has an attribute \"{1}\" calculated with the unknown " "variable \"{2}\"" @@ -299,7 +313,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\" calculé avec la variable " "inconnue \"{2}\"" -#: src/rougail/object_model.py:532 +#: src/rougail/object_model.py:531 msgid "" "the variable \"{0}\" has an invalid \"{1}\" the variable \"{2}\" is in a sub " "dynamic option" @@ -307,14 +321,14 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" est " "dans une sous option dynamique" -#: src/rougail/object_model.py:535 +#: src/rougail/object_model.py:534 msgid "" "the leader \"{0}\" has an invalid \"{1}\" the follower \"{2}\" is a multi" msgstr "" "la variable meneuse \"{0}\" a un attribut invalide \"{1}\", la variable " "suiveuse \"{2}\" est multiple" -#: src/rougail/object_model.py:551 +#: src/rougail/object_model.py:550 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" " "must not be multi" @@ -322,7 +336,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" ne " "doit pas être multiple" -#: src/rougail/object_model.py:556 +#: src/rougail/object_model.py:555 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must not " "be a multi or the variable \"{2}\" must be multi" @@ -330,7 +344,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", la variable ne doit pas " "être multiple ou la variable \"{2}\" doit être multiple" -#: src/rougail/object_model.py:561 +#: src/rougail/object_model.py:560 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must be " "a multi or the variable \"{2}\" must not be multi" @@ -338,7 +352,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", la variable doit être " "multiple ou la variable \"{2}\" ne doit pas être multiple" -#: src/rougail/object_model.py:566 +#: src/rougail/object_model.py:565 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" " "is multi but is inside a list" @@ -362,7 +376,7 @@ msgstr "" "la variable \"{0}\" a une valeur par défaut calculé a partir de \"{1}\" " "laquelle a un type incompatible" -#: src/rougail/object_model.py:628 +#: src/rougail/object_model.py:629 msgid "" "\"when\" is not allowed in format version 1.0 for attribute \"{0}\" for " "variable \"{1}\"" @@ -370,7 +384,7 @@ msgstr "" "\"when\" n'est pas autorisé avec le format en version 1.0 pour l'attribut " "\"{0}\" pour la variable \"{1}\"" -#: src/rougail/object_model.py:631 +#: src/rougail/object_model.py:632 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", \"when\" and " "\"when_not\" cannot set together" @@ -378,7 +392,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", \"when\" et \"when_not\" " "ne peuvent pas être défini ensemble" -#: src/rougail/object_model.py:637 +#: src/rougail/object_model.py:638 msgid "" "\"when_not\" is not allowed in format version 1.0 for attribute \"{0}\" for " "variable \"{1}\"" @@ -386,7 +400,7 @@ msgstr "" "\"when_not\" n'est pas autorisé au format 1.0 pour l'attribut \"{0}\" pour " "la variable variable \"{1}\"" -#: src/rougail/object_model.py:691 +#: src/rougail/object_model.py:693 msgid "" "cannot find variable \"{0}\" for the information \"{1}\" when calculating " "\"{2}\"" @@ -394,18 +408,18 @@ msgstr "" "ne peut trouver la variable \"{0}\" pour l'information \"{1}\" lors du " "calcul de \"{2}\"" -#: src/rougail/object_model.py:694 +#: src/rougail/object_model.py:696 msgid "" "identifier not allowed for the information \"{0}\" when calculating \"{1}\"" msgstr "" "identifier n'est pas autorisé pour l'information \"{0}\" lors du calcul de " "\"{1}\"" -#: src/rougail/object_model.py:743 +#: src/rougail/object_model.py:747 msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\"" msgstr "\"when\" n'est pas autorisé au format 1.0 pour l'attribut \"{0}\"" -#: src/rougail/object_model.py:747 src/rougail/object_model.py:755 +#: src/rougail/object_model.py:751 src/rougail/object_model.py:759 msgid "" "the identifier has an invalid attribute \"{0}\", \"when\" and \"when_not\" " "cannot set together" @@ -413,7 +427,7 @@ msgstr "" "l'identifiant a un attribut invalide \"{0}\", \"when\" et \"when_not\" ne " "peuvent pas être défini ensemble" -#: src/rougail/object_model.py:777 +#: src/rougail/object_model.py:782 msgid "" "the variable \"{0}\" is not a follower, so cannot have index type for \"{1}\"" msgstr "" diff --git a/locale/rougail.pot b/locale/rougail.pot index a2624084d..74ce1ee1d 100644 --- a/locale/rougail.pot +++ b/locale/rougail.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2025-05-03 22:50+0200\n" +"POT-Creation-Date: 2025-05-08 21:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -87,6 +87,10 @@ msgstr "" msgid "the variable \"{0}\" has an unvalid default value \"{1}\" should be in {2}" msgstr "" +#: src/rougail/config.py:226 +msgid "Structure format version by default, if not specified in structure file" +msgstr "" + #: src/rougail/config.py:234 msgid "File with functions" msgstr "" @@ -143,39 +147,47 @@ msgstr "" msgid "The pattern is in Jinja format" msgstr "" -#: src/rougail/config.py:458 +#: src/rougail/config.py:378 +msgid "Select for {0}" +msgstr "" + +#: src/rougail/config.py:457 +msgid "Override default parameters for option type" +msgstr "" + +#: src/rougail/config.py:460 msgid "Default parameters for option type" msgstr "" -#: src/rougail/convert.py:281 +#: src/rougail/convert.py:280 msgid "unknown type {0} for {1}" msgstr "" -#: src/rougail/convert.py:416 +#: src/rougail/convert.py:411 msgid "family \"{0}\" define multiple time" msgstr "" -#: src/rougail/convert.py:679 +#: src/rougail/convert.py:667 msgid "variable \"{0}\" define multiple time" msgstr "" -#: src/rougail/convert.py:782 +#: src/rougail/convert.py:767 msgid "params must be a dict for {0}" msgstr "" -#: src/rougail/convert.py:803 +#: src/rougail/convert.py:788 msgid "\"{0}\" has an invalid \"params\" for {1}: {2}" msgstr "" -#: src/rougail/convert.py:817 +#: src/rougail/convert.py:802 msgid "secret_manager must be a dict for {0}" msgstr "" -#: src/rougail/convert.py:1147 +#: src/rougail/convert.py:1129 msgid "Cannot execute annotate multiple time" msgstr "" -#: src/rougail/convert.py:1154 +#: src/rougail/convert.py:1136 msgid "invalid \"structural\" definition ({0}), we cannot load any structural file!" msgstr "" @@ -184,67 +196,67 @@ msgstr "" msgid "{0} in {1}" msgstr "" -#: src/rougail/object_model.py:51 +#: src/rougail/object_model.py:50 msgid "unknown boolean value \"{0}\"" msgstr "" -#: src/rougail/object_model.py:182 +#: src/rougail/object_model.py:181 msgid "cannot find variable \"{0}\" defined in attribute \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/object_model.py:186 +#: src/rougail/object_model.py:185 msgid "the variable \"{0}\" is in fact a family in attribute \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/object_model.py:189 src/rougail/object_model.py:479 +#: src/rougail/object_model.py:188 src/rougail/object_model.py:478 msgid "unknown object \"{0}\" in attribute \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/object_model.py:206 +#: src/rougail/object_model.py:205 msgid "identifier parameter for \"{0}\" in \"{1}\" cannot be set none dynamic family" msgstr "" -#: src/rougail/object_model.py:229 +#: src/rougail/object_model.py:228 msgid "cannot find variable \"{0}\" defined in \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/object_model.py:232 +#: src/rougail/object_model.py:231 msgid "variable \"{0}\" defined in \"{1}\" for \"{2}\" is a dynamic variable" msgstr "" -#: src/rougail/object_model.py:243 +#: src/rougail/object_model.py:242 msgid "the variable \"{0}\" is not a follower, so cannot have index type for param in \"{1}\"" msgstr "" -#: src/rougail/object_model.py:476 +#: src/rougail/object_model.py:475 msgid "a variable \"{0}\" is needs in attribute \"{1}\" for \"{2}\" but it's a family" msgstr "" -#: src/rougail/object_model.py:496 +#: src/rougail/object_model.py:495 msgid "variable \"{0}\" has an attribute \"{1}\" calculated with the unknown variable \"{2}\"" msgstr "" -#: src/rougail/object_model.py:532 +#: src/rougail/object_model.py:531 msgid "the variable \"{0}\" has an invalid \"{1}\" the variable \"{2}\" is in a sub dynamic option" msgstr "" -#: src/rougail/object_model.py:535 +#: src/rougail/object_model.py:534 msgid "the leader \"{0}\" has an invalid \"{1}\" the follower \"{2}\" is a multi" msgstr "" -#: src/rougail/object_model.py:551 +#: src/rougail/object_model.py:550 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" must not be multi" msgstr "" -#: src/rougail/object_model.py:556 +#: src/rougail/object_model.py:555 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must not be a multi or the variable \"{2}\" must be multi" msgstr "" -#: src/rougail/object_model.py:561 +#: src/rougail/object_model.py:560 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must be a multi or the variable \"{2}\" must not be multi" msgstr "" -#: src/rougail/object_model.py:566 +#: src/rougail/object_model.py:565 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" is multi but is inside a list" msgstr "" @@ -256,35 +268,35 @@ msgstr "" msgid "variable \"{0}\" has a default value calculated with \"{1}\" which has incompatible type" msgstr "" -#: src/rougail/object_model.py:628 +#: src/rougail/object_model.py:629 msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\" for variable \"{1}\"" msgstr "" -#: src/rougail/object_model.py:631 +#: src/rougail/object_model.py:632 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", \"when\" and \"when_not\" cannot set together" msgstr "" -#: src/rougail/object_model.py:637 +#: src/rougail/object_model.py:638 msgid "\"when_not\" is not allowed in format version 1.0 for attribute \"{0}\" for variable \"{1}\"" msgstr "" -#: src/rougail/object_model.py:691 +#: src/rougail/object_model.py:693 msgid "cannot find variable \"{0}\" for the information \"{1}\" when calculating \"{2}\"" msgstr "" -#: src/rougail/object_model.py:694 +#: src/rougail/object_model.py:696 msgid "identifier not allowed for the information \"{0}\" when calculating \"{1}\"" msgstr "" -#: src/rougail/object_model.py:743 +#: src/rougail/object_model.py:747 msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\"" msgstr "" -#: src/rougail/object_model.py:747 src/rougail/object_model.py:755 +#: src/rougail/object_model.py:751 src/rougail/object_model.py:759 msgid "the identifier has an invalid attribute \"{0}\", \"when\" and \"when_not\" cannot set together" msgstr "" -#: src/rougail/object_model.py:777 +#: src/rougail/object_model.py:782 msgid "the variable \"{0}\" is not a follower, so cannot have index type for \"{1}\"" msgstr "" diff --git a/src/rougail/locale/fr/LC_MESSAGES/rougail.mo b/src/rougail/locale/fr/LC_MESSAGES/rougail.mo index df373926c21614855159c6ccf6d19b998ba3ae5f..571995390a7320901d6017dd68c3bcf0591bdc8e 100644 GIT binary patch delta 2269 zcmYk-drVtZ9KiA82CKYZV^{=xdB|Lc$YT@sgpCQvnBdBuGNH7$at+>1T;D%FMWp%<6%X)MW5 z%8f_xK|Ja7KgRp%e}$E}gb&M9d6`NzabpYC;$d8g?_fTrun6aI2Y!c}usqAYe*o{J zKZY&%GJ5cHT#E~si&@#$gsK!f>33nZZ1p6K2e@$_8}S<~L068wLl3f2HG=!_OGVcFZQs2?=Q*jXii82k=)6U{|rd zh z!sl@i7f>c{<(%a6X&l8HD9;Vn*&Dcw33>mk9+3vWWY~>W#7`C!K^brsCB)@q-VO|4 z8=k@KxQIPi+i2&`B<`et1^wtIEKlN5$15li_pEc?{}*ZSr{3qn3!uJ77OVb1Sx^NT zq+=NO;n$drUgF7{rke2{lxGQ|_1geeVQp6QDv^^^%c-24m4q^9B99AigSC@Rl&q8@ zA(T~17E95rtNqiP@3bY;*^HGZ1(-!`rE>Jv23#nS$)U>YDn%l=(rQ_kgi6B}Y6rE; zx@VueH2a;tB+g!^UF^8cvColwvi^VM;tJ>9e%$D^3sK%2DH1h_tyA{@=>d)x63jba(EoN^;6Z3l0|!{yQoD}Dd|)a?e5~WegWi; zq?wnRAsvdma0jRr(xI$R9d~)tGJB8crfCFqEts6msLb{0VLcGjLgS`(wEl(UM_Kh9 zF*6>B#Z6sqj`?F6Ux*sx5p8%<3+f?%JRGaljF1)?k7>~fJz#_kJ*XKGEqdpRMp#e% zkmb#HwP=kE8=IO_Ib}D~-M+Y~1xEblGrFmT^{6)CH~nLCXJTfu!Bdo+_7u2%b2G9W znQda6r&*HfHx1oP&U#9d)s?Gw-zYh delta 1964 zcmX}sTWC~A9LMp0V>W9v(cCmOP3oHU64ylIM$^OK})0G}I#+Rouv)U{;O|Sb)1Q2M=OCp2Q}+fVKD{xIcHI*}L@Xum(GD zIvz&`uwQT{KEU@eEz2y9Gq6xgP14Xx`cZ$ljEcrnT#U8ZegwY4R{FoNr*fPm% z8GehJ;C0jrZL$txk_4^&vz>`UckFb9l@mDB*;zm2ZLM2Iak=a7* zM*d?bF^WH90)N9K=JK#6v;#>8yMipvZsHsK9hc%5ncai=gs&U-;s(55Lj0>}RFWBc zaXV_S9%2P5lhmJ&+S4{H#{v8R&*K*S1C=XP5wqFYhupFskh$6*YN2;fE1$wkXNOwf1%4Qj({S302Q$@ z{1ClajHW&5!cTD+wZbBnp%=EG`ukCPc>y)RYplkP=P-FZ5tvbCwwC@rT!W*y2Mg!= z3q6YS=no?Q^Xxti4crzZ{CE*}U_MWE;Xc&Bf1-YmF`F;&IO@57Pz%_`et9?&xOBe1 z@)6X8G8g#o+k}ejRcz8f{-sgRjYi_U3=iRIyp0>MfJ|(~UfhP4a6L|q`}U$Dat+xv zDU85}=)`4a}#i zgsA1N_5UU2zL)AMlQrg1UyRT<=>dQz`sw_HZXfS#%??15A!Vmxe diff --git a/src/rougail/object_model.py b/src/rougail/object_model.py index 3eb0715cd..063c46464 100644 --- a/src/rougail/object_model.py +++ b/src/rougail/object_model.py @@ -26,10 +26,9 @@ from pydantic import ( StrictStr, ConfigDict, ) -from tiramisu import undefined import tiramisu from tiramisu.config import get_common_path -from .utils import get_jinja_variable_to_param, calc_multi_for_type_variable +from .utils import get_jinja_variable_to_param, calc_multi_for_type_variable, undefined from .i18n import _ from .error import DictConsistencyError, VariableCalculationDependencyError diff --git a/src/rougail/user_datas.py b/src/rougail/user_datas.py index c38257baa..7df24661f 100644 --- a/src/rougail/user_datas.py +++ b/src/rougail/user_datas.py @@ -22,8 +22,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from typing import List from re import findall -from rougail.utils import normalize_family -from tiramisu import undefined, Calculation +from rougail.utils import normalize_family, undefined +from tiramisu import Calculation from tiramisu.error import ( PropertiesOptionError, LeadershipError, diff --git a/src/rougail/utils.py b/src/rougail/utils.py index ccc41e9d1..3db019afc 100644 --- a/src/rougail/utils.py +++ b/src/rougail/utils.py @@ -199,3 +199,10 @@ def calc_multi_for_type_variable(local_variable: 'Variable', variable_in_calcula elif count_identifiers > 1: variable_in_calculation_multi = 'submulti' return local_variable_multi, variable_in_calculation_multi + + +class Undefined: + pass + + +undefined = Undefined()