Example #1
0
    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)
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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)