File: objects.py

package info (click to toggle)
python-xsdata 24.1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,936 kB
  • sloc: python: 29,257; xml: 404; makefile: 27; sh: 6
file content (28 lines) | stat: -rw-r--r-- 691 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import math
from typing import Any
from xml.etree.ElementTree import QName


def update(obj: Any, **kwargs: Any):
    """Update an object from keyword arguments with dotted keys."""
    for key, value in kwargs.items():
        attrsetter(obj, key, value)


def attrsetter(obj: Any, attr: str, value: Any):
    names = attr.split(".")
    last = names.pop()
    for name in names:
        obj = getattr(obj, name)

    setattr(obj, last, value)


def literal_value(value: Any) -> str:
    if isinstance(value, float):
        return str(value) if math.isfinite(value) else f'float("{value}")'

    if isinstance(value, QName):
        return f'QName("{value.text}")'

    return repr(value)