diff options
Diffstat (limited to 'testing/tools/pdfium_root.py')
-rw-r--r-- | testing/tools/pdfium_root.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/testing/tools/pdfium_root.py b/testing/tools/pdfium_root.py new file mode 100644 index 000000000..7c4c86130 --- /dev/null +++ b/testing/tools/pdfium_root.py @@ -0,0 +1,53 @@ +# Copyright 2022 The PDFium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Utilities for working with the PDFium tree's root directory.""" + +import os +import sys + + +class RootDirectoryFinder: + """Finds the PDFium tree's root directories. + + The implementation expects that either: + 1. PDFium is a standalone checkout. + 2. PDFium is part of another tree within a "third_party/pdfium" directory. + + Attributes: + pdfium_root: The path to the root of the PDFium tree. + source_root: The path to the root of the source tree. May differ from + `pdfium_root` if PDFium is a third-party dependency in another tree. + """ + + def __init__(self): + # Expect `self_dir` to be ".../testing/tools". + self_dir = os.path.dirname(os.path.realpath(__file__)) + + self.pdfium_root = _remove_path_suffix(self_dir, ('testing', 'tools')) + if not self.pdfium_root: + raise Exception('Cannot find testing/tools within PDFium root directory') + + # In a Chromium checkout, expect `self.pdfium_root` to be + # ".../third_party/pdfium". + self.source_root = _remove_path_suffix(self.pdfium_root, + ('third_party', 'pdfium')) + if not self.source_root: + self.source_root = self.pdfium_root + + +def _remove_path_suffix(path, expected_suffix): + for expected_part in reversed(expected_suffix): + if os.path.basename(path) != expected_part: + return None + path = os.path.dirname(path) + return path + + +def add_source_directory_to_import_path(source_directory_path): + """Adds a source root-relative directory to end of the import path.""" + root_finder = RootDirectoryFinder() + path = os.path.realpath( + os.path.join(root_finder.source_root, source_directory_path)) + if path not in sys.path: + sys.path.append(path) |