Skip to content
Snippets Groups Projects

adding helper functions for kadi

Merged Christoph Alt requested to merge devel/kadi into main
3 files
+ 131
0
Compare changes
  • Side-by-side
  • Inline
Files
3
+ 64
0
from dateutil import parser
from datetime import datetime
from cbutil.util import remove_none
import logging
import builtins
logger = logging.getLogger(__file__)
def create_metadatum(key: str, type_name: str, value, **kwargs) -> dict:
""" Create a dict so that it can be used for kadiapy is add_metadatum."""
if isinstance(type_name, type):
type_name = type_name.__name__
return {"key": key,
"type": type_name,
"value": value,
**kwargs}
def get_type_name(value) -> str:
if not isinstance(value, str):
return type(value).__name__
for possible_type in [int, float]:
try:
possible_type(value)
except ValueError:
pass
else:
return possible_type.__name__
try:
parser.parse(value)
except ValueError:
logger.info(f"{value} could not be parse as date")
pass
else:
return "date"
return str.__name__
def handle_dates(value) -> str:
try:
return str(datetime.fromtimestamp(int(value)))
except (ValueError, OverflowError, OSError):
pass
return value
def transform_to_type(type_name, value: str):
try:
return getattr(builtins, type_name)(value)
except AttributeError as e:
raise ValueError(f"could not transform {value} to {type_name} {e}")
def build_meta_data(tags: dict):
for key, value in remove_none(tags).items():
type_name = get_type_name(value)
if key == "time" or type_name == "date":
type_name = "date"
value = handle_dates(value)
else:
value = transform_to_type(type_name, value)
yield create_metadatum(key, type_name, value)
Loading