pluginify 1.0.0.post11.dev0__tar.gz → 1.0.0.post16.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/PKG-INFO +1 -1
- pluginify-1.0.0.post16.dev0/docs/source/releases/latest/fix-concurrent-writes.yaml +16 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/_version.py +2 -2
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/create_plugin_registries.py +17 -7
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pyproject.toml +1 -1
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/.github/workflows/deploy-docs.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/.github/workflows/integ_test.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/.github/workflows/mypy.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/.github/workflows/package-and-publish.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/.github/workflows/status-check.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/.github/workflows/tag-and-release.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/LICENSE +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/README.md +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/1.0.0-no-bug-fixes-required-on-this-release.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/1.19.0-internal-release.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/1.19.0-open-source-upload.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/1.19.0-patch-internal-use-vars-runner.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/ci-fix-perms.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/copy-geoips-functionality.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/ignore-dot-files-and-dirs.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/module-to-class-updates.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/obp-plugin-registry-updates.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/pluginify-updates-jeremy-comments.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/pypi-publish-bug-fix.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/remove-all-geoips-references.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/replace-geoips-functionality.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/update-black-formatting.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/1.0.0/version-update.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/latest/atomic-registry-writes.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/latest/ignore-files-in-utils-directories.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/docs/source/releases/latest/use-geoips-ci.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/__init__.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/commandline_typer.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/config.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/errors.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/interfaces/__init__.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/interfaces/base.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/interfaces/class_based/data_modifiers.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/interfaces/class_based_plugin.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/interfaces/yaml_based/configs.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/plugin_registry.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/plugins/classes/data_modifiers/cuboid.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/plugins/yaml/configs/stucco.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/pydantic_models/v1/configs.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/utils/__init__.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/utils/context_managers.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/utils/validators.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/tests/conftest.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/tests/unit_tests/config/test_config.py +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/tests/unit_tests/plugin_registries/files/bad/invalid_interfaces.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/tests/unit_tests/plugin_registries/files/bad/missing_lowest_keys.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/tests/unit_tests/plugin_registries/files/bad/missing_plugin_types.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/tests/unit_tests/plugin_registries/files/good/pluginify.yaml +0 -0
- {pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/tests/unit_tests/plugin_registries/test_plugin_registries.py +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
bug fix:
|
|
2
|
+
- title: "Use NamedTemporaryFile for safer writes"
|
|
3
|
+
description: |
|
|
4
|
+
Plugin registry temp files were still having conflicts when
|
|
5
|
+
written by threads in the same process. To fix this I switched
|
|
6
|
+
to using tempfile.NamedTemporaryFile which is guaranteed to
|
|
7
|
+
avoid conflicts.
|
|
8
|
+
files:
|
|
9
|
+
modified:
|
|
10
|
+
- pluginfiy/create_plugin_registries.py
|
|
11
|
+
related-issue:
|
|
12
|
+
number: null
|
|
13
|
+
repo_url: ''
|
|
14
|
+
date:
|
|
15
|
+
start: 2026-10-30
|
|
16
|
+
finish: 2026-10-30
|
{pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/create_plugin_registries.py
RENAMED
|
@@ -17,7 +17,7 @@ import logging
|
|
|
17
17
|
from importlib import metadata, resources, util, import_module
|
|
18
18
|
from inspect import signature
|
|
19
19
|
import json
|
|
20
|
-
from os import
|
|
20
|
+
from os import makedirs, remove, replace
|
|
21
21
|
from os.path import (
|
|
22
22
|
basename,
|
|
23
23
|
dirname,
|
|
@@ -29,6 +29,7 @@ from os.path import (
|
|
|
29
29
|
)
|
|
30
30
|
from pathlib import Path
|
|
31
31
|
import re
|
|
32
|
+
import tempfile
|
|
32
33
|
import warnings
|
|
33
34
|
|
|
34
35
|
import yaml
|
|
@@ -323,18 +324,27 @@ def write_registered_plugins(pkg_dir, plugins, save_type):
|
|
|
323
324
|
# Write to a temporary file and move it into place, so that other processes
|
|
324
325
|
# reading the registry (for example parallel test workers) never see a
|
|
325
326
|
# partially written file.
|
|
326
|
-
tmp_abspath =
|
|
327
|
+
tmp_abspath = None
|
|
327
328
|
try:
|
|
328
|
-
with
|
|
329
|
+
with tempfile.NamedTemporaryFile(
|
|
330
|
+
mode="w",
|
|
331
|
+
dir=dirname(reg_plug_abspath),
|
|
332
|
+
suffix=".tmp",
|
|
333
|
+
delete=False,
|
|
334
|
+
) as plugin_registry:
|
|
335
|
+
tmp_abspath = plugin_registry.name
|
|
329
336
|
if save_type == "yaml":
|
|
330
337
|
yaml.safe_dump(plugins, plugin_registry, default_flow_style=False)
|
|
331
338
|
else:
|
|
332
339
|
json.dump(plugins, plugin_registry, indent=4)
|
|
340
|
+
|
|
333
341
|
replace(tmp_abspath, reg_plug_abspath)
|
|
334
|
-
|
|
335
|
-
if
|
|
336
|
-
|
|
337
|
-
|
|
342
|
+
finally:
|
|
343
|
+
if tmp_abspath is not None:
|
|
344
|
+
try:
|
|
345
|
+
remove(tmp_abspath)
|
|
346
|
+
except FileNotFoundError:
|
|
347
|
+
pass
|
|
338
348
|
|
|
339
349
|
|
|
340
350
|
def create_plugin_registries(plugin_packages, save_type, namespace):
|
{pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/.github/workflows/deploy-docs.yaml
RENAMED
|
File without changes
|
{pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/.github/workflows/integ_test.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/.github/workflows/status-check.yaml
RENAMED
|
File without changes
|
{pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/.github/workflows/tag-and-release.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/interfaces/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/pydantic_models/v1/configs.py
RENAMED
|
File without changes
|
|
File without changes
|
{pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/pluginify/utils/context_managers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pluginify-1.0.0.post11.dev0 → pluginify-1.0.0.post16.dev0}/tests/unit_tests/config/test_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|