pcb-tools icon indicating copy to clipboard operation
pcb-tools copied to clipboard

GerberCairoContext unusable in class context

Open ingobecker opened this issue 4 years ago • 1 comments

from gerber import load_layer
from gerber.render.cairo_backend import GerberCairoContext

class Foo:
    def __init__(self):
        self.ctx = GerberCairoContext()

    def render(self):
        l = load_layer('gerbers/test.gbr')
        self.ctx.render_layer(l)

def render():
    ctx = GerberCairoContext()
    l = load_layer('gerbers/test.gbr')
    ctx.render_layer(l)

# works
render()

# doesn't work
f = Foo()
f.render()

The call to Foo classes render() from the example above fails with the following error:

From cffi callback <function _make_write_func.<locals>.write_func at 0x7f90a84a0560>:
Traceback (most recent call last):
  File "/home/py/.local/share/virtualenvs/src-hLxFx5mL/lib/python3.7/site-packages/cairocffi/surfaces.py", line 43, in write_func
  File "/usr/local/lib/python3.7/tempfile.py", line 481, in func_wrapper
ValueError: write to closed file

Running the code using the python:3.7-buster container image.

ingobecker avatar Jun 16 '20 14:06 ingobecker

It seems to be related to cairocffi. If i install pycairo everything works just fine.

ingobecker avatar Jun 16 '20 16:06 ingobecker