Beispiel #1
0
    async def __setProperties(self, obj, props, values, logentry):

        try:
            self.logger.debug(f"{logentry}: Set properties {props}")

            values = await self.__getBinaryValues(values)
            Object.setProperties(obj, props, values)

        except Exception as e:
            self.logger.error(f"{logentry} Set properties {props} error: {e}")
Beispiel #2
0
    async def __setProperty(self, obj, prop, value, logentry):

        try:
            self.logger.debug(f"{logentry}: Set property {prop}")

            value = await self.__getBinaryValues(value)
            Object.setProperty(obj, prop, value)

        except Exception as e:
            self.logger.error(f"{logentry} Set property {prop} error: {e}")
Beispiel #3
0
    async def __cbChangePropStatus(self, name, prop, status):

        try:
            obj = self.onlineDoc.document.getObject(name)
            if obj is None:
                return

            self.logger.debug(
                f"Object ({name}): Change property {prop} status to {status}")
            Object.setPropertyStatus(obj, prop, status)

        except Exception as e:
            self.logger.error(f"Setting property status failed: {e}")
Beispiel #4
0
    async def __cbChangeViewProvierPropStatus(self, name, prop, status):

        try:
            obj = self.onlineDoc.document.getObject(name)
            if not obj or not obj.ViewObject:
                return

            self.logger.debug(
                f"ViewProvider ({name}): Change property {prop} status to ({status})"
            )
            Object.setPropertyStatus(obj.ViewObject, prop, status)

        except Exception as e:
            self.logger.error(f"Setting property status failed: {e}")
Beispiel #5
0
    async def __cbRemoveViewProviderExtension(self, name, ext):

        try:
            obj = self.onlineDoc.document.getObject(name)
            if obj is None:
                self.logger.error(
                    f"ViewProvider ({name}): Should remove extension {ext} for not existing object"
                )
                return

            self.logger.debug(f"ViewProvider ({name}): Remove extension {ext}")
            Object.removeExtension(obj.ViewObject, ext)

        except Exception as e:
            self.logger.error(f"Remove extension failed: {e}")
Beispiel #6
0
    async def __cbCreateObjextExtension(self, name, ext):

        try:
            obj = self.onlineDoc.document.getObject(name)
            if obj is None:
                self.logger.error(
                    f"Object ({name}): Should add extension for not existing object"
                )
                return

            self.logger.debug(f"Object ({name}): Add extension {ext}")
            Object.createExtension(obj, ext)

        except Exception as e:
            self.logger.error(f"Add extension failed: {e}")
Beispiel #7
0
    async def __cbRemoveObjectDynProperty(self, name, prop):

        try:
            obj = self.onlineDoc.document.getObject(name)
            if obj is None:
                self.logger.error(
                    f"Object ({name}): Should remove dyn property {prop} for not existing object"
                )
                return

            self.logger.debug(
                f"Object ({name}): Remove dynamic property {prop}")
            Object.removeDynamicProperty(obj, prop)

        except Exception as e:
            self.logger.error(f"Dyn property removing failed: {e.message}")
Beispiel #8
0
    async def __cbRemoveViewProviderDynProperty(self, name, prop):

        try:
            obj = self.onlineDoc.document.getObject(name)
            if obj is None:
                self.logger.error(
                    f"ViewProvider ({name}): Should remove dynamic property {prop} for not existing viewprovider"
                )
                return

            self.logger.debug(
                f"ViewProvider ({name}): Remove dynamic property {prop}")
            Object.removeDynamicProperty(obj.ViewObject, prop)

        except Exception as e:
            self.logger.error(
                f"Dynamic property removing callback failed: {e.message}")
Beispiel #9
0
    async def __cbCreateObjectDynProperty(self, name, prop, typeID, group,
                                          documentation, status):
        try:
            obj = self.onlineDoc.document.getObject(name)
            if obj is None:
                self.logger.error(
                    f"Object ({name}): Should add dynamic property {prop} for not existing object"
                )
                return

            self.logger.debug(
                f"Object ({name}): Create dynamic property {prop}")
            Object.createDynamicProperty(obj, prop, typeID, group,
                                         documentation, status)

        except Exception as e:
            self.logger.error(f"Dynamic property adding failed: {e}")
Beispiel #10
0
    async def __cbCreateViewProviderDynProperty(self, name, prop, typeID,
                                                group, documentation, status):

        try:
            obj = self.onlineDoc.document.getObject(name)
            if obj is None:
                self.logger.error(
                    f"ViewProvider ({name}): Should add dynamic property {prop} for not existing viewprovider"
                )
                return

            self.logger.debug(
                f"ViewProvider ({name}): Add dynamic property {prop}")
            Object.createDynamicProperty(obj.ViewObject, prop, typeID, group,
                                         documentation, status)

        except Exception as e:
            self.logger.error("Dynamic property adding failed: {0}".format(e))
Beispiel #11
0
    async def __cbCreateObjectDynProperties(self, name, props, infos):

        try:
            obj = self.onlineDoc.document.getObject(name)
            if obj is None:
                self.logger.error(
                    f"Object ({name}): Should add dynamic properties for not existing object: {props}"
                )
                return

            self.logger.debug(
                f"Object ({name}): Create dynamic properties {props}")
            for i in range(0, len(props)):
                info = infos[i]
                Object.createDynamicProperty(obj, props[i], info["typeid"],
                                             info["group"], info["docu"],
                                             info["status"])

        except Exception as e:
            self.logger.error(f"Dynamic properties adding failed: {e}")
Beispiel #12
0
    async def __cbCreateViewProviderDynProperties(self, name, props, infos):

        try:
            obj = self.onlineDoc.document.getObject(name)
            if obj is None:
                self.logger.error(
                    f"ViewProvider ({name}): Should add dyn properties for not existing viewprovider {props}"
                )
                return

            self.logger.debug(
                f"ViewProvider ({name}): Add dynamic properties {props}")

            for i in range(0, len(props)):
                info = infos[i]
                Object.createDynamicProperty(obj.ViewObject, props[i],
                                             info["typeid"], info["group"],
                                             info["docu"], info["status"])

        except Exception as e:
            self.logger.error(
                "Dynamic properties adding failed: {0}".format(e))
    async def upload(self, obj):
        # Creates and uploads the object data into the ocp node
        # Note: this function works async, but cannot handle any changes during execution,
        #       neither on the node nor in the FC object

        try:
            #first check if we are available online.
            if await self.Writer.isAvailable():
                raise Exception("Object already setup, cannot upload")

            #setup object and all properties
            infos = []
            for prop in obj.PropertiesList:
                infos.append(Property.createInformation(obj, prop))

            await self.Writer.setup(obj.TypeId, obj.PropertiesList, infos)

            #we process the other tasks in parallel
            tasks = []

            #upload all extensions
            ext = Object.getExtensions(obj)
            for e in ext:
                tasks.append(self.Writer.addExtension(e))

            #write all properties.
            props = obj.PropertiesList
            for prop in props:
                value = Property.convertPropertyToWamp(obj, prop)
                self.Writer.changeProperty(prop, value, obj.OutList)

            tasks.append(self.Writer.processPropertyChanges())

            if tasks:
                await asyncio.gather(*tasks)

        except Exception as e:
            self.logger.error(f"Uploading object failed: {e}")
            traceback.print_exc()
    async def download(self, obj):
        # Loads the OCP node data for this object into the FreeCAD one. If changes exist
        # the local version will be overridden, hene can be used to reset a object
        # Note: this function works async, but cannot handle any changes during execution,
        #       neither on the node nor in the FC object

        try:
            self.logger.debug(f"Download")

            #first check if we are available online to setup. Could happen that e.g. we load before the viewprovider was uploaded
            if not await self.Reader.isAvailable():
                return

            #add the extensions (do that before properties, as extensions adds props too)
            extensions = await self.Reader.extensions()
            for extension in extensions:
                self.logger.debug(f"Add extension {extension}")
                Object.createExtension(obj, extension)

            oProps = await self.Reader.propertyList()
            if not oProps:
                #no properties mean we loaded directly after object creation, before default property setup. Nothing is written yet
                return
            defProps = self.obj.PropertiesList

            # check if we need to remove some local props
            remove = set(defProps) - set(oProps)
            if remove:
                self.logger.debug(
                    f"Local object has too many properties, remove {remove}")
                Object.removeDynamicProperties(obj, remove)

            # create the dynamic properties
            add = set(oProps) - set(defProps)
            infos = await self.Reader.propertiesInfos(add)
            self.logger.debug(f"Create and set dynamic properties {add}")
            Object.createDynamicProperties(obj, add, infos)

            # set all property values. Note that data can be None in case the property was never written (default value)
            values = await self.Reader.properties(oProps)
            writeProps = []
            writeValues = []
            for prop, value in zip(oProps, values):
                if value:
                    writeProps.append(prop)
                    writeValues.append(value)

            self.logger.debug(f"Read properties {writeProps}")
            Object.setProperties(obj, writeProps, writeValues)

            # set the correct status for the non-dnamic properties
            infos = await self.Reader.propertiesInfos(defProps)
            status = [info["status"] for info in infos]
            self.logger.debug(
                f"Set status of default properties {defProps} to {status}")
            for prop, stat in zip(defProps, status):
                Object.setPropertyStatus(obj, prop, stat)

            self.logger.debug(f"Object download finished")

        except Exception as e:
            self.logger.error(f"Downloading object failed: {e}")
            traceback.print_exc()