Source code for ampel.struct.JournalAttributes
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# File: Ampel-interface/ampel/struct/JournalAttributes.py
# License: BSD-3-Clause
# Author: valery brinnel <firstname.lastname@gmail.com>
# Date: 15.10.2018
# Last Modified Date: 12.05.2021
# Last Modified By: valery brinnel <firstname.lastname@gmail.com>
from collections.abc import Sequence
from typing import Any
from ampel.content.JournalRecord import JournalRecord
from ampel.types import Tag
[docs]
class JournalAttributes:
"""
Structure potentialy used by Ampel units to customize
the stock journal entry created after a process is run.
"""
__slots__ = 'tag', 'code', 'extra'
#: code / status
code: None | int
#: journal entry tag(s)
tag: None | Tag | Sequence[Tag]
#: if provided, will be included as-is under the journal root key 'extra'
extra: None | dict[str, Any]
def __init__(self,
code: None | int = None,
tag: None | Tag | Sequence[Tag] = None,
extra: None | dict[str, Any] = None
) -> None:
"""
:param code: potential integer code of the executed process
:param tag: journal entry tag(s)
:param extra: optional dict, which if provided, will be included 'as is' under journal root key 'extra'
Note regarding the type of extra: as of june 2020, mypy does not support recursive / json type
-> https://github.com/python/mypy/issues/731
"""
self.tag = tag
self.extra = extra
self.code = code
[docs]
def dict(self) -> JournalRecord:
d: JournalRecord = {}
if self.tag:
d['tag'] = self.tag
if self.code:
d['code'] = self.code
if self.extra:
d['extra'] = self.extra
return d
[docs]
def into(self, prime: JournalRecord) -> JournalRecord:
if self.code is not None:
prime['code'] = self.code
if self.tag is not None:
prime['tag'] = self.tag
if self.extra:
if 'extra' in prime:
prime['extra'] = self.extra | prime['extra']
else:
prime['extra'] = self.extra
return prime