def testGetPathNoBasedir(self): root = misc.GritNode() root.StartParsing(u'grit', None) root.HandleAttribute(u'latest_public_release', u'0') root.HandleAttribute(u'current_release', u'1') root.HandleAttribute(u'base_dir', r'..\resource') release = misc.ReleaseNode() release.StartParsing(u'release', root) release.HandleAttribute(u'seq', u'1') root.AddChild(release) includes = empty.IncludesNode() includes.StartParsing(u'includes', release) release.AddChild(includes) include_node = include.IncludeNode() include_node.StartParsing(u'include', includes) include_node.HandleAttribute(u'file', r'flugel\kugel.pdf') include_node.HandleAttribute(u'use_base_dir', u'false') includes.AddChild(include_node) root.EndParsing() last_dir = os.path.basename(os.getcwd()) expected_path = util.normpath( os.path.join(u'..', last_dir, u'flugel/kugel.pdf')) self.assertEqual(root.ToRealPath(include_node.GetInputPath()), expected_path)
def testIncludeWithReservedHeader(self): from grit import util from grit.node import misc, include, empty root = misc.GritNode() root.StartParsing(u'grit', None) root.HandleAttribute(u'latest_public_release', u'0') root.HandleAttribute(u'current_release', u'1') root.HandleAttribute(u'base_dir', ur'..\resource') release = misc.ReleaseNode() release.StartParsing(u'release', root) release.HandleAttribute(u'seq', u'1') root.AddChild(release) includes = empty.IncludesNode() includes.StartParsing(u'includes', release) release.AddChild(includes) include_node = include.IncludeNode() include_node.StartParsing(u'include', includes) include_node.HandleAttribute(u'name', u'test') include_node.HandleAttribute(u'type', u'BINDATA') include_node.HandleAttribute(u'file', u'doesntmatter') includes.AddChild(include_node) include_node.EndParsing() root.EndParsing() ReadFile_copy = util.ReadFile try: util.ReadFile = lambda a, b: include.IncludeNode.RESERVED_HEADER with self.assertRaises(exception.ReservedHeaderCollision): data_pack.Format(root) finally: util.ReadFile = ReadFile_copy
def GritNode(self): new_resource = misc.GritNode() new_resource.name = "grit" new_resource.attrs = dict(self["grit"]) if "outputs" in self: new_resource.AddChild(self["outputs"]) self["outputs"].parent = new_resource if "generated_translations" in self: new_resource.AddChild(self["generated_translations"]) self["generated_translations"].parent = new_resource if "release" in self: new_release = self["release"] new_resource.AddChild(new_release) new_release.parent = new_resource if "includes" in self and self.get("include-files", None): new_top = self["includes"] if not self.keep_sequence: for _seq, old_node in sorted( self["include-files"].itervalues()): new_node = include.IncludeNode() new_node.name = "include" new_node.attrs = dict(old_node.attrs) new_top.AddChild(new_node) new_node.parent = new_top else: self.__look_for_duplicated_nodes(new_top) new_release.AddChild(new_top) new_top.parent = new_release if "messages" in self and self.get("message-entries", None): new_top = self["messages"] if not self.keep_sequence: for _seq, old_node in sorted( self["message-entries"].itervalues()): new_top.AddChild(old_node) old_node.parent = new_top else: self.__look_for_duplicated_nodes(new_top) new_release.AddChild(new_top) new_top.parent = new_release if "structures" in self and self.get("structure-entries", None): new_top = self["structures"] if not self.keep_sequence: for _seq, old_node in sorted( self["structure-entries"].itervalues()): new_top.AddChild(old_node) old_node.parent = new_top else: self.__look_for_duplicated_nodes(new_top) new_release.AddChild(new_top) new_top.parent = new_release self.__look_for_duplicated_nodes(new_resource) return new_resource
def Load(self, filename, params={}, output_file_name=None, extra_languages=None): self.filename_base = os.path.splitext(output_file_name or os.path.basename(filename))[0] self.orig_filename_base = os.path.splitext( os.path.basename(filename))[0] self.filedir = os.path.dirname(filename) self.resources = self.__load_resource(filename, params, extra_languages=extra_languages) #self.all_source_files.add(filename) file_list = ScanDir(self.filedir) for x in file_list: #print >>sys.stderr, "Adding", x, ":", x[0], x.startswith(".") if x.startswith("."): raise Exception(x) self.all_source_files.update(file_list) self.active_source_files.update(file_list) self["grit"] = dict(self.resources["resources"].attrs) if "outputs" in self.resources["nodes"]["internals"]: new_top = empty.OutputsNode() new_top.name = "outputs" _seq, old_top = self.resources["nodes"]["internals"]["outputs"][0] new_top.attrs = dict(old_top.attrs) for old_node in iter_gritnode(old_top, io.OutputNode): if (self.orig_filename_base != self.filename_base and old_node.attrs.get("type", None) == "data_package"): old_node.attrs["filename"] = old_node.attrs[ "filename"].replace(self.orig_filename_base + "_", self.filename_base + "_") #if self.orig_filename_base == "components_google_chrome_strings": # print >>sys.stderr, old_node.attrs["filename"] new_top.AddChild(old_node) old_node.parent = new_top self["outputs"] = new_top if "translations" in self.resources["nodes"]["internals"]: new_top = empty.TranslationsNode() new_top.name = "translations" _seq, old_top = self.resources["nodes"]["internals"][ "translations"][0] new_top.attrs = dict(old_top.attrs) for old_node in iter_gritnode(old_top, io.FileNode): new_node = io.FileNode() new_node.name = "file" new_node.attrs = dict(old_node.attrs) if "path" in new_node.attrs: self.all_source_files.add(new_node.attrs["path"].replace( "\\", "/")) new_node.attrs["path"] = os.path.join( os.getcwd(), old_node.ToRealPath(old_node.GetInputPath())) new_top.AddChild(new_node) new_node.parent = new_top self["translations"] = new_top if "release" in self.resources["nodes"]["internals"]: new_release = misc.ReleaseNode() new_release.name = "release" _seq, old_top = self.resources["nodes"]["internals"]["release"][0] new_release.attrs = dict(old_top.attrs) self["release"] = new_release if "includes" in self.resources["nodes"]["internals"]: _seq, old_top = self.resources["nodes"]["internals"]["includes"][0] if self.keep_sequence: new_top = old_top self.__remove_part_nodes(new_top) else: new_top = empty.IncludesNode() new_top.name = "includes" new_top.attrs = dict(old_top.attrs) self["includes"] = new_top self["include-files"] = {} for _seq, old_node in sorted([ x for x in self.resources["nodes"].itervalues() if isinstance(x, tuple) and isinstance(x[1], include.IncludeNode) ]): new_node = include.IncludeNode() new_node.name = "include" new_node.attrs = dict(old_node.attrs) if "file" in new_node.attrs: old_file = new_node.attrs["file"].replace("\\", "/") new_node.attrs["file"] = old_file self._AddFile(old_file) self["include-files"][new_node.attrs["name"]] = (_seq, new_node) if "messages" in self.resources["nodes"]["internals"]: _seq, old_top = self.resources["nodes"]["internals"]["messages"][0] if self.keep_sequence: new_top = old_top self.__remove_part_nodes(new_top) else: new_top = empty.MessagesNode() new_top.name = "messages" new_top.attrs = dict(old_top.attrs) self["messages"] = new_top self["message-entries"] = {} for _seq, old_node in sorted([ x for x in self.resources["nodes"].itervalues() if isinstance(x, tuple) and isinstance(x[1], message.MessageNode) ]): #if old_node.GetCliques(): # print old_node.GetCliques()[0].MessageForLanguage("no").GetPresentableContent() self["message-entries"][old_node.attrs["name"]] = (_seq, old_node) if "structures" in self.resources["nodes"]["internals"]: _seq, old_top = self.resources["nodes"]["internals"]["structures"][ 0] if self.keep_sequence: new_top = old_top self.__remove_part_nodes(new_top) else: new_top = empty.StructuresNode() new_top.name = "structures" new_top.attrs = dict(old_top.attrs) self["structures"] = new_top self["structure-entries"] = {} for _seq, old_node in sorted([ x for x in self.resources["nodes"].itervalues() if isinstance(x, tuple) and isinstance(x[1], structure.StructureNode) ]): if self.keep_sequence: new_node = old_node else: new_node = structure.StructureNode() new_node.name = "structure" new_node.attrs = dict(old_node.attrs) if "file" in new_node.attrs: old_file = new_node.attrs["file"].replace("\\", "/") new_node.attrs["file"] = old_file self._AddFile(old_file) self["structure-entries"][new_node.attrs["name"]] = (_seq, new_node)