KiBot/kibot/out_info.py

77 lines
2.6 KiB
Python

# -*- coding: utf-8 -*-
# Copyright (c) 2022 Salvador E. Tropea
# Copyright (c) 2022 Instituto Nacional de Tecnología Industrial
# License: GPL-3.0
# Project: KiBot (formerly KiPlot)
"""
Dependencies:
- from: KiAuto
role: Show KiAuto installation information
version: 2.0.0
"""
import os
import sys
from .gs import GS
from .optionable import BaseOptions
from .kiplot import run_command
from .macros import macros, document, output_class # noqa: F401
from . import log
logger = log.get_logger()
class InfoOptions(BaseOptions):
def __init__(self):
with document:
self.output = GS.def_global_output
""" *Filename for the output (%i=info, %x=txt) """
self.environment = 'names'
""" [names,none,full] List environment variables.
IMPORTANT: Don't use `full` unless you know you are not leaking sensitive information """
super().__init__()
self._expand_id = 'info'
self._expand_ext = 'txt'
self._none_related = True
def get_targets(self, out_dir):
return [self._parent.expand_filename(out_dir, self.output)]
def run(self, name):
dir = os.path.dirname(os.path.abspath(sys.argv[0]))
ret = run_command([os.path.join(dir, 'kibot-check'), '-p'])
with open(name, 'wt') as f:
f.write(ret+'\n')
# Environment
if self.environment == 'names':
f.write('\nEnvironment:\n')
for n in sorted(os.environ.keys()):
f.write(n+'\n')
elif self.environment == 'full':
f.write('\nEnvironment:\n')
for n in sorted(os.environ.keys()):
f.write(n+'='+os.environ[n]+'\n')
# KiAuto
command = self.check_tool('KiAuto')
if command:
ret = run_command([command, '--info'])
f.write('\nKiAuto:\n'+ret+'\n')
@output_class
class Info(BaseOutput): # noqa: F821
""" Info
Records information about the current run.
It can be used to know more about the environment used to generate the files.
Please don't rely on the way things are reported, its content could change,
adding or removing information """
def __init__(self):
super().__init__()
self._category = ['PCB/docs', 'Schematic/docs']
with document:
self.options = InfoOptions
""" *[dict] Options for the `info` output """
@staticmethod
def get_conf_examples(name, layers, templates):
return BaseOutput.simple_conf_examples(name, 'Information about the run', '.') # noqa: F821