"""Factories for leaf tags."""importdatetimefromtypingimportAny,Dict,List,Type,Unionfromlxmlimportetreefromexporter.tagimportLeafTag,argument,leaffromexporter.utilimportLEVELS,MODES,sample_and_formatDATETIME_FORMATS={"datetime":"%Y-%m-%d %H:%M:%S","date":"%Y-%m-%d","time":"%H:%M:%S",}
[docs]defgenerate_key_leaf_tag(key:str)->Type[LeafTag]:""" Build a :class:`~exporter.tag.LeafTag` named ``key``, that returns the ``key`` from the context. """@leaf(key)def_tag(tag:LeafTag,data:Dict[str,Any])->str:returnstr(data[key])return_tag
[docs]defgenerate_count_leaf_tag(infix:str)->Type[LeafTag]:""" Build a :class:`~exporter.tag.LeafTag` named ``{infix.lower()}Count`` with a ``level`` argument, that returns the ``{level}{infix}Count`` from the context. """@argument("level",required=True,choices=LEVELS)@leaf(f"{infix.lower()}Count")def_tag(tag:LeafTag,data:Dict[str,Any])->str:returnstr(data[f"{tag.arguments['level']}{infix}Count"])return_tag
[docs]defgenerate_sample_leaf_tag(key:str)->Type[LeafTag]:""" Build a :class:`~exporter.tag.LeafTag` named ``key`` with ``mode`` and ``max`` arguments, that returns a sample of the ``key`` from the context. """@argument("mode",choices=MODES,default="oneLine")@argument("max",type=int,nonzero=True)@leaf(key)def_tag(tag:LeafTag,data:Dict[str,Any])->Union[str,List[etree.Element]]:returnsample_and_format(data[key],tag.arguments)return_tag
[docs]defgenerate_timestamp_leaf_tag(key:str,datetime_format:str)->Type[LeafTag]:""" Build a :class:`~exporter.tag.LeafTag` named ``key`` with a ``mode`` argument, that returns the ``key`` from the context in the format specified by ``mode``. The ``key`` value is parsed according to ``datetime_format``. """@argument("mode",choices=DATETIME_FORMATS,default="datetime")@leaf(key)def_tag(tag:LeafTag,data:Dict[str,Any])->str:d=datetime.datetime.strptime(data[key],datetime_format)returnd.strftime(DATETIME_FORMATS[tag.arguments["mode"]])return_tag