diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 00000000..bcd5e647
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,3 @@
+# These are supported funding model platforms
+
+github: prrvchr
diff --git a/README.md b/README.md
index a5261bd8..00b76466 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
**The use of this software subjects you to our [Terms Of Use][4].**
-# version [1.2.2][5]
+# version [1.3.0][5]
## Introduction:
@@ -51,6 +51,7 @@ Being free software I encourage you:
- To duplicate its [source code][15].
- To make changes, corrections, improvements.
- To open [issue][16] if needed.
+- To [participate in the costs][17] of [CASA certification][18].
In short, to participate in the development of this extension.
Because it is together that we can make Free Software smarter.
@@ -322,7 +323,17 @@ ___
- Requires the **jdbcDriverOOo extension at least version 1.5.4**.
-### What remains to be done for version 1.2.2:
+### What has been done for version 1.2.3:
+
+- Requires the **jdbcDriverOOo extension at least version 1.5.7**.
+
+### What has been done for version 1.3.0:
+
+- If the jdbcDriverOOo extension works without Java instrumentation, a warning message will be displayed in the extension options.
+- Requires the **jdbcDriverOOo extension at least version 1.6.1**.
+- Has been tested under LibreOfficeDev 26.2.
+
+### What remains to be done for version 1.3.0:
- Add new language for internationalization...
@@ -332,7 +343,7 @@ ___
[2]:
[3]:
[4]:
-[5]:
+[5]:
[6]:
[7]:
[8]:
@@ -344,13 +355,15 @@ ___
[14]:
[15]:
[16]:
+[17]:
+[18]:
[20]:
[21]:
[22]:
[23]:
[24]:
[25]:
-[26]:
+[26]:
[27]:
[28]:
[29]:
diff --git a/README_fr.md b/README_fr.md
index 541122e4..dfc01ecd 100644
--- a/README_fr.md
+++ b/README_fr.md
@@ -29,7 +29,7 @@
**L'utilisation de ce logiciel vous soumet à nos [Conditions d'utilisation][4].**
-# version [1.2.2][5]
+# version [1.3.0][5]
## Introduction:
@@ -51,6 +51,7 @@ Etant un logiciel libre je vous encourage:
- A dupliquer son [code source][15].
- A apporter des modifications, des corrections, des améliorations.
- D'ouvrir un [dysfonctionnement][16] si nécessaire.
+- De [participer au frais][17] de la [certification CASA][18].
Bref, à participer au developpement de cette extension.
Car c'est ensemble que nous pouvons rendre le Logiciel Libre plus intelligent.
@@ -322,7 +323,17 @@ ___
- Nécessite l'extension **jdbcDriverOOo en version 1.5.4 minimum**.
-### Que reste-t-il à faire pour la version 1.2.2:
+### Ce qui a été fait pour la version 1.2.3:
+
+- Nécessite l'extension **jdbcDriverOOo en version 1.5.7 minimum**.
+
+### Ce qui a été fait pour la version 1.3.0:
+
+- Si l'extension jdbcDriverOOo fonctionne sans l'instrumentation Java, un message d'avertissement s'affichera dans les options de l'extension.
+- Nécessite l'extension **jdbcDriverOOo en version 1.6.1 minimum**.
+- A été testé sous LibreOfficeDev 26.2.
+
+### Que reste-t-il à faire pour la version 1.3.0:
- Ajouter de nouvelles langue pour l'internationalisation...
@@ -332,7 +343,7 @@ ___
[2]:
[3]:
[4]:
-[5]:
+[5]:
[6]:
[7]:
[8]:
@@ -344,13 +355,15 @@ ___
[14]:
[15]:
[16]:
+[17]:
+[18]:
[20]:
[21]:
[22]:
[23]:
[24]:
[25]:
-[26]:
+[26]:
[27]:
[28]:
[29]:
diff --git a/source/HyperSQLOOo/Drivers.xcu b/source/HyperSQLOOo/Drivers.xcu
index 06398391..6164a396 100644
--- a/source/HyperSQLOOo/Drivers.xcu
+++ b/source/HyperSQLOOo/Drivers.xcu
@@ -24,7 +24,9 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
false
-
+
SELECT|1|INSERT|2|UPDATE|4|DELETE|8|REFERENCES|128
diff --git a/source/HyperSQLOOo/Options.xcs b/source/HyperSQLOOo/Options.xcs
index 1b683d76..9d9f2ceb 100644
--- a/source/HyperSQLOOo/Options.xcs
+++ b/source/HyperSQLOOo/Options.xcs
@@ -24,13 +24,13 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
+ oor:name="HyperSQLOOo"
+ xml:lang="en-US">
diff --git a/source/HyperSQLOOo/Options.xcu b/source/HyperSQLOOo/Options.xcu
index 7e1f6234..4570e117 100644
--- a/source/HyperSQLOOo/Options.xcu
+++ b/source/HyperSQLOOo/Options.xcu
@@ -24,11 +24,11 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
diff --git a/source/HyperSQLOOo/OptionsDialog.xcu b/source/HyperSQLOOo/OptionsDialog.xcu
index d08bbc71..6d21c080 100644
--- a/source/HyperSQLOOo/OptionsDialog.xcu
+++ b/source/HyperSQLOOo/OptionsDialog.xcu
@@ -24,10 +24,11 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
diff --git a/source/HyperSQLOOo/component-schema.dtd b/source/HyperSQLOOo/component-schema.dtd
new file mode 120000
index 00000000..8bd8f795
--- /dev/null
+++ b/source/HyperSQLOOo/component-schema.dtd
@@ -0,0 +1 @@
+../../uno/lib/uno/component-schema.dtd
\ No newline at end of file
diff --git a/source/HyperSQLOOo/component-update.dtd b/source/HyperSQLOOo/component-update.dtd
new file mode 120000
index 00000000..90c5befb
--- /dev/null
+++ b/source/HyperSQLOOo/component-update.dtd
@@ -0,0 +1 @@
+../../uno/lib/uno/component-update.dtd
\ No newline at end of file
diff --git a/source/HyperSQLOOo/description.xml b/source/HyperSQLOOo/description.xml
index a8384975..b73bdd88 100644
--- a/source/HyperSQLOOo/description.xml
+++ b/source/HyperSQLOOo/description.xml
@@ -28,7 +28,7 @@
xmlns:d="http://openoffice.org/extensions/description/2006"
xmlns:l="http://libreoffice.org/extensions/description/2011"
xmlns:xlink="http://www.w3.org/1999/xlink">
-
+
diff --git a/source/HyperSQLOOo/dialogs/dialog.dtd b/source/HyperSQLOOo/dialogs/dialog.dtd
new file mode 120000
index 00000000..aee03339
--- /dev/null
+++ b/source/HyperSQLOOo/dialogs/dialog.dtd
@@ -0,0 +1 @@
+../../../uno/dialog/dialog.dtd
\ No newline at end of file
diff --git a/source/HyperSQLOOo/idl/com/sun/star/task/XTaskEvent.idl b/source/HyperSQLOOo/idl/com/sun/star/task/XTaskEvent.idl
new file mode 120000
index 00000000..04f9701c
--- /dev/null
+++ b/source/HyperSQLOOo/idl/com/sun/star/task/XTaskEvent.idl
@@ -0,0 +1 @@
+../../../../../../../uno/rdb/idl/com/sun/star/task/XTaskEvent.idl
\ No newline at end of file
diff --git a/source/HyperSQLOOo/package.properties b/source/HyperSQLOOo/package.properties
index 1f7ca66e..7d53402b 100644
--- a/source/HyperSQLOOo/package.properties
+++ b/source/HyperSQLOOo/package.properties
@@ -1,3 +1,3 @@
#Written by the OOEclipseIntegration
-#Thu May 01 22:01:42 CEST 2025
-contents=description.xml, description/desc_en.txt, description/desc_fr.txt, dialogs/LogDialog.xdl, dialogs/LogDialog_en_US.default, dialogs/LogDialog_en_US.properties, dialogs/LogDialog_fr_FR.properties, dialogs/LogWindow.xdl, dialogs/LogWindow_en_US.default, dialogs/LogWindow_en_US.properties, dialogs/LogWindow_fr_FR.properties, dialogs/OptionDialog.xdl, dialogs/OptionDialog_en_US.default, dialogs/OptionDialog_en_US.properties, dialogs/OptionDialog_fr_FR.properties, dialogs/OptionsDialog.xdl, dialogs/OptionsDialog_en_US.default, dialogs/OptionsDialog_en_US.properties, dialogs/OptionsDialog_fr_FR.properties, Drivers.xcu, img/HyperSQLOOo.svg, META-INF/manifest.xml, Options.xcs, Options.xcu, OptionsDialog.xcu, package.components, registration/TermsOfUse_en.md, registration/TermsOfUse_fr.md, requirements.txt, resource/Driver_en_US.default, resource/Driver_en_US.properties, resource/Driver_fr_FR.properties, resource/Logger_en_US.default, resource/Logger_en_US.properties, resource/Logger_fr_FR.properties, service/Driver.py, service/HyperSQLOOo.py, service/OptionsHandler.py, service/pythonpath/_distutils_hack/__init__.py, service/pythonpath/_distutils_hack/override.py, service/pythonpath/distutils-precedence.pth, service/pythonpath/hypersql/__init__.py, service/pythonpath/hypersql/configuration.py, service/pythonpath/hypersql/documenthandler.py, service/pythonpath/hypersql/driver.py, service/pythonpath/hypersql/helper.py, service/pythonpath/hypersql/jdbcdriver/__init__.py, service/pythonpath/hypersql/jdbcdriver/configuration.py, service/pythonpath/hypersql/logger/__init__.py, service/pythonpath/hypersql/logger/dialog/__init__.py, service/pythonpath/hypersql/logger/dialog/loghandler.py, service/pythonpath/hypersql/logger/dialog/logmanager.py, service/pythonpath/hypersql/logger/dialog/logmodel.py, service/pythonpath/hypersql/logger/dialog/logview.py, service/pythonpath/hypersql/logger/logconfig.py, service/pythonpath/hypersql/logger/logcontroller.py, service/pythonpath/hypersql/logger/logger.py, service/pythonpath/hypersql/logger/loggerpool.py, service/pythonpath/hypersql/logger/loghandler.py, service/pythonpath/hypersql/logger/loghelper.py, service/pythonpath/hypersql/logger/logwrapper.py, service/pythonpath/hypersql/option/__init__.py, service/pythonpath/hypersql/option/optionhandler.py, service/pythonpath/hypersql/option/optionmanager.py, service/pythonpath/hypersql/option/optionmodel.py, service/pythonpath/hypersql/option/optionview.py, service/pythonpath/hypersql/options/__init__.py, service/pythonpath/hypersql/options/optionshandler.py, service/pythonpath/hypersql/options/optionsmanager.py, service/pythonpath/hypersql/options/optionsmodel.py, service/pythonpath/hypersql/options/optionsview.py, service/pythonpath/hypersql/sdbc/__init__.py, service/pythonpath/hypersql/sdbc/driver.py, service/pythonpath/hypersql/sdbcx/__init__.py, service/pythonpath/hypersql/sdbcx/driver.py, service/pythonpath/hypersql/unotool/__init__.py, service/pythonpath/hypersql/unotool/unotool.py, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE.APACHE, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE.BSD, service/pythonpath/packaging-25.0.dist-info/METADATA, service/pythonpath/packaging-25.0.dist-info/RECORD, service/pythonpath/packaging-25.0.dist-info/WHEEL, service/pythonpath/packaging/__init__.py, service/pythonpath/packaging/_elffile.py, service/pythonpath/packaging/_manylinux.py, service/pythonpath/packaging/_musllinux.py, service/pythonpath/packaging/_parser.py, service/pythonpath/packaging/_structures.py, service/pythonpath/packaging/_tokenizer.py, service/pythonpath/packaging/licenses/__init__.py, service/pythonpath/packaging/licenses/_spdx.py, service/pythonpath/packaging/markers.py, service/pythonpath/packaging/metadata.py, service/pythonpath/packaging/py.typed, service/pythonpath/packaging/requirements.py, service/pythonpath/packaging/specifiers.py, service/pythonpath/packaging/tags.py, service/pythonpath/packaging/utils.py, service/pythonpath/packaging/version.py, service/pythonpath/pkg_resources/__init__.py, service/pythonpath/pkg_resources/api_tests.txt, service/pythonpath/pkg_resources/py.typed, service/pythonpath/pkg_resources/tests/__init__.py, service/pythonpath/pkg_resources/tests/data/my-test-package-source/setup.cfg, service/pythonpath/pkg_resources/tests/data/my-test-package-source/setup.py, service/pythonpath/pkg_resources/tests/data/my-test-package-zip/my-test-package.zip, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/dependency_links.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/PKG-INFO, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/SOURCES.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/top_level.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/zip-safe, service/pythonpath/pkg_resources/tests/data/my-test-package_zipped-egg/my_test_package-1.0-py3.7.egg, service/pythonpath/pkg_resources/tests/test_find_distributions.py, service/pythonpath/pkg_resources/tests/test_integration_zope_interface.py, service/pythonpath/pkg_resources/tests/test_markers.py, service/pythonpath/pkg_resources/tests/test_pkg_resources.py, service/pythonpath/pkg_resources/tests/test_resources.py, service/pythonpath/pkg_resources/tests/test_working_set.py, service/pythonpath/setuptools-75.3.2.dist-info/entry_points.txt, service/pythonpath/setuptools-75.3.2.dist-info/LICENSE, service/pythonpath/setuptools-75.3.2.dist-info/METADATA, service/pythonpath/setuptools-75.3.2.dist-info/RECORD, service/pythonpath/setuptools-75.3.2.dist-info/top_level.txt, service/pythonpath/setuptools-75.3.2.dist-info/WHEEL, service/pythonpath/setuptools/__init__.py, service/pythonpath/setuptools/_core_metadata.py, service/pythonpath/setuptools/_distutils/__init__.py, service/pythonpath/setuptools/_distutils/_log.py, service/pythonpath/setuptools/_distutils/_macos_compat.py, service/pythonpath/setuptools/_distutils/_modified.py, service/pythonpath/setuptools/_distutils/_msvccompiler.py, service/pythonpath/setuptools/_distutils/archive_util.py, service/pythonpath/setuptools/_distutils/ccompiler.py, service/pythonpath/setuptools/_distutils/cmd.py, service/pythonpath/setuptools/_distutils/command/__init__.py, service/pythonpath/setuptools/_distutils/command/_framework_compat.py, service/pythonpath/setuptools/_distutils/command/bdist.py, service/pythonpath/setuptools/_distutils/command/bdist_dumb.py, service/pythonpath/setuptools/_distutils/command/bdist_rpm.py, service/pythonpath/setuptools/_distutils/command/build.py, service/pythonpath/setuptools/_distutils/command/build_clib.py, service/pythonpath/setuptools/_distutils/command/build_ext.py, service/pythonpath/setuptools/_distutils/command/build_py.py, service/pythonpath/setuptools/_distutils/command/build_scripts.py, service/pythonpath/setuptools/_distutils/command/check.py, service/pythonpath/setuptools/_distutils/command/clean.py, service/pythonpath/setuptools/_distutils/command/config.py, service/pythonpath/setuptools/_distutils/command/install.py, service/pythonpath/setuptools/_distutils/command/install_data.py, service/pythonpath/setuptools/_distutils/command/install_egg_info.py, service/pythonpath/setuptools/_distutils/command/install_headers.py, service/pythonpath/setuptools/_distutils/command/install_lib.py, service/pythonpath/setuptools/_distutils/command/install_scripts.py, service/pythonpath/setuptools/_distutils/command/sdist.py, service/pythonpath/setuptools/_distutils/compat/__init__.py, service/pythonpath/setuptools/_distutils/compat/py38.py, service/pythonpath/setuptools/_distutils/compat/py39.py, service/pythonpath/setuptools/_distutils/core.py, service/pythonpath/setuptools/_distutils/cygwinccompiler.py, service/pythonpath/setuptools/_distutils/debug.py, service/pythonpath/setuptools/_distutils/dep_util.py, service/pythonpath/setuptools/_distutils/dir_util.py, service/pythonpath/setuptools/_distutils/dist.py, service/pythonpath/setuptools/_distutils/errors.py, service/pythonpath/setuptools/_distutils/extension.py, service/pythonpath/setuptools/_distutils/fancy_getopt.py, service/pythonpath/setuptools/_distutils/file_util.py, service/pythonpath/setuptools/_distutils/filelist.py, service/pythonpath/setuptools/_distutils/log.py, service/pythonpath/setuptools/_distutils/spawn.py, service/pythonpath/setuptools/_distutils/sysconfig.py, service/pythonpath/setuptools/_distutils/tests/__init__.py, service/pythonpath/setuptools/_distutils/tests/compat/__init__.py, service/pythonpath/setuptools/_distutils/tests/compat/py38.py, service/pythonpath/setuptools/_distutils/tests/support.py, service/pythonpath/setuptools/_distutils/tests/test_archive_util.py, service/pythonpath/setuptools/_distutils/tests/test_bdist.py, service/pythonpath/setuptools/_distutils/tests/test_bdist_dumb.py, service/pythonpath/setuptools/_distutils/tests/test_bdist_rpm.py, service/pythonpath/setuptools/_distutils/tests/test_build.py, service/pythonpath/setuptools/_distutils/tests/test_build_clib.py, service/pythonpath/setuptools/_distutils/tests/test_build_ext.py, service/pythonpath/setuptools/_distutils/tests/test_build_py.py, service/pythonpath/setuptools/_distutils/tests/test_build_scripts.py, service/pythonpath/setuptools/_distutils/tests/test_ccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_check.py, service/pythonpath/setuptools/_distutils/tests/test_clean.py, service/pythonpath/setuptools/_distutils/tests/test_cmd.py, service/pythonpath/setuptools/_distutils/tests/test_config_cmd.py, service/pythonpath/setuptools/_distutils/tests/test_core.py, service/pythonpath/setuptools/_distutils/tests/test_cygwinccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_dir_util.py, service/pythonpath/setuptools/_distutils/tests/test_dist.py, service/pythonpath/setuptools/_distutils/tests/test_extension.py, service/pythonpath/setuptools/_distutils/tests/test_file_util.py, service/pythonpath/setuptools/_distutils/tests/test_filelist.py, service/pythonpath/setuptools/_distutils/tests/test_install.py, service/pythonpath/setuptools/_distutils/tests/test_install_data.py, service/pythonpath/setuptools/_distutils/tests/test_install_headers.py, service/pythonpath/setuptools/_distutils/tests/test_install_lib.py, service/pythonpath/setuptools/_distutils/tests/test_install_scripts.py, service/pythonpath/setuptools/_distutils/tests/test_log.py, service/pythonpath/setuptools/_distutils/tests/test_mingwccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_modified.py, service/pythonpath/setuptools/_distutils/tests/test_msvccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_sdist.py, service/pythonpath/setuptools/_distutils/tests/test_spawn.py, service/pythonpath/setuptools/_distutils/tests/test_sysconfig.py, service/pythonpath/setuptools/_distutils/tests/test_text_file.py, service/pythonpath/setuptools/_distutils/tests/test_unixccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_util.py, service/pythonpath/setuptools/_distutils/tests/test_version.py, service/pythonpath/setuptools/_distutils/tests/test_versionpredicate.py, service/pythonpath/setuptools/_distutils/tests/unix_compat.py, service/pythonpath/setuptools/_distutils/text_file.py, service/pythonpath/setuptools/_distutils/unixccompiler.py, service/pythonpath/setuptools/_distutils/util.py, service/pythonpath/setuptools/_distutils/version.py, service/pythonpath/setuptools/_distutils/versionpredicate.py, service/pythonpath/setuptools/_distutils/zosccompiler.py, service/pythonpath/setuptools/_entry_points.py, service/pythonpath/setuptools/_imp.py, service/pythonpath/setuptools/_importlib.py, service/pythonpath/setuptools/_itertools.py, service/pythonpath/setuptools/_normalization.py, service/pythonpath/setuptools/_path.py, service/pythonpath/setuptools/_reqs.py, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/autocommand/__init__.py, service/pythonpath/setuptools/_vendor/autocommand/autoasync.py, service/pythonpath/setuptools/_vendor/autocommand/autocommand.py, service/pythonpath/setuptools/_vendor/autocommand/automain.py, service/pythonpath/setuptools/_vendor/autocommand/autoparse.py, service/pythonpath/setuptools/_vendor/autocommand/errors.py, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/backports/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/__main__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/compat/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/compat/py38.py, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/importlib_metadata/__init__.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_adapters.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_collections.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_compat.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_functools.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_itertools.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_meta.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_text.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/py311.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_metadata/diagnose.py, service/pythonpath/setuptools/_vendor/importlib_metadata/py.typed, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/importlib_resources/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/_adapters.py, service/pythonpath/setuptools/_vendor/importlib_resources/_common.py, service/pythonpath/setuptools/_vendor/importlib_resources/_itertools.py, service/pythonpath/setuptools/_vendor/importlib_resources/abc.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/py38.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_resources/functional.py, service/pythonpath/setuptools/_vendor/importlib_resources/future/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/future/adapters.py, service/pythonpath/setuptools/_vendor/importlib_resources/py.typed, service/pythonpath/setuptools/_vendor/importlib_resources/readers.py, service/pythonpath/setuptools/_vendor/importlib_resources/simple.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/_path.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/py312.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/utf-16.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/utf-8.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/one/resource1.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/subdirectory/subsubdir/resource.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/two/resource2.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/subdirectory/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-16.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-8.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_contents.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_custom.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_files.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_functional.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_open.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_path.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_read.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_reader.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_resource.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/util.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/zip.py, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/inflect/__init__.py, service/pythonpath/setuptools/_vendor/inflect/compat/__init__.py, service/pythonpath/setuptools/_vendor/inflect/compat/py38.py, service/pythonpath/setuptools/_vendor/inflect/py.typed, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco/collections/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/collections/py.typed, service/pythonpath/setuptools/_vendor/jaraco/context.py, service/pythonpath/setuptools/_vendor/jaraco/functools/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/functools/__init__.pyi, service/pythonpath/setuptools/_vendor/jaraco/functools/py.typed, service/pythonpath/setuptools/_vendor/jaraco/text/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/text/layouts.py, service/pythonpath/setuptools/_vendor/jaraco/text/Lorem ipsum.txt, service/pythonpath/setuptools/_vendor/jaraco/text/show-newlines.py, service/pythonpath/setuptools/_vendor/jaraco/text/strip-prefix.py, service/pythonpath/setuptools/_vendor/jaraco/text/to-dvorak.py, service/pythonpath/setuptools/_vendor/jaraco/text/to-qwerty.py, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/more_itertools/__init__.py, service/pythonpath/setuptools/_vendor/more_itertools/__init__.pyi, service/pythonpath/setuptools/_vendor/more_itertools/more.py, service/pythonpath/setuptools/_vendor/more_itertools/more.pyi, service/pythonpath/setuptools/_vendor/more_itertools/py.typed, service/pythonpath/setuptools/_vendor/more_itertools/recipes.py, service/pythonpath/setuptools/_vendor/more_itertools/recipes.pyi, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE.APACHE, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE.BSD, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/packaging/__init__.py, service/pythonpath/setuptools/_vendor/packaging/_elffile.py, service/pythonpath/setuptools/_vendor/packaging/_manylinux.py, service/pythonpath/setuptools/_vendor/packaging/_musllinux.py, service/pythonpath/setuptools/_vendor/packaging/_parser.py, service/pythonpath/setuptools/_vendor/packaging/_structures.py, service/pythonpath/setuptools/_vendor/packaging/_tokenizer.py, service/pythonpath/setuptools/_vendor/packaging/markers.py, service/pythonpath/setuptools/_vendor/packaging/metadata.py, service/pythonpath/setuptools/_vendor/packaging/py.typed, service/pythonpath/setuptools/_vendor/packaging/requirements.py, service/pythonpath/setuptools/_vendor/packaging/specifiers.py, service/pythonpath/setuptools/_vendor/packaging/tags.py, service/pythonpath/setuptools/_vendor/packaging/utils.py, service/pythonpath/setuptools/_vendor/packaging/version.py, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/licenses/LICENSE, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/platformdirs/__init__.py, service/pythonpath/setuptools/_vendor/platformdirs/__main__.py, service/pythonpath/setuptools/_vendor/platformdirs/android.py, service/pythonpath/setuptools/_vendor/platformdirs/api.py, service/pythonpath/setuptools/_vendor/platformdirs/macos.py, service/pythonpath/setuptools/_vendor/platformdirs/py.typed, service/pythonpath/setuptools/_vendor/platformdirs/unix.py, service/pythonpath/setuptools/_vendor/platformdirs/version.py, service/pythonpath/setuptools/_vendor/platformdirs/windows.py, service/pythonpath/setuptools/_vendor/ruff.toml, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/tomli/__init__.py, service/pythonpath/setuptools/_vendor/tomli/_parser.py, service/pythonpath/setuptools/_vendor/tomli/_re.py, service/pythonpath/setuptools/_vendor/tomli/_types.py, service/pythonpath/setuptools/_vendor/tomli/py.typed, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/entry_points.txt, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/typeguard/__init__.py, service/pythonpath/setuptools/_vendor/typeguard/_checkers.py, service/pythonpath/setuptools/_vendor/typeguard/_config.py, service/pythonpath/setuptools/_vendor/typeguard/_decorators.py, service/pythonpath/setuptools/_vendor/typeguard/_exceptions.py, service/pythonpath/setuptools/_vendor/typeguard/_functions.py, service/pythonpath/setuptools/_vendor/typeguard/_importhook.py, service/pythonpath/setuptools/_vendor/typeguard/_memo.py, service/pythonpath/setuptools/_vendor/typeguard/_pytest_plugin.py, service/pythonpath/setuptools/_vendor/typeguard/_suppression.py, service/pythonpath/setuptools/_vendor/typeguard/_transformer.py, service/pythonpath/setuptools/_vendor/typeguard/_union_transformer.py, service/pythonpath/setuptools/_vendor/typeguard/_utils.py, service/pythonpath/setuptools/_vendor/typeguard/py.typed, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/typing_extensions.py, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/entry_points.txt, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/LICENSE.txt, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/wheel/__init__.py, service/pythonpath/setuptools/_vendor/wheel/__main__.py, service/pythonpath/setuptools/_vendor/wheel/_setuptools_logging.py, service/pythonpath/setuptools/_vendor/wheel/bdist_wheel.py, service/pythonpath/setuptools/_vendor/wheel/cli/__init__.py, service/pythonpath/setuptools/_vendor/wheel/cli/convert.py, service/pythonpath/setuptools/_vendor/wheel/cli/pack.py, service/pythonpath/setuptools/_vendor/wheel/cli/tags.py, service/pythonpath/setuptools/_vendor/wheel/cli/unpack.py, service/pythonpath/setuptools/_vendor/wheel/macosx_libfile.py, service/pythonpath/setuptools/_vendor/wheel/metadata.py, service/pythonpath/setuptools/_vendor/wheel/util.py, service/pythonpath/setuptools/_vendor/wheel/vendored/__init__.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/__init__.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_elffile.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_manylinux.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_musllinux.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_parser.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_structures.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_tokenizer.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/markers.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/requirements.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/specifiers.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/tags.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/utils.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/version.py, service/pythonpath/setuptools/_vendor/wheel/vendored/vendor.txt, service/pythonpath/setuptools/_vendor/wheel/wheelfile.py, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/zipp/__init__.py, service/pythonpath/setuptools/_vendor/zipp/compat/__init__.py, service/pythonpath/setuptools/_vendor/zipp/compat/py310.py, service/pythonpath/setuptools/_vendor/zipp/glob.py, service/pythonpath/setuptools/archive_util.py, service/pythonpath/setuptools/build_meta.py, service/pythonpath/setuptools/cli-32.exe, service/pythonpath/setuptools/cli-64.exe, service/pythonpath/setuptools/cli-arm64.exe, service/pythonpath/setuptools/cli.exe, service/pythonpath/setuptools/command/__init__.py, service/pythonpath/setuptools/command/_requirestxt.py, service/pythonpath/setuptools/command/alias.py, service/pythonpath/setuptools/command/bdist_egg.py, service/pythonpath/setuptools/command/bdist_rpm.py, service/pythonpath/setuptools/command/bdist_wheel.py, service/pythonpath/setuptools/command/build.py, service/pythonpath/setuptools/command/build_clib.py, service/pythonpath/setuptools/command/build_ext.py, service/pythonpath/setuptools/command/build_py.py, service/pythonpath/setuptools/command/develop.py, service/pythonpath/setuptools/command/dist_info.py, service/pythonpath/setuptools/command/easy_install.py, service/pythonpath/setuptools/command/editable_wheel.py, service/pythonpath/setuptools/command/egg_info.py, service/pythonpath/setuptools/command/install.py, service/pythonpath/setuptools/command/install_egg_info.py, service/pythonpath/setuptools/command/install_lib.py, service/pythonpath/setuptools/command/install_scripts.py, service/pythonpath/setuptools/command/launcher manifest.xml, service/pythonpath/setuptools/command/rotate.py, service/pythonpath/setuptools/command/saveopts.py, service/pythonpath/setuptools/command/sdist.py, service/pythonpath/setuptools/command/setopt.py, service/pythonpath/setuptools/command/test.py, service/pythonpath/setuptools/compat/__init__.py, service/pythonpath/setuptools/compat/py310.py, service/pythonpath/setuptools/compat/py311.py, service/pythonpath/setuptools/compat/py312.py, service/pythonpath/setuptools/compat/py39.py, service/pythonpath/setuptools/config/__init__.py, service/pythonpath/setuptools/config/_apply_pyprojecttoml.py, service/pythonpath/setuptools/config/_validate_pyproject/__init__.py, service/pythonpath/setuptools/config/_validate_pyproject/error_reporting.py, service/pythonpath/setuptools/config/_validate_pyproject/extra_validations.py, service/pythonpath/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py, service/pythonpath/setuptools/config/_validate_pyproject/fastjsonschema_validations.py, service/pythonpath/setuptools/config/_validate_pyproject/formats.py, service/pythonpath/setuptools/config/_validate_pyproject/NOTICE, service/pythonpath/setuptools/config/distutils.schema.json, service/pythonpath/setuptools/config/expand.py, service/pythonpath/setuptools/config/NOTICE, service/pythonpath/setuptools/config/pyprojecttoml.py, service/pythonpath/setuptools/config/setupcfg.py, service/pythonpath/setuptools/config/setuptools.schema.json, service/pythonpath/setuptools/depends.py, service/pythonpath/setuptools/discovery.py, service/pythonpath/setuptools/dist.py, service/pythonpath/setuptools/errors.py, service/pythonpath/setuptools/extension.py, service/pythonpath/setuptools/glob.py, service/pythonpath/setuptools/gui-32.exe, service/pythonpath/setuptools/gui-64.exe, service/pythonpath/setuptools/gui-arm64.exe, service/pythonpath/setuptools/gui.exe, service/pythonpath/setuptools/installer.py, service/pythonpath/setuptools/launch.py, service/pythonpath/setuptools/logging.py, service/pythonpath/setuptools/modified.py, service/pythonpath/setuptools/monkey.py, service/pythonpath/setuptools/msvc.py, service/pythonpath/setuptools/namespaces.py, service/pythonpath/setuptools/package_index.py, service/pythonpath/setuptools/sandbox.py, service/pythonpath/setuptools/script (dev).tmpl, service/pythonpath/setuptools/script.tmpl, service/pythonpath/setuptools/tests/__init__.py, service/pythonpath/setuptools/tests/compat/__init__.py, service/pythonpath/setuptools/tests/compat/py39.py, service/pythonpath/setuptools/tests/config/__init__.py, service/pythonpath/setuptools/tests/config/downloads/__init__.py, service/pythonpath/setuptools/tests/config/downloads/preload.py, service/pythonpath/setuptools/tests/config/setupcfg_examples.txt, service/pythonpath/setuptools/tests/config/test_apply_pyprojecttoml.py, service/pythonpath/setuptools/tests/config/test_expand.py, service/pythonpath/setuptools/tests/config/test_pyprojecttoml.py, service/pythonpath/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py, service/pythonpath/setuptools/tests/config/test_setupcfg.py, service/pythonpath/setuptools/tests/contexts.py, service/pythonpath/setuptools/tests/environment.py, service/pythonpath/setuptools/tests/fixtures.py, service/pythonpath/setuptools/tests/indexes/test_links_priority/external.html, service/pythonpath/setuptools/tests/indexes/test_links_priority/simple/foobar/index.html, service/pythonpath/setuptools/tests/integration/__init__.py, service/pythonpath/setuptools/tests/integration/helpers.py, service/pythonpath/setuptools/tests/integration/test_pip_install_sdist.py, service/pythonpath/setuptools/tests/mod_with_constant.py, service/pythonpath/setuptools/tests/namespaces.py, service/pythonpath/setuptools/tests/script-with-bom.py, service/pythonpath/setuptools/tests/server.py, service/pythonpath/setuptools/tests/test_archive_util.py, service/pythonpath/setuptools/tests/test_bdist_deprecations.py, service/pythonpath/setuptools/tests/test_bdist_egg.py, service/pythonpath/setuptools/tests/test_bdist_wheel.py, service/pythonpath/setuptools/tests/test_build.py, service/pythonpath/setuptools/tests/test_build_clib.py, service/pythonpath/setuptools/tests/test_build_ext.py, service/pythonpath/setuptools/tests/test_build_meta.py, service/pythonpath/setuptools/tests/test_build_py.py, service/pythonpath/setuptools/tests/test_config_discovery.py, service/pythonpath/setuptools/tests/test_core_metadata.py, service/pythonpath/setuptools/tests/test_depends.py, service/pythonpath/setuptools/tests/test_develop.py, service/pythonpath/setuptools/tests/test_dist.py, service/pythonpath/setuptools/tests/test_dist_info.py, service/pythonpath/setuptools/tests/test_distutils_adoption.py, service/pythonpath/setuptools/tests/test_easy_install.py, service/pythonpath/setuptools/tests/test_editable_install.py, service/pythonpath/setuptools/tests/test_egg_info.py, service/pythonpath/setuptools/tests/test_extern.py, service/pythonpath/setuptools/tests/test_find_packages.py, service/pythonpath/setuptools/tests/test_find_py_modules.py, service/pythonpath/setuptools/tests/test_glob.py, service/pythonpath/setuptools/tests/test_install_scripts.py, service/pythonpath/setuptools/tests/test_logging.py, service/pythonpath/setuptools/tests/test_manifest.py, service/pythonpath/setuptools/tests/test_namespaces.py, service/pythonpath/setuptools/tests/test_packageindex.py, service/pythonpath/setuptools/tests/test_sandbox.py, service/pythonpath/setuptools/tests/test_sdist.py, service/pythonpath/setuptools/tests/test_setopt.py, service/pythonpath/setuptools/tests/test_setuptools.py, service/pythonpath/setuptools/tests/test_unicode_utils.py, service/pythonpath/setuptools/tests/test_virtualenv.py, service/pythonpath/setuptools/tests/test_warnings.py, service/pythonpath/setuptools/tests/test_wheel.py, service/pythonpath/setuptools/tests/test_windows_wrappers.py, service/pythonpath/setuptools/tests/text.py, service/pythonpath/setuptools/tests/textwrap.py, service/pythonpath/setuptools/unicode_utils.py, service/pythonpath/setuptools/version.py, service/pythonpath/setuptools/warnings.py, service/pythonpath/setuptools/wheel.py, service/pythonpath/setuptools/windows_support.py, service/pythonpath/six-1.17.0.dist-info/LICENSE, service/pythonpath/six-1.17.0.dist-info/METADATA, service/pythonpath/six-1.17.0.dist-info/RECORD, service/pythonpath/six-1.17.0.dist-info/top_level.txt, service/pythonpath/six-1.17.0.dist-info/WHEEL, service/pythonpath/six.py
+#Tue Oct 14 15:14:45 CEST 2025
+contents=component-schema.dtd, component-update.dtd, description.xml, description/desc_en.txt, description/desc_fr.txt, dialogs/dialog.dtd, dialogs/LogDialog.xdl, dialogs/LogDialog_en_US.default, dialogs/LogDialog_en_US.properties, dialogs/LogDialog_fr_FR.properties, dialogs/LogWindow.xdl, dialogs/LogWindow_en_US.default, dialogs/LogWindow_en_US.properties, dialogs/LogWindow_fr_FR.properties, dialogs/OptionDialog.xdl, dialogs/OptionDialog_en_US.default, dialogs/OptionDialog_en_US.properties, dialogs/OptionDialog_fr_FR.properties, dialogs/OptionsDialog.xdl, dialogs/OptionsDialog_en_US.default, dialogs/OptionsDialog_en_US.properties, dialogs/OptionsDialog_fr_FR.properties, Drivers.xcu, img/HyperSQLOOo.svg, META-INF/manifest.xml, Options.xcs, Options.xcu, OptionsDialog.xcu, package.components, registration/TermsOfUse_en.md, registration/TermsOfUse_fr.md, requirements.txt, resource/Driver_en_US.default, resource/Driver_en_US.properties, resource/Driver_fr_FR.properties, resource/Logger_en_US.default, resource/Logger_en_US.properties, resource/Logger_fr_FR.properties, service/Driver.py, service/HyperSQLOOo.py, service/OptionsHandler.py, service/pythonpath/_distutils_hack/__init__.py, service/pythonpath/_distutils_hack/override.py, service/pythonpath/distutils-precedence.pth, service/pythonpath/hypersql/__init__.py, service/pythonpath/hypersql/configuration.py, service/pythonpath/hypersql/documenthandler.py, service/pythonpath/hypersql/driver.py, service/pythonpath/hypersql/helper.py, service/pythonpath/hypersql/jdbcdriver/__init__.py, service/pythonpath/hypersql/jdbcdriver/configuration.py, service/pythonpath/hypersql/jdbcdriver/jdbctool.py, service/pythonpath/hypersql/logger/__init__.py, service/pythonpath/hypersql/logger/dialog/__init__.py, service/pythonpath/hypersql/logger/dialog/loghandler.py, service/pythonpath/hypersql/logger/dialog/logmanager.py, service/pythonpath/hypersql/logger/dialog/logmodel.py, service/pythonpath/hypersql/logger/dialog/logview.py, service/pythonpath/hypersql/logger/logconfig.py, service/pythonpath/hypersql/logger/logcontroller.py, service/pythonpath/hypersql/logger/logger.py, service/pythonpath/hypersql/logger/loggerpool.py, service/pythonpath/hypersql/logger/loghandler.py, service/pythonpath/hypersql/logger/loghelper.py, service/pythonpath/hypersql/logger/logwrapper.py, service/pythonpath/hypersql/options/__init__.py, service/pythonpath/hypersql/options/options/__init__.py, service/pythonpath/hypersql/options/options/optionshandler.py, service/pythonpath/hypersql/options/options/optionsmanager.py, service/pythonpath/hypersql/options/options/optionsmodel.py, service/pythonpath/hypersql/options/options/optionsview.py, service/pythonpath/hypersql/options/optionshandler.py, service/pythonpath/hypersql/options/optionsmanager.py, service/pythonpath/hypersql/options/optionsmodel.py, service/pythonpath/hypersql/options/optionsview.py, service/pythonpath/hypersql/sdbc/__init__.py, service/pythonpath/hypersql/sdbc/driver.py, service/pythonpath/hypersql/sdbcx/__init__.py, service/pythonpath/hypersql/sdbcx/driver.py, service/pythonpath/hypersql/unotool/__init__.py, service/pythonpath/hypersql/unotool/statusindicator.py, service/pythonpath/hypersql/unotool/taskevent.py, service/pythonpath/hypersql/unotool/unotool.py, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE.APACHE, service/pythonpath/packaging-25.0.dist-info/licenses/LICENSE.BSD, service/pythonpath/packaging-25.0.dist-info/METADATA, service/pythonpath/packaging-25.0.dist-info/RECORD, service/pythonpath/packaging-25.0.dist-info/WHEEL, service/pythonpath/packaging/__init__.py, service/pythonpath/packaging/_elffile.py, service/pythonpath/packaging/_manylinux.py, service/pythonpath/packaging/_musllinux.py, service/pythonpath/packaging/_parser.py, service/pythonpath/packaging/_structures.py, service/pythonpath/packaging/_tokenizer.py, service/pythonpath/packaging/licenses/__init__.py, service/pythonpath/packaging/licenses/_spdx.py, service/pythonpath/packaging/markers.py, service/pythonpath/packaging/metadata.py, service/pythonpath/packaging/py.typed, service/pythonpath/packaging/requirements.py, service/pythonpath/packaging/specifiers.py, service/pythonpath/packaging/tags.py, service/pythonpath/packaging/utils.py, service/pythonpath/packaging/version.py, service/pythonpath/pkg_resources/__init__.py, service/pythonpath/pkg_resources/api_tests.txt, service/pythonpath/pkg_resources/py.typed, service/pythonpath/pkg_resources/tests/__init__.py, service/pythonpath/pkg_resources/tests/data/my-test-package-source/setup.cfg, service/pythonpath/pkg_resources/tests/data/my-test-package-source/setup.py, service/pythonpath/pkg_resources/tests/data/my-test-package-zip/my-test-package.zip, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/dependency_links.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/PKG-INFO, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/SOURCES.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/top_level.txt, service/pythonpath/pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/zip-safe, service/pythonpath/pkg_resources/tests/data/my-test-package_zipped-egg/my_test_package-1.0-py3.7.egg, service/pythonpath/pkg_resources/tests/test_find_distributions.py, service/pythonpath/pkg_resources/tests/test_integration_zope_interface.py, service/pythonpath/pkg_resources/tests/test_markers.py, service/pythonpath/pkg_resources/tests/test_pkg_resources.py, service/pythonpath/pkg_resources/tests/test_resources.py, service/pythonpath/pkg_resources/tests/test_working_set.py, service/pythonpath/setuptools-75.3.2.dist-info/entry_points.txt, service/pythonpath/setuptools-75.3.2.dist-info/LICENSE, service/pythonpath/setuptools-75.3.2.dist-info/METADATA, service/pythonpath/setuptools-75.3.2.dist-info/RECORD, service/pythonpath/setuptools-75.3.2.dist-info/top_level.txt, service/pythonpath/setuptools-75.3.2.dist-info/WHEEL, service/pythonpath/setuptools/__init__.py, service/pythonpath/setuptools/_core_metadata.py, service/pythonpath/setuptools/_distutils/__init__.py, service/pythonpath/setuptools/_distutils/_log.py, service/pythonpath/setuptools/_distutils/_macos_compat.py, service/pythonpath/setuptools/_distutils/_modified.py, service/pythonpath/setuptools/_distutils/_msvccompiler.py, service/pythonpath/setuptools/_distutils/archive_util.py, service/pythonpath/setuptools/_distutils/ccompiler.py, service/pythonpath/setuptools/_distutils/cmd.py, service/pythonpath/setuptools/_distutils/command/__init__.py, service/pythonpath/setuptools/_distutils/command/_framework_compat.py, service/pythonpath/setuptools/_distutils/command/bdist.py, service/pythonpath/setuptools/_distutils/command/bdist_dumb.py, service/pythonpath/setuptools/_distutils/command/bdist_rpm.py, service/pythonpath/setuptools/_distutils/command/build.py, service/pythonpath/setuptools/_distutils/command/build_clib.py, service/pythonpath/setuptools/_distutils/command/build_ext.py, service/pythonpath/setuptools/_distutils/command/build_py.py, service/pythonpath/setuptools/_distutils/command/build_scripts.py, service/pythonpath/setuptools/_distutils/command/check.py, service/pythonpath/setuptools/_distutils/command/clean.py, service/pythonpath/setuptools/_distutils/command/config.py, service/pythonpath/setuptools/_distutils/command/install.py, service/pythonpath/setuptools/_distutils/command/install_data.py, service/pythonpath/setuptools/_distutils/command/install_egg_info.py, service/pythonpath/setuptools/_distutils/command/install_headers.py, service/pythonpath/setuptools/_distutils/command/install_lib.py, service/pythonpath/setuptools/_distutils/command/install_scripts.py, service/pythonpath/setuptools/_distutils/command/sdist.py, service/pythonpath/setuptools/_distutils/compat/__init__.py, service/pythonpath/setuptools/_distutils/compat/py38.py, service/pythonpath/setuptools/_distutils/compat/py39.py, service/pythonpath/setuptools/_distutils/core.py, service/pythonpath/setuptools/_distutils/cygwinccompiler.py, service/pythonpath/setuptools/_distutils/debug.py, service/pythonpath/setuptools/_distutils/dep_util.py, service/pythonpath/setuptools/_distutils/dir_util.py, service/pythonpath/setuptools/_distutils/dist.py, service/pythonpath/setuptools/_distutils/errors.py, service/pythonpath/setuptools/_distutils/extension.py, service/pythonpath/setuptools/_distutils/fancy_getopt.py, service/pythonpath/setuptools/_distutils/file_util.py, service/pythonpath/setuptools/_distutils/filelist.py, service/pythonpath/setuptools/_distutils/log.py, service/pythonpath/setuptools/_distutils/spawn.py, service/pythonpath/setuptools/_distutils/sysconfig.py, service/pythonpath/setuptools/_distutils/tests/__init__.py, service/pythonpath/setuptools/_distutils/tests/compat/__init__.py, service/pythonpath/setuptools/_distutils/tests/compat/py38.py, service/pythonpath/setuptools/_distutils/tests/support.py, service/pythonpath/setuptools/_distutils/tests/test_archive_util.py, service/pythonpath/setuptools/_distutils/tests/test_bdist.py, service/pythonpath/setuptools/_distutils/tests/test_bdist_dumb.py, service/pythonpath/setuptools/_distutils/tests/test_bdist_rpm.py, service/pythonpath/setuptools/_distutils/tests/test_build.py, service/pythonpath/setuptools/_distutils/tests/test_build_clib.py, service/pythonpath/setuptools/_distutils/tests/test_build_ext.py, service/pythonpath/setuptools/_distutils/tests/test_build_py.py, service/pythonpath/setuptools/_distutils/tests/test_build_scripts.py, service/pythonpath/setuptools/_distutils/tests/test_ccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_check.py, service/pythonpath/setuptools/_distutils/tests/test_clean.py, service/pythonpath/setuptools/_distutils/tests/test_cmd.py, service/pythonpath/setuptools/_distutils/tests/test_config_cmd.py, service/pythonpath/setuptools/_distutils/tests/test_core.py, service/pythonpath/setuptools/_distutils/tests/test_cygwinccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_dir_util.py, service/pythonpath/setuptools/_distutils/tests/test_dist.py, service/pythonpath/setuptools/_distutils/tests/test_extension.py, service/pythonpath/setuptools/_distutils/tests/test_file_util.py, service/pythonpath/setuptools/_distutils/tests/test_filelist.py, service/pythonpath/setuptools/_distutils/tests/test_install.py, service/pythonpath/setuptools/_distutils/tests/test_install_data.py, service/pythonpath/setuptools/_distutils/tests/test_install_headers.py, service/pythonpath/setuptools/_distutils/tests/test_install_lib.py, service/pythonpath/setuptools/_distutils/tests/test_install_scripts.py, service/pythonpath/setuptools/_distutils/tests/test_log.py, service/pythonpath/setuptools/_distutils/tests/test_mingwccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_modified.py, service/pythonpath/setuptools/_distutils/tests/test_msvccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_sdist.py, service/pythonpath/setuptools/_distutils/tests/test_spawn.py, service/pythonpath/setuptools/_distutils/tests/test_sysconfig.py, service/pythonpath/setuptools/_distutils/tests/test_text_file.py, service/pythonpath/setuptools/_distutils/tests/test_unixccompiler.py, service/pythonpath/setuptools/_distutils/tests/test_util.py, service/pythonpath/setuptools/_distutils/tests/test_version.py, service/pythonpath/setuptools/_distutils/tests/test_versionpredicate.py, service/pythonpath/setuptools/_distutils/tests/unix_compat.py, service/pythonpath/setuptools/_distutils/text_file.py, service/pythonpath/setuptools/_distutils/unixccompiler.py, service/pythonpath/setuptools/_distutils/util.py, service/pythonpath/setuptools/_distutils/version.py, service/pythonpath/setuptools/_distutils/versionpredicate.py, service/pythonpath/setuptools/_distutils/zosccompiler.py, service/pythonpath/setuptools/_entry_points.py, service/pythonpath/setuptools/_imp.py, service/pythonpath/setuptools/_importlib.py, service/pythonpath/setuptools/_itertools.py, service/pythonpath/setuptools/_normalization.py, service/pythonpath/setuptools/_path.py, service/pythonpath/setuptools/_reqs.py, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/autocommand-2.2.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/autocommand/__init__.py, service/pythonpath/setuptools/_vendor/autocommand/autoasync.py, service/pythonpath/setuptools/_vendor/autocommand/autocommand.py, service/pythonpath/setuptools/_vendor/autocommand/automain.py, service/pythonpath/setuptools/_vendor/autocommand/autoparse.py, service/pythonpath/setuptools/_vendor/autocommand/errors.py, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/backports/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/__main__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/compat/__init__.py, service/pythonpath/setuptools/_vendor/backports/tarfile/compat/py38.py, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/importlib_metadata/__init__.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_adapters.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_collections.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_compat.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_functools.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_itertools.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_meta.py, service/pythonpath/setuptools/_vendor/importlib_metadata/_text.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/py311.py, service/pythonpath/setuptools/_vendor/importlib_metadata/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_metadata/diagnose.py, service/pythonpath/setuptools/_vendor/importlib_metadata/py.typed, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/importlib_resources-6.4.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/importlib_resources/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/_adapters.py, service/pythonpath/setuptools/_vendor/importlib_resources/_common.py, service/pythonpath/setuptools/_vendor/importlib_resources/_itertools.py, service/pythonpath/setuptools/_vendor/importlib_resources/abc.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/py38.py, service/pythonpath/setuptools/_vendor/importlib_resources/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_resources/functional.py, service/pythonpath/setuptools/_vendor/importlib_resources/future/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/future/adapters.py, service/pythonpath/setuptools/_vendor/importlib_resources/py.typed, service/pythonpath/setuptools/_vendor/importlib_resources/readers.py, service/pythonpath/setuptools/_vendor/importlib_resources/simple.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/_path.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/py312.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/compat/py39.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/utf-16.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data01/utf-8.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/one/resource1.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/subdirectory/subsubdir/resource.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/data02/two/resource2.txt, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/subdirectory/binary.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-16.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-8.file, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_contents.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_custom.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_files.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_functional.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_open.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_path.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_read.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_reader.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/test_resource.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/util.py, service/pythonpath/setuptools/_vendor/importlib_resources/tests/zip.py, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/inflect-7.3.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/inflect/__init__.py, service/pythonpath/setuptools/_vendor/inflect/compat/__init__.py, service/pythonpath/setuptools/_vendor/inflect/compat/py38.py, service/pythonpath/setuptools/_vendor/inflect/py.typed, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.collections-5.1.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.context-5.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.functools-4.0.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/jaraco.text-3.12.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/jaraco/collections/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/collections/py.typed, service/pythonpath/setuptools/_vendor/jaraco/context.py, service/pythonpath/setuptools/_vendor/jaraco/functools/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/functools/__init__.pyi, service/pythonpath/setuptools/_vendor/jaraco/functools/py.typed, service/pythonpath/setuptools/_vendor/jaraco/text/__init__.py, service/pythonpath/setuptools/_vendor/jaraco/text/layouts.py, service/pythonpath/setuptools/_vendor/jaraco/text/Lorem ipsum.txt, service/pythonpath/setuptools/_vendor/jaraco/text/show-newlines.py, service/pythonpath/setuptools/_vendor/jaraco/text/strip-prefix.py, service/pythonpath/setuptools/_vendor/jaraco/text/to-dvorak.py, service/pythonpath/setuptools/_vendor/jaraco/text/to-qwerty.py, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/more_itertools-10.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/more_itertools/__init__.py, service/pythonpath/setuptools/_vendor/more_itertools/__init__.pyi, service/pythonpath/setuptools/_vendor/more_itertools/more.py, service/pythonpath/setuptools/_vendor/more_itertools/more.pyi, service/pythonpath/setuptools/_vendor/more_itertools/py.typed, service/pythonpath/setuptools/_vendor/more_itertools/recipes.py, service/pythonpath/setuptools/_vendor/more_itertools/recipes.pyi, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE.APACHE, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/LICENSE.BSD, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/packaging-24.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/packaging/__init__.py, service/pythonpath/setuptools/_vendor/packaging/_elffile.py, service/pythonpath/setuptools/_vendor/packaging/_manylinux.py, service/pythonpath/setuptools/_vendor/packaging/_musllinux.py, service/pythonpath/setuptools/_vendor/packaging/_parser.py, service/pythonpath/setuptools/_vendor/packaging/_structures.py, service/pythonpath/setuptools/_vendor/packaging/_tokenizer.py, service/pythonpath/setuptools/_vendor/packaging/markers.py, service/pythonpath/setuptools/_vendor/packaging/metadata.py, service/pythonpath/setuptools/_vendor/packaging/py.typed, service/pythonpath/setuptools/_vendor/packaging/requirements.py, service/pythonpath/setuptools/_vendor/packaging/specifiers.py, service/pythonpath/setuptools/_vendor/packaging/tags.py, service/pythonpath/setuptools/_vendor/packaging/utils.py, service/pythonpath/setuptools/_vendor/packaging/version.py, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/licenses/LICENSE, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/platformdirs-4.2.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/platformdirs/__init__.py, service/pythonpath/setuptools/_vendor/platformdirs/__main__.py, service/pythonpath/setuptools/_vendor/platformdirs/android.py, service/pythonpath/setuptools/_vendor/platformdirs/api.py, service/pythonpath/setuptools/_vendor/platformdirs/macos.py, service/pythonpath/setuptools/_vendor/platformdirs/py.typed, service/pythonpath/setuptools/_vendor/platformdirs/unix.py, service/pythonpath/setuptools/_vendor/platformdirs/version.py, service/pythonpath/setuptools/_vendor/platformdirs/windows.py, service/pythonpath/setuptools/_vendor/ruff.toml, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/METADATA, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/RECORD, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/tomli-2.0.1.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/tomli/__init__.py, service/pythonpath/setuptools/_vendor/tomli/_parser.py, service/pythonpath/setuptools/_vendor/tomli/_re.py, service/pythonpath/setuptools/_vendor/tomli/_types.py, service/pythonpath/setuptools/_vendor/tomli/py.typed, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/entry_points.txt, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/typeguard-4.3.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/typeguard/__init__.py, service/pythonpath/setuptools/_vendor/typeguard/_checkers.py, service/pythonpath/setuptools/_vendor/typeguard/_config.py, service/pythonpath/setuptools/_vendor/typeguard/_decorators.py, service/pythonpath/setuptools/_vendor/typeguard/_exceptions.py, service/pythonpath/setuptools/_vendor/typeguard/_functions.py, service/pythonpath/setuptools/_vendor/typeguard/_importhook.py, service/pythonpath/setuptools/_vendor/typeguard/_memo.py, service/pythonpath/setuptools/_vendor/typeguard/_pytest_plugin.py, service/pythonpath/setuptools/_vendor/typeguard/_suppression.py, service/pythonpath/setuptools/_vendor/typeguard/_transformer.py, service/pythonpath/setuptools/_vendor/typeguard/_union_transformer.py, service/pythonpath/setuptools/_vendor/typeguard/_utils.py, service/pythonpath/setuptools/_vendor/typeguard/py.typed, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/typing_extensions-4.12.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/typing_extensions.py, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/entry_points.txt, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/LICENSE.txt, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/METADATA, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/RECORD, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/wheel-0.43.0.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/wheel/__init__.py, service/pythonpath/setuptools/_vendor/wheel/__main__.py, service/pythonpath/setuptools/_vendor/wheel/_setuptools_logging.py, service/pythonpath/setuptools/_vendor/wheel/bdist_wheel.py, service/pythonpath/setuptools/_vendor/wheel/cli/__init__.py, service/pythonpath/setuptools/_vendor/wheel/cli/convert.py, service/pythonpath/setuptools/_vendor/wheel/cli/pack.py, service/pythonpath/setuptools/_vendor/wheel/cli/tags.py, service/pythonpath/setuptools/_vendor/wheel/cli/unpack.py, service/pythonpath/setuptools/_vendor/wheel/macosx_libfile.py, service/pythonpath/setuptools/_vendor/wheel/metadata.py, service/pythonpath/setuptools/_vendor/wheel/util.py, service/pythonpath/setuptools/_vendor/wheel/vendored/__init__.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/__init__.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_elffile.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_manylinux.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_musllinux.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_parser.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_structures.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/_tokenizer.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/markers.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/requirements.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/specifiers.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/tags.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/utils.py, service/pythonpath/setuptools/_vendor/wheel/vendored/packaging/version.py, service/pythonpath/setuptools/_vendor/wheel/vendored/vendor.txt, service/pythonpath/setuptools/_vendor/wheel/wheelfile.py, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/INSTALLER, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/LICENSE, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/METADATA, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/RECORD, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/REQUESTED, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/top_level.txt, service/pythonpath/setuptools/_vendor/zipp-3.19.2.dist-info/WHEEL, service/pythonpath/setuptools/_vendor/zipp/__init__.py, service/pythonpath/setuptools/_vendor/zipp/compat/__init__.py, service/pythonpath/setuptools/_vendor/zipp/compat/py310.py, service/pythonpath/setuptools/_vendor/zipp/glob.py, service/pythonpath/setuptools/archive_util.py, service/pythonpath/setuptools/build_meta.py, service/pythonpath/setuptools/cli-32.exe, service/pythonpath/setuptools/cli-64.exe, service/pythonpath/setuptools/cli-arm64.exe, service/pythonpath/setuptools/cli.exe, service/pythonpath/setuptools/command/__init__.py, service/pythonpath/setuptools/command/_requirestxt.py, service/pythonpath/setuptools/command/alias.py, service/pythonpath/setuptools/command/bdist_egg.py, service/pythonpath/setuptools/command/bdist_rpm.py, service/pythonpath/setuptools/command/bdist_wheel.py, service/pythonpath/setuptools/command/build.py, service/pythonpath/setuptools/command/build_clib.py, service/pythonpath/setuptools/command/build_ext.py, service/pythonpath/setuptools/command/build_py.py, service/pythonpath/setuptools/command/develop.py, service/pythonpath/setuptools/command/dist_info.py, service/pythonpath/setuptools/command/easy_install.py, service/pythonpath/setuptools/command/editable_wheel.py, service/pythonpath/setuptools/command/egg_info.py, service/pythonpath/setuptools/command/install.py, service/pythonpath/setuptools/command/install_egg_info.py, service/pythonpath/setuptools/command/install_lib.py, service/pythonpath/setuptools/command/install_scripts.py, service/pythonpath/setuptools/command/launcher manifest.xml, service/pythonpath/setuptools/command/rotate.py, service/pythonpath/setuptools/command/saveopts.py, service/pythonpath/setuptools/command/sdist.py, service/pythonpath/setuptools/command/setopt.py, service/pythonpath/setuptools/command/test.py, service/pythonpath/setuptools/compat/__init__.py, service/pythonpath/setuptools/compat/py310.py, service/pythonpath/setuptools/compat/py311.py, service/pythonpath/setuptools/compat/py312.py, service/pythonpath/setuptools/compat/py39.py, service/pythonpath/setuptools/config/__init__.py, service/pythonpath/setuptools/config/_apply_pyprojecttoml.py, service/pythonpath/setuptools/config/_validate_pyproject/__init__.py, service/pythonpath/setuptools/config/_validate_pyproject/error_reporting.py, service/pythonpath/setuptools/config/_validate_pyproject/extra_validations.py, service/pythonpath/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py, service/pythonpath/setuptools/config/_validate_pyproject/fastjsonschema_validations.py, service/pythonpath/setuptools/config/_validate_pyproject/formats.py, service/pythonpath/setuptools/config/_validate_pyproject/NOTICE, service/pythonpath/setuptools/config/distutils.schema.json, service/pythonpath/setuptools/config/expand.py, service/pythonpath/setuptools/config/NOTICE, service/pythonpath/setuptools/config/pyprojecttoml.py, service/pythonpath/setuptools/config/setupcfg.py, service/pythonpath/setuptools/config/setuptools.schema.json, service/pythonpath/setuptools/depends.py, service/pythonpath/setuptools/discovery.py, service/pythonpath/setuptools/dist.py, service/pythonpath/setuptools/errors.py, service/pythonpath/setuptools/extension.py, service/pythonpath/setuptools/glob.py, service/pythonpath/setuptools/gui-32.exe, service/pythonpath/setuptools/gui-64.exe, service/pythonpath/setuptools/gui-arm64.exe, service/pythonpath/setuptools/gui.exe, service/pythonpath/setuptools/installer.py, service/pythonpath/setuptools/launch.py, service/pythonpath/setuptools/logging.py, service/pythonpath/setuptools/modified.py, service/pythonpath/setuptools/monkey.py, service/pythonpath/setuptools/msvc.py, service/pythonpath/setuptools/namespaces.py, service/pythonpath/setuptools/package_index.py, service/pythonpath/setuptools/sandbox.py, service/pythonpath/setuptools/script (dev).tmpl, service/pythonpath/setuptools/script.tmpl, service/pythonpath/setuptools/tests/__init__.py, service/pythonpath/setuptools/tests/compat/__init__.py, service/pythonpath/setuptools/tests/compat/py39.py, service/pythonpath/setuptools/tests/config/__init__.py, service/pythonpath/setuptools/tests/config/downloads/__init__.py, service/pythonpath/setuptools/tests/config/downloads/preload.py, service/pythonpath/setuptools/tests/config/setupcfg_examples.txt, service/pythonpath/setuptools/tests/config/test_apply_pyprojecttoml.py, service/pythonpath/setuptools/tests/config/test_expand.py, service/pythonpath/setuptools/tests/config/test_pyprojecttoml.py, service/pythonpath/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py, service/pythonpath/setuptools/tests/config/test_setupcfg.py, service/pythonpath/setuptools/tests/contexts.py, service/pythonpath/setuptools/tests/environment.py, service/pythonpath/setuptools/tests/fixtures.py, service/pythonpath/setuptools/tests/indexes/test_links_priority/external.html, service/pythonpath/setuptools/tests/indexes/test_links_priority/simple/foobar/index.html, service/pythonpath/setuptools/tests/integration/__init__.py, service/pythonpath/setuptools/tests/integration/helpers.py, service/pythonpath/setuptools/tests/integration/test_pip_install_sdist.py, service/pythonpath/setuptools/tests/mod_with_constant.py, service/pythonpath/setuptools/tests/namespaces.py, service/pythonpath/setuptools/tests/script-with-bom.py, service/pythonpath/setuptools/tests/server.py, service/pythonpath/setuptools/tests/test_archive_util.py, service/pythonpath/setuptools/tests/test_bdist_deprecations.py, service/pythonpath/setuptools/tests/test_bdist_egg.py, service/pythonpath/setuptools/tests/test_bdist_wheel.py, service/pythonpath/setuptools/tests/test_build.py, service/pythonpath/setuptools/tests/test_build_clib.py, service/pythonpath/setuptools/tests/test_build_ext.py, service/pythonpath/setuptools/tests/test_build_meta.py, service/pythonpath/setuptools/tests/test_build_py.py, service/pythonpath/setuptools/tests/test_config_discovery.py, service/pythonpath/setuptools/tests/test_core_metadata.py, service/pythonpath/setuptools/tests/test_depends.py, service/pythonpath/setuptools/tests/test_develop.py, service/pythonpath/setuptools/tests/test_dist.py, service/pythonpath/setuptools/tests/test_dist_info.py, service/pythonpath/setuptools/tests/test_distutils_adoption.py, service/pythonpath/setuptools/tests/test_easy_install.py, service/pythonpath/setuptools/tests/test_editable_install.py, service/pythonpath/setuptools/tests/test_egg_info.py, service/pythonpath/setuptools/tests/test_extern.py, service/pythonpath/setuptools/tests/test_find_packages.py, service/pythonpath/setuptools/tests/test_find_py_modules.py, service/pythonpath/setuptools/tests/test_glob.py, service/pythonpath/setuptools/tests/test_install_scripts.py, service/pythonpath/setuptools/tests/test_logging.py, service/pythonpath/setuptools/tests/test_manifest.py, service/pythonpath/setuptools/tests/test_namespaces.py, service/pythonpath/setuptools/tests/test_packageindex.py, service/pythonpath/setuptools/tests/test_sandbox.py, service/pythonpath/setuptools/tests/test_sdist.py, service/pythonpath/setuptools/tests/test_setopt.py, service/pythonpath/setuptools/tests/test_setuptools.py, service/pythonpath/setuptools/tests/test_unicode_utils.py, service/pythonpath/setuptools/tests/test_virtualenv.py, service/pythonpath/setuptools/tests/test_warnings.py, service/pythonpath/setuptools/tests/test_wheel.py, service/pythonpath/setuptools/tests/test_windows_wrappers.py, service/pythonpath/setuptools/tests/text.py, service/pythonpath/setuptools/tests/textwrap.py, service/pythonpath/setuptools/unicode_utils.py, service/pythonpath/setuptools/version.py, service/pythonpath/setuptools/warnings.py, service/pythonpath/setuptools/wheel.py, service/pythonpath/setuptools/windows_support.py, service/pythonpath/six-1.17.0.dist-info/LICENSE, service/pythonpath/six-1.17.0.dist-info/METADATA, service/pythonpath/six-1.17.0.dist-info/RECORD, service/pythonpath/six-1.17.0.dist-info/top_level.txt, service/pythonpath/six-1.17.0.dist-info/WHEEL, service/pythonpath/six.py
diff --git a/source/HyperSQLOOo/service/OptionsHandler.py b/source/HyperSQLOOo/service/OptionsHandler.py
index 1196383d..4c413c49 100644
--- a/source/HyperSQLOOo/service/OptionsHandler.py
+++ b/source/HyperSQLOOo/service/OptionsHandler.py
@@ -77,6 +77,7 @@ def callHandlerMethod(self, window, event, method):
handled = True
return handled
except Exception as e:
+ print("OptionsHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
self._logger.logprb(SEVERE, 'OptionsHandler', 'callHandlerMethod', 301, e, traceback.format_exc())
def getSupportedMethodNames(self):
diff --git a/source/HyperSQLOOo/service/pythonpath/hypersql/option b/source/HyperSQLOOo/service/pythonpath/hypersql/option
deleted file mode 120000
index 322f3aa0..00000000
--- a/source/HyperSQLOOo/service/pythonpath/hypersql/option
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../uno/lib/uno/options/jdbc
\ No newline at end of file
diff --git a/source/HyperSQLOOo/types.rdb b/source/HyperSQLOOo/types.rdb
index 1ac3de27..cbaf2415 100644
Binary files a/source/HyperSQLOOo/types.rdb and b/source/HyperSQLOOo/types.rdb differ
diff --git a/uno/.gitrepo b/uno/.gitrepo
index d3fa444b..6dfd17e9 100644
--- a/uno/.gitrepo
+++ b/uno/.gitrepo
@@ -6,7 +6,7 @@
[subrepo]
remote = https://github.com/prrvchr/uno.git
branch = main
- commit = 66e9aea6994add573be9c1556b90c87449543a11
- parent = 1597a53409658078944bc6348a59826b01fad6d8
+ commit = c1a100b6f093ceef9aef387d4e88660e70568d3f
+ parent = 6ab23df5dd63d796e2894312422010362da34326
method = merge
cmdver = 0.4.9
diff --git a/uno/dialog/card/OptionDialog.xdl b/uno/dialog/card/OptionDialog.xdl
new file mode 100644
index 00000000..71b21e9d
--- /dev/null
+++ b/uno/dialog/card/OptionDialog.xdl
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uno/dialog/card/OptionsDialog.xdl b/uno/dialog/card/OptionsDialog.xdl
index 5da50845..573f84f8 100644
--- a/uno/dialog/card/OptionsDialog.xdl
+++ b/uno/dialog/card/OptionsDialog.xdl
@@ -24,20 +24,14 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/uno/dialog/ucb/DialogStrings_en_US.default b/uno/dialog/card/OptionsDialog_en_US.default
similarity index 100%
rename from uno/dialog/ucb/DialogStrings_en_US.default
rename to uno/dialog/card/OptionsDialog_en_US.default
diff --git a/uno/dialog/card/OptionsDialog_en_US.properties b/uno/dialog/card/OptionsDialog_en_US.properties
new file mode 100644
index 00000000..f656e782
--- /dev/null
+++ b/uno/dialog/card/OptionsDialog_en_US.properties
@@ -0,0 +1,8 @@
+OptionsDialog.HelpText=
+OptionsDialog.Title=
+OptionsDialog.Label1.HelpText=
+OptionsDialog.Label1.Label=The changes will take effect after restarting LibreOffice...
+OptionsDialog.Hyperlink1.HelpText=
+OptionsDialog.Hyperlink1.Label=You must install the Java Instrumentation Agent to use jdbcDriverOOO...
+OptionsDialog.Hyperlink1.Url=https://prrvchr.github.io/jdbcDriverOOo/#how-to-install-java-instrumentation
+
diff --git a/uno/dialog/card/OptionsDialog_fr_FR.properties b/uno/dialog/card/OptionsDialog_fr_FR.properties
new file mode 100644
index 00000000..9fcdca9f
--- /dev/null
+++ b/uno/dialog/card/OptionsDialog_fr_FR.properties
@@ -0,0 +1,8 @@
+OptionsDialog.HelpText=
+OptionsDialog.Title=
+OptionsDialog.Label1.HelpText=
+OptionsDialog.Label1.Label=Les modifications prendront effet apr\u00e8s le red\u00e9marrage de LibreOffice...
+OptionsDialog.Hyperlink1.HelpText=
+OptionsDialog.Hyperlink1.Label=Veuillez installer l'instrumentation Java pour utiliser jdbcDriverOOO...
+OptionsDialog.Hyperlink1.Url=https://prrvchr.github.io/jdbcDriverOOo/README_fr#comment-installer-linstrumentation-java
+
diff --git a/uno/dialog/dialog.dtd b/uno/dialog/dialog.dtd
new file mode 100644
index 00000000..7290b8d2
--- /dev/null
+++ b/uno/dialog/dialog.dtd
@@ -0,0 +1,426 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uno/dialog/embedded/OptionsDialog.xdl b/uno/dialog/embedded/OptionsDialog.xdl
index 3800155d..0f861bb4 100644
--- a/uno/dialog/embedded/OptionsDialog.xdl
+++ b/uno/dialog/embedded/OptionsDialog.xdl
@@ -1,4 +1,29 @@
+
@@ -7,5 +32,8 @@
+
+
+
diff --git a/uno/dialog/embedded/OptionsDialog_en_US.properties b/uno/dialog/embedded/OptionsDialog_en_US.properties
index c078b893..18ef2e71 100644
--- a/uno/dialog/embedded/OptionsDialog_en_US.properties
+++ b/uno/dialog/embedded/OptionsDialog_en_US.properties
@@ -4,3 +4,9 @@ OptionsDialog.Label1.HelpText=
OptionsDialog.Label1.Label=Driver version:
OptionsDialog.Label2.HelpText=
OptionsDialog.Label2.Label=
+OptionsDialog.Label3.HelpText=You have made changes. Restart LibreOffice for the changes to take effect
+OptionsDialog.Label3.Label=Changes will take effect after restarting LibreOffice...
+OptionsDialog.Hyperlink1.HelpText=
+OptionsDialog.Hyperlink1.Label=You must install the Java Instrumentation Agent to use jdbcDriverOOO...
+OptionsDialog.Hyperlink1.Url=https://prrvchr.github.io/jdbcDriverOOo/#how-to-install-java-instrumentation
+
diff --git a/uno/dialog/embedded/OptionsDialog_fr_FR.properties b/uno/dialog/embedded/OptionsDialog_fr_FR.properties
index 1b4de163..cc8866fc 100644
--- a/uno/dialog/embedded/OptionsDialog_fr_FR.properties
+++ b/uno/dialog/embedded/OptionsDialog_fr_FR.properties
@@ -4,3 +4,9 @@ OptionsDialog.Label1.HelpText=
OptionsDialog.Label1.Label=Version du pilote:
OptionsDialog.Label2.HelpText=
OptionsDialog.Label2.Label=
+OptionsDialog.Label3.HelpText=Vous avez effectu des modifications. Redmarrez LibreOffice pour que les modifications soient prises en compte
+OptionsDialog.Label3.Label=Les modifications prendront effet aprs le redmarrage de LibreOffice...
+OptionsDialog.Hyperlink1.HelpText=
+OptionsDialog.Hyperlink1.Label=Veuillez installer l'instrumentation Java pour utiliser jdbcDriverOOO...
+OptionsDialog.Hyperlink1.Url=https://prrvchr.github.io/jdbcDriverOOo/README_fr#comment-installer-linstrumentation-java
+
diff --git a/uno/dialog/grid/GridWindow.xdl b/uno/dialog/grid/GridWindow.xdl
index c1bb2d88..f0a2bba6 100644
--- a/uno/dialog/grid/GridWindow.xdl
+++ b/uno/dialog/grid/GridWindow.xdl
@@ -31,8 +31,9 @@
-
+
+
diff --git a/uno/dialog/grid/GridWindow_en_US.properties b/uno/dialog/grid/GridWindow_en_US.properties
index 9c3c60b4..68ffd080 100644
--- a/uno/dialog/grid/GridWindow_en_US.properties
+++ b/uno/dialog/grid/GridWindow_en_US.properties
@@ -5,4 +5,4 @@ GridWindow.CommandButton1.Label=+
GridWindow.Label1.HelpText=Columns to display
GridWindow.Label1.Label=Show columns:
GridWindow.ListBox1.HelpText=Define the name of the columns to display
-GridWindow.ListBox1.Text=
+
diff --git a/uno/dialog/grid/GridWindow_fr_FR.properties b/uno/dialog/grid/GridWindow_fr_FR.properties
index 5c5089cc..a676b2d2 100644
--- a/uno/dialog/grid/GridWindow_fr_FR.properties
+++ b/uno/dialog/grid/GridWindow_fr_FR.properties
@@ -5,4 +5,4 @@ GridWindow.CommandButton1.Label=+
GridWindow.Label1.HelpText=Colonnes \u00e0 afficher
GridWindow.Label1.Label=Afficher les colonnes:
GridWindow.ListBox1.HelpText=D\u00e9finir le nom des colonnes \u00e0 afficher
-GridWindow.ListBox1.Text=
+
diff --git a/uno/dialog/jdbc/OptionDialog.xdl b/uno/dialog/jdbc/OptionDialog.xdl
index 14f97dc9..ee070c9f 100644
--- a/uno/dialog/jdbc/OptionDialog.xdl
+++ b/uno/dialog/jdbc/OptionDialog.xdl
@@ -25,7 +25,7 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
-
+
@@ -58,6 +58,6 @@
-
+
diff --git a/uno/dialog/jdbc/OptionDialog_en_US.properties b/uno/dialog/jdbc/OptionDialog_en_US.properties
index 9071f3ee..b30760d0 100644
--- a/uno/dialog/jdbc/OptionDialog_en_US.properties
+++ b/uno/dialog/jdbc/OptionDialog_en_US.properties
@@ -10,7 +10,7 @@ OptionDialog.OptionButton2.HelpText=The delivered SDBC API level will be: com.su
OptionDialog.OptionButton2.Label=css.sdbcx
OptionDialog.OptionButton3.HelpText=The delivered SDBC API level will be: com.sun.star.sdb.*
OptionDialog.OptionButton3.Label=css.sdb
-OptionDialog.Label2.HelpText=Use javax.sql.rowset.CachedRowSet to provide ResultSet
+OptionDialog.Label2.HelpText=Use javax.sql.rowset.CachedRowSet to provide ResultSet. Using Bookmark is a prerequisite.
OptionDialog.Label2.Label=Use CachedRowSet:
OptionDialog.OptionButton4.HelpText=Never use CachedRowSet (not recommended)
OptionDialog.OptionButton4.Label=Never
@@ -20,5 +20,4 @@ OptionDialog.OptionButton6.HelpText=Always use CachedRowSet
OptionDialog.OptionButton6.Label=Always
OptionDialog.CheckBox1.HelpText=Show system tables in the Base browser
OptionDialog.CheckBox1.Label=View system tables
-OptionDialog.Label3.HelpText=You have made changes. Restart LibreOffice for the changes to take effect
-OptionDialog.Label3.Label=Changes will take effect after restarting LibreOffice...
+
diff --git a/uno/dialog/jdbc/OptionDialog_fr_FR.properties b/uno/dialog/jdbc/OptionDialog_fr_FR.properties
index 1c9de951..7a6b34e7 100644
--- a/uno/dialog/jdbc/OptionDialog_fr_FR.properties
+++ b/uno/dialog/jdbc/OptionDialog_fr_FR.properties
@@ -10,7 +10,7 @@ OptionDialog.OptionButton2.HelpText=Le niveau de l'API SDBC d
OptionDialog.OptionButton2.Label=css.sdbcx
OptionDialog.OptionButton3.HelpText=Le niveau de l'API SDBC dlivr sera: com.sun.star.sdb.*
OptionDialog.OptionButton3.Label=css.sdb
-OptionDialog.Label2.HelpText=Utilise javax.sql.rowset.CachedRowSet pour fournir les ResutSets
+OptionDialog.Label2.HelpText=Utilise javax.sql.rowset.CachedRowSet pour fournir les ResutSets. L'utilisation de signets (ie: Bookmark) est une condition pralable.
OptionDialog.Label2.Label=Utiliser CachedRowSet:
OptionDialog.OptionButton4.HelpText=Ne jamais utiliser les CachedRowSet (non conseill)
OptionDialog.OptionButton4.Label=Jamais
@@ -20,5 +20,4 @@ OptionDialog.OptionButton6.HelpText=Toujours utiliser les CachedRowSet
OptionDialog.OptionButton6.Label=Toujours
OptionDialog.CheckBox1.HelpText=Afficher les tables systmes dans le navigateur de Base
OptionDialog.CheckBox1.Label=Voir les tables systme
-OptionDialog.Label3.HelpText=Vous avez effectu des modifications. Redmarrez LibreOffice pour que les modifications soient prises en compte
-OptionDialog.Label3.Label=Les modifications prendront effet aprs le redmarrage de LibreOffice...
+
diff --git a/uno/dialog/logger/LogDialog.xdl b/uno/dialog/logger/LogDialog.xdl
index 1d7040b1..978fd93e 100644
--- a/uno/dialog/logger/LogDialog.xdl
+++ b/uno/dialog/logger/LogDialog.xdl
@@ -24,12 +24,14 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
-
+
+
diff --git a/uno/dialog/logger/LogDialog_en_US.properties b/uno/dialog/logger/LogDialog_en_US.properties
index 03fb7f46..cfd2480d 100644
--- a/uno/dialog/logger/LogDialog_en_US.properties
+++ b/uno/dialog/logger/LogDialog_en_US.properties
@@ -6,3 +6,4 @@ LogDialog.CommandButton1.HelpText=
LogDialog.CommandButton1.Label=System info
LogDialog.CommandButton2.HelpText=
LogDialog.CommandButton2.Label=Close
+
diff --git a/uno/dialog/logger/LogDialog_fr_FR.properties b/uno/dialog/logger/LogDialog_fr_FR.properties
index 793e16bb..f4e09a06 100644
--- a/uno/dialog/logger/LogDialog_fr_FR.properties
+++ b/uno/dialog/logger/LogDialog_fr_FR.properties
@@ -6,3 +6,4 @@ LogDialog.CommandButton1.HelpText=
LogDialog.CommandButton1.Label=Info systme
LogDialog.CommandButton2.HelpText=
LogDialog.CommandButton2.Label=Fermer
+
diff --git a/uno/dialog/logger/LogWindow.xdl b/uno/dialog/logger/LogWindow.xdl
index 2508a6d6..b5d450f0 100644
--- a/uno/dialog/logger/LogWindow.xdl
+++ b/uno/dialog/logger/LogWindow.xdl
@@ -24,6 +24,7 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
@@ -31,7 +32,7 @@
-
+
@@ -51,7 +52,6 @@
-
@@ -62,6 +62,8 @@
+
+
diff --git a/uno/dialog/logger/LogWindow_en_US.properties b/uno/dialog/logger/LogWindow_en_US.properties
index 68ff1f72..e24f69e6 100644
--- a/uno/dialog/logger/LogWindow_en_US.properties
+++ b/uno/dialog/logger/LogWindow_en_US.properties
@@ -5,7 +5,6 @@ LogWindow.FixedLine1.Label=Logging options
LogWindow.Label1.HelpText=
LogWindow.Label1.Label=Available logs:
LogWindow.ListBox1.HelpText=
-LogWindow.ListBox1.Text=
LogWindow.CheckBox1.HelpText=
LogWindow.CheckBox1.Label=Enable log
LogWindow.Label2.HelpText=
@@ -19,7 +18,6 @@ LogWindow.CommandButton1.Label=View log
LogWindow.Label3.HelpText=
LogWindow.Label3.Label=Level:
LogWindow.ListBox2.HelpText=
-LogWindow.ListBox2.Text=
LogWindow.ListBox2.StringItemList.0=Sever
LogWindow.ListBox2.StringItemList.1=Warning
LogWindow.ListBox2.StringItemList.2=Info
diff --git a/uno/dialog/logger/LogWindow_fr_FR.properties b/uno/dialog/logger/LogWindow_fr_FR.properties
index 68ca2564..3cb145f0 100644
--- a/uno/dialog/logger/LogWindow_fr_FR.properties
+++ b/uno/dialog/logger/LogWindow_fr_FR.properties
@@ -5,7 +5,6 @@ LogWindow.FixedLine1.Label=Options de journalisation
LogWindow.Label1.HelpText=
LogWindow.Label1.Label=Journaux disponibles:
LogWindow.ListBox1.HelpText=
-LogWindow.ListBox1.Text=
LogWindow.CheckBox1.HelpText=
LogWindow.CheckBox1.Label=Activer le journal
LogWindow.Label2.HelpText=
@@ -19,7 +18,6 @@ LogWindow.CommandButton1.Label=Voir journal
LogWindow.Label3.HelpText=
LogWindow.Label3.Label=Seuil:
LogWindow.ListBox2.HelpText=
-LogWindow.ListBox2.Text=
LogWindow.ListBox2.StringItemList.0=Grave
LogWindow.ListBox2.StringItemList.1=Alerte
LogWindow.ListBox2.StringItemList.2=Info
diff --git a/uno/dialog/ucb/DialogStrings_en_US.properties b/uno/dialog/ucb/DialogStrings_en_US.properties
deleted file mode 100644
index 744963c8..00000000
--- a/uno/dialog/ucb/DialogStrings_en_US.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-OptionsDialog.HelpText=
-OptionsDialog.Title=
-OptionsDialog.FixedLine1.HelpText=
-OptionsDialog.FixedLine1.Label=gDriveOOo settings
-OptionsDialog.Label1.HelpText=
-OptionsDialog.Label1.Label=Replication interval:
-OptionsDialog.NumericField1.HelpText=Replication interval in minutes
-OptionsDialog.Label2.HelpText=
-OptionsDialog.Label2.Label=View datasource:
-OptionsDialog.CommandButton1.HelpText=
-OptionsDialog.CommandButton1.Label=View DataBase
-
-LogWindow.HelpText=
-LogWindow.Title=
-LogWindow.FixedLine1.HelpText=
-LogWindow.FixedLine1.Label=Logger settings
-LogWindow.Label1.HelpText=
-LogWindow.Label1.Label=Available loggers:
-LogWindow.ListBox1.HelpText=
-LogWindow.ListBox1.Text=
-LogWindow.CheckBox1.HelpText=
-LogWindow.CheckBox1.Label=Enable logger
-LogWindow.Label2.HelpText=
-LogWindow.Label2.Label=Output:
-LogWindow.OptionButton1.HelpText=
-LogWindow.OptionButton1.Label=Console
-LogWindow.OptionButton2.HelpText=
-LogWindow.OptionButton2.Label=File
-LogWindow.CommandButton1.HelpText=
-LogWindow.CommandButton1.Label=View log
-LogWindow.Label3.HelpText=
-LogWindow.Label3.Label=Level:
-LogWindow.ListBox2.HelpText=
-LogWindow.ListBox2.Text=
-LogWindow.ListBox2.StringItemList.0=Sever
-LogWindow.ListBox2.StringItemList.1=Warning
-LogWindow.ListBox2.StringItemList.2=Info
-LogWindow.ListBox2.StringItemList.3=Config
-LogWindow.ListBox2.StringItemList.4=Fine
-LogWindow.ListBox2.StringItemList.5=Finer
-LogWindow.ListBox2.StringItemList.6=Finest
-LogWindow.ListBox2.StringItemList.7=All
-
-LogDialog.HelpText=
-LogDialog.Title=Log file - %s
-LogDialog.TextField1.HelpText=
-LogDialog.TextField1.Text=
-LogDialog.CommandButton1.HelpText=
-LogDialog.CommandButton1.Label=System Info
-LogDialog.CommandButton2.HelpText=
-LogDialog.CommandButton2.Label=Clear
-LogDialog.CommandButton3.HelpText=
-LogDialog.CommandButton3.Label=Close
diff --git a/uno/dialog/ucb/DialogStrings_fr_FR.properties b/uno/dialog/ucb/DialogStrings_fr_FR.properties
deleted file mode 100644
index a91d7b93..00000000
--- a/uno/dialog/ucb/DialogStrings_fr_FR.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-OptionsDialog.HelpText=
-OptionsDialog.Title=
-OptionsDialog.FixedLine1.HelpText=
-OptionsDialog.FixedLine1.Label=Options gDriveOOo
-OptionsDialog.Label1.HelpText=
-OptionsDialog.Label1.Label=Intervalle de r\u00e9plication:
-OptionsDialog.NumericField1.HelpText=Intervalle de r\u00e9plication en minutes
-OptionsDialog.Label2.HelpText=
-OptionsDialog.Label2.Label=Voir la source de donn\u00e9es:
-OptionsDialog.CommandButton1.HelpText=
-OptionsDialog.CommandButton1.Label=Voir la base de donn\u00e9es
-
-LogWindow.HelpText=
-LogWindow.Title=
-LogWindow.FixedLine1.HelpText=
-LogWindow.FixedLine1.Label=Options de journalisation
-LogWindow.Label1.HelpText=
-LogWindow.Label1.Label=Journaux disponibles:
-LogWindow.ListBox1.HelpText=
-LogWindow.ListBox1.Text=
-LogWindow.CheckBox1.HelpText=
-LogWindow.CheckBox1.Label=Activer le journal
-LogWindow.Label2.HelpText=
-LogWindow.Label2.Label=Sortie:
-LogWindow.OptionButton1.HelpText=
-LogWindow.OptionButton1.Label=Console
-LogWindow.OptionButton2.HelpText=
-LogWindow.OptionButton2.Label=Fichier
-LogWindow.CommandButton1.HelpText=
-LogWindow.CommandButton1.Label=Voir journal
-LogWindow.Label3.HelpText=
-LogWindow.Label3.Label=Seuil:
-LogWindow.ListBox2.HelpText=
-LogWindow.ListBox2.Text=
-LogWindow.ListBox2.StringItemList.0=Grave
-LogWindow.ListBox2.StringItemList.1=Alerte
-LogWindow.ListBox2.StringItemList.2=Info
-LogWindow.ListBox2.StringItemList.3=Config
-LogWindow.ListBox2.StringItemList.4=Basique
-LogWindow.ListBox2.StringItemList.5=Fin
-LogWindow.ListBox2.StringItemList.6=Tr\u00e9s fin
-LogWindow.ListBox2.StringItemList.7=Tout
-
-LogDialog.HelpText=
-LogDialog.Title=Fichier journal - %s
-LogDialog.TextField1.HelpText=
-LogDialog.TextField1.Text=
-LogDialog.CommandButton1.HelpText=
-LogDialog.CommandButton1.Label=Info syst\u00e8me
-LogDialog.CommandButton2.HelpText=
-LogDialog.CommandButton2.Label=Effacer
-LogDialog.CommandButton3.HelpText=
-LogDialog.CommandButton3.Label=Fermer
diff --git a/uno/dialog/ucb/OptionsDialog.xdl b/uno/dialog/ucb/OptionsDialog.xdl
index d9a13b34..3c8b6e4a 100644
--- a/uno/dialog/ucb/OptionsDialog.xdl
+++ b/uno/dialog/ucb/OptionsDialog.xdl
@@ -24,6 +24,7 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
+
@@ -54,7 +55,7 @@
-
+
@@ -65,8 +66,8 @@
-
-
+
+
@@ -80,22 +81,24 @@
-
-
+
+
-
-
+
+
-
+
-
+
+
-
\ No newline at end of file
+
+
diff --git a/uno/dialog/wizard/Wizard.xdl b/uno/dialog/wizard/Wizard.xdl
index d7487129..73131871 100644
--- a/uno/dialog/wizard/Wizard.xdl
+++ b/uno/dialog/wizard/Wizard.xdl
@@ -24,26 +24,24 @@
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
-->
-
-
-
-
+
+
-
-
+
-
+
-
+
-
+
-
+
+
diff --git a/uno/dialog/wizard/WizardTop.xdl b/uno/dialog/wizard/WizardTop.xdl
new file mode 100644
index 00000000..4754d9fe
--- /dev/null
+++ b/uno/dialog/wizard/WizardTop.xdl
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uno/dialog/wizard/WizardTop_en_US.default b/uno/dialog/wizard/WizardTop_en_US.default
new file mode 120000
index 00000000..3a9c45d0
--- /dev/null
+++ b/uno/dialog/wizard/WizardTop_en_US.default
@@ -0,0 +1 @@
+./Wizard_en_US.default
\ No newline at end of file
diff --git a/uno/dialog/wizard/WizardTop_en_US.properties b/uno/dialog/wizard/WizardTop_en_US.properties
new file mode 120000
index 00000000..a1fe6e0e
--- /dev/null
+++ b/uno/dialog/wizard/WizardTop_en_US.properties
@@ -0,0 +1 @@
+./Wizard_en_US.properties
\ No newline at end of file
diff --git a/uno/dialog/wizard/WizardTop_fr_FR.properties b/uno/dialog/wizard/WizardTop_fr_FR.properties
new file mode 120000
index 00000000..887d01c3
--- /dev/null
+++ b/uno/dialog/wizard/WizardTop_fr_FR.properties
@@ -0,0 +1 @@
+./Wizard_fr_FR.properties
\ No newline at end of file
diff --git a/uno/dialog/wizard/Wizard_en_US.properties b/uno/dialog/wizard/Wizard_en_US.properties
index a08f1aea..5c620869 100644
--- a/uno/dialog/wizard/Wizard_en_US.properties
+++ b/uno/dialog/wizard/Wizard_en_US.properties
@@ -1,8 +1,6 @@
Wizard.HelpText=
Wizard.Title=
Wizard.Roadmap.Text=Steps
-Wizard.FixedLine1.HelpText=
-Wizard.FixedLine1.Label=
Wizard.CommandButton5.HelpText=
Wizard.CommandButton5.Label=Help
Wizard.CommandButton4.HelpText=
@@ -13,3 +11,4 @@ Wizard.CommandButton2.HelpText=
Wizard.CommandButton2.Label=Finish
Wizard.CommandButton1.HelpText=
Wizard.CommandButton1.Label=Cancel
+
diff --git a/uno/dialog/wizard/Wizard_fr_FR.properties b/uno/dialog/wizard/Wizard_fr_FR.properties
index 4a12f9db..fc2e4bd0 100644
--- a/uno/dialog/wizard/Wizard_fr_FR.properties
+++ b/uno/dialog/wizard/Wizard_fr_FR.properties
@@ -1,8 +1,6 @@
Wizard.HelpText=
Wizard.Title=
Wizard.Roadmap.Text=\u00c9tapes
-Wizard.FixedLine1.HelpText=
-Wizard.FixedLine1.Label=
Wizard.CommandButton5.HelpText=
Wizard.CommandButton5.Label=Aide
Wizard.CommandButton4.HelpText=
@@ -13,3 +11,4 @@ Wizard.CommandButton2.HelpText=
Wizard.CommandButton2.Label=Terminer
Wizard.CommandButton1.HelpText=
Wizard.CommandButton1.Label=Annuler
+
diff --git a/uno/lib/java/UnoHelper/UnoHelper.jar b/uno/lib/java/UnoHelper/UnoHelper.jar
index 977a88f5..b5fda019 100644
Binary files a/uno/lib/java/UnoHelper/UnoHelper.jar and b/uno/lib/java/UnoHelper/UnoHelper.jar differ
diff --git a/uno/lib/python/pyRdfa/extras/httpheader.py b/uno/lib/python/pyRdfa/extras/httpheader.py
index 7a81a263..e43b1207 100644
--- a/uno/lib/python/pyRdfa/extras/httpheader.py
+++ b/uno/lib/python/pyRdfa/extras/httpheader.py
@@ -344,7 +344,7 @@ def parse_quoted_string(s, start=0):
"""Parses a quoted string.
Returns a tuple (string, chars_consumed). The quote marks will
- have been removed and all \-escapes will have been replaced with
+ have been removed and all \\-escapes will have been replaced with
the characters they represent.
"""
@@ -356,7 +356,7 @@ def parse_token_or_quoted_string(s, start=0, allow_quoted=True, allow_token=True
's' is the string to parse, while start is the position within the
string where parsing should begin. It will returns a tuple
- (token, chars_consumed), with all \-escapes and quotation already
+ (token, chars_consumed), with all \\-escapes and quotation already
processed.
Syntax is according to BNF rules in RFC 2161 section 2.2,
@@ -522,7 +522,7 @@ def parse_comment(s, start=0):
nested comments will still have their parentheses and whitespace
left intact.
- All \-escaped quoted pairs will have been replaced with the actual
+ All \\-escaped quoted pairs will have been replaced with the actual
characters they represent, even within the inner nested comments.
You should note that only a few HTTP headers, such as User-Agent
diff --git a/uno/lib/python/pyRdfa3-3.6.4.dist-info/LICENSE b/uno/lib/python/pyRdfa3-3.6.5.dist-info/LICENSE
similarity index 100%
rename from uno/lib/python/pyRdfa3-3.6.4.dist-info/LICENSE
rename to uno/lib/python/pyRdfa3-3.6.5.dist-info/LICENSE
diff --git a/uno/lib/python/pyRdfa3-3.6.4.dist-info/METADATA b/uno/lib/python/pyRdfa3-3.6.5.dist-info/METADATA
similarity index 94%
rename from uno/lib/python/pyRdfa3-3.6.4.dist-info/METADATA
rename to uno/lib/python/pyRdfa3-3.6.5.dist-info/METADATA
index c86833e1..ff2ca97b 100644
--- a/uno/lib/python/pyRdfa3-3.6.4.dist-info/METADATA
+++ b/uno/lib/python/pyRdfa3-3.6.5.dist-info/METADATA
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: pyRdfa3
-Version: 3.6.4
+Version: 3.6.5
Summary: pyRdfa distiller/parser library
Author-email: Ivan Herman & prrvchr
Project-URL: Homepage, https://prrvchr.github.io/pyrdfa3/
@@ -11,9 +11,9 @@ Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
-Requires-Dist: requests >=2.32.3
-Requires-Dist: rdflib >=7.0.0
-Requires-Dist: html5lib >=1.1
+Requires-Dist: requests (>=2.32.3)
+Requires-Dist: rdflib (>=7.0.0)
+Requires-Dist: html5lib (>=1.1)
[](http://dx.doi.org/10.5281/zenodo.14547)
@@ -21,7 +21,7 @@ Requires-Dist: html5lib >=1.1
> **Note:** since I retired a few months ago I do not really maintain this package any more. I would be more than happy if an interested party was interested to take over. In the meantime, I have "archived" the repository to clearly signal that there is no maintenance. I would be happy to unarchive it and transfer ownership if someone is interested.
> [@iherman](https://github.com/iherman)
-> **This new version 3.6.4 is now built and maintained on [prrvchr.github.io/pyrdfa3][1]**
+> **This new version 3.6.5 is now built and maintained on [prrvchr.github.io/pyrdfa3][1]**
The package can be installed from [PyPI][2] with command:
diff --git a/uno/lib/python/pyRdfa3-3.6.4.dist-info/RECORD b/uno/lib/python/pyRdfa3-3.6.5.dist-info/RECORD
similarity index 81%
rename from uno/lib/python/pyRdfa3-3.6.4.dist-info/RECORD
rename to uno/lib/python/pyRdfa3-3.6.5.dist-info/RECORD
index 6a5cbf20..a41c40d4 100644
--- a/uno/lib/python/pyRdfa3-3.6.4.dist-info/RECORD
+++ b/uno/lib/python/pyRdfa3-3.6.5.dist-info/RECORD
@@ -9,7 +9,7 @@ pyRdfa/state.py,sha256=gbD41iGy-zJ7edkLmYFAPCAwC0VeUez38eXGF-RIQoM,24502
pyRdfa/termorcurie.py,sha256=M0ocu76xb1fTG6xGR5GAlfmK5aulVzBViBIIUUUzCBc,23387
pyRdfa/utils.py,sha256=apkz3UBF9zyObsnIadl2i6sm6ORzZA7xnuBSCCQBcPc,10229
pyRdfa/extras/__init__.py,sha256=ewApVDdXUYUQJiq-fpZBZ0ZO6OCIifz4kThymF8sCKs,105
-pyRdfa/extras/httpheader.py,sha256=D8DzCGmv6wEufJs1yg1d7ubDY2NY7rxF4XIeaUN8_g8,70183
+pyRdfa/extras/httpheader.py,sha256=fdn_P1zdAGLPR43VZ9rxeVxC1UVz2qDHBmlQ-jN1bsk,70186
pyRdfa/host/__init__.py,sha256=M0YxNcG3LGmj6aUf8QyCbbFi61UddyitcqYV9BmwvZY,10493
pyRdfa/host/atom.py,sha256=eO3kHFL3sIELeMp1EGZGbhhY9D45R9WfoFlyEQvBg0w,1141
pyRdfa/host/html5.py,sha256=aso2SDUvcOaCEM1wK1n-TRZB0YvwKx5jscbYKv1a94A,8241
@@ -22,8 +22,8 @@ pyRdfa/transform/__init__.py,sha256=rdLhZQSfv5K8zt4km8p1x7WIrjfcgJ6dqyGgIabgVRc,
pyRdfa/transform/lite.py,sha256=0dI11FWNOJo7gYFwEDNuegXg9UZexuA5IoRCmXw2K1s,3478
pyRdfa/transform/metaname.py,sha256=3zB5M3jSyyQx1D3n_AUdVsFyjYShy938PzKVOFR3rIM,1153
pyRdfa/transform/prototype.py,sha256=eH8Bub1iIZ1SUu9FsskHmKtGKDJy0wWq3B9WhxqIevY,1328
-pyRdfa3-3.6.4.dist-info/LICENSE,sha256=GOjCqSTUS9_c4wVdtwvU3n-tfx1g3ylFh1WmS8sEdm8,1901
-pyRdfa3-3.6.4.dist-info/METADATA,sha256=dSqs6Fbnl9oggoWS5UVWCgxpGwEWe2UTh2K4FMt7IXk,3369
-pyRdfa3-3.6.4.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
-pyRdfa3-3.6.4.dist-info/top_level.txt,sha256=NhGN9_N-teibyYvfbpX1aDUW7al6WiIPLTdEjpWUII4,7
-pyRdfa3-3.6.4.dist-info/RECORD,,
+pyRdfa3-3.6.5.dist-info/LICENSE,sha256=GOjCqSTUS9_c4wVdtwvU3n-tfx1g3ylFh1WmS8sEdm8,1901
+pyRdfa3-3.6.5.dist-info/METADATA,sha256=P2PhrqeYHeGPp26cr-RG8tof1UWoSjReXiBOQgjL80s,3375
+pyRdfa3-3.6.5.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
+pyRdfa3-3.6.5.dist-info/top_level.txt,sha256=NhGN9_N-teibyYvfbpX1aDUW7al6WiIPLTdEjpWUII4,7
+pyRdfa3-3.6.5.dist-info/RECORD,,
diff --git a/uno/lib/python/pyRdfa3-3.6.4.dist-info/WHEEL b/uno/lib/python/pyRdfa3-3.6.5.dist-info/WHEEL
similarity index 65%
rename from uno/lib/python/pyRdfa3-3.6.4.dist-info/WHEEL
rename to uno/lib/python/pyRdfa3-3.6.5.dist-info/WHEEL
index ecaf39f3..9b78c445 100644
--- a/uno/lib/python/pyRdfa3-3.6.4.dist-info/WHEEL
+++ b/uno/lib/python/pyRdfa3-3.6.5.dist-info/WHEEL
@@ -1,5 +1,5 @@
Wheel-Version: 1.0
-Generator: setuptools (71.1.0)
+Generator: setuptools (75.3.0)
Root-Is-Purelib: true
Tag: py3-none-any
diff --git a/uno/lib/python/pyRdfa3-3.6.4.dist-info/top_level.txt b/uno/lib/python/pyRdfa3-3.6.5.dist-info/top_level.txt
similarity index 100%
rename from uno/lib/python/pyRdfa3-3.6.4.dist-info/top_level.txt
rename to uno/lib/python/pyRdfa3-3.6.5.dist-info/top_level.txt
diff --git a/uno/lib/uno/card/datasource.py b/uno/lib/uno/card/datasource.py
index 72bdfc99..789edbfc 100644
--- a/uno/lib/uno/card/datasource.py
+++ b/uno/lib/uno/card/datasource.py
@@ -30,6 +30,8 @@
from com.sun.star.logging.LogLevel import INFO
from com.sun.star.logging.LogLevel import SEVERE
+from com.sun.star.uno import Exception as UnoException
+
from .database import DataBase
from .provider import Provider
@@ -45,6 +47,7 @@
from .helper import getSqlException
+from .configuration import g_extension
from threading import Event
@@ -87,22 +90,29 @@ def closeConnection(self, connection):
# Procedures called by Driver
def getConnection(self, source, logger, url, scheme, server, account, password=''):
+ mtd = 'getConnection'
uri = self._provider.getUserUri(server, account)
if uri in self._maps:
name = self._maps.get(uri)
user = self._users.get(name)
if not user.Request.isAuthorized():
- cls, mtd = 'DataSource', 'getConnection()'
- raise getSqlException(self._ctx, source, 1002, 1401, cls, mtd, name)
+ raise getSqlException(self._ctx, source, 1002, 1401, self._cls, mtd, name, g_extension)
else:
user = User(self._ctx, source, logger, self._database,
self._provider, url, scheme, server, account, password)
name = user.getName()
- self._users[name] = user
- self._maps[uri] = name
if user.isOnLine():
- self._provider.initAddressbooks(self._database, user)
+ try:
+ self._provider.initAddressbooks(self._database, user)
+ except UnoException as ex:
+ e = getSqlException(self._ctx, source, 1001, 1402, self._cls, mtd, name, g_extension)
+ e.NextException = ex
+ raise e
connection = self._database.getConnection(name, user.getPassword())
+ # XXX: New users are cached only if the connection is successful.
+ if not uri in self._maps:
+ self._users[name] = user
+ self._maps[uri] = name
user.addSession(self._database.getSessionId(connection))
# User and/or AddressBooks has been initialized and the connection to the database is done...
# We can start the database replication in a background task.
diff --git a/uno/lib/uno/card/resource/Driver_en_US.properties b/uno/lib/uno/card/resource/Driver_en_US.properties
index 06c3f67e..87b2ab9e 100644
--- a/uno/lib/uno/card/resource/Driver_en_US.properties
+++ b/uno/lib/uno/card/resource/Driver_en_US.properties
@@ -47,6 +47,7 @@
1400=DataSource.getConnection()
1401=The user {} has abandoned the OAuth2 authorization wizard, the {} extension cannot continue without this authorization!!!
+1402=The user {} cannot connect, the {} extension cannot continue without connection!!!
1500=User.__init__()
diff --git a/uno/lib/uno/card/resource/Driver_fr_FR.properties b/uno/lib/uno/card/resource/Driver_fr_FR.properties
index 3a578563..a40d95bd 100644
--- a/uno/lib/uno/card/resource/Driver_fr_FR.properties
+++ b/uno/lib/uno/card/resource/Driver_fr_FR.properties
@@ -47,6 +47,7 @@
1400=DataSource.getConnection()
1401=L'utilisateur {} a abandonn l'assistant d'autorisation OAuth2, l'extension {} ne peut pas continuer sans cette autorisation!!!
+1402=L'utilisateur {} ne peut pas se connecter, l'extension {} ne peut pas continuer sans connexion!!!
1500=User.__init__()
diff --git a/uno/lib/uno/component-schema.dtd b/uno/lib/uno/component-schema.dtd
new file mode 100644
index 00000000..70bd51bf
--- /dev/null
+++ b/uno/lib/uno/component-schema.dtd
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uno/lib/uno/component-update.dtd b/uno/lib/uno/component-update.dtd
new file mode 100644
index 00000000..0659e412
--- /dev/null
+++ b/uno/lib/uno/component-update.dtd
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uno/lib/uno/dbtool/__init__.py b/uno/lib/uno/dbtool/__init__.py
index 41dbed8b..a5ca8616 100644
--- a/uno/lib/uno/dbtool/__init__.py
+++ b/uno/lib/uno/dbtool/__init__.py
@@ -61,6 +61,7 @@
from .dbtool import getDateTimeFromString
from .dbtool import getDateTimeToString
from .dbtool import getDictFromResult
+from .dbtool import getDictSequenceFromResult
from .dbtool import getDriverInfos
from .dbtool import getDriverPropertyInfo
from .dbtool import getDriverPropertyInfos
diff --git a/uno/lib/uno/dbtool/dbtool.py b/uno/lib/uno/dbtool/dbtool.py
index 62b3043c..6f75a0b1 100644
--- a/uno/lib/uno/dbtool/dbtool.py
+++ b/uno/lib/uno/dbtool/dbtool.py
@@ -303,6 +303,14 @@ def getRowDict(result, default=None, count=None):
row[name] = value
return row
+def getDictSequenceFromResult(result, default=None):
+ sequence = []
+ count = result.MetaData.ColumnCount +1
+ while result.next():
+ data = getRowDict(result, default, count)
+ sequence.append(data)
+ return tuple(sequence)
+
def getObjectFromResult(result, default=None, count=None):
obj = Object()
if count is None:
diff --git a/uno/lib/uno/grid/__init__.py b/uno/lib/uno/grid/__init__.py
index 261096be..8a211532 100644
--- a/uno/lib/uno/grid/__init__.py
+++ b/uno/lib/uno/grid/__init__.py
@@ -31,5 +31,6 @@
from .gridmodel import GridModel
-from .gridhandler import GridListener
+from .gridhandler import GridDataListener
+from .gridhandler import GridSelectionListener
diff --git a/uno/lib/uno/grid/gridhandler.py b/uno/lib/uno/grid/gridhandler.py
index 509e7491..d1426cdf 100644
--- a/uno/lib/uno/grid/gridhandler.py
+++ b/uno/lib/uno/grid/gridhandler.py
@@ -30,6 +30,7 @@
import unohelper
from com.sun.star.awt import XContainerWindowEventHandler
+from com.sun.star.awt.grid import XGridDataListener
from com.sun.star.awt.grid import XGridSelectionListener
import traceback
@@ -51,17 +52,44 @@ def callHandlerMethod(self, window, event, method):
self._manager.setColumn(event.Source.getSelectedItemPos())
handled = True
return handled
- except Exception as e:
- msg = "Error: %s" % traceback.format_exc()
- print(msg)
+ except:
+ print("WindowHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
def getSupportedMethodNames(self):
return ('ShowColumns',
'SetColumn')
-class GridListener(unohelper.Base,
- XGridSelectionListener):
+class GridDataListener(unohelper.Base,
+ XGridDataListener):
+ def __init__(self, manager):
+ self._manager = manager
+
+ # XGridDataListener
+ def rowsInserted(self, event):
+ try:
+ self._manager.dataGridChanged()
+ except:
+ print("GridDataListener.rowsInserted() ERROR: %s" % traceback.format_exc())
+
+ def rowsRemoved(self, event):
+ try:
+ self._manager.dataGridChanged()
+ except:
+ print("GridDataListener.rowsRemoved() ERROR: %s" % traceback.format_exc())
+
+ def dataChanged(self, event):
+ pass
+
+ def rowHeadingChanged(self, event):
+ pass
+
+ def disposing(self, event):
+ pass
+
+
+class GridSelectionListener(unohelper.Base,
+ XGridSelectionListener):
def __init__(self, manager, grid=1):
self._manager = manager
self._grid = grid
@@ -72,9 +100,8 @@ def selectionChanged(self, event):
control = event.Source
index = control.getSelectedRows()[-1] if control.hasSelectedRows() else -1
self._manager.changeGridSelection(index, self._grid)
- except Exception as e:
- msg = "Error: %s" % traceback.format_exc()
- print(msg)
+ except:
+ print("GridSelectionListener.selectionChanged() ERROR: %s" % traceback.format_exc())
def disposing(self, event):
pass
diff --git a/uno/lib/uno/grid/gridmanager.py b/uno/lib/uno/grid/gridmanager.py
index 2c48bf7d..a972aacf 100644
--- a/uno/lib/uno/grid/gridmanager.py
+++ b/uno/lib/uno/grid/gridmanager.py
@@ -37,11 +37,11 @@
from .gridhandler import WindowHandler
-from ..unotool import createService
-from ..unotool import getConfiguration
-from ..unotool import getPropertyValue
+from ...unotool import createService
+from ...unotool import getConfiguration
+from ...unotool import getPropertyValue
-from ..configuration import g_identifier
+from ...configuration import g_identifier
import json
from collections import OrderedDict
@@ -49,8 +49,7 @@
class GridManager():
- def __init__(self, ctx, url, model, window, quote, setting, selection, resources=None, maxi=None, multi=False, factor=5):
- self._quote = quote
+ def __init__(self, ctx, url, model, window, setting, selection, resources=None, maxi=None, multi=False, factor=5):
self._factor = factor
self._datasource = None
self._table = None
@@ -101,10 +100,9 @@ def getSelectedRows(self):
def getSelectedColumn(self, column):
value = None
- if self._view.hasSelectedRows() and column in self._headers:
- index = tuple(self._headers.keys()).index(column)
- row = self.getUnsortedIndex(self._view.getSelectedRow())
- value = self._model.getCellData(index, row)
+ if self._view.hasSelectedRows():
+ row = self._view.getSelectedRow()
+ value = self._getColumnValue(row, column)
return value
def getSelectedIdentifier(self, identifier):
@@ -113,11 +111,24 @@ def getSelectedIdentifier(self, identifier):
value = self._getRowValue(identifier, self.getUnsortedIndex(self._view.getSelectedRow()))
return value
- def getGridFilters(self):
- filters = []
+ def getSelectedIdentifiers(self, identifier):
+ values = []
+ if self._view.hasSelectedRows():
+ for row in self._view.getSelectedRows():
+ values.append(self._getRowValue(identifier, self.getUnsortedIndex(row)))
+ return tuple(values)
+
+ def getGridData(self, columns, quote, default=None):
+ values = {}
for row in (range(self._model.RowCount)):
- filters.append(self._getRowFilter(row))
- return tuple(filters)
+ filter = self._getRowFilter(row, quote)
+ for column in columns:
+ if column in self._headers:
+ value = self._getColumnValue(row, column, default)
+ if value:
+ values[filter] = value
+ break
+ return values
def getSelectedStructuredFilters(self):
filters = []
@@ -125,10 +136,22 @@ def getSelectedStructuredFilters(self):
filters.append(self._getRowStructuredFilter(row))
return tuple(filters)
- def _getRowFilter(self, row):
+ def getRowPredicates(self, row):
+ predicates = []
+ for identifier in self._indexes:
+ predicates.append(self._getRowValue(identifier, row))
+ return tuple(predicates)
+
+ def _getColumnValue(self, row, column, value=None):
+ if column in self._headers:
+ keys = tuple(self._headers.keys())
+ value = self._model.getCellData(keys.index(column), self.getUnsortedIndex(row))
+ return value
+
+ def _getRowFilter(self, row, quote):
filters = []
for identifier in self._indexes:
- column = self._getQuotedIdentifier(identifier)
+ column = self._getQuotedIdentifier(identifier, quote)
value = self._getQuotedValue(identifier, row)
filter = '%s = %s' % (column, value)
filters.append(filter)
@@ -151,15 +174,14 @@ def _getQuotedValue(self, identifier, row):
value = "%s" % value
return value
- def _getQuotedIdentifier(self, identifier):
- return "%s%s%s" % (self._quote, identifier, self._quote)
+ def _getQuotedIdentifier(self, identifier, quote):
+ return quote + identifier + quote
def _getRowValue(self, identifier, row):
return self._model.getCellData(self._indexes[identifier], row)
# GridManager setter methods
def dispose(self):
- self.saveColumnSettings()
self.Column.dispose()
self.Model.dispose()
@@ -172,6 +194,12 @@ def addSelectionListener(self, listener):
def removeSelectionListener(self, listener):
self._view.getGrid().removeSelectionListener(listener)
+ def addGridDataListener(self, listener):
+ self._model.addGridDataListener(listener)
+
+ def removeGridDataListener(self, listener):
+ self._model.removeGridDataListener(listener)
+
def showColumns(self, state):
self._view.showColumns(state)
diff --git a/uno/lib/uno/grid/gridmodel.py b/uno/lib/uno/grid/gridmodel.py
index 2b3e05f8..94c863d2 100644
--- a/uno/lib/uno/grid/gridmodel.py
+++ b/uno/lib/uno/grid/gridmodel.py
@@ -32,7 +32,7 @@
from com.sun.star.awt.grid import XMutableGridDataModel
-from ..unotool import hasInterface
+from ...unotool import hasInterface
import traceback
diff --git a/uno/lib/uno/grid/gridview.py b/uno/lib/uno/grid/gridview.py
index ebe2e52f..c6750298 100644
--- a/uno/lib/uno/grid/gridview.py
+++ b/uno/lib/uno/grid/gridview.py
@@ -31,9 +31,9 @@
from com.sun.star.view.SelectionType import MULTI
-from ..unotool import getContainerWindow
+from ...unotool import getContainerWindow
-from ..configuration import g_identifier
+from ...configuration import g_identifier
class GridView(unohelper.Base):
diff --git a/uno/lib/uno/jdbcdriver/__init__.py b/uno/lib/uno/jdbcdriver/__init__.py
index 30efb5d2..badde637 100644
--- a/uno/lib/uno/jdbcdriver/__init__.py
+++ b/uno/lib/uno/jdbcdriver/__init__.py
@@ -27,8 +27,11 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
+from .jdbctool import isInstrumented
+
from .configuration import g_extension
from .configuration import g_identifier
from .configuration import g_service
from .configuration import g_services
from .configuration import g_version
+
diff --git a/uno/lib/uno/jdbcdriver/configuration.py b/uno/lib/uno/jdbcdriver/configuration.py
index 7650d1ea..149e3931 100644
--- a/uno/lib/uno/jdbcdriver/configuration.py
+++ b/uno/lib/uno/jdbcdriver/configuration.py
@@ -34,4 +34,12 @@
g_services = ('io.github.prrvchr.jdbcdriver.sdbc.Driver',
'io.github.prrvchr.jdbcdriver.sdbcx.Driver',
'io.github.prrvchr.jdbcdriver.sdb.Driver')
-g_version = '1.5.4'
+g_version = '1.6.1'
+g_instrumented = 'SupportsInstrumentationAgent'
+
+# jdbcDriverOOo special configuration
+g_resource = 'resource'
+g_basename = 'Driver'
+g_defaultlog = 'Driver'
+g_errorlog = 'jdbcDriverError'
+
diff --git a/uno/lib/uno/jdbcdriver/jdbctool.py b/uno/lib/uno/jdbcdriver/jdbctool.py
new file mode 100644
index 00000000..99b0cb17
--- /dev/null
+++ b/uno/lib/uno/jdbcdriver/jdbctool.py
@@ -0,0 +1,47 @@
+#!
+# -*- coding: utf-8 -*-
+
+"""
+╔════════════════════════════════════════════════════════════════════════════════════╗
+║ ║
+║ Copyright (c) 2020-25 https://prrvchr.github.io ║
+║ ║
+║ Permission is hereby granted, free of charge, to any person obtaining ║
+║ a copy of this software and associated documentation files (the "Software"), ║
+║ to deal in the Software without restriction, including without limitation ║
+║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║
+║ and/or sell copies of the Software, and to permit persons to whom the Software ║
+║ is furnished to do so, subject to the following conditions: ║
+║ ║
+║ The above copyright notice and this permission notice shall be included in ║
+║ all copies or substantial portions of the Software. ║
+║ ║
+║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║
+║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║
+║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║
+║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║
+║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║
+║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║
+║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
+║ ║
+╚════════════════════════════════════════════════════════════════════════════════════╝
+"""
+
+from ..unotool import createService
+from ..unotool import getPropertyValueSet
+
+from .configuration import g_instrumented
+from .configuration import g_service
+
+
+def isInstrumented(ctx, url):
+ support = False
+ driver = createService(ctx, g_service)
+ if driver:
+ properties = getPropertyValueSet({g_instrumented: True})
+ for info in driver.getPropertyInfo(url, properties):
+ if info.Name == g_instrumented:
+ support = info.Value != 'false'
+ break
+ return support
+
diff --git a/uno/lib/uno/library.dtd b/uno/lib/uno/library.dtd
new file mode 100644
index 00000000..c0341ed5
--- /dev/null
+++ b/uno/lib/uno/library.dtd
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
diff --git a/uno/lib/uno/logger/dialog/loghandler.py b/uno/lib/uno/logger/dialog/loghandler.py
index 343510f1..63073747 100644
--- a/uno/lib/uno/logger/dialog/loghandler.py
+++ b/uno/lib/uno/logger/dialog/loghandler.py
@@ -65,8 +65,8 @@ def callHandlerMethod(self, dialog, event, method):
self._manager.setLevel(event.Source.getSelectedItemPos())
handled = True
return handled
- except Exception as e:
- print("ERROR: %s - %s" % (e, traceback.format_exc()))
+ except:
+ print("WindowHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
def getSupportedMethodNames(self):
return ('SetLogger',
@@ -90,9 +90,8 @@ def callHandlerMethod(self, dialog, event, method):
self._manager.logInfos()
handled = True
return handled
- except Exception as e:
- msg = f"Error: {traceback.format_exc()}"
- print(msg)
+ except:
+ print("DialogHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
def getSupportedMethodNames(self):
return ('LogInfo', )
@@ -107,9 +106,8 @@ def __init__(self, manager):
def modified(self, event):
try:
self._manager.updateLogger()
- except Exception as e:
- msg = f"Error: {traceback.format_exc()}"
- print(msg)
+ except:
+ print("LoggerListener.modified() ERROR: %s" % traceback.format_exc())
def disposing(self, event):
pass
@@ -123,11 +121,9 @@ def __init__(self, manager):
# XModifyListener
def modified(self, event):
try:
- print("PoolListener.modified()")
self._manager.updateLoggers()
- except Exception as e:
- msg = f"Error: {traceback.format_exc()}"
- print(msg)
+ except:
+ print("PoolListener.modified() ERROR: %s" % traceback.format_exc())
def disposing(self, event):
pass
diff --git a/uno/lib/uno/logger/dialog/logmodel.py b/uno/lib/uno/logger/dialog/logmodel.py
index 4cfd975b..44303128 100644
--- a/uno/lib/uno/logger/dialog/logmodel.py
+++ b/uno/lib/uno/logger/dialog/logmodel.py
@@ -56,7 +56,7 @@
from packaging.requirements import Requirement
from importlib import metadata
-import distutils.sysconfig as ds
+import sysconfig
import pkg_resources as pkgr
import os, sys
import traceback
@@ -140,7 +140,7 @@ def logInfos(self, level, clazz, method, requirements):
else:
msg = self._resolver.resolveString(123).format(sys.executable)
self._logger.logp(level, clazz, method, msg)
- msg = self._resolver.resolveString(124).format(ds.get_config_var('EXT_SUFFIX'))
+ msg = self._resolver.resolveString(124).format(sysconfig.get_config_var('EXT_SUFFIX'))
self._logger.logp(level, clazz, method, msg)
msg = self._resolver.resolveString(125).format(os.pathsep.join(sys.path))
self._logger.logp(level, clazz, method, msg)
diff --git a/uno/lib/uno/logger/logcontroller.py b/uno/lib/uno/logger/logcontroller.py
index 50a896f6..5b910124 100644
--- a/uno/lib/uno/logger/logcontroller.py
+++ b/uno/lib/uno/logger/logcontroller.py
@@ -27,6 +27,8 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
+import uno
+
from com.sun.star.logging.LogLevel import SEVERE
from .logwrapper import LogWrapper
@@ -50,7 +52,8 @@ def __init__(self, ctx, name, basename=g_basename, listener=None):
self._listener = listener
self._setting = None
self._config = LogConfig(ctx)
- if listener is not None:
+ self._handler = None
+ if listener:
self._logger.addModifyListener(listener)
# Public getter method
@@ -62,17 +65,26 @@ def dispose(self):
if self._listener is not None:
self._logger.removeModifyListener(self._listener)
+ def addRollerHandler(self, handler=None):
+ if handler is None:
+ handler = RollerHandler(self._ctx, self.Name)
+ super().addRollerHandler(handler)
+ self._handler = handler
+ if self._listener:
+ event = uno.createUnoStruct('com.sun.star.lang.EventObject', self._logger)
+ self._listener.modified(event)
+
+ def removeRollerHandler(self, handler=None):
+ if handler is None:
+ handler = self._handler
+ super().removeRollerHandler(handler)
+
def clearLogger(self):
- url = getRollerHandlerUrl(self._ctx, self.Name)
- sf = getSimpleFile(self._ctx)
- if sf.exists(url):
- sf.kill(url)
+ if self._handler:
+ self._handler.clearLogger()
resolver = getStringResourceWithLocation(self._ctx, self._url, 'Logger')
msg = resolver.resolveString(111)
- handler = RollerHandler(self._ctx, self.Name)
- self.addRollerHandler(handler)
self._logger.logp(SEVERE, 'Logger', 'clearLogger', msg)
- self.removeRollerHandler(handler)
def addModifyListener(self, listener):
self._logger.addModifyListener(listener)
diff --git a/uno/lib/uno/logger/loghandler.py b/uno/lib/uno/logger/loghandler.py
index f537bfa3..c426f421 100644
--- a/uno/lib/uno/logger/loghandler.py
+++ b/uno/lib/uno/logger/loghandler.py
@@ -108,6 +108,10 @@ def removeEventListener(self, listener):
if listener in self._listeners:
self._listeners.remove(listener)
+ def clearLogger(self):
+ if self._sf.exists(self._url):
+ self._sf.kill(self._url)
+
def _publishRecord(self, record):
if not self._sf.exists(self._url):
msg = self._formatter.getHead()
diff --git a/uno/lib/uno/module.dtd b/uno/lib/uno/module.dtd
new file mode 100644
index 00000000..b77d62f4
--- /dev/null
+++ b/uno/lib/uno/module.dtd
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/uno/lib/uno/oauth20/__init__.py b/uno/lib/uno/oauth20/__init__.py
index 87c7eb48..721859f2 100644
--- a/uno/lib/uno/oauth20/__init__.py
+++ b/uno/lib/uno/oauth20/__init__.py
@@ -32,7 +32,6 @@
from .oauth2lib import NoOAuth2
from .oauth2lib import OAuth2OOo
-from .oauth2tool import getOAuth2
from .oauth2tool import getOAuth2Version
from .oauth2tool import getParserItems
from .oauth2tool import getRequest
diff --git a/uno/lib/uno/oauth20/configuration.py b/uno/lib/uno/oauth20/configuration.py
index 1574f4ea..6c9ecd8e 100644
--- a/uno/lib/uno/oauth20/configuration.py
+++ b/uno/lib/uno/oauth20/configuration.py
@@ -33,7 +33,7 @@
g_service = '%s.OAuth2Service' % g_identifier
g_resource = 'resource'
-g_version = '1.5.2'
+g_version = '1.6.1'
g_chunk = g_chunk = 320 * 1024
g_token = 'Bearer ${AccessToken}'
diff --git a/uno/lib/uno/oauth20/oauth2core.py b/uno/lib/uno/oauth20/oauth2core.py
index 19e8762b..463c03d5 100644
--- a/uno/lib/uno/oauth20/oauth2core.py
+++ b/uno/lib/uno/oauth20/oauth2core.py
@@ -27,23 +27,28 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
+from ..unotool import getPropertyValueSet
from ..unotool import getInteractionHandler
from .oauth2lib import InteractionRequest
-def getOAuth2UserName(ctx, source, url, message=''):
+def getOAuth2UserName(ctx, source, url, message='', parent=None, context=''):
username = ''
handler = getInteractionHandler(ctx)
+ if parent:
+ handler.initialize(getPropertyValueSet({'Parent': parent, 'Context': context}))
interaction = InteractionRequest(source, url, '', '', message)
if handler.handleInteractionRequest(interaction):
continuation = interaction.getContinuations()[-1]
username = continuation.getUserName()
return username
-def getOAuth2Token(ctx, source, url, user, format=''):
+def getOAuth2Token(ctx, source, url, user, format='', parent=None, context=''):
token = ''
handler = getInteractionHandler(ctx)
+ if parent:
+ handler.initialize(getPropertyValueSet({'Parent': parent, 'Context': context}))
interaction = InteractionRequest(source, url, user, format, '')
if handler.handleInteractionRequest(interaction):
continuation = interaction.getContinuations()[-1]
diff --git a/uno/lib/uno/oauth20/oauth2tool.py b/uno/lib/uno/oauth20/oauth2tool.py
index 65c15a59..9d594b87 100644
--- a/uno/lib/uno/oauth20/oauth2tool.py
+++ b/uno/lib/uno/oauth20/oauth2tool.py
@@ -51,13 +51,6 @@ def getRequest(ctx, url=None, name=None):
request = createService(ctx, g_service)
return request
-def getOAuth2(ctx, url='', name=''):
- if url and name:
- oauth2 = createService(ctx, g_service, url, name)
- else:
- oauth2 = createService(ctx, g_service)
- return oauth2
-
def getOAuth2Version(ctx):
version = getExtensionVersion(ctx, g_identifier)
return version
diff --git a/uno/lib/uno/options/addressbook/__init__.py b/uno/lib/uno/options/addressbook/__init__.py
index c2eddf4f..f6f7a27b 100644
--- a/uno/lib/uno/options/addressbook/__init__.py
+++ b/uno/lib/uno/options/addressbook/__init__.py
@@ -28,3 +28,4 @@
"""
from .optionsmanager import OptionsManager
+
diff --git a/uno/lib/uno/options/addressbook/optionshandler.py b/uno/lib/uno/options/addressbook/optionshandler.py
new file mode 100644
index 00000000..e8e38c75
--- /dev/null
+++ b/uno/lib/uno/options/addressbook/optionshandler.py
@@ -0,0 +1,55 @@
+#!
+# -*- coding: utf-8 -*-
+
+"""
+╔════════════════════════════════════════════════════════════════════════════════════╗
+║ ║
+║ Copyright (c) 2020-25 https://prrvchr.github.io ║
+║ ║
+║ Permission is hereby granted, free of charge, to any person obtaining ║
+║ a copy of this software and associated documentation files (the "Software"), ║
+║ to deal in the Software without restriction, including without limitation ║
+║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║
+║ and/or sell copies of the Software, and to permit persons to whom the Software ║
+║ is furnished to do so, subject to the following conditions: ║
+║ ║
+║ The above copyright notice and this permission notice shall be included in ║
+║ all copies or substantial portions of the Software. ║
+║ ║
+║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║
+║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║
+║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║
+║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║
+║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║
+║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║
+║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
+║ ║
+╚════════════════════════════════════════════════════════════════════════════════════╝
+"""
+
+import unohelper
+
+from com.sun.star.awt import XContainerWindowEventHandler
+
+import traceback
+
+
+class WindowHandler(unohelper.Base,
+ XContainerWindowEventHandler):
+ def __init__(self, manager):
+ self._manager = manager
+
+ # XContainerWindowEventHandler
+ def callHandlerMethod(self, window, event, method):
+ try:
+ handled = False
+ if method == 'ViewData':
+ self._manager.viewData()
+ handled = True
+ return handled
+ except:
+ print("WindowHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
+
+ def getSupportedMethodNames(self):
+ return ('ViewData', )
+
diff --git a/uno/lib/uno/options/addressbook/optionsmanager.py b/uno/lib/uno/options/addressbook/optionsmanager.py
index 7d010716..a04b943f 100644
--- a/uno/lib/uno/options/addressbook/optionsmanager.py
+++ b/uno/lib/uno/options/addressbook/optionsmanager.py
@@ -31,44 +31,42 @@
from com.sun.star.logging.LogLevel import SEVERE
from .optionsmodel import OptionsModel
+
from .optionsview import OptionsView
-from ..unotool import getDesktop
+from .optionshandler import WindowHandler
+
+from ...unotool import getDesktop
-from ..logger import LogManager
+from ...logger import LogManager
-from ..configuration import g_defaultlog
-from ..configuration import g_synclog
+from ...configuration import g_defaultlog
+from ...configuration import g_synclog
class OptionsManager():
- def __init__(self, ctx, logger, window, offset=0):
+ def __init__(self, ctx, logger, window):
self._ctx = ctx
- self._logger = logger
self._model = OptionsModel(ctx)
- self._view = OptionsView(window, OptionsManager._restart, offset, *self._model.getViewData())
- self._logmanager = LogManager(self._ctx, window, 'requirements.txt', g_defaultlog, g_synclog)
+ self._view = OptionsView(ctx, window, WindowHandler(self), *self._model.getViewData())
+ self._logmanager = LogManager(ctx, self._view.getWindow(), 'requirements.txt', g_defaultlog, g_synclog)
self._logmanager.initView()
+ self._logger = logger
self._logger.logprb(INFO, 'OptionsManager', '__init__()', 301)
self._model.loadDriver()
- _restart = False
-
def loadSetting(self):
self._view.setTimeout(self._model.getTimeout())
self._view.setViewName(self._model.getViewName())
- self._view.setRestart(OptionsManager._restart)
self._logmanager.loadSetting()
self._logger.logprb(INFO, 'OptionsManager', 'loadSetting()', 311)
def saveSetting(self):
timeout, view = self._view.getViewData()
option = self._model.setViewData(timeout, view)
- log = self._logmanager.saveSetting()
- if log:
- OptionsManager._restart = True
- self._view.setRestart(True)
- self._logger.logprb(INFO, 'OptionsManager', 'saveSetting()', 321, option, log)
+ saved = self._logmanager.saveSetting()
+ self._logger.logprb(INFO, 'OptionsManager', 'saveSetting()', 321, option, saved)
+ return saved
def viewData(self):
url = self._model.getDatasourceUrl()
diff --git a/uno/lib/uno/options/addressbook/optionsmodel.py b/uno/lib/uno/options/addressbook/optionsmodel.py
index 85b76b3e..30cb662c 100644
--- a/uno/lib/uno/options/addressbook/optionsmodel.py
+++ b/uno/lib/uno/options/addressbook/optionsmodel.py
@@ -27,14 +27,14 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-from ..unotool import createService
-from ..unotool import getConfiguration
-from ..unotool import getSimpleFile
+from ...unotool import createService
+from ...unotool import getConfiguration
+from ...unotool import getSimpleFile
-from ..helper import getDataBaseUrl
+from ...helper import getDataBaseUrl
-from ..configuration import g_identifier
-from ..configuration import g_implementation
+from ...configuration import g_identifier
+from ...configuration import g_implementation
class OptionsModel():
@@ -65,7 +65,6 @@ def getViewName(self):
def getDatasourceUrl(self):
return self._url
-
# OptionsModel setter methods
def loadDriver(self):
try:
diff --git a/uno/lib/uno/options/addressbook/optionsview.py b/uno/lib/uno/options/addressbook/optionsview.py
index 2d335949..2f5da84e 100644
--- a/uno/lib/uno/options/addressbook/optionsview.py
+++ b/uno/lib/uno/options/addressbook/optionsview.py
@@ -27,21 +27,25 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-import unohelper
+from ...unotool import getContainerWindow
+
+from ...configuration import g_identifier
import traceback
class OptionsView():
- def __init__(self, window, restart, offset, timeout, view, enabled):
- self._window = window
+ def __init__(self, ctx, window, handler, timeout, view, enabled):
+ self._window = getContainerWindow(ctx, window.getPeer(), handler, g_identifier, 'OptionDialog')
+ self._window.setVisible(True)
self._getTimeout().Value = timeout
self._getDatasource().Model.Enabled = enabled
self._setViewName(view, not enabled)
- self.setRestart(restart)
- self._getRestart().Model.PositionY += offset
# OptionsView getter methods
+ def getWindow(self):
+ return self._window
+
def getViewData(self):
return int(self._getTimeout().Value), self._getViewName().Text
@@ -52,9 +56,6 @@ def setTimeout(self, timeout):
def setViewName(self, view):
self._getViewName().Text = view
- def setRestart(self, enabled):
- self._getRestart().setVisible(enabled)
-
# OptionsView private setter methods
def _setViewName(self, view, disabled):
self._getViewLabel().Model.Enabled = disabled
@@ -75,6 +76,3 @@ def _getViewLabel(self):
def _getViewName(self):
return self._window.getControl('TextField1')
- def _getRestart(self):
- return self._window.getControl('Label4')
-
diff --git a/uno/lib/uno/options/embedded/options b/uno/lib/uno/options/embedded/options
new file mode 120000
index 00000000..9b1eeeec
--- /dev/null
+++ b/uno/lib/uno/options/embedded/options
@@ -0,0 +1 @@
+../jdbc
\ No newline at end of file
diff --git a/uno/lib/uno/options/embedded/optionsmanager.py b/uno/lib/uno/options/embedded/optionsmanager.py
index 669ad65c..141dc395 100644
--- a/uno/lib/uno/options/embedded/optionsmanager.py
+++ b/uno/lib/uno/options/embedded/optionsmanager.py
@@ -31,7 +31,7 @@
from .optionsview import OptionsView
from .optionshandler import OptionsListener
-from ..option import OptionManager
+from .options import OptionsManager as Manager
from ..configuration import g_defaultlog
@@ -41,8 +41,9 @@
class OptionsManager():
def __init__(self, ctx, logger, window, options, url=None):
self._model = OptionsModel(ctx, logger, url)
- self._manager = OptionManager(ctx, window, options, OptionsManager._restart, 20, g_defaultlog)
- self._view = OptionsView(window)
+ link, instrumented = self._model.getDriverInfo()
+ self._manager = Manager(ctx, window, instrumented, options, g_defaultlog)
+ self._view = OptionsView(window, OptionsManager._restart, link, instrumented)
window.addEventListener(OptionsListener(self))
self._manager.initView()
self._initView()
@@ -56,13 +57,11 @@ def dispose(self):
def saveSetting(self):
if self._manager.saveSetting():
OptionsManager._restart = True
- self._manager.setRestart(True)
-
+ self._view.setWarning(True, self._model.isInstrumented())
def loadSetting(self):
self._manager.loadSetting()
- version = self._model.getDriverVersion(self._getConfigApiLevel())
- self._view.setDriverVersion(version)
+ self._initView()
# OptionsManager private getter methods
def _getConfigApiLevel(self):
diff --git a/uno/lib/uno/options/embedded/optionsmodel.py b/uno/lib/uno/options/embedded/optionsmodel.py
index 049914fb..c8f1686a 100644
--- a/uno/lib/uno/options/embedded/optionsmodel.py
+++ b/uno/lib/uno/options/embedded/optionsmodel.py
@@ -33,9 +33,12 @@
from com.sun.star.uno import Exception as UnoException
from ..unotool import createService
+from ..unotool import getStringResource
from ..jdbcdriver import g_service as jdbc
+from ..jdbcdriver import isInstrumented
+from ..configuration import g_identifier
from ..configuration import g_service as embedded
import traceback
@@ -45,10 +48,19 @@ class OptionsModel():
def __init__(self, ctx, logger, url=None):
self._ctx = ctx
self._url = url
+ self._instrumented = isInstrumented(ctx, 'xdbc:jdbc')
+ resolver = getStringResource(ctx, g_identifier, 'dialogs', 'OptionsDialog')
+ self._link = resolver.resolveString('OptionsDialog.Hyperlink1.Url')
self._logger = logger
self._logger.logprb(INFO, 'OptionsModel', '__init__', 401)
# OptionsModel getter methods
+ def getDriverInfo(self):
+ return self._link, self._instrumented
+
+ def isInstrumented(self):
+ return self._instrumented
+
def getDriverVersion(self, apilevel):
driver = None
version = 'N/A'
diff --git a/uno/lib/uno/options/embedded/optionsview.py b/uno/lib/uno/options/embedded/optionsview.py
index 98170ae8..19450086 100644
--- a/uno/lib/uno/options/embedded/optionsview.py
+++ b/uno/lib/uno/options/embedded/optionsview.py
@@ -31,14 +31,35 @@
class OptionsView():
- def __init__(self, window):
+ def __init__(self, window, restart, url, instrumented):
self._window = window
+ control = self._getWarning()
+ control.URL = url
+ self._setWarning(control, restart, instrumented)
# OptionsView setter methods
+ def setWarning(self, restart, instrumented):
+ self._setWarning(self._getWarning(), restart, instrumented)
+
def setDriverVersion(self, version):
self._getVersion().Text = version
+# OptionsView private methods
+ def _setWarning(self, control, restart, instrumented):
+ if restart:
+ control.setVisible(False)
+ self._getRestart().setVisible(True)
+ else:
+ self._getRestart().setVisible(False)
+ control.setVisible(not instrumented)
+
# OptionsView private control methods
def _getVersion(self):
return self._window.getControl('Label2')
+ def _getRestart(self):
+ return self._window.getControl('Label3')
+
+ def _getWarning(self):
+ return self._window.getControl('Hyperlink1')
+
diff --git a/uno/lib/uno/options/jdbc/__init__.py b/uno/lib/uno/options/jdbc/__init__.py
index eab324b7..f6f7a27b 100644
--- a/uno/lib/uno/options/jdbc/__init__.py
+++ b/uno/lib/uno/options/jdbc/__init__.py
@@ -27,4 +27,5 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-from .optionmanager import OptionManager
+from .optionsmanager import OptionsManager
+
diff --git a/uno/lib/uno/options/jdbc/optionhandler.py b/uno/lib/uno/options/jdbc/optionshandler.py
similarity index 97%
rename from uno/lib/uno/options/jdbc/optionhandler.py
rename to uno/lib/uno/options/jdbc/optionshandler.py
index d58b7af5..aeaec53e 100644
--- a/uno/lib/uno/options/jdbc/optionhandler.py
+++ b/uno/lib/uno/options/jdbc/optionshandler.py
@@ -65,8 +65,8 @@ def callHandlerMethod(self, window, event, method):
self._manager.setSystemTable(event.Source.State)
handled = True
return handled
- except Exception as e:
- print("ERROR: %s - %s" % (e, traceback.format_exc()))
+ except:
+ print("WindowHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
def getSupportedMethodNames(self):
return ('Level0',
diff --git a/uno/lib/uno/options/jdbc/optionmanager.py b/uno/lib/uno/options/jdbc/optionsmanager.py
similarity index 88%
rename from uno/lib/uno/options/jdbc/optionmanager.py
rename to uno/lib/uno/options/jdbc/optionsmanager.py
index 2f8f4d35..ac7cb0b1 100644
--- a/uno/lib/uno/options/jdbc/optionmanager.py
+++ b/uno/lib/uno/options/jdbc/optionsmanager.py
@@ -27,20 +27,22 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-from .optionmodel import OptionModel
-from .optionview import OptionWindow
-from .optionhandler import WindowHandler
+from .optionsmodel import OptionsModel
-from ..logger import LogManager
+from .optionsview import OptionsWindow
+
+from .optionshandler import WindowHandler
+
+from ...logger import LogManager
import traceback
-class OptionManager():
- def __init__(self, ctx, window, options, restart, offset, logger, *loggers):
+class OptionsManager():
+ def __init__(self, ctx, window, instrumented, options, logger, *loggers):
self._logmanager = LogManager(ctx, window, 'requirements.txt', logger, *loggers)
- self._model = OptionModel(ctx)
- self._view = OptionWindow(ctx, window, WindowHandler(self), options, restart, offset)
+ self._model = OptionsModel(ctx, instrumented)
+ self._view = OptionsWindow(ctx, window, WindowHandler(self), options)
# OptionManager setter methods
def initView(self):
@@ -61,9 +63,6 @@ def saveSetting(self):
saved |= self._model.saveSetting()
return saved
- def setRestart(self, state):
- self._view.setRestart(state)
-
def loadSetting(self):
self._logmanager.loadSetting()
self._initView()
diff --git a/uno/lib/uno/options/jdbc/optionmodel.py b/uno/lib/uno/options/jdbc/optionsmodel.py
similarity index 85%
rename from uno/lib/uno/options/jdbc/optionmodel.py
rename to uno/lib/uno/options/jdbc/optionsmodel.py
index 680827cf..65262b7a 100644
--- a/uno/lib/uno/options/jdbc/optionmodel.py
+++ b/uno/lib/uno/options/jdbc/optionsmodel.py
@@ -27,27 +27,21 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-from com.sun.star.logging.LogLevel import INFO
+from ...unotool import getConfiguration
-from ..unotool import getConfiguration
-
-from ..logger import getLogger
-
-from ..jdbcdriver import g_services
-
-from ..configuration import g_identifier
-from ..configuration import g_basename
+from ...configuration import g_identifier
import traceback
-class OptionModel():
- def __init__(self, ctx):
+class OptionsModel():
+ def __init__(self, ctx, instrumented):
self._rebootkeys = ('ApiLevel', 'CachedRowSet')
configkeys = ('ShowSystemTable', )
self._keys = self._rebootkeys + configkeys
self._config = getConfiguration(ctx, g_identifier, True)
self._settings = self._getSettings()
+ self._instrumented = instrumented
# OptionModel getter methods
def getConfigApiLevel(self):
@@ -58,12 +52,12 @@ def getViewData(self):
level = self._settings.get('ApiLevel')
crs = self._settings.get('CachedRowSet')
system = self._settings.get('ShowSystemTable')
- return level, crs, system, self._isRowSetEnabled(level)
+ return self._instrumented, level, crs, system, self._isRowSetEnabled(level)
# OptionModel setter methods
def setApiLevel(self, level):
self._settings['ApiLevel'] = level
- return self._isRowSetEnabled(level)
+ return self._instrumented and self._isRowSetEnabled(level)
def setCachedRowSet(self, level):
self._settings['CachedRowSet'] = level
@@ -74,11 +68,12 @@ def setSystemTable(self, state):
def saveSetting(self):
reboot = False
for key in self._keys:
- value = self._settings.get(key)
- if value != self._config.getByName(key):
- self._config.replaceByName(key, value)
- if key in self._rebootkeys:
- reboot = True
+ if key != 'CachedRowSet' or self._instrumented:
+ value = self._settings.get(key)
+ if value != self._config.getByName(key):
+ self._config.replaceByName(key, value)
+ if key in self._rebootkeys:
+ reboot = True
if self._config.hasPendingChanges():
self._config.commitChanges()
return reboot
diff --git a/uno/lib/uno/options/jdbc/optionview.py b/uno/lib/uno/options/jdbc/optionsview.py
similarity index 80%
rename from uno/lib/uno/options/jdbc/optionview.py
rename to uno/lib/uno/options/jdbc/optionsview.py
index 866dbdb9..c1b8a17f 100644
--- a/uno/lib/uno/options/jdbc/optionview.py
+++ b/uno/lib/uno/options/jdbc/optionsview.py
@@ -27,38 +27,35 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
-from ..unotool import getContainerWindow
+from ...unotool import getContainerWindow
-from ..configuration import g_identifier
+from ...configuration import g_identifier
import traceback
-class OptionWindow():
- def __init__(self, ctx, window, handler, options, restart, offset):
+class OptionsWindow():
+ def __init__(self, ctx, window, handler, options):
self._window = getContainerWindow(ctx, window.getPeer(), handler, g_identifier, 'OptionDialog')
self._window.setVisible(True)
- for crs in options:
- self._getCachedRowSet(crs).Model.Enabled = False
- self.setRestart(restart)
- self._getRestart().Model.PositionY += offset
+ self.enableCachedRowSet(False, options)
# OptionWindow setter methods
def dispose(self):
self._window.dispose()
- def initView(self, level, crs, system, enabled):
+ def initView(self, instrumented, level, crs, system, enabled):
self._getApiLevel(level).State = 1
- self._getCachedRowSet(crs).State = 1
- self.enableCachedRowSet(enabled)
+ if instrumented:
+ self._getCachedRowSet(crs).State = 1
+ else:
+ self._getCachedRowSet(0).State = 1
+ self.enableCachedRowSet(instrumented and enabled)
self._getSytemTable().State = int(system)
- def enableCachedRowSet(self, enabled):
- for crs in range(3):
- self._getCachedRowSet(crs).Model.Enabled = enabled
-
- def setRestart(self, enabled):
- self._getRestart().setVisible(enabled)
+ def enableCachedRowSet(self, enabled, options=(0, 1, 2)):
+ for index in options:
+ self._getCachedRowSet(index).Model.Enabled = enabled
# OptionWindow private control methods
def _getApiLevel(self, index):
@@ -70,6 +67,3 @@ def _getCachedRowSet(self, index):
def _getSytemTable(self):
return self._window.getControl('CheckBox1')
- def _getRestart(self):
- return self._window.getControl('Label3')
-
diff --git a/uno/lib/uno/options/ucb/optionsmanager.py b/uno/lib/uno/options/ucb/optionsmanager.py
index ccbc5ba6..3aaa5ef8 100644
--- a/uno/lib/uno/options/ucb/optionsmanager.py
+++ b/uno/lib/uno/options/ucb/optionsmanager.py
@@ -55,10 +55,10 @@ def __init__(self, ctx, source, logger, window):
self._ctx = ctx
self._logger = logger
self._model = OptionsModel(ctx)
- self._view = OptionsView(window, *self._model.getInitData())
+ self._view = OptionsView(window, OptionsManager._restart, *self._model.getInitData())
self._logmanager = LogManager(ctx, window, 'requirements.txt', g_defaultlog, g_synclog)
self._logmanager.initView()
- self._view.setViewData(*self._model.getViewData(OptionsManager._restart))
+ self._view.setViewData(OptionsManager._restart, *self._model.getViewData())
self._logger.logprb(INFO, 'OptionsManager', '__init__', 151)
try:
url = getDataBaseUrl(ctx)
@@ -71,7 +71,7 @@ def __init__(self, ctx, source, logger, window):
_restart = False
def loadSetting(self):
- self._view.setViewData(*self._model.getViewData(OptionsManager._restart))
+ self._view.setViewData(OptionsManager._restart, *self._model.getViewData())
self._logmanager.loadSetting()
self._logger.logprb(INFO, 'OptionsManager', 'loadSetting', 161)
@@ -80,14 +80,14 @@ def saveSetting(self):
changed = self._logmanager.saveSetting()
if changed:
OptionsManager._restart = True
- self._view.setRestart(True)
+ self._view.setWarning(True, self._model.isInstrumented())
self._logger.logprb(INFO, 'OptionsManager', 'saveSetting', 171, option, changed)
def enableShare(self, enabled):
self._view.enableShare(enabled)
def enableSync(self, enabled):
- self._view.enableSync(enabled, OptionsManager._restart, self._model.hasDataBase())
+ self._view.enableSync(OptionsManager._restart, self._model.isInstrumented(), enabled, self._model.hasDataBase())
def setReset(self, enabled):
self._view.enableResetFile(enabled)
@@ -103,10 +103,10 @@ def viewFile(self):
fp.dispose()
def download(self):
- self._view.setStep(1, OptionsManager._restart)
+ self._view.setStep(1, OptionsManager._restart, self._model.isInstrumented())
def upload(self):
- self._view.setStep(2, OptionsManager._restart)
+ self._view.setStep(2, OptionsManager._restart, self._model.isInstrumented())
def spinUp(self, index):
self._view.setChunk(index, self._view.getChunk(index) * 2)
diff --git a/uno/lib/uno/options/ucb/optionsmodel.py b/uno/lib/uno/options/ucb/optionsmodel.py
index 4061f310..d912b59f 100644
--- a/uno/lib/uno/options/ucb/optionsmodel.py
+++ b/uno/lib/uno/options/ucb/optionsmodel.py
@@ -31,6 +31,8 @@
from com.sun.star.ucb.SynchronizePolicy import CLIENT_IS_MASTER
from com.sun.star.ucb.SynchronizePolicy import NONE_IS_MASTER
+from ..jdbcdriver import isInstrumented
+
from ..unotool import getConfiguration
from ..unotool import getResourceLocation
from ..unotool import getSimpleFile
@@ -50,6 +52,7 @@ class OptionsModel():
def __init__(self, ctx):
self._config = getConfiguration(ctx, g_identifier, True)
self._common = getConfiguration(ctx, 'org.openoffice.Office.Common', True)
+ self._instrumented = isInstrumented(ctx, 'xdbc:hsqldb:')
self._url = getResourceLocation(ctx, g_identifier)
self._policies = {'SERVER_IS_MASTER': 1, 'CLIENT_IS_MASTER': 2, 'NONE_IS_MASTER': 3}
self._factors = {'Timeout': 60, 'Chunk': 1024}
@@ -57,8 +60,8 @@ def __init__(self, ctx):
self._hasdatabase = sf.exists(self.getDatasourceUrl())
self._hasfile = sf.exists(self.getFileUrl())
self._resolver = getStringResource(ctx, g_identifier, 'dialogs', 'OptionsDialog')
- self._resources = {'Link': 'OptionsDialog.Hyperlink1.Link'}
-
+ self._resources = {'Link': 'OptionsDialog.Hyperlink1.Url',
+ 'Url': 'OptionsDialog.Hyperlink2.Url'}
@property
def _ResetSync(self):
@@ -95,15 +98,18 @@ def _Macro(self):
# OptionsModel getter methods
def getInitData(self):
resumable = self._config.getByName('ResumableUpload')
- return self._hasdatabase, self._hasfile, resumable, self._getLink()
+ return self._getUrl(), self._instrumented, self._hasdatabase, self._hasfile, resumable, self._getLink()
+
+ def isInstrumented(self):
+ return self._instrumented
def hasDataBase(self):
return self._hasdatabase
- def getViewData(self, restart):
- return (self._hasdatabase, self._ResetSync, self._SupportShare,
- self._IsShared, self._ShareName, self._Policy,
- self._Timeout, self._Download, self._Upload, self._Macro, restart)
+ def getViewData(self):
+ return (self._instrumented, self._hasdatabase, self._ResetSync,
+ self._SupportShare, self._IsShared, self._ShareName,
+ self._Policy, self._Timeout, self._Download, self._Upload, self._Macro)
def getDatasourceUrl(self):
folder = g_ucbseparator + g_folder + g_ucbseparator + g_scheme
@@ -188,6 +194,10 @@ def _setMacro(self, enabled):
if enabled != self._Macro:
self._common.replaceByHierarchicalName('Misc/UseSystemFileDialog', enabled)
+ def _getUrl(self):
+ resource = self._resources.get('Url')
+ return self._resolver.resolveString(resource)
+
def _getLink(self):
resource = self._resources.get('Link')
return self._resolver.resolveString(resource)
diff --git a/uno/lib/uno/options/ucb/optionsview.py b/uno/lib/uno/options/ucb/optionsview.py
index 7e058c83..7d6603ec 100644
--- a/uno/lib/uno/options/ucb/optionsview.py
+++ b/uno/lib/uno/options/ucb/optionsview.py
@@ -31,7 +31,7 @@
class OptionsView():
- def __init__(self, window, exist, hasfile, resumable, link):
+ def __init__(self, window, restart, url, instrumented, exist, hasfile, resumable, link):
self._window = window
if exist:
self._disableShare()
@@ -41,6 +41,9 @@ def __init__(self, window, exist, hasfile, resumable, link):
self._getFile().Model.Enabled = hasfile
self._getUpload().Model.Enabled = resumable
self._getLink().URL = link
+ control = self._getWarning()
+ control.URL = url
+ self._setWarning(control, restart, instrumented)
# OptionsView getter methods
def getViewData(self):
@@ -59,13 +62,16 @@ def getChunk(self, index):
return int(self._getChunk(index).Value)
# OptionsView setter methods
- def setStep(self, step, restart):
+ def setWarning(self, restart, instrumented):
+ self._setWarning(self._getWarning(), restart, instrumented)
+
+ def setStep(self, step, restart, instrumented):
self._window.Model.Step = step
# XXX: If we change the step, we have to restore the visibility of the controls
# XXX: because it was lost (ie: after setting the new step everything is visible).
- self.setRestart(restart)
+ self.setWarning(restart, instrumented)
- def setViewData(self, exist, reset, support, share, name, index, timeout, download, upload, macro, restart):
+ def setViewData(self, restart, instrumented, exist, reset, support, share, name, index, timeout, download, upload, macro):
self._getResetSync().State = int(reset != 0)
self._getResetFile().State = int(reset == 2)
self.enableResetFile(reset != 0)
@@ -80,22 +86,22 @@ def setViewData(self, exist, reset, support, share, name, index, timeout, downlo
self._getShareName().Text = name
self.enableShare(False)
self._getOption(index).State = 1
- self.enableSync(index != 3, restart, exist)
+ self.enableSync(restart, instrumented, index != 3, exist)
self._getTimeout().Value = timeout
self._setSetting(download, 0)
self._setSetting(upload, 1)
self._getMacro().State = int(macro)
self.enableCustomize(macro)
- self.setRestart(restart)
+ self.setWarning(restart, instrumented)
def enableShare(self, enabled):
self._getShareName().Model.Enabled = enabled
- def enableSync(self, enabled, restart, exist):
+ def enableSync(self, restart, instrumented, enabled, exist):
self._getResetSync().Model.Enabled = enabled and exist
self._getTimeoutLabel().Model.Enabled = enabled
self._getTimeout().Model.Enabled = enabled
- self._enableUpload(enabled, restart)
+ self._enableUpload(restart, instrumented, enabled)
def enableResetFile(self, enabled):
self._getResetFile().Model.Enabled = enabled
@@ -106,9 +112,6 @@ def enableCustomize(self, enabled):
self._getLink().Model.Enabled = enabled
self._getCustomize().Model.Enabled = enabled
- def setRestart(self, enabled):
- self._getRestart().setVisible(enabled)
-
def setChunk(self, index, chunk):
control = self._getChunk(index)
control.Value = chunk
@@ -130,6 +133,14 @@ def _getSetting(self, index):
'Retry': int(self._getRetry(index).Value)}
# OptionsView private setter methods
+ def _setWarning(self, control, restart, instrumented):
+ if restart:
+ control.setVisible(False)
+ self._getRestart().setVisible(True)
+ else:
+ self._getRestart().setVisible(False)
+ control.setVisible(not instrumented)
+
def _disableShare(self):
self._getShare().Model.Enabled = False
self._getShareName().Model.Enabled = False
@@ -139,11 +150,11 @@ def _setSetting(self, setting, index):
self._getDelay(index).Value = setting.get('Delay')
self._getRetry(index).Value = setting.get('Retry')
- def _enableUpload(self, enabled, restart):
+ def _enableUpload(self, restart, instrumented, enabled):
control = self._getUpload()
if not enabled and control.State:
self._getDownload().State = 1
- self.setStep(1, restart)
+ self.setStep(1, restart, instrumented)
control.Model.Enabled = enabled
# OptionsView private control methods
@@ -200,9 +211,6 @@ def _getRetry(self, index):
index += 6
return self._window.getControl('NumericField%s' % index)
- def _getRestart(self):
- return self._window.getControl('Label8')
-
def _getMacro(self):
return self._window.getControl('CheckBox4')
@@ -212,3 +220,9 @@ def _getLink(self):
def _getCustomize(self):
return self._window.getControl('CommandButton7')
+ def _getRestart(self):
+ return self._window.getControl('Label8')
+
+ def _getWarning(self):
+ return self._window.getControl('Hyperlink2')
+
diff --git a/uno/lib/uno/ucb/__init__.py b/uno/lib/uno/ucb/__init__.py
index 45be9115..621a3b35 100644
--- a/uno/lib/uno/ucb/__init__.py
+++ b/uno/lib/uno/ucb/__init__.py
@@ -33,7 +33,7 @@
from .dispatch import Dispatch
-from .unotool import hasInterface
+from .unotool import hasFrameInterface
from .logger import getLogger
diff --git a/uno/lib/uno/ucb/datasource.py b/uno/lib/uno/ucb/datasource.py
index d62020d0..606dd974 100644
--- a/uno/lib/uno/ucb/datasource.py
+++ b/uno/lib/uno/ucb/datasource.py
@@ -124,7 +124,7 @@ def _getUser(self, source, authority, url):
name = uri.getAuthority()
else:
title, msg = self._getExceptionMessage(322, url)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
elif self._default:
name = self._default
@@ -138,7 +138,7 @@ def _getUser(self, source, authority, url):
# XXX: The user's OAuth2 configuration has been deleted and
# XXX: the OAuth2 configuration wizard has been canceled.
title, msg = self._getExceptionMessage(324, name)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
else:
user = User(self._ctx, source, self._logger, self.DataBase,
@@ -153,11 +153,11 @@ def _getUser(self, source, authority, url):
def _getUserName(self, source, url):
try:
name = getOAuth2UserName(self._ctx, source, self._provider.Scheme)
- except Exception as e:
- print("DataSource._getUserName() ERROR: %s - %s" % (e, traceback.format_exc()))
+ except:
+ print("DataSource._getUserName() ERROR: %s" % traceback.format_exc())
if not name:
title, msg = self._getExceptionMessage(331, url)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
return name
diff --git a/uno/lib/uno/ucb/dispatch.py b/uno/lib/uno/ucb/dispatch.py
index 68d3cec5..2c76f680 100644
--- a/uno/lib/uno/ucb/dispatch.py
+++ b/uno/lib/uno/ucb/dispatch.py
@@ -41,10 +41,7 @@
from com.sun.star.frame.DispatchResultState import FAILURE
from .unotool import createService
-from .unotool import getArgumentSet
from .unotool import getDesktop
-from .unotool import getMessageBox
-from .unotool import getToolKit
import traceback
@@ -79,8 +76,6 @@ def dispatch(self, url, arguments):
elif url.Path == 'SaveAs':
document = self._frame.getController().getModel()
state = self._saveAs(document)
- elif url.Path == 'ShowWarning':
- state = self._showWarning(arguments)
return state, result
def addStatusListener(self, listener, url):
@@ -95,6 +90,7 @@ def removeStatusListener(self, listener, url):
if listener in self._listeners:
self._listeners.remove(listener)
+# Private methods
def _open(self):
state = FAILURE
fp = createService(self._ctx, self._service, FILEOPEN_SIMPLE)
@@ -126,11 +122,3 @@ def _saveAs(self, document):
fp.dispose()
return state
- def _showWarning(self, arguments):
- toolkit = getToolKit(self._ctx)
- peer = toolkit.getActiveTopWindow()
- args = getArgumentSet(arguments)
- msgbox = getMessageBox(toolkit, peer, args['Box'], args['Button'], args['Title'], args['Message'])
- msgbox.execute()
- msgbox.dispose()
- return SUCCESS
diff --git a/uno/lib/uno/ucb/helper.py b/uno/lib/uno/ucb/helper.py
index aaf119a6..e1c835e9 100644
--- a/uno/lib/uno/ucb/helper.py
+++ b/uno/lib/uno/ucb/helper.py
@@ -29,11 +29,6 @@
import uno
-from com.sun.star.connection import NoConnectException
-
-from com.sun.star.logging.LogLevel import INFO
-from com.sun.star.logging.LogLevel import SEVERE
-
from com.sun.star.ucb.ContentAction import INSERTED
from com.sun.star.ucb.ContentAction import REMOVED
from com.sun.star.ucb.ContentAction import DELETED
@@ -42,9 +37,6 @@
from com.sun.star.ucb import IllegalIdentifierException
from com.sun.star.ucb import InteractiveAugmentedIOException
-from com.sun.star.ucb.ConnectionMode import ONLINE
-from com.sun.star.ucb.ConnectionMode import OFFLINE
-
from com.sun.star.sdb import ParametersRequest
from .dbtool import getConnectionUrl
@@ -53,17 +45,10 @@
from .unotool import checkVersion
from .unotool import createMessageBox
-from .unotool import createService
-from .unotool import executeDispatch
from .unotool import hasInterface
-from .unotool import getDesktop
-from .unotool import getDispatcher
from .unotool import getExtensionVersion
-from .unotool import getNamedValueSet
-from .unotool import getParentWindow
from .unotool import getProperty
from .unotool import getPropertyValue
-from .unotool import getPropertyValueSet
from .unotool import getSimpleFile
from .unotool import parseUrl
@@ -86,6 +71,8 @@
from .ucp import g_ucbseparator
+import traceback
+
def getPresentationUrl(transformer, url):
# FIXME: Sometimes the url can end with a dot, it must be removed
@@ -218,10 +205,10 @@ def getExceptionMessage(logger, code, extension, *args):
message = logger.resolveString(code + 1, *args)
return title, message
-def showWarning(ctx, message, title):
- box = uno.Enum('com.sun.star.awt.MessageBoxType', 'ERRORBOX')
- args = {'Box': box, 'Button': 1, 'Title': title, 'Message': message}
- executeDispatch(ctx, '%s:ShowWarning' % g_scheme, **args)
+def showWarning(ctx, title, message):
+ msgbox = createMessageBox(ctx, title, message)
+ msgbox.execute()
+ msgbox.dispose()
# Private method
def _checkConfiguration(ctx, source, logger, warn):
@@ -230,22 +217,22 @@ def _checkConfiguration(ctx, source, logger, warn):
if oauth2 is None:
title, msg = getExceptionMessage(logger, 801, g_oauth2ext, g_oauth2ext, g_extension)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
if not checkVersion(oauth2, g_oauth2ver):
title, msg = getExceptionMessage(logger, 803, g_oauth2ext, oauth2, g_oauth2ext, g_oauth2ver)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
if driver is None:
title, msg = getExceptionMessage(logger, 801, g_jdbcext, g_jdbcext, g_extension)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
if not checkVersion(driver, g_jdbcver):
title, msg = getExceptionMessage(logger, 803, g_jdbcext, driver, g_jdbcext, g_jdbcver)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
def _getDataSourceConnection(ctx, url, new, infos=None):
@@ -259,7 +246,7 @@ def _checkConnection(ctx, source, connection, logger, new, warn):
connection.close()
title, msg = getExceptionMessage(logger, 811, g_jdbcext, version, g_version)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
service = 'com.sun.star.sdb.Connection'
interface = 'com.sun.star.sdbcx.XGroupsSupplier'
@@ -267,7 +254,7 @@ def _checkConnection(ctx, source, connection, logger, new, warn):
connection.close()
title, msg = getExceptionMessage(logger, 813, g_jdbcext, service, interface)
if warn:
- showWarning(ctx, msg, title)
+ showWarning(ctx, title, msg)
raise IllegalIdentifierException(msg, source)
def _checkConnectionApi(connection, service, interface):
diff --git a/uno/lib/uno/ucb/ucp/user.py b/uno/lib/uno/ucb/ucp/user.py
index 4167cb59..f03eea2c 100644
--- a/uno/lib/uno/ucb/ucp/user.py
+++ b/uno/lib/uno/ucb/ucp/user.py
@@ -91,29 +91,29 @@ def __init__(self, ctx, source, logger, database, provider, sync, name, password
# If we have a Null value here then it means that the user has abandoned
# the OAuth2 Wizard, there is nothing more to do except throw an exception
title, msg = self._getExceptionMessage(501, name)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
else:
if not self.Provider.isOnLine():
title, msg = self._getExceptionMessage(503, name)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
request = getRequest(ctx, self.Provider.Scheme, name)
if request is None:
# If we have a Null value here then it means that the user has abandoned
# the OAuth2 Wizard, there is nothing more to do except throw an exception
title, msg = self._getExceptionMessage(501, g_service)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
user = self.Provider.getUser(source, request, name)
metadata = database.insertUser(user)
if metadata is None:
title, msg = self._getExceptionMessage(505, name)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
if not database.createUser(name, password):
title, msg = self._getExceptionMessage(507, name)
- showWarning(self._ctx, msg, title)
+ showWarning(self._ctx, title, msg)
raise IllegalIdentifierException(msg, source)
self._paths = {}
self._contents = {}
diff --git a/uno/lib/uno/unotool/__init__.py b/uno/lib/uno/unotool/__init__.py
index 4419bb72..02148529 100644
--- a/uno/lib/uno/unotool/__init__.py
+++ b/uno/lib/uno/unotool/__init__.py
@@ -27,22 +27,30 @@
╚════════════════════════════════════════════════════════════════════════════════════╝
"""
+from .taskevent import TaskEvent
+
+from .statusindicator import StatusIndicator
+
from .unotool import checkVersion
from .unotool import createMessageBox
from .unotool import createService
-from .unotool import createWindow
+from .unotool import executeDesktopDispatch
from .unotool import executeDispatch
from .unotool import executeFrameDispatch
from .unotool import executeShell
+from .unotool import findFrame
from .unotool import generateUuid
from .unotool import getArgumentSet
+from .unotool import getCallBack
from .unotool import getConfiguration
from .unotool import getConnectionMode
+from .unotool import getConnector
from .unotool import getContainerWindow
from .unotool import getCurrentLocale
from .unotool import getDateTime
from .unotool import getDefaultPropertyValueSet
from .unotool import getDesktop
+from .unotool import getDialogPosSize
from .unotool import getDispatcher
from .unotool import getDialog
from .unotool import getDialogUrl
@@ -55,13 +63,14 @@
from .unotool import getInteractionHandler
from .unotool import getInterfaceNames
from .unotool import getInterfaceTypes
+from .unotool import getLastNamedParts
from .unotool import getLibreOfficeInfo
from .unotool import getLibreOfficeVersion
-from .unotool import getMessageBox
+from .unotool import getMailMerge
from .unotool import getMimeTypeFactory
+from .unotool import getMri
from .unotool import getNamedValue
from .unotool import getNamedValueSet
-from .unotool import getParentWindow
from .unotool import getPathSettings
from .unotool import getPathSubstitution
from .unotool import getProperty
@@ -75,14 +84,19 @@
from .unotool import getStringResourceWithLocation
from .unotool import getTempFile
from .unotool import getToolKit
+from .unotool import getTopWindow
+from .unotool import getTopWindowPosition
from .unotool import getTypeDetection
from .unotool import getUriFactory
from .unotool import getUrl
from .unotool import getUrlPresentation
from .unotool import getUrlTransformer
+from .unotool import hasFrameInterface
from .unotool import hasInterface
from .unotool import hasService
from .unotool import parseDateTime
from .unotool import parseUrl
+from .unotool import saveTopWindowPosition
+from .unotool import setProgress
from .unotool import unparseDateTime
from .unotool import unparseTimeStamp
diff --git a/uno/lib/uno/unotool/statusindicator.py b/uno/lib/uno/unotool/statusindicator.py
new file mode 100644
index 00000000..335a2636
--- /dev/null
+++ b/uno/lib/uno/unotool/statusindicator.py
@@ -0,0 +1,90 @@
+#!
+# -*- coding: utf-8 -*-
+
+"""
+╔════════════════════════════════════════════════════════════════════════════════════╗
+║ ║
+║ Copyright (c) 2020-25 https://prrvchr.github.io ║
+║ ║
+║ Permission is hereby granted, free of charge, to any person obtaining ║
+║ a copy of this software and associated documentation files (the "Software"), ║
+║ to deal in the Software without restriction, including without limitation ║
+║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║
+║ and/or sell copies of the Software, and to permit persons to whom the Software ║
+║ is furnished to do so, subject to the following conditions: ║
+║ ║
+║ The above copyright notice and this permission notice shall be included in ║
+║ all copies or substantial portions of the Software. ║
+║ ║
+║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║
+║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║
+║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║
+║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║
+║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║
+║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║
+║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
+║ ║
+╚════════════════════════════════════════════════════════════════════════════════════╝
+"""
+
+import uno
+import unohelper
+
+from com.sun.star.awt.PosSize import SIZE
+
+from com.sun.star.task import XStatusIndicator
+
+from com.sun.star.util.MeasureUnit import APPFONT
+
+from threading import Lock
+import traceback
+
+
+class StatusIndicator(unohelper.Base,
+ XStatusIndicator):
+ def __init__(self, frame, offset=10):
+ self._window = frame.getContainerWindow()
+ self._progress = frame.createStatusIndicator()
+ self._point = uno.createUnoStruct('com.sun.star.awt.Point', 0, offset)
+ self._lock = Lock()
+ self._value = 0
+
+ def start(self, text, value):
+ self._setValue(0)
+ self._setWindowHeight()
+ self._progress.start(text, value)
+
+ def setText(self, text):
+ self._setText(text)
+
+ def setValue(self, value):
+ # XXX: In order to be able to progress in the loops it is necessary
+ # XXX: to be able to add value to the current progression value.
+ # XXX: This is what is done here thanks to a negative value
+ self._setValue(value)
+
+ def end(self):
+ self._progress.end()
+ self._setWindowHeight(-1)
+
+ def reset(self):
+ self._setValue(0)
+ self._progress.reset()
+
+ def _setText(self, text):
+ with self._lock:
+ self._progress.setText(text)
+
+ def _setValue(self, value):
+ with self._lock:
+ if value < 0:
+ self._value += abs(value)
+ else:
+ self._value = value
+ self._progress.setValue(self._value)
+
+ def _setWindowHeight(self, factor=1):
+ size = self._window.getPosSize()
+ offset = self._window.convertPointToPixel(self._point, APPFONT).Y * factor
+ self._window.setPosSize(0, 0, size.Width, size.Height + offset, SIZE)
+
diff --git a/uno/lib/uno/unotool/taskevent.py b/uno/lib/uno/unotool/taskevent.py
new file mode 100644
index 00000000..300197d3
--- /dev/null
+++ b/uno/lib/uno/unotool/taskevent.py
@@ -0,0 +1,58 @@
+#!
+# -*- coding: utf-8 -*-
+
+"""
+╔════════════════════════════════════════════════════════════════════════════════════╗
+║ ║
+║ Copyright (c) 2020-25 https://prrvchr.github.io ║
+║ ║
+║ Permission is hereby granted, free of charge, to any person obtaining ║
+║ a copy of this software and associated documentation files (the "Software"), ║
+║ to deal in the Software without restriction, including without limitation ║
+║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║
+║ and/or sell copies of the Software, and to permit persons to whom the Software ║
+║ is furnished to do so, subject to the following conditions: ║
+║ ║
+║ The above copyright notice and this permission notice shall be included in ║
+║ all copies or substantial portions of the Software. ║
+║ ║
+║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║
+║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║
+║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║
+║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║
+║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║
+║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║
+║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
+║ ║
+╚════════════════════════════════════════════════════════════════════════════════════╝
+"""
+
+import unohelper
+
+from com.sun.star.task import XTaskEvent
+
+from threading import Event
+import traceback
+
+
+class TaskEvent(unohelper.Base,
+ XTaskEvent):
+ def __init__(self, set=False):
+ self._event = Event()
+ if set:
+ self._event.set()
+
+ def isSet(self):
+ return self._event.is_set()
+
+ def set(self):
+ self._event.set()
+
+ def clear(self):
+ return self._event.clear()
+
+ def wait(self, timeout):
+ if timeout <= 0:
+ timeout = None
+ return self._event.wait(timeout)
+
diff --git a/uno/lib/uno/unotool/unotool.py b/uno/lib/uno/unotool/unotool.py
index 66f4d5c5..7a186395 100644
--- a/uno/lib/uno/unotool/unotool.py
+++ b/uno/lib/uno/unotool/unotool.py
@@ -29,7 +29,21 @@
import uno
+from com.sun.star.awt import Point
from com.sun.star.awt import Rectangle
+from com.sun.star.awt import Size
+
+from com.sun.star.awt.MessageBoxType import ERRORBOX
+
+from com.sun.star.awt.WindowAttribute import SHOW
+from com.sun.star.awt.WindowAttribute import MINSIZE
+from com.sun.star.awt.WindowAttribute import BORDER
+from com.sun.star.awt.WindowAttribute import MOVEABLE
+from com.sun.star.awt.WindowAttribute import CLOSEABLE
+from com.sun.star.awt.WindowAttribute import NODECORATION
+
+from com.sun.star.awt.WindowClass import TOP
+from com.sun.star.awt.WindowClass import CONTAINER
from com.sun.star.beans.PropertyState import DIRECT_VALUE
@@ -37,6 +51,8 @@
from com.sun.star.document.MacroExecMode import ALWAYS_EXECUTE_NO_WARN
+from com.sun.star.frame.FrameSearchFlag import GLOBAL
+
from com.sun.star.lang import WrappedTargetRuntimeException
from com.sun.star.ucb.ConnectionMode import ONLINE
@@ -44,6 +60,8 @@
from com.sun.star.ui.dialogs.ExecutableDialogResults import OK
+from com.sun.star.util.MeasureUnit import APPFONT
+
import binascii
import datetime
from packaging import version
@@ -51,16 +69,22 @@
def getConnectionMode(ctx, host, port=80):
- connector = createService(ctx, 'com.sun.star.connection.Connector')
+ connector = getConnector(ctx)
try:
connection = connector.connect('socket,host=%s,port=%s' % (host, port))
except NoConnectException:
mode = OFFLINE
else:
- connection.close()
+ try:
+ connection.close()
+ except:
+ pass
mode = ONLINE
return mode
+def getConnector(ctx):
+ return createService(ctx, 'com.sun.star.connection.Connector')
+
def getDesktop(ctx):
return createService(ctx, 'com.sun.star.frame.Desktop')
@@ -94,6 +118,15 @@ def getUrlTransformer(ctx):
def getInteractionHandler(ctx):
return createService(ctx, 'com.sun.star.task.InteractionHandler')
+def getMailMerge(ctx):
+ return createService(ctx, 'com.sun.star.text.MailMerge')
+
+def getMri(ctx):
+ return createService(ctx, 'mytools.Mri')
+
+def getCallBack(ctx):
+ return createService(ctx, 'com.sun.star.awt.AsyncCallback')
+
def getSequenceInputStream(ctx, sequence):
service = 'com.sun.star.io.SequenceInputStream'
return createService(ctx, service, sequence)
@@ -119,11 +152,14 @@ def parseUrl(transformer, location, protocol=None):
success, url = transformer.parseSmart(url, protocol)
return url if success else None
-def getDocument(ctx, url):
- properties = {'Hidden': True,
- 'OpenNewView': True,
- 'MacroExecutionMode': ALWAYS_EXECUTE_NO_WARN}
- descriptor = getPropertyValueSet(properties)
+def getDocument(ctx, url, readonly=True):
+ # XXX: ReadOnly: documents opened for mailing are opened readonly because they must
+ # XXX: be opened as a new document and this document could be open already
+ # XXX: OpenNewView: always open a new document because it must be disposed afterwards.
+ # XXX: Hidden: mailing is done in a hidden view
+ # XXX: Silence: load document for mailing without user interaction
+ arguments = {'ReadOnly': readonly, 'OpenNewView': True, 'Hidden': True, 'Silence': True}
+ descriptor = getPropertyValueSet(arguments)
document = getDesktop(ctx).loadComponentFromURL(url, '_blank', 0, descriptor)
return document
@@ -182,6 +218,11 @@ def hasInterface(component, interface):
return True
return False
+def hasFrameInterface(component):
+ frame = 'com.sun.star.frame.XFrame2'
+ desktop = 'com.sun.star.frame.XDesktop2'
+ return hasInterface(component, frame) or hasInterface(component, desktop)
+
def hasService(ctx, name):
service = createService(ctx, name)
return service is not None
@@ -218,6 +259,12 @@ def getExtensionVersion(ctx, extension):
return version
return None
+def getLastNamedParts(name, sep='.'):
+ part1, sep, part2 = name.rpartition(sep)
+ if not sep:
+ part1, part2 = part2, None
+ return part1, part2
+
def getLibreOfficeInfo(ctx):
config = getConfiguration(ctx, '/org.openoffice.Setup/Product')
name = config.getByName('ooName')
@@ -279,23 +326,67 @@ def getStringResourceWithLocation(ctx, url, filename, locale=None):
def generateUuid():
return binascii.hexlify(uno.generateUuid().value).decode('utf-8')
-def getDialog(ctx, identifier, xdl, handler=None, window=None):
+def setProgress(callback, caller, value):
+ data = {'call': 'progress', 'value': value}
+ callback.addCallback(caller, getNamedValueSet(data))
+
+def getDialog(ctx, identifier, xdl, handler=None, parent=None):
dialog = None
provider = createService(ctx, 'com.sun.star.awt.DialogProvider2')
url = getDialogUrl(identifier, xdl)
- if handler is None and window is None:
- dialog = provider.createDialog(url)
- toolkit = createService(ctx, 'com.sun.star.awt.Toolkit')
- dialog.createPeer(toolkit, None)
- elif handler is not None and window is None:
- dialog = provider.createDialogWithHandler(url, handler)
- toolkit = createService(ctx, 'com.sun.star.awt.Toolkit')
- dialog.createPeer(toolkit, None)
+ if handler and parent:
+ properties = getNamedValueSet({'ParentWindow': parent, 'EventHandler': handler})
+ dialog = provider.createDialogWithArguments(url, properties)
else:
- args = getNamedValueSet({'ParentWindow': window, 'EventHandler': handler})
- dialog = provider.createDialogWithArguments(url, args)
+ if handler:
+ dialog = provider.createDialogWithHandler(url, handler)
+ else:
+ dialog = provider.createDialog(url)
+ toolkit = getToolKit(ctx)
+ dialog.createPeer(toolkit, toolkit.getDesktopWindow())
return dialog
+def findFrame(ctx, name, flags=GLOBAL):
+ return getDesktop(ctx).findFrame(name, flags)
+
+def getDialogPosSize(ctx, extension, xdl, point=None, unit=APPFONT):
+ dialog = getDialog(ctx, extension, xdl)
+ size = dialog.convertSizeToPixel(Size(dialog.Model.Width, dialog.Model.Height), unit)
+ dialog.dispose()
+ if point is None:
+ point = Point(0, 0)
+ return Rectangle(point.X, point.Y, size.Width, size.Height)
+
+def getTopWindow(ctx, name, rectangle=None, parent=None, modal=TOP, attrs=BORDER | MOVEABLE | CLOSEABLE | NODECORATION):
+ descriptor = uno.createUnoStruct('com.sun.star.awt.WindowDescriptor')
+ descriptor.Type = modal
+ descriptor.WindowServiceName = 'window'
+ if parent:
+ descriptor.Parent = parent
+ else:
+ descriptor.ParentIndex = -1
+ if rectangle:
+ attrs |= SHOW
+ descriptor.Bounds = rectangle
+ descriptor.WindowAttributes = attrs
+ # XXX: We use the TaskCreator UNO service instead of Frame
+ # XXX: in order to be able to assign a title to the window.
+ service = 'com.sun.star.frame.TaskCreator'
+ arguments = {'FrameName': name, 'ContainerWindow': getToolKit(ctx).createWindow(descriptor)}
+ frame = createService(ctx, service).createInstanceWithArguments(getNamedValueSet(arguments))
+ getDesktop(ctx).getFrames().append(frame)
+ return frame
+
+def getTopWindowPosition(window):
+ size = window.getPosSize()
+ return Point(size.X, size.Y)
+
+def saveTopWindowPosition(config, position, property):
+ if config.hasByName(property):
+ any = uno.Any('[]long', (position.X, position.Y))
+ uno.invoke(config, 'replaceByName', (property, any))
+ config.commitChanges()
+
def getContainerWindow(ctx, parent, handler, identifier, xdl):
service = 'com.sun.star.awt.ContainerWindowProvider'
provider = createService(ctx, service)
@@ -313,15 +404,10 @@ def getFileUrl(ctx, title, path, filters=(), multi=False):
filepicker.setCurrentFilter(name)
filepicker.setMultiSelectionMode(multi)
if filepicker.execute() == OK:
- url = filepicker.getFiles()[0]
if multi:
- try:
- urls = filepicker.getSelectedFiles()
- except:
- urls = filepicker.getFiles()
- if len(urls) > 1:
- urls = [url + u for u in urls[1:]]
- url = urls
+ url = filepicker.getSelectedFiles()
+ else:
+ url = filepicker.getSelectedFiles()[0]
path = filepicker.getDisplayDirectory()
filepicker.dispose()
return url, path
@@ -333,10 +419,22 @@ def executeShell(ctx, url, option=''):
shell = createService(ctx, 'com.sun.star.system.SystemShellExecute')
shell.execute(url, option, 0)
-def executeDispatch(ctx, url, /, **args):
- frame = getDesktop(ctx).getCurrentFrame()
- arguments = getPropertyValueSet(args)
- getDispatcher(ctx).executeDispatch(frame, url, '', 0, arguments)
+def executeDispatch(ctx, url, /, **kwargs):
+ frame = _getCurrentFrame(ctx)
+ properties = getPropertyValueSet(kwargs)
+ getDispatcher(ctx).executeDispatch(frame, url, '', 0, properties)
+
+def executeDesktopDispatch(ctx, url, listener=None, /, **kwargs):
+ frame = _getCurrentFrame(ctx)
+ properties = getPropertyValueSet(kwargs)
+ executeFrameDispatch(ctx, frame, url, listener, *properties)
+
+def _getCurrentFrame(ctx):
+ desktop = getDesktop(ctx)
+ frame = desktop.getCurrentFrame()
+ if frame is None:
+ frame = desktop
+ return frame
def executeFrameDispatch(ctx, frame, url, listener=None, /, *properties):
url = getUrl(ctx, url)
@@ -347,11 +445,11 @@ def executeFrameDispatch(ctx, frame, url, listener=None, /, *properties):
else:
dispatcher.dispatch(url, properties)
-def createMessageBox(peer, box, button, title, message):
- return getMessageBox(peer.getToolkit(), peer, box, button, title, message)
-
-def getMessageBox(toolkit, peer, box, button, title, message):
- return toolkit.createMessageBox(peer, box, button, title, message)
+def createMessageBox(ctx, title, message, box=ERRORBOX, button=1, parent=None):
+ toolkit = getToolKit(ctx)
+ if parent is None:
+ parent = toolkit.getDesktopWindow()
+ return toolkit.createMessageBox(parent, box, button, title, message)
def createService(ctx, name, *args, **kwargs):
if args:
@@ -363,10 +461,13 @@ def createService(ctx, name, *args, **kwargs):
service = ctx.ServiceManager.createInstanceWithContext(name, ctx)
return service
-def getArgumentSet(properties):
+def getArgumentSet(properties, lower=True):
arguments = {}
for property in properties:
- arguments[property.Name] = property.Value
+ name = property.Name
+ if lower:
+ name = name.lower()
+ arguments[name] = property.Value
return arguments
def getDefaultPropertyValueSet(args, default):
@@ -408,19 +509,6 @@ def getPropertySetInfoChangeEvent(source, name, reason, handle=-1):
event.Handle = handle
event.Reason = reason
-def createWindow(ctx, extension, xdl, name):
- dialog = getDialog(ctx, extension, xdl, None, None)
- possize = Rectangle(dialog.Model.PositionX, dialog.Model.PositionY, dialog.Model.Width, dialog.Model.Height)
- dialog.dispose()
- desktop = getDesktop(ctx)
- args = getNamedValueSet({'FrameName': name, 'PosSize': possize})
- frame = createService(ctx, 'com.sun.star.frame.TaskCreator').createInstanceWithArguments(args)
- frames = desktop.getFrames()
- frame.setTitle(_getUniqueName(frames, name))
- frame.setCreator(desktop)
- frames.append(frame)
- return frame.getContainerWindow()
-
def _getUniqueName(frames, name):
count = 0
for i in range(frames.getCount()):
@@ -430,15 +518,6 @@ def _getUniqueName(frames, name):
name = '%s - %s' % (name, (count +1))
return name
-
-def getParentWindow(ctx):
- desktop = getDesktop(ctx)
- try:
- parent = desktop.getCurrentFrame().getContainerWindow()
- except:
- parent = None
- return parent
-
def getDateTime(utc=True):
if utc:
t = datetime.datetime.utcnow()
diff --git a/uno/lib/uno/wizard/__init__.py b/uno/lib/uno/wizard/__init__.py
index 47432631..0f7a7349 100644
--- a/uno/lib/uno/wizard/__init__.py
+++ b/uno/lib/uno/wizard/__init__.py
@@ -28,3 +28,4 @@
"""
from .wizard import Wizard
+
diff --git a/uno/lib/uno/wizard/wizard.py b/uno/lib/uno/wizard/wizard.py
index bd30d116..a6050a67 100644
--- a/uno/lib/uno/wizard/wizard.py
+++ b/uno/lib/uno/wizard/wizard.py
@@ -30,16 +30,15 @@
import uno
import unohelper
-from com.sun.star.logging.LogLevel import SEVERE
-
-from com.sun.star.ui.dialogs import XWizard
+from com.sun.star.container import NoSuchElementException
+from com.sun.star.lang import XComponent
from com.sun.star.lang import XInitialization
from com.sun.star.lang import IllegalArgumentException
-from com.sun.star.util import InvalidStateException
+from com.sun.star.logging.LogLevel import SEVERE
-from com.sun.star.container import NoSuchElementException
+from com.sun.star.ui.dialogs import XWizard
from com.sun.star.ui.dialogs.ExecutableDialogResults import CANCEL
from com.sun.star.ui.dialogs.ExecutableDialogResults import OK
@@ -48,24 +47,30 @@
from com.sun.star.ui.dialogs.WizardTravelType import BACKWARD
from com.sun.star.ui.dialogs.WizardTravelType import FINISH
+from com.sun.star.util import CloseVetoException
+from com.sun.star.util import InvalidStateException
+
from .wizardmodel import WizardModel
+
from .wizardview import WizardView
+
+from .wizardhandler import CloseListener
from .wizardhandler import DialogHandler
from .wizardhandler import ItemListener
+from .wizardhandler import WindowHandler
-from ..logger import getLogger
+from ...logger import getLogger
-from ..unotool import hasInterface
+from ...unotool import hasInterface
-from ..configuration import g_extension
+from ...configuration import g_extension
import traceback
class Wizard(unohelper.Base,
- XWizard,
- XInitialization):
- def __init__(self, ctx, auto=-1, resize=False, parent=None):
+ XWizard):
+ def __init__(self, ctx, auto=-1, name=None, point=None, parent=None, resize=True):
self._ctx = ctx
self._helpUrl = ''
self._auto = auto
@@ -74,12 +79,26 @@ def __init__(self, ctx, auto=-1, resize=False, parent=None):
self._currentPath = -1
self._multiPaths = False
self._controller = None
+ self._closed = False
self._model = WizardModel(ctx)
title = self._model.getRoadmapTitle()
- self._view = WizardView(ctx, DialogHandler(self), ItemListener(self), parent, title)
+ if name:
+ handler, self._listener = WindowHandler(self), CloseListener(self)
+ else:
+ handler, self._listener = DialogHandler(self), None
+ self._view = WizardView(ctx, handler, self._listener, ItemListener(self), parent, name, title, resize, point)
roadmap = self._view.getRoadmapModel()
self._model.setRoadmapModel(roadmap)
+# XCloseListener
+ def queryClosing(self, source, ownership):
+ self._queryClosing(ownership)
+
+ def notifyClosing(self, source):
+ if self._listener:
+ source.removeCloseListener(self._listener)
+ self._dispose()
+
# XWizard
# XWizard Attributes
@property
@@ -93,7 +112,7 @@ def HelpURL(self, url):
@property
def DialogWindow(self):
- return self._view.getDialog()
+ return self._view.getDialogWindow()
# XWizard Methods
def getCurrentPage(self):
@@ -165,7 +184,12 @@ def execute(self):
if not self._isCurrentPathSet():
self._initPath(0, False)
self._initPage()
- return self._view.execute()
+ if self._view.isModal():
+ status = self._view.execute()
+ self._dispose()
+ else:
+ status = OK
+ return status
# XInitialization
def initialize(self, arguments):
@@ -194,10 +218,16 @@ def doFinish(self):
reason = self._getCommitReason()
if self._model.doFinish(reason):
if self._controller.confirmFinish():
- self._view.endDialog(OK)
+ if self._view.isModal():
+ self._view.endDialog(OK)
+ else:
+ self._tryToClose()
def doCancel(self):
- self._view.endDialog(CANCEL)
+ if self._view.isModal():
+ self._view.endDialog(CANCEL)
+ else:
+ self._tryToClose()
# Wizard private getter methods
def _isComplete(self):
@@ -303,7 +333,7 @@ def _isAutoLoad(self, page=None):
if page is None:
nextindex = self._getFirstPageId()
else:
- nextindex = self._getCurrentPath().index(page) +1
+ nextindex = self._getCurrentPath().index(page) + 1
return nextindex < self._auto
def _getPath(self, index, final):
@@ -343,6 +373,27 @@ def _initNextPage(self):
return init
# Wizard private setter methods
+ def _dispose(self):
+ interface = 'com.sun.star.lang.XComponent'
+ if self._controller and hasInterface(self._controller, interface):
+ self._controller.dispose()
+ self._model.dispose()
+ self._view.dispose()
+
+ def _tryToClose(self):
+ try:
+ self._queryClosing()
+ except CloseVetoException as e:
+ pass
+ else:
+ self._view.close()
+
+ def _queryClosing(self, ownership=False):
+ if not ownership:
+ interface = 'com.sun.star.util.XCloseable'
+ if self._controller and hasInterface(self._controller, interface):
+ self._controller.close(ownership)
+
def _initPath(self, index, final):
complete, paths = self._getPath(index, final)
self._model.initRoadmap(self._controller, paths, complete)
@@ -384,6 +435,9 @@ def _updateButton(self):
self._view.updateButtonFinish(enabled)
# Private Exception getter methods
+ def _getEventObject(self):
+ return uno.createUnoStruct('com.sun.star.lang.EventObject', self)
+
def _getIllegalArgumentException(self, position, code, method):
e = IllegalArgumentException()
e.ArgumentPosition = position
diff --git a/uno/lib/uno/wizard/wizardhandler.py b/uno/lib/uno/wizard/wizardhandler.py
index c3a85c87..31674704 100644
--- a/uno/lib/uno/wizard/wizardhandler.py
+++ b/uno/lib/uno/wizard/wizardhandler.py
@@ -29,9 +29,12 @@
import unohelper
+from com.sun.star.awt import XContainerWindowEventHandler
from com.sun.star.awt import XDialogEventHandler
from com.sun.star.awt import XItemListener
+from com.sun.star.util import XCloseListener
+
import traceback
@@ -59,9 +62,43 @@ def callHandlerMethod(self, dialog, event, method):
self._manager.doCancel()
handled = True
return handled
- except Exception as e:
- msg = "Error: %s" % traceback.format_exc()
- print(msg)
+ except:
+ print("DialogHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
+
+ def getSupportedMethodNames(self):
+ return ('Help',
+ 'Previous',
+ 'Next',
+ 'Finish',
+ 'Cancel')
+
+
+class WindowHandler(unohelper.Base,
+ XContainerWindowEventHandler):
+ def __init__(self, manager):
+ self._manager = manager
+
+# XContainerWindowEventHandler
+ def callHandlerMethod(self, dialog, event, method):
+ try:
+ handled = False
+ if method == 'Help':
+ handled = True
+ elif method == 'Previous':
+ self._manager.travelPrevious()
+ handled = True
+ elif method == 'Next':
+ self._manager.travelNext()
+ handled = True
+ elif method == 'Finish':
+ self._manager.doFinish()
+ handled = True
+ elif method == 'Cancel':
+ self._manager.doCancel()
+ handled = True
+ return handled
+ except:
+ print("WindowHandler.callHandlerMethod() ERROR: %s" % traceback.format_exc())
def getSupportedMethodNames(self):
return ('Help',
@@ -80,9 +117,25 @@ def __init__(self, manager):
def itemStateChanged(self, event):
try:
self._manager.changeRoadmapStep(event.ItemId)
- except Exception as e:
- msg = "Error: %s" % traceback.format_exc()
- print(msg)
+ except:
+ print("ItemListener.itemStateChanged() ERROR: %s" % traceback.format_exc())
def disposing(self, event):
pass
+
+
+class CloseListener(unohelper.Base,
+ XCloseListener):
+ def __init__(self, manager):
+ self._manager = manager
+
+ # XCloseListener
+ def queryClosing(self, event, ownership):
+ self._manager.queryClosing(event.Source, ownership)
+
+ def notifyClosing(self, event):
+ self._manager.notifyClosing(event.Source)
+
+ def disposing(self, event):
+ pass
+
diff --git a/uno/lib/uno/wizard/wizardmodel.py b/uno/lib/uno/wizard/wizardmodel.py
index e9344333..265bc04e 100644
--- a/uno/lib/uno/wizard/wizardmodel.py
+++ b/uno/lib/uno/wizard/wizardmodel.py
@@ -30,9 +30,10 @@
import uno
import unohelper
-from ..unotool import getStringResource
+from ...unotool import getStringResource
+from ...unotool import hasInterface
-from ..configuration import g_identifier
+from ...configuration import g_identifier
import traceback
@@ -46,6 +47,12 @@ def __init__(self, ctx):
self._resolver = getStringResource(ctx, g_identifier, 'dialogs', 'Wizard')
self._resources = {'Roadmap': 'Wizard.Roadmap.Text'}
+ def dispose(self):
+ interface = 'com.sun.star.lang.XComponent'
+ for page in self._pages.values():
+ if page and hasInterface(page, interface):
+ page.dispose()
+
def setRoadmapModel(self, model):
self._roadmap = model
diff --git a/uno/lib/uno/wizard/wizardview.py b/uno/lib/uno/wizard/wizardview.py
index 8d293687..745ede03 100644
--- a/uno/lib/uno/wizard/wizardview.py
+++ b/uno/lib/uno/wizard/wizardview.py
@@ -30,65 +30,114 @@
import uno
import unohelper
+from com.sun.star.awt import Size
+from com.sun.star.awt.PosSize import POSSIZE
+from com.sun.star.awt.PosSize import SIZE
+
from com.sun.star.ui.dialogs.WizardButton import NEXT
from com.sun.star.ui.dialogs.WizardButton import PREVIOUS
from com.sun.star.ui.dialogs.WizardButton import FINISH
from com.sun.star.ui.dialogs.WizardButton import CANCEL
from com.sun.star.ui.dialogs.WizardButton import HELP
-from ..unotool import createWindow
-from ..unotool import getDialog
+from com.sun.star.util.MeasureUnit import APPFONT
+
+from ...unotool import getContainerWindow
+from ...unotool import getDialog
+from ...unotool import getTopWindow
-from ..configuration import g_identifier
+from ...configuration import g_identifier
import traceback
class WizardView(unohelper.Base):
- def __init__(self, ctx, handler, listener, parent, title, modal=True):
+ def __init__(self, ctx, handler, listener, listener1, parent, name, title, resize, point):
self._name = 'Roadmap1'
- #if not modal and parent is None:
- # parent = createWindow(ctx, g_identifier, 'Wizard', title).getPeer()
- self._dialog = getDialog(ctx, g_identifier, 'Wizard', handler, parent)
+ if name:
+ # XXX: With a frame name we use a TOP XWindow
+ self._frame = getTopWindow(ctx, name)
+ peer = self._frame.getContainerWindow()
+ self._dialog = getContainerWindow(ctx, peer, handler, g_identifier, 'WizardTop')
+ # XXX: setComponent is needed if we want a StatusIndicator at the bottom
+ self._frame.setComponent(self._dialog, None)
+ self._frame.addCloseListener(listener)
+ else:
+ # XXX: Without frame name we use a MODAL XDialog
+ self._frame = None
+ self._dialog = getDialog(ctx, g_identifier, 'Wizard', handler, parent)
+ self._point = point
rectangle = uno.createUnoStruct('com.sun.star.awt.Rectangle', 0, 0, 85, 180)
roadmap = self._getRoadmap(title, rectangle, 0)
- roadmap.addItemListener(listener)
+ roadmap.addItemListener(listener1)
self._button = {CANCEL: 1, FINISH: 2, NEXT: 3, PREVIOUS: 4, HELP: 5}
self._spacer = 5
+ if self._frame and not resize:
+ peer.setVisible(True)
+ self._dialog.setVisible(True)
# WizardView getter methods
+ def isModal(self):
+ return self._frame is None
+
def getDialog(self):
return self._dialog
+ def getDialogWindow(self):
+ if self._frame:
+ dialog = self._frame.getContainerWindow()
+ else:
+ dialog = self._dialog
+ return dialog
+
def getRoadmapModel(self):
return self._getRoadmapControl().Model
# WizardView setter methods
def execute(self):
- return self._dialog.execute()
+ if self._frame is None:
+ return self._dialog.execute()
def endDialog(self, result):
- self._dialog.endDialog(result)
+ if self._frame is None:
+ self._dialog.endDialog(result)
- def dispose(self):
- self._dialog.dispose()
- self._dialog = None
+ def close(self):
+ if self._frame:
+ self._frame.close(True)
- def isDisposed(self):
- return self._dialog is None
+ def dispose(self):
+ if self._frame is None:
+ self._dialog.dispose()
def setDialogTitle(self, title):
- self._dialog.setTitle(title)
+ if self._frame:
+ self._frame.setTitle(title)
+ else:
+ self._dialog.setTitle(title)
def setDialogSize(self, page):
button = self._getButton(HELP).Model
- button.PositionY = page.Height + self._spacer
+ button.PositionY = page.Height + self._spacer
dialog = self._dialog.Model
dialog.Height = button.PositionY + button.Height + self._spacer
dialog.Width = page.PositionX + page.Width
# We assume all buttons are named appropriately
- for i in (1,2,3,4):
+ for i in (1, 2, 3, 4):
self._setButtonPosition(i, button.PositionY, dialog.Width)
+ if self._frame:
+ window = self._frame.getContainerWindow()
+ size = self._dialog.convertSizeToPixel(Size(dialog.Width, dialog.Height), APPFONT)
+ if self._point:
+ point = self._dialog.convertPointToPixel(self._point, APPFONT)
+ possize = POSSIZE
+ else:
+ point = uno.createUnoStruct('com.sun.star.awt.Point', 0, 0)
+ possize = SIZE
+ window.setPosSize(point.X, point.Y, size.Width, size.Height, possize)
+ # XXX: Visibility should be done after size adjustment
+ window.setVisible(True)
+ self._dialog.setVisible(True)
def enableHelpButton(self, enabled):
self._getButton(HELP).Model.Enabled = enabled
diff --git a/uno/rdb/idl/com/sun/star/task/XTaskEvent.idl b/uno/rdb/idl/com/sun/star/task/XTaskEvent.idl
new file mode 100644
index 00000000..2223e66a
--- /dev/null
+++ b/uno/rdb/idl/com/sun/star/task/XTaskEvent.idl
@@ -0,0 +1,49 @@
+/*
+╔════════════════════════════════════════════════════════════════════════════════════╗
+║ ║
+║ Copyright (c) 2020-25 https://prrvchr.github.io ║
+║ ║
+║ Permission is hereby granted, free of charge, to any person obtaining ║
+║ a copy of this software and associated documentation files (the "Software"), ║
+║ to deal in the Software without restriction, including without limitation ║
+║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║
+║ and/or sell copies of the Software, and to permit persons to whom the Software ║
+║ is furnished to do so, subject to the following conditions: ║
+║ ║
+║ The above copyright notice and this permission notice shall be included in ║
+║ all copies or substantial portions of the Software. ║
+║ ║
+║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║
+║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║
+║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║
+║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║
+║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║
+║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║
+║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║
+║ ║
+╚════════════════════════════════════════════════════════════════════════════════════╝
+ */
+
+#ifndef __com_sun_star_task_XTaskEvent_idl__
+#define __com_sun_star_task_XTaskEvent_idl__
+
+#include
+
+module com { module sun { module star { module task {
+
+interface XTaskEvent : com::sun::star::uno::XInterface
+{
+
+ boolean isSet();
+
+ void set();
+
+ void clear();
+
+ boolean wait([in] float Timeout);
+
+};
+
+}; }; }; };
+
+#endif