Skip to content

Helper functions

Helper functions of the module, we added them for documentation purpose and we think thath it may be useful for scripting and prototyping

App Utils

app_utils

Classes:

  • UtilsError

    Exception de base des fonctions du module Utils

Functions:

  • get_app_version

    Construit le metadata de l'application en cours

  • to_bool

    Convertit une cdc en booléen selon un mapping simple

  • to_date

    Retourne une date depuis un string, format dd/mm/yyyy ou dd-mm-yyyy ou dd.mm.yyyy

  • to_datetime

    Retourne un datetime depuis un string, format dd/mm/yyyy ou dd-mm-yyy

  • to_float

    Valide et convertit un texte qui représente un nombre rationnel.

  • to_int

    Valide un texte qui représente un nombre entier.

UtilsError

Exception de base des fonctions du module Utils

get_app_version

get_app_version() -> dict

Construit le metadata de l'application en cours

Source code in pycalendar_api/utils/app_utils.py
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def get_app_version() -> dict:
    """Construit le metadata de l'application en cours
    """
    try:
        # importlib.metadata.version('calendar_api')
        from pycalendar_api import __version__ as v
        commit_id = v.commit_id
        version_id = v.version
        version_tuple = v.version_tuple
    except ImportError:
        commit_id = None
        version_id = 'dev'
        version_tuple = ()
    rv = {
        'commit_id': commit_id,
        'version_id': version_id,
        'version_tuple': version_tuple,
    }
    return rv

to_bool

to_bool(value: str | int) -> bool

Convertit une cdc en booléen selon un mapping simple

Parameters:

  • value

    (`str`) –

    Une valeur décrivant un état booléan

Returns:

  • bool

    bool: True ou False

Source code in pycalendar_api/utils/app_utils.py
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
def to_bool(value: str|int) -> bool:
    """Convertit une cdc en booléen selon un mapping simple

    Args:
        value (`str`): Une valeur décrivant un état booléan

    Returns:
        `bool`: True ou False
    """
    svalue = str(value)

    dico = {
        1: True, '1': True,
        'o': True, 'oui': True,
        'vrai': True, 'true': True,
        'y': True, 'yes': True,

        0: False, '0': False,
        'n': False, 'non': False,
        'faux': False,
        'false': False, 'no': False,
        'none': False, 'null': False,
    }

    try:
        return dico[svalue.lower()]

    except KeyError:
        msg = f"to_bool: La valeur passée ne peut être convertie en bool. reçu : {value}"
        raise UtilsError(msg)

to_date

to_date(value: str | None) -> date

Retourne une date depuis un string, format dd/mm/yyyy ou dd-mm-yyyy ou dd.mm.yyyy

Source code in pycalendar_api/utils/app_utils.py
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
def to_date(value: str|None) -> dt.date:
    """Retourne une date depuis un string, format dd/mm/yyyy ou dd-mm-yyyy ou dd.mm.yyyy"""
    if isinstance(value, dt.datetime):
        return value.date()

    if isinstance(value, dt.date):
        return value

    if value in (None, '', 'None', '-'):
        return None

    try:
        if isinstance(value, str):
            sep = ' '
            dayfirst = True

            if '-' in value:
                sep = '-'
            elif '/' in value:
                sep = '/'
            elif '.' in value:
                sep = '.'

            first, *sp_value = value.split(sep)
            # Test pour éviter que les cdc ne soient interprétées MM/DD/YYYY
            if int(first) > 31:
                dayfirst = False

            return parser.parse(value, dayfirst=dayfirst).date()

        else:
            return value

    except (ValueError, parser.ParserError) as err:
        msg = f"to_date: La date passée est mal formatée: {value}"
        raise UtilsError(msg) from err

to_datetime

to_datetime(value: str) -> datetime

Retourne un datetime depuis un string, format dd/mm/yyyy ou dd-mm-yyy

Source code in pycalendar_api/utils/app_utils.py
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
def to_datetime(value: str) -> dt.datetime:
    """
    Retourne un datetime depuis un string, format dd/mm/yyyy ou dd-mm-yyy
    """
    if value in (None, '', 'None'):
        return None

    if isinstance(value, dt.datetime):
        return value

    if isinstance(value, dt.date):
        rv = dt.datetime.fromisoformat(str(value))
        return rv

    try:
        if isinstance(value, str):
            sep = ' '
            dayfirst = True

            if '-' in value:
                sep = '-'
            elif '/' in value:
                sep = '/'
            elif '.' in value:
                sep = '.'

            first, *sp_value = value.split(sep)
            if int(first) > 31:
                dayfirst = False

            return parser.parse(value, dayfirst=dayfirst)

        else:
            return value

    except (ValueError, parser.ParserError) as err:
        msg = f"to_datetime: La date passée est mal formatée: {value}"
        raise UtilsError(msg) from err

to_float

to_float(float_value: str) -> float

Valide et convertit un texte qui représente un nombre rationnel.

Parameters:

  • float_value

    (`str`) –

    Valeur en texte

Returns:

  • float

    float: Le nombre en unité de base

Source code in pycalendar_api/utils/app_utils.py
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
def to_float(float_value: str) -> float:
    """Valide et convertit un texte qui représente un nombre rationnel.

    Args:
        float_value (`str`): Valeur en texte

    Returns:
        `float`: Le nombre en unité de base
    """
    if float_value is None:
        return None

    try:
        return float(float_value)

    except (TypeError, ValueError):
        if isinstance(float_value, str):
            stripped = float_value.strip()
            zero_str = ('NC', '-', '', 'ND')
            if stripped in zero_str:
                return 0
            if ',' in float_value:
                return float(float_value.replace(',', '.').replace(' ', ''))

        msg = f"to_float: La valeur passée ne peut être convertie en float. reçu : {float_value}"
        raise UtilsError(msg)

to_int

to_int(int_value: str) -> int

Valide un texte qui représente un nombre entier.

Parameters:

  • int_value

    (`str`) –

    nombre entier en texte

Returns:

  • int

    int: Le nombre entier en unité de base

Source code in pycalendar_api/utils/app_utils.py
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
def to_int(int_value: str) -> int:
    """Valide un texte qui représente un nombre entier.

    Args:
        int_value (`str`): nombre entier en texte

    Returns:
        `int`: Le nombre entier en unité de base
    """
    if int_value is None:
        return None

    try:
        ivalue = int(int_value)
        return ivalue

    except (TypeError, ValueError):
        msg = f"to_int: La valeur passée ne peut être convertie en int. reçu : {int_value}"
        raise UtilsError(msg)