Python迭代设计

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值