Hello,
I've been educating myself in Ultimaker Cura 3.6 by writing my own Plugin. At this point I've no problems and everything is working fine. I now decided to convert one file of my Plugin from .py to .pyd with Cython. Now Ultimaker does not even load this Plugin anymore, saying:
2019-04-05 14:46:01,337 - ERROR - [MainThread] UM.Logger.logException [88]: from . import J_Do_It_2
2019-04-05 14:46:01,337 - ERROR - [MainThread] UM.Logger.logException [88]: ImportError: cannot import name 'J_Do_It_2'
Does Ultimaker Cura not support Plugins with precompiled/converted .pyd files?
The main file MPFWriter.py
import tempfile
import os
import io
from typing import cast
from . import J_Do_It_2
from UM.Application import Application
from UM.Logger import Logger
from UM.Mesh.MeshWriter import MeshWriter #The writer we need to implement.
from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
from UM.PluginRegistry import PluginRegistry #To get the g-code writer.
class MPFWriter(MeshWriter):
version = 3
def __init__(self):
super().__init__()
def write(self, stream, nodes, mode = MeshWriter.OutputMode.TextMode):
#Store the g-code from the scene.
temp_gcode = tempfile.NamedTemporaryFile("w", delete=False)
name = temp_gcode.name
gcode_writer = cast(MeshWriter, PluginRegistry.getInstance().getPluginObject("GCodeWriter"))
success = gcode_writer.write(temp_gcode, None)
#converter = J_Do_It.DoIt()
if not success: #Writing the g-code failed.
self.setInformation(gcode_writer.getInformation())
return False
path = os.path.dirname(os.path.abspath(__file__))
try:
head = io.open((str(path) +"/HeadAndEnd/head.txt"), "r", encoding='utf8')
end = io.open((str(path) + "/HeadAndEnd/end.txt"), "r", encoding='utf8')
except EnvironmentError as e:
if head:
Logger.log("e", "Cannot open or find HeadFile")
elif end:
Logger.log("e", "Cannot open or find EndFile")
else:
Logger.log("Something went wrong")
return False
try:
J_Do_It_2.DoIt.openFile(name, stream.name, head, end)
except EnvironmentError as e:
if temp_gcode:
Logger.log("e", "Cannot create temp-File {pathTempFile}".format(temp_gcode=temp_gcode))
return False
temp_gcode.close()
os.remove(temp_gcode.name)
return True
The calculator file J_Do_It_2.pyd (before it is converted into pyd and shortened):
import io
class DoIt():
#Vars
@classmethod
def openFile(self, pathSource, pathTarget, head, end):
#do something
@classmethod
def readLine(self, line):
#do something
@classmethod
def replaceVars(self, elements):
#do something
@classmethod
def calculate(self, value, containsXYZ):
#do something