mirror of
https://github.com/dgtlmoon/changedetection.io.git
synced 2026-05-04 00:30:53 +00:00
fceb3cf39f
Build and push containers / metadata (push) Has been cancelled
Build and push containers / build-push-containers (push) Has been cancelled
Publish Python 🐍distribution 📦 to PyPI and TestPyPI / Build distribution 📦 (push) Has been cancelled
Publish Python 🐍distribution 📦 to PyPI and TestPyPI / Test the built package works basically. (push) Has been cancelled
Publish Python 🐍distribution 📦 to PyPI and TestPyPI / Publish Python 🐍 distribution 📦 to PyPI (push) Has been cancelled
ChangeDetection.io App Test / lint-code (push) Has been cancelled
ChangeDetection.io App Test / test-application-3-10 (push) Has been cancelled
ChangeDetection.io App Test / test-application-3-11 (push) Has been cancelled
ChangeDetection.io App Test / test-application-3-12 (push) Has been cancelled
ChangeDetection.io App Test / test-application-3-13 (push) Has been cancelled
ChangeDetection.io Container Build Test / Build linux/amd64 (alpine) (push) Has been cancelled
ChangeDetection.io Container Build Test / Build linux/arm64 (alpine) (push) Has been cancelled
ChangeDetection.io Container Build Test / Build linux/amd64 (main) (push) Has been cancelled
ChangeDetection.io Container Build Test / Build linux/arm/v7 (main) (push) Has been cancelled
ChangeDetection.io Container Build Test / Build linux/arm/v8 (main) (push) Has been cancelled
ChangeDetection.io Container Build Test / Build linux/arm64 (main) (push) Has been cancelled
67 lines
1.8 KiB
Python
67 lines
1.8 KiB
Python
"""
|
|
Legacy format loader for url-watches.json.
|
|
|
|
Provides functions to detect and load from the legacy monolithic JSON format.
|
|
Used during migration (update_26) to transition to individual watch.json files.
|
|
"""
|
|
|
|
import os
|
|
import json
|
|
from loguru import logger
|
|
|
|
# Try to import orjson for faster JSON serialization
|
|
try:
|
|
import orjson
|
|
HAS_ORJSON = True
|
|
except ImportError:
|
|
HAS_ORJSON = False
|
|
|
|
|
|
def has_legacy_datastore(datastore_path):
|
|
"""
|
|
Check if a legacy url-watches.json file exists.
|
|
|
|
This is used by update_26 to determine if migration is needed.
|
|
|
|
Args:
|
|
datastore_path: Path to datastore directory
|
|
|
|
Returns:
|
|
bool: True if url-watches.json exists
|
|
"""
|
|
url_watches_json = os.path.join(datastore_path, "url-watches.json")
|
|
return os.path.exists(url_watches_json)
|
|
|
|
|
|
def load_legacy_format(json_store_path):
|
|
"""
|
|
Load datastore from legacy url-watches.json format.
|
|
|
|
Args:
|
|
json_store_path: Full path to url-watches.json file
|
|
|
|
Returns:
|
|
dict: Loaded datastore data with 'watching', 'settings', etc.
|
|
None: If file doesn't exist or loading failed
|
|
"""
|
|
logger.info(f"Loading from legacy format: {json_store_path}")
|
|
|
|
if not os.path.isfile(json_store_path):
|
|
logger.warning(f"Legacy file not found: {json_store_path}")
|
|
return None
|
|
|
|
try:
|
|
if HAS_ORJSON:
|
|
with open(json_store_path, 'rb') as f:
|
|
data = orjson.loads(f.read())
|
|
else:
|
|
with open(json_store_path, 'r', encoding='utf-8') as f:
|
|
data = json.load(f)
|
|
|
|
logger.info(f"Loaded {len(data.get('watching', {}))} watches from legacy format")
|
|
return data
|
|
|
|
except Exception as e:
|
|
logger.error(f"Failed to load legacy format: {e}")
|
|
return None
|