mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
Add rename exports function to API (#8687)
* Add rename exports function to API * Update http.py * Feedback * Formatting fixes * Update http.py Formatting fix * Update http.py Lint fix
This commit is contained in:
parent
1eb5105b24
commit
3dd0192fe6
@ -302,6 +302,14 @@ It is also possible to export this recording as a timelapse.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `DELETE /api/export/<export_name>`
|
||||||
|
|
||||||
|
Delete an export from disk.
|
||||||
|
|
||||||
|
### `PATCH /api/export/<export_name_current>/<export_name_new>`
|
||||||
|
|
||||||
|
Renames an export.
|
||||||
|
|
||||||
### `GET /api/<camera_name>/recordings/summary`
|
### `GET /api/<camera_name>/recordings/summary`
|
||||||
|
|
||||||
Hourly summary of recordings data for a camera.
|
Hourly summary of recordings data for a camera.
|
||||||
|
@ -4,6 +4,7 @@ import glob
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import subprocess as sp
|
import subprocess as sp
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
@ -1954,9 +1955,68 @@ def export_recording(camera_name: str, start_time, end_time):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def export_filename_check_extension(filename: str):
|
||||||
|
if filename.endswith(".mp4"):
|
||||||
|
return filename
|
||||||
|
else:
|
||||||
|
return filename + ".mp4"
|
||||||
|
|
||||||
|
|
||||||
|
def export_filename_is_valid(filename: str):
|
||||||
|
if re.search(r"[^:_A-Za-z0-9]", filename) or filename.startswith("in_progress."):
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/export/<file_name_current>/<file_name_new>", methods=["PATCH"])
|
||||||
|
def export_rename(file_name_current, file_name_new: str):
|
||||||
|
safe_file_name_current = secure_filename(
|
||||||
|
export_filename_check_extension(file_name_current)
|
||||||
|
)
|
||||||
|
file_current = os.path.join(EXPORT_DIR, safe_file_name_current)
|
||||||
|
|
||||||
|
if not os.path.exists(file_current):
|
||||||
|
return make_response(
|
||||||
|
jsonify({"success": False, "message": f"{file_name_current} not found."}),
|
||||||
|
404,
|
||||||
|
)
|
||||||
|
|
||||||
|
if not export_filename_is_valid(file_name_new):
|
||||||
|
return make_response(
|
||||||
|
jsonify(
|
||||||
|
{
|
||||||
|
"success": False,
|
||||||
|
"message": f"{file_name_new} contains illegal characters.",
|
||||||
|
}
|
||||||
|
),
|
||||||
|
400,
|
||||||
|
)
|
||||||
|
|
||||||
|
safe_file_name_new = secure_filename(export_filename_check_extension(file_name_new))
|
||||||
|
file_new = os.path.join(EXPORT_DIR, safe_file_name_new)
|
||||||
|
|
||||||
|
if os.path.exists(file_new):
|
||||||
|
return make_response(
|
||||||
|
jsonify({"success": False, "message": f"{file_name_new} already exists."}),
|
||||||
|
400,
|
||||||
|
)
|
||||||
|
|
||||||
|
os.rename(file_current, file_new)
|
||||||
|
return make_response(
|
||||||
|
jsonify(
|
||||||
|
{
|
||||||
|
"success": True,
|
||||||
|
"message": "Successfully renamed file.",
|
||||||
|
}
|
||||||
|
),
|
||||||
|
200,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/export/<file_name>", methods=["DELETE"])
|
@bp.route("/export/<file_name>", methods=["DELETE"])
|
||||||
def export_delete(file_name: str):
|
def export_delete(file_name: str):
|
||||||
safe_file_name = secure_filename(file_name)
|
safe_file_name = secure_filename(export_filename_check_extension(file_name))
|
||||||
file = os.path.join(EXPORT_DIR, safe_file_name)
|
file = os.path.join(EXPORT_DIR, safe_file_name)
|
||||||
|
|
||||||
if not os.path.exists(file):
|
if not os.path.exists(file):
|
||||||
|
Loading…
Reference in New Issue
Block a user