♻️(convert) reuse existing convert yprovider endpoint for content API
reuse convert service instead of renaming it in content
This commit is contained in:
committed by
Manuel Raynaud
parent
8a8a1460e5
commit
ede0a77665
@@ -1,6 +1,5 @@
|
||||
"""Y-Provider API services."""
|
||||
|
||||
import json
|
||||
from base64 import b64encode
|
||||
|
||||
from django.conf import settings
|
||||
@@ -20,8 +19,8 @@ class ServiceUnavailableError(ConversionError):
|
||||
"""Raised when the conversion service is unavailable."""
|
||||
|
||||
|
||||
class YProviderAPI:
|
||||
"""Service class for Y-Provider API operations."""
|
||||
class YdocConverter:
|
||||
"""Service class for conversion-related operations."""
|
||||
|
||||
@property
|
||||
def auth_header(self):
|
||||
@@ -29,7 +28,7 @@ class YProviderAPI:
|
||||
# Note: Yprovider microservice accepts only raw token, which is not recommended
|
||||
return f"Bearer {settings.Y_PROVIDER_API_KEY}"
|
||||
|
||||
def _request(self, url, data, content_type):
|
||||
def _request(self, url, data, content_type, accept):
|
||||
"""Make a request to the Y-Provider API."""
|
||||
response = requests.post(
|
||||
url,
|
||||
@@ -37,6 +36,7 @@ class YProviderAPI:
|
||||
headers={
|
||||
"Authorization": self.auth_header,
|
||||
"Content-Type": content_type,
|
||||
"Accept": accept,
|
||||
},
|
||||
timeout=settings.CONVERSION_API_TIMEOUT,
|
||||
verify=settings.CONVERSION_API_SECURE,
|
||||
@@ -44,7 +44,9 @@ class YProviderAPI:
|
||||
response.raise_for_status()
|
||||
return response
|
||||
|
||||
def convert(self, text):
|
||||
def convert(
|
||||
self, text, content_type="text/markdown", accept="application/vnd.yjs.doc"
|
||||
):
|
||||
"""Convert a Markdown text into our internal format using an external microservice."""
|
||||
|
||||
if not text:
|
||||
@@ -54,27 +56,17 @@ class YProviderAPI:
|
||||
response = self._request(
|
||||
f"{settings.Y_PROVIDER_API_BASE_URL}{settings.CONVERSION_API_ENDPOINT}/",
|
||||
text,
|
||||
"text/markdown",
|
||||
content_type,
|
||||
accept,
|
||||
)
|
||||
return b64encode(response.content).decode("utf-8")
|
||||
if accept == "application/vnd.yjs.doc":
|
||||
return b64encode(response.content).decode("utf-8")
|
||||
if accept in {"text/markdown", "text/html"}:
|
||||
return response.text
|
||||
if accept == "application/json":
|
||||
return response.json()
|
||||
raise ValidationError("Unsupported format")
|
||||
except requests.RequestException as err:
|
||||
raise ServiceUnavailableError(
|
||||
"Failed to connect to backend service",
|
||||
) from err
|
||||
|
||||
def content(self, base64_content, format_type):
|
||||
"""Convert base64 Yjs content to different formats using the y-provider service."""
|
||||
|
||||
if not base64_content:
|
||||
raise ValidationError("Input content cannot be empty")
|
||||
|
||||
data = json.dumps({"content": base64_content, "format": format_type})
|
||||
try:
|
||||
response = self._request(
|
||||
f"{settings.Y_PROVIDER_API_BASE_URL}content/", data, "application/json"
|
||||
)
|
||||
return response.json()
|
||||
except requests.RequestException as err:
|
||||
raise ServiceUnavailableError(
|
||||
"Failed to connect to backend service",
|
||||
"Failed to connect to conversion service",
|
||||
) from err
|
||||
Reference in New Issue
Block a user