diff --git a/product/Vifib/Tool/VifibConduit.py b/product/Vifib/Tool/VifibConduit.py new file mode 100644 index 0000000000000000000000000000000000000000..cbb60ed03981f90de8f930a90e498b7dc187f229 --- /dev/null +++ b/product/Vifib/Tool/VifibConduit.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- + +from AccessControl import ClassSecurityInfo +from AccessControl import Unauthorized +from AccessControl.SecurityManagement import newSecurityManager +from OFS.Traversable import NotFound +from Products.DCWorkflow.DCWorkflow import ValidationFailed +from Products.ERP5Security.ERP5UserManager import SUPER_USER +from Products.ERP5Type.Globals import InitializeClass +from Products.ERP5Type.Tool.BaseTool import BaseTool +from Products.ERP5Type.UnrestrictedMethod import UnrestrictedMethod +from slapos.slap.slap import Computer +from slapos.slap.slap import ComputerPartition as SlapComputerPartition +from slapos.slap.slap import SoftwareInstance +from slapos.slap.slap import SoftwareRelease +from zLOG import LOG, INFO +import xml_marshaller +from lxml import etree +from lxml.etree import Element +parser = etree.XMLParser(remove_blank_text=True) + + +class VifibConduit(): + """This conduit is used to synchronize tiosafe packing list and erp5""" + + def __init__(self): + pass + + def convertToXml(self, xml): + """ + if xml is a string, convert it in a node + """ + if xml is None: return None + if isinstance(xml, (str, unicode)): + if isinstance(xml, unicode): + xml = xml.encode('utf-8') + #LOG('VifibCounduit', INFO, '%s' % xml, error=True) + xml = etree.XML(xml, parser=parser) + #if we have the xml from the node erp5 we just take the subnode + if xml.xpath('local-name()') == 'erp5': + xml = xml[0] + return xml + + + + def addNode(self, object=None, xml=None): + """ + This method create an object + """ + #LOG('VifibConduit-check-3', INFO, '%s' % xml, error=True) + xml = self.convertToXml(xml) + tags_text = {} + #fill up a dict with (tag - text) pairs + for element in xml.iter(): + tags_text[element.tag] = element.text + #retrieve the packing list module + sale_packing_list_portal_type = 'Sale Packing List' + sale_packing_list_module = \ + object.getPortalObject().getDefaultModule(sale_packing_list_portal_type) + #We create the new packing list + + usage_report_sale_packing_list_document = \ + sale_packing_list_module.newContent( + portal_type = 'Sale Packing List', + ) + + usage_report_sale_packing_list_document.confirm() + usage_report_sale_packing_list_document.start() + #Note inverted time and date---remember to correct in slapreport + usage_report_sale_packing_list_document.edit( + start_date=tags_text['time'], + start_time=tags_text['date'], + memory=tags_text['Memory'], + cpu_time=tags_text['CpuTime'], + cpu_percent=tags_text['CPU'], + rss=tags_text['RSS'], + ) + + return usage_report_sale_packing_list_document + + #software_release_module_id = object.getDefaultModuleId(portal_type = 'Sale Packing List') + #software_release_module_id = self.portal.restrictedTraverse(software_release_module_id) + #software_release = software_release_module.newContent(portal_type = 'Sale Packing List')