mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-05 18:55:23 +03:00
Add functionality to update YAML config file with PUT request in HTTP endpoint
This commit is contained in:
parent
9e531b0b5b
commit
ee9bac3500
@ -29,7 +29,7 @@ from playhouse.shortcuts import model_to_dict
|
|||||||
from tzlocal import get_localzone_name
|
from tzlocal import get_localzone_name
|
||||||
|
|
||||||
from frigate.config import FrigateConfig
|
from frigate.config import FrigateConfig
|
||||||
from frigate.const import CLIPS_DIR, MAX_SEGMENT_DURATION, RECORD_DIR
|
from frigate.const import CLIPS_DIR, MAX_SEGMENT_DURATION, RECORD_DIR, CONFIG_DIR
|
||||||
from frigate.events.external import ExternalEventProcessor
|
from frigate.events.external import ExternalEventProcessor
|
||||||
from frigate.models import Event, Recordings, Timeline
|
from frigate.models import Event, Recordings, Timeline
|
||||||
from frigate.object_processing import TrackedObject
|
from frigate.object_processing import TrackedObject
|
||||||
@ -44,6 +44,7 @@ from frigate.util import (
|
|||||||
get_tz_modifiers,
|
get_tz_modifiers,
|
||||||
restart_frigate,
|
restart_frigate,
|
||||||
vainfo_hwaccel,
|
vainfo_hwaccel,
|
||||||
|
update_yaml_file,
|
||||||
)
|
)
|
||||||
from frigate.version import VERSION
|
from frigate.version import VERSION
|
||||||
|
|
||||||
@ -1008,6 +1009,22 @@ def config_save():
|
|||||||
return "Config successfully saved.", 200
|
return "Config successfully saved.", 200
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/config/set", methods=["PUT"])
|
||||||
|
def config_set():
|
||||||
|
config_file = os.environ.get("CONFIG_FILE", f"{CONFIG_DIR}/config.yml")
|
||||||
|
|
||||||
|
# Check if we can use .yaml instead of .yml
|
||||||
|
config_file_yaml = config_file.replace(".yml", ".yaml")
|
||||||
|
|
||||||
|
if os.path.isfile(config_file_yaml):
|
||||||
|
config_file = config_file_yaml
|
||||||
|
|
||||||
|
for key, value in request.args:
|
||||||
|
logging.debug(f"Update config key {key} to {value}")
|
||||||
|
keys = key.split(".")
|
||||||
|
update_yaml_file(config_file, keys, value)
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/config/schema.json")
|
@bp.route("/config/schema.json")
|
||||||
def config_schema():
|
def config_schema():
|
||||||
return current_app.response_class(
|
return current_app.response_class(
|
||||||
|
|||||||
@ -14,6 +14,7 @@ from collections import Counter
|
|||||||
from collections.abc import Mapping
|
from collections.abc import Mapping
|
||||||
from multiprocessing import shared_memory
|
from multiprocessing import shared_memory
|
||||||
from typing import Any, AnyStr, Optional, Tuple
|
from typing import Any, AnyStr, Optional, Tuple
|
||||||
|
from ruamel.yaml import YAML
|
||||||
|
|
||||||
import cv2
|
import cv2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@ -1210,3 +1211,20 @@ def get_video_properties(url, get_duration=False):
|
|||||||
result["height"] = round(height)
|
result["height"] = round(height)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def update_yaml_file(file_path, key_path, new_value):
|
||||||
|
yaml = YAML()
|
||||||
|
with open(file_path, "r") as f:
|
||||||
|
data = yaml.safe_load(f)
|
||||||
|
|
||||||
|
temp = data
|
||||||
|
for key in key_path[:-1]:
|
||||||
|
if key not in temp:
|
||||||
|
temp[key] = {}
|
||||||
|
temp = temp[key]
|
||||||
|
|
||||||
|
temp[key_path[-1]] = new_value
|
||||||
|
|
||||||
|
with open(file_path, "w") as f:
|
||||||
|
yaml.dump(data, f)
|
||||||
|
|||||||
@ -14,6 +14,7 @@ pydantic == 1.10.*
|
|||||||
git+https://github.com/fbcotter/py3nvml#egg=py3nvml
|
git+https://github.com/fbcotter/py3nvml#egg=py3nvml
|
||||||
PyYAML == 6.0
|
PyYAML == 6.0
|
||||||
pytz == 2023.3
|
pytz == 2023.3
|
||||||
|
ruamel.yaml == 0.17.*
|
||||||
tzlocal == 5.0.*
|
tzlocal == 5.0.*
|
||||||
types-PyYAML == 6.0.*
|
types-PyYAML == 6.0.*
|
||||||
requests == 2.31.*
|
requests == 2.31.*
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user