Source code for univention.directory.reports.output
#
# Univention Directory Reports
# write an interpreted token structure to a file
#
# SPDX-FileCopyrightText: 2007-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only
import codecs
import os
from .tokens import AttributeToken, DateToken, PolicyToken, QueryToken, ResolveToken, TextToken
[docs]
class Output:
def __init__(self, tokens, filename=None, fd=None):
self._tokens = tokens
self._filename = filename
self._fd = fd
def _create_dir(self):
if not os.path.isdir(os.path.dirname(self._filename)):
os.makedir(self.path, mode=0o700)
[docs]
def open(self):
if self._fd:
return
self._create_dir()
self._fd = codecs.open(self._filename, 'wb', encoding='utf8')
[docs]
def close(self):
if self._fd:
self._fd.close()
self._fd = None
[docs]
def write(self, tokens=[]):
if not self._fd:
return
if not tokens:
tokens = self._tokens
for token in tokens:
if isinstance(token, TextToken):
self._fd.write(str(token.data))
elif isinstance(token, ResolveToken | QueryToken):
if len(token):
self.write(token)
elif isinstance(token, DateToken | AttributeToken | PolicyToken):
self._fd.write(token.value)