infoprovider.py 文件源码

python
阅读 28 收藏 0 点赞 0 评论 0

项目:KodiDevKit 作者: phil65 项目源码 文件源码
def load_data(self, kodi_version="krypton"):
        """
        loads the xml with control nodes for sanity checking (controls.xml)
        as well as builtins including their help string (data.xml)
        """
        # TODO: clean this up
        try:
            # since we get packaged we need to use load_resource() to load external files
            import sublime
            controls = sublime.load_resource("Packages/KodiDevKit/data/%s/controls.xml" % kodi_version)
            self.template_root = ET.fromstring(controls.encode("utf-8"), PARSER)
            # resolve includes
            data = sublime.load_resource("Packages/KodiDevKit/data/%s/data.xml" % kodi_version)
            root = ET.fromstring(data.encode("utf-8"), PARSER)
            WINDOW_MAP = json.loads(sublime.load_resource("Packages/KodiDevKit/data/%s/windows.json" % kodi_version))
        except (ImportError, OSError):
            # fallback to old method so that class still can get used without sublime import
            path = os.path.normpath(os.path.abspath(__file__))
            folder = os.path.split(path)[0]
            self.template_root = utils.get_root_from_file(os.path.join(folder, "..", "data", kodi_version, "controls.xml"))
            root = utils.get_root_from_file(os.path.join(folder, "..", "data", kodi_version, "data.xml"))
            with open(os.path.join(folder, "..", "data", kodi_version, "windows.json")) as f:
                WINDOW_MAP = json.load(f)
        self.WINDOW_FILENAMES = [item[2] for item in WINDOW_MAP]
        self.WINDOW_NAMES = [item[0] for item in WINDOW_MAP]
        self.WINDOW_IDS = [str(item[1]) for item in WINDOW_MAP]

        self.builtins = [[i.find("code").text, i.find("help").text] for i in root.find("builtins")]
        self.conditions = [[i.find("code").text, i.find("help").text] for i in root.find("conditions")]
        for include in self.template_root.xpath("//include[@name]"):
            for node in self.template_root.xpath("//include[not(@*)]"):
                if node.text == include.attrib.get("name"):
                    for child in include.getchildren():
                        child = copy.deepcopy(child)
                        node.getparent().append(child)
                    node.getparent().remove(node)
            self.template_root.remove(include)
        self.template_attribs = {}
        self.template_values = {}
        for template in self.template_root:
            self.template_attribs[template.attrib.get("type")] = {i.tag: i.attrib for i in template.iterchildren()}
            self.template_values[template.attrib.get("type")] = {i.tag: i.text for i in template.iterchildren()}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号