[Stencil*] Now using Xvfb

This commit is contained in:
Salvador E. Tropea 2022-12-02 19:24:19 -03:00
parent 44c7b95e77
commit 7d8cadd0f4
8 changed files with 128 additions and 8 deletions

View File

@ -153,6 +153,12 @@ Notes:
[**OpenSCAD**](https://openscad.org/) [![Tool](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/llave-inglesa-22x22.png)](https://openscad.org/) [![Debian](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/debian-openlogo-22x22.png)](https://packages.debian.org/bullseye/openscad)
- Mandatory for: `stencil_3d`, `stencil_for_jig`
[**Xvfb**](https://www.x.org) [![Tool](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/llave-inglesa-22x22.png)](https://www.x.org) [![Debian](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/debian-openlogo-22x22.png)](https://packages.debian.org/bullseye/xvfb)
- Mandatory for: `stencil_3d`, `stencil_for_jig`
[**Xvfbwrapper**](https://pypi.org/project/Xvfbwrapper/) [![Python module](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/Python-logo-notext-22x22.png)](https://pypi.org/project/Xvfbwrapper/) [![Debian](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/debian-openlogo-22x22.png)](https://packages.debian.org/bullseye/python3-xvfbwrapper) ![Auto-download](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/auto_download-22x22.png)
- Mandatory for: `stencil_3d`, `stencil_for_jig`
[**KiCost**](https://github.com/hildogjr/KiCost) v1.1.8 [![Tool](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/llave-inglesa-22x22.png)](https://github.com/hildogjr/KiCost) ![Auto-download](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/auto_download-22x22.png)
- Mandatory for `kicost`
- Optional to find components costs and specs for `bom`

6
debian/control vendored
View File

@ -10,9 +10,9 @@ X-Python3-Version: >= 3.6
Package: kibot
Architecture: all
Multi-Arch: foreign
Depends: ${misc:Depends}, ${python3:Depends}, python3-yaml, kicad (>= 5.1.6), python3-wxgtk4.0
Recommends: kibom.inti-cmnb (>= 1.8.0), kicost (>= 1.1.8), interactivehtmlbom.inti-cmnb (>= 2.4.1), imagemagick, librsvg2-bin, python3-xlsxwriter, rar, ghostscript, python3-lxml, python3-mistune
Suggests: pandoc, texlive-latex-base, texlive-latex-recommended, git, poppler-utils, kidiff, python3-numpy, kikit
Depends: ${misc:Depends}, ${python3:Depends}, python3-yaml, kicad (>= 5.1.6), python3-wxgtk4.0, python3-xvfb
Recommends: kibom.inti-cmnb (>= 1.8.0), kicost (>= 1.1.8), interactivehtmlbom.inti-cmnb (>= 2.4.1), imagemagick, librsvg2-bin, python3-xlsxwriter, rar, ghostscript, python3-lxml, python3-mistune, kikit
Suggests: pandoc, texlive-latex-base, texlive-latex-recommended, git, poppler-utils, kidiff, python3-numpy
Description: KiCad Bot
KiBot is a program which helps you to automate the generation of KiCad
output documents easily, repeatable, and most of all, scriptably.

View File

@ -73,6 +73,17 @@ Dependencies:
github: yaqwsx/KiKit
pypi: KiKit
downloader: pytool
- name: Xvfbwrapper
python_module: true
debian: python3-xvfbwrapper
arch: python-xvfbwrapper
downloader: python
- name: Xvfb
url: https://www.x.org
command: xvfb-run
debian: xvfb
arch: xorg-server-xvfb
no_cmd_line_version: true
"""
import importlib
import os
@ -944,6 +955,7 @@ def register_dep(context, dep):
command = dep.get('command', None)
help_option = dep.get('help_option', None)
pypi_name = dep.get('pypi', None)
no_cmd_line_version = dep.get('no_cmd_line_version', False)
no_cmd_line_version_old = dep.get('no_cmd_line_version_old', False)
downloader_str = downloader = dep.get('downloader', None)
if downloader:
@ -956,7 +968,7 @@ def register_dep(context, dep):
extra_deb=extra_deb, is_python=is_python, module_name=module_name, plugin_dirs=plugin_dirs,
command=command, help_option=help_option, pypi_name=pypi_name,
no_cmd_line_version_old=no_cmd_line_version_old, downloader=downloader, arch=arch,
extra_arch=extra_arch, tests=tests)
extra_arch=extra_arch, tests=tests, no_cmd_line_version=no_cmd_line_version)
# Extra comments
comments = dep.get('comments', [])
if isinstance(comments, str):

View File

@ -145,12 +145,22 @@ def debug_output(res):
logger.debug('- Output from command: '+res.stdout.decode())
def run_command(command, change_to=None, just_raise=False):
def _run_command(command, change_to):
return run(command, check=True, stdout=PIPE, stderr=STDOUT, cwd=change_to)
def run_command(command, change_to=None, just_raise=False, use_x11=False):
logger.debug('Executing: '+shlex.join(command))
if change_to is not None:
logger.debug('- CWD: '+change_to)
try:
res = run(command, check=True, stdout=PIPE, stderr=STDOUT, cwd=change_to)
if use_x11 and not GS.on_windows:
logger.debug('Using Xvfb to run the command')
from xvfbwrapper import Xvfb
with Xvfb(width=640, height=480, colordepth=24):
res = _run_command(command, change_to)
else:
res = _run_command(command, change_to)
except CalledProcessError as e:
if just_raise:
raise

View File

@ -52,7 +52,7 @@ class Stencil_Options(VariantOptions):
src_name = os.path.join(src_dir, src_file)
if not os.path.isfile(src_name):
raise PlotError('Missing output file {}'.format(src_name))
run_command([self.cmd_openscad, '-o', dst_name, '--imgsize=1280,720', src_name])
run_command([self.cmd_openscad, '-o', dst_name, '--imgsize=1280,720', src_name], use_x11=True)
def move_output(self, src_dir, src_file, id, ext, replacement=None, patch=False, relative=False):
dst_name = self.expand_name(id, ext, self._parent.output_dir)
@ -100,6 +100,9 @@ class Stencil_Options(VariantOptions):
def run(self, output):
cmd_kikit = self.ensure_tool('KiKit')
self.cmd_openscad = self.ensure_tool('OpenSCAD')
if not GS.on_windows:
self.ensure_tool('Xvfbwrapper')
self.ensure_tool('Xvfb')
super().run(output)
# Apply variants and filters
filtered = self.filter_pcb_components(GS.board)
@ -125,7 +128,7 @@ class Stencil_Options(VariantOptions):
cmd.append(fname)
cmd.append(tmp)
try:
run_command(cmd)
run_command(cmd, use_x11=True)
finally:
# Remove temporal variant
if filtered:

View File

@ -14,6 +14,10 @@ Dependencies:
debian: openscad
arch: openscad
role: mandatory
- from: Xvfbwrapper
role: mandatory
- from: Xvfb
role: mandatory
"""
from .gs import GS
from .macros import macros, document, output_class # noqa: F401

View File

@ -14,6 +14,10 @@ Dependencies:
debian: openscad
arch: openscad
role: mandatory
- from: Xvfbwrapper
role: mandatory
- from: Xvfb
role: mandatory
"""
import math
from .gs import GS

View File

@ -950,6 +950,87 @@ deps = '{\
"url": null,\
"url_down": null\
},\
"Xvfb": {\
"arch": "xorg-server-xvfb",\
"command": "xvfb-run",\
"comments": [],\
"deb_package": "xvfb",\
"downloader": null,\
"downloader_str": null,\
"extra_arch": null,\
"extra_deb": null,\
"help_option": "--version",\
"importance": 20000,\
"in_debian": true,\
"is_kicad_plugin": false,\
"is_python": false,\
"name": "Xvfb",\
"no_cmd_line_version": true,\
"no_cmd_line_version_old": false,\
"output": "stencil_3d",\
"plugin_dirs": null,\
"pypi_name": "Xvfb",\
"roles": [\
{\
"desc": null,\
"mandatory": true,\
"max_version": null,\
"output": "stencil_3d",\
"version": null\
},\
{\
"desc": null,\
"mandatory": true,\
"max_version": null,\
"output": "stencil_for_jig",\
"version": null\
}\
],\
"tests": [],\
"url": "https://www.x.org",\
"url_down": null\
},\
"Xvfbwrapper": {\
"arch": "python-xvfbwrapper",\
"command": "xvfbwrapper",\
"comments": [],\
"deb_package": "python3-xvfbwrapper",\
"downloader": {},\
"downloader_str": "python",\
"extra_arch": null,\
"extra_deb": null,\
"help_option": "--version",\
"importance": 20000,\
"in_debian": true,\
"is_kicad_plugin": false,\
"is_python": true,\
"module_name": "xvfbwrapper",\
"name": "Xvfbwrapper",\
"no_cmd_line_version": false,\
"no_cmd_line_version_old": false,\
"output": "stencil_3d",\
"plugin_dirs": null,\
"pypi_name": "Xvfbwrapper",\
"roles": [\
{\
"desc": null,\
"mandatory": true,\
"max_version": null,\
"output": "stencil_3d",\
"version": null\
},\
{\
"desc": null,\
"mandatory": true,\
"max_version": null,\
"output": "stencil_for_jig",\
"version": null\
}\
],\
"tests": [],\
"url": null,\
"url_down": null\
},\
"mistune": {\
"arch": "python-mistune",\
"command": "mistune",\