mirror of
https://github.com/dgtlmoon/changedetection.io.git
synced 2025-11-07 10:07:00 +00:00
Compare commits
3 Commits
HTML-notif
...
openapi-me
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
222e89a7a1 | ||
|
|
a64f47c2fe | ||
|
|
e9905c2f64 |
@@ -1,10 +1,7 @@
|
|||||||
import copy
|
import copy
|
||||||
import yaml
|
|
||||||
import functools
|
import functools
|
||||||
from flask import request, abort
|
from flask import request, abort
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from openapi_core import OpenAPI
|
|
||||||
from openapi_core.contrib.flask import FlaskOpenAPIRequest
|
|
||||||
from . import api_schema
|
from . import api_schema
|
||||||
from ..model import watch_base
|
from ..model import watch_base
|
||||||
|
|
||||||
@@ -34,7 +31,11 @@ schema_delete_notification_urls['required'] = ['notification_urls']
|
|||||||
|
|
||||||
@functools.cache
|
@functools.cache
|
||||||
def get_openapi_spec():
|
def get_openapi_spec():
|
||||||
|
"""Lazy load OpenAPI spec and dependencies only when validation is needed."""
|
||||||
import os
|
import os
|
||||||
|
import yaml # Lazy import - only loaded when API validation is actually used
|
||||||
|
from openapi_core import OpenAPI # Lazy import - saves ~10.7 MB on startup
|
||||||
|
|
||||||
spec_path = os.path.join(os.path.dirname(__file__), '../../docs/api-spec.yaml')
|
spec_path = os.path.join(os.path.dirname(__file__), '../../docs/api-spec.yaml')
|
||||||
with open(spec_path, 'r') as f:
|
with open(spec_path, 'r') as f:
|
||||||
spec_dict = yaml.safe_load(f)
|
spec_dict = yaml.safe_load(f)
|
||||||
@@ -49,6 +50,9 @@ def validate_openapi_request(operation_id):
|
|||||||
try:
|
try:
|
||||||
# Skip OpenAPI validation for GET requests since they don't have request bodies
|
# Skip OpenAPI validation for GET requests since they don't have request bodies
|
||||||
if request.method.upper() != 'GET':
|
if request.method.upper() != 'GET':
|
||||||
|
# Lazy import - only loaded when actually validating a request
|
||||||
|
from openapi_core.contrib.flask import FlaskOpenAPIRequest
|
||||||
|
|
||||||
spec = get_openapi_spec()
|
spec = get_openapi_spec()
|
||||||
openapi_request = FlaskOpenAPIRequest(request)
|
openapi_request = FlaskOpenAPIRequest(request)
|
||||||
result = spec.unmarshal_request(openapi_request)
|
result = spec.unmarshal_request(openapi_request)
|
||||||
|
|||||||
@@ -44,11 +44,8 @@ XML_CONTENT_TYPES = [
|
|||||||
|
|
||||||
HTML_PATTERNS = ['<!doctype html', '<html', '<head', '<body', '<script', '<iframe', '<div']
|
HTML_PATTERNS = ['<!doctype html', '<html', '<head', '<body', '<script', '<iframe', '<div']
|
||||||
|
|
||||||
import re
|
|
||||||
import magic
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
|
|
||||||
class guess_stream_type():
|
class guess_stream_type():
|
||||||
is_pdf = False
|
is_pdf = False
|
||||||
is_json = False
|
is_json = False
|
||||||
@@ -60,7 +57,7 @@ class guess_stream_type():
|
|||||||
is_yaml = False
|
is_yaml = False
|
||||||
|
|
||||||
def __init__(self, http_content_header, content):
|
def __init__(self, http_content_header, content):
|
||||||
|
import re
|
||||||
magic_content_header = http_content_header
|
magic_content_header = http_content_header
|
||||||
test_content = content[:200].lower().strip()
|
test_content = content[:200].lower().strip()
|
||||||
|
|
||||||
@@ -70,6 +67,8 @@ class guess_stream_type():
|
|||||||
# Magic will sometimes call text/plain as text/html!
|
# Magic will sometimes call text/plain as text/html!
|
||||||
magic_result = None
|
magic_result = None
|
||||||
try:
|
try:
|
||||||
|
import magic
|
||||||
|
|
||||||
mime = magic.from_buffer(content[:200], mime=True) # Send the original content
|
mime = magic.from_buffer(content[:200], mime=True) # Send the original content
|
||||||
logger.debug(f"Guessing mime type, original content_type '{http_content_header}', mime type detected '{mime}'")
|
logger.debug(f"Guessing mime type, original content_type '{http_content_header}', mime type detected '{mime}'")
|
||||||
if mime and "/" in mime:
|
if mime and "/" in mime:
|
||||||
|
|||||||
Reference in New Issue
Block a user