From 4aa0ca68c800140284858b81926f26b88b3ac696 Mon Sep 17 00:00:00 2001 From: "Barry-Thomas-Paul: Moss" Date: Tue, 31 Oct 2023 16:19:18 -0400 Subject: [PATCH] added pip_runner that add site_packages to sys.path --- extension/ZAZPip_v0.10.2.oxt | Bin 80203 -> 81553 bytes source/META-INF/manifest.xml | 2 ++ source/job.xcu | 20 ++++++++++++ source/pip_runner.py | 60 +++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 source/job.xcu create mode 100644 source/pip_runner.py diff --git a/extension/ZAZPip_v0.10.2.oxt b/extension/ZAZPip_v0.10.2.oxt index bd1ba7bcdf8cedf554e052ccd61b1b2df1b8aa1c..2c373983fb62663a5d99b7aca2577fc2fd798794 100644 GIT binary patch delta 2042 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 + + diff --git a/source/job.xcu b/source/job.xcu new file mode 100644 index 0000000..7228846 --- /dev/null +++ b/source/job.xcu @@ -0,0 +1,20 @@ + + + + + + + net.elmau.zaz.pip.PipRunner + + + + + + + + + + + \ No newline at end of file diff --git a/source/pip_runner.py b/source/pip_runner.py new file mode 100644 index 0000000..36ee398 --- /dev/null +++ b/source/pip_runner.py @@ -0,0 +1,60 @@ +# region Imports +from __future__ import unicode_literals, annotations +import os +import sys +from typing import TYPE_CHECKING, Tuple +from pathlib import Path +import uno +import unohelper +from com.sun.star.task import XJob + +if TYPE_CHECKING: + # just for design time + from com.sun.star.beans import NamedValue + +# endregion Imports + +# region Constants + +implementation_name = "net.elmau.zaz.pip.PipRunner" +implementation_services = ("com.sun.star.task.Job",) + +# endregion Constants + + + +# region XJob +class PipRunner(unohelper.Base, XJob): + def __init__(self, ctx): + self._is_flatpak = bool(os.getenv("FLATPAK_ID", "")) + if self._is_flatpak: + site_packages = self.get_flatpak_site_packages_dir() + ss = str(site_packages) + if site_packages.exists and ss not in sys.path: + sys.path.append(ss) + + def execute(self, *args: Tuple[NamedValue, ...]) -> None: + pass + + def get_flatpak_site_packages_dir(self) -> Path: + # should never be all users + sand_box = os.getenv("FLATPAK_SANDBOX_DIR", "") or str( + Path.home() / ".var/app/org.libreoffice.LibreOffice/sandbox" + ) + major_minor = f"{sys.version_info.major}.{sys.version_info.minor}" + site_packages = Path(sand_box) / f"lib/python{major_minor}/site-packages" + site_packages.mkdir(parents=True, exist_ok=True) + return site_packages + +# endregion XJob + +# region Implementation + +g_TypeTable = {} +# python loader looks for a static g_ImplementationHelper variable +g_ImplementationHelper = unohelper.ImplementationHelper() + +# add the FormatFactory class to the implementation container, +# which the loader uses to register/instantiate the component. +g_ImplementationHelper.addImplementation(PipRunner, implementation_name, implementation_services) +# endregion Implementation \ No newline at end of file