from xml.etree.ElementTree import Element
import os, abc, shutil
class BDMMetaObject(metaclass=abc.ABCMeta):
@abc.abstractmethod
def to_xml(self):
pass
@classmethod
@abc.abstractmethod
def xml_tag_name(cls):
pass
class BDMParameter(BDMMetaObject):
def __init__(self, name,value):
self.__name = name
self.__value = value
def to_xml(self):
para_attrib = {'name':''}
para_attrib['name'] = self.__name
parameter = Element(BDMParameter.xml_tag_name(),para_attrib)
parameter.text = self.__value
return parameter
@classmethod
def xml_tag_name(cls):
return "parameter"
class BDMMapping(BDMMetaObject):
def __init__(self,name,parameters):
self.__name = name
self.__parameters = parameters
def add_parameter(self, parameter: BDMParameter):
self.__parameters.append(parameter)
def to_xml(self):
map_attrib = {'name':self.__name}
mapping = Element(BDMMapping.xml_tag_name(),map_attrib)
for parameter in self.__parameters:
mapping.append(parameter.to_xml())
return mapping
@classmethod
def xml_tag_name(cls):
return "mapping"
class BDMWorkflow(BDMMetaObject):
def __init__(
self, name, parameters
):
self.__name = name
self.__parameters = parameters
self.__mappings = []
def add_parameter(self, parameter: BDMParameter):
self.__parameters.append(parameter)
def add_mapping(self,mapping: BDMMapping):
self.__mappings.append(mapping)
def to_xml(self):
wkfw_attrib = {'name': self.__name}
workflow = Element(BDMWorkflow.xml_tag_name(),wkfw_attrib)
for parameter in self.__parameters:
workflow.append(parameter.to_xml())
for mapping in self.__mappings:
workflow.append(mapping.to_xml())
return workflow
@classmethod
def xml_tag_name(cls):
return "workflow"
class BDMFolder(BDMMetaObject):
def __init__(self,name):
self.__name = name
self.__workflows = []
self.__mappings = []
def add_workflow(self, workflow:BDMWorkflow):
self.__workflows.append(workflow)
def add_mapping(self, mapping:BDMMapping):
self.__mappings.append(mapping)
def to_xml(self):
folder_attrib = {'name':self.__name}
folder = Element(BDMFolder.xml_tag_name(),folder_attrib)
for workflow in self.__workflows:
folder.append(workflow.to_xml())
for mapping in self.__mappings:
folder.append(mapping.to_xml())
return folder
@classmethod
def xml_tag_name(cls):
return 'folder'
class BDMProject(BDMMetaObject):
def __init__(self,name):
self.__name = name
self.__folders = []
self.__workflows = []
self.__mappings = []
def add_folder(self,folder: BDMFolder):
self.__folders.append(folder)
def add_workflow(self,workflow: BDMWorkflow):
self.__workflows.append(workflow)
def add_mapping(self,mapping: BDMMapping):
self.__mappings.append(mapping)
def to_xml(self):
project_attrib = {'name':self.__name}
project = Element(BDMProject.xml_tag_name(),project_attrib)
for folder in self.__folders:
project.append(folder.to_xml())
for workflow in self.__workflows:
project.append(workflow.to_xml())
for mapping in self.__mappings:
project.append(mapping.to_xml())
return project
@classmethod
def xml_tag_name(cls):
return 'project'
class BDMRoot(BDMMetaObject):
def __init__(self):
self.__projects = []
def add_project(self, project: BDMProject):
self.__projects.append(project)
def to_xml(self):
root_attrib = {'xmlns': 'http://www.informatica.com/Parameterization/1.0','xmlns:xsi': 'http://www.w3.org/2001/XMLSchema', 'version': '2.0'}
root = Element(BDMRoot.xml_tag_name(), root_attrib)
for project in self.__projects:
root.append(project.to_xml())
return root
@classmethod
def xml_tag_name(cls):
return "root"
def beauti(e, level=0):
if len(e) > 0:
e.text = '\n' + '\t' * (level + 1)
child = None
for child in e:
beauti(child, level + 1)
child.tail = child.tail[:-1]
e.tail = '\n' + '\t' * level
def clean_or_create_dir(dir):
if os.path.exists(dir):
shutil.rmtree(dir)
os.mkdir(dir)
else:
os.mkdir(dir)
Python迭代设计
最新推荐文章于 2024-07-20 17:12:48 发布