From 45c1692dff157f8adbca2e51daf783e081a53006 Mon Sep 17 00:00:00 2001 From: Matthew Keeler Date: Mon, 12 Aug 2024 14:59:25 -0400 Subject: [PATCH] test: Atomically update file data source file --- .github/workflows/ci.yml | 25 ++++++++++++++++++- .../integrations/files/file_data_source.py | 9 +++++++ ldclient/testing/test_file_data_source.py | 3 +++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0aa13560..cd91a3bf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,8 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + # python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + python-version: ["3.8"] services: redis: @@ -49,6 +50,28 @@ jobs: - name: Run tests run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - run: make test + - name: Verify typehints run: make lint diff --git a/ldclient/impl/integrations/files/file_data_source.py b/ldclient/impl/integrations/files/file_data_source.py index d02d5b28..063c1694 100644 --- a/ldclient/impl/integrations/files/file_data_source.py +++ b/ldclient/impl/integrations/files/file_data_source.py @@ -112,6 +112,7 @@ def _load_file(self, path, all_data): with open(path, 'r') as f: content = f.read() parsed = self._parse_content(content) + for key, flag in parsed.get('flags', {}).items(): _sanitize_json_item(flag) self._add_item(all_data, FEATURES, flag) @@ -165,6 +166,13 @@ def __init__(self, resolved_paths, reloader): class LDWatchdogHandler(watchdog.events.FileSystemEventHandler): def on_any_event(self, event): + if isinstance(event, watchdog.events.FileDeletedEvent): + return + + if isinstance(event, watchdog.events.FileMovedEvent) and event.dest_path in watched_files: + reloader() + return + if event.src_path in watched_files: reloader() @@ -213,4 +221,5 @@ def _check_file_times(self): ret[path] = os.path.getmtime(path) except: ret[path] = None + return ret diff --git a/ldclient/testing/test_file_data_source.py b/ldclient/testing/test_file_data_source.py index 56da7762..cb8dec31 100644 --- a/ldclient/testing/test_file_data_source.py +++ b/ldclient/testing/test_file_data_source.py @@ -2,6 +2,8 @@ import os from typing import List +from ldclient.impl.util import log + import pytest import tempfile import threading @@ -236,6 +238,7 @@ def test_does_not_reload_modified_file_if_auto_update_is_off(): def do_auto_update_test(options): path = make_temp_file(flag_only_json) + options['paths'] = path try: source = make_data_source(Config("SDK_KEY"), **options)