🚀 Add feature: Separate conversion functions
This commit is contained in:
parent
0f1a07da49
commit
afdfe1dbac
19 changed files with 318 additions and 17 deletions
|
@ -11,5 +11,70 @@ available_sources = AvailableSourcesResponse(
|
|||
name="linkedin_shares",
|
||||
format="csv",
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="LinkedIn Comments",
|
||||
name="linkedin_comments",
|
||||
format="csv",
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Facebook Posts", name="facebook_posts", format="json"
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Facebook Comments",
|
||||
name="facebook_comments",
|
||||
format="json",
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Instagram Posts",
|
||||
name="instagram_posts",
|
||||
format="json",
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Instagram Comments",
|
||||
name="instagram_comments",
|
||||
format="json",
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Instagram Stories",
|
||||
name="instagram_stories",
|
||||
format="json",
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Instagram Reels",
|
||||
name="instagram_reels",
|
||||
format="json",
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Instagram Stories",
|
||||
name="instagram_stories",
|
||||
format="image",
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Instagram Reels",
|
||||
name="instagram_reels",
|
||||
format="video",
|
||||
),
|
||||
AvailableSource(display_name="Bluesky", name="bluesky", format="car"),
|
||||
AvailableSource(
|
||||
display_name="Youtube Video", name="youtube_video", format="video"
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Youtube Shorts",
|
||||
name="youtube_shorts",
|
||||
format="video",
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Markdown", name="markdown", format="markdown"
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Wordpress", name="wordpress_xml", format="xml"
|
||||
),
|
||||
AvailableSource(display_name="Ebook", name="ebook_pdf", format="pdf"),
|
||||
AvailableSource(
|
||||
display_name="Ebook", name="ebook_epub", format="epub"
|
||||
),
|
||||
AvailableSource(
|
||||
display_name="Website", name="ebook_html", format="html"
|
||||
),
|
||||
],
|
||||
)
|
||||
|
|
0
backend/app/convert/__init__.py
Normal file
0
backend/app/convert/__init__.py
Normal file
10
backend/app/convert/convert_bluesky_car.py
Normal file
10
backend/app/convert/convert_bluesky_car.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_bluesky_car(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_export_txt.py
Normal file
10
backend/app/convert/convert_export_txt.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_export_txt(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_facebook_comments_json.py
Normal file
10
backend/app/convert/convert_facebook_comments_json.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_facebook_comments_json(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_facebook_posts_json.py
Normal file
10
backend/app/convert/convert_facebook_posts_json.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_facebook_posts_json(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_instagram_comments_json.py
Normal file
10
backend/app/convert/convert_instagram_comments_json.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_instagram_comments_json(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_instagram_posts_json.py
Normal file
10
backend/app/convert/convert_instagram_posts_json.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_instagram_posts_json(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_instagram_reels_json.py
Normal file
10
backend/app/convert/convert_instagram_reels_json.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_instagram_reels_json(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_instagram_reels_video.py
Normal file
10
backend/app/convert/convert_instagram_reels_video.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_instagram_reels_video(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_instagram_stories_image.py
Normal file
10
backend/app/convert/convert_instagram_stories_image.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_instagram_stories_image(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_instagram_stories_json.py
Normal file
10
backend/app/convert/convert_instagram_stories_json.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_instagram_stories_json(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_linkedin_comments_csv.py
Normal file
10
backend/app/convert/convert_linkedin_comments_csv.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_linkedin_comments_csv(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_linkedin_shares_csv.py
Normal file
10
backend/app/convert/convert_linkedin_shares_csv.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_linkedin_shares_csv(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_markdown_txt.py
Normal file
10
backend/app/convert/convert_markdown_txt.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_markdown_txt(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_youtube_shorts_video.py
Normal file
10
backend/app/convert/convert_youtube_shorts_video.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_youtube_shorts_video(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
10
backend/app/convert/convert_youtube_video_video.py
Normal file
10
backend/app/convert/convert_youtube_video_video.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from app.config import logger
|
||||
from app.models import ConversionResponse
|
||||
from fastapi import UploadFile
|
||||
|
||||
|
||||
def convert_youtube_video_video(file: UploadFile):
|
||||
# Implement conversion logic here
|
||||
logger.info(file.headers)
|
||||
converted_data = {} # Example data
|
||||
return ConversionResponse(converted_data=converted_data, status="success")
|
|
@ -1,6 +1,7 @@
|
|||
from typing import Dict, List
|
||||
from typing import Annotated, Dict, List
|
||||
|
||||
from pydantic import BaseModel
|
||||
from fastapi import Form, UploadFile
|
||||
from pydantic import BaseModel, model_validator
|
||||
|
||||
|
||||
class AnalysisRequest(BaseModel):
|
||||
|
@ -12,9 +13,36 @@ class AnalysisResponse(BaseModel):
|
|||
result: str
|
||||
|
||||
|
||||
class AvailableSource(BaseModel):
|
||||
display_name: str
|
||||
name: str
|
||||
format: str
|
||||
|
||||
|
||||
class AvailableSourcesResponse(BaseModel):
|
||||
sources: List[AvailableSource]
|
||||
|
||||
|
||||
class ConversionRequest(BaseModel):
|
||||
source_type: str
|
||||
source_data: str
|
||||
source_name: Annotated[str, Form()]
|
||||
source_format: Annotated[str, Form()]
|
||||
file: UploadFile
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
source_name: Annotated[str, Form()],
|
||||
source_format: Annotated[str, Form()],
|
||||
file: UploadFile,
|
||||
):
|
||||
super().__init__(
|
||||
source_name=source_name, source_format=source_format, file=file
|
||||
)
|
||||
|
||||
@model_validator(mode="after")
|
||||
def validate(self):
|
||||
if not self.source_format:
|
||||
self.source_format = "txt"
|
||||
return self
|
||||
|
||||
|
||||
class ConversionResponse(BaseModel):
|
||||
|
@ -48,13 +76,3 @@ class ImportRequest(BaseModel):
|
|||
|
||||
class ImportResponse(BaseModel):
|
||||
status: str
|
||||
|
||||
|
||||
class AvailableSource(BaseModel):
|
||||
display_name: str
|
||||
name: str
|
||||
format: str
|
||||
|
||||
|
||||
class AvailableSourcesResponse(BaseModel):
|
||||
sources: List[AvailableSource]
|
||||
|
|
|
@ -1,4 +1,37 @@
|
|||
from app.config import logger
|
||||
from app.convert.convert_bluesky_car import convert_bluesky_car
|
||||
from app.convert.convert_export_txt import convert_export_txt
|
||||
from app.convert.convert_facebook_comments_json import (
|
||||
convert_facebook_comments_json,
|
||||
)
|
||||
from app.convert.convert_facebook_posts_json import convert_facebook_posts_json
|
||||
from app.convert.convert_instagram_comments_json import (
|
||||
convert_instagram_comments_json,
|
||||
)
|
||||
from app.convert.convert_instagram_posts_json import (
|
||||
convert_instagram_posts_json,
|
||||
)
|
||||
from app.convert.convert_instagram_reels_json import (
|
||||
convert_instagram_reels_json,
|
||||
)
|
||||
from app.convert.convert_instagram_reels_video import (
|
||||
convert_instagram_reels_video,
|
||||
)
|
||||
from app.convert.convert_instagram_stories_image import (
|
||||
convert_instagram_stories_image,
|
||||
)
|
||||
from app.convert.convert_instagram_stories_json import (
|
||||
convert_instagram_stories_json,
|
||||
)
|
||||
from app.convert.convert_linkedin_comments_csv import (
|
||||
convert_linkedin_comments_csv,
|
||||
)
|
||||
from app.convert.convert_linkedin_shares_csv import convert_linkedin_shares_csv
|
||||
from app.convert.convert_markdown_txt import convert_markdown_txt
|
||||
from app.convert.convert_youtube_shorts_video import (
|
||||
convert_youtube_shorts_video,
|
||||
)
|
||||
from app.convert.convert_youtube_video_video import convert_youtube_video_video
|
||||
from app.models import ConversionRequest, ConversionResponse
|
||||
from fastapi import APIRouter
|
||||
|
||||
|
@ -10,9 +43,44 @@ def convert_data(request: ConversionRequest):
|
|||
"""
|
||||
Convert data from a source to normalized JSON
|
||||
"""
|
||||
logger.info(f"Converting {request.source_type} data to normalized JSON")
|
||||
# Example conversion logic (replace with actual implementation)
|
||||
converted_data = ...
|
||||
converted_data = None
|
||||
logger.info(f"Converting {request.source_name} data to normalized JSON")
|
||||
|
||||
if request.source_name == "linkedin_shares":
|
||||
converted_data = convert_linkedin_shares_csv(request.file)
|
||||
elif request.source_name == "linkedin_comments":
|
||||
converted_data = convert_linkedin_comments_csv(request.file)
|
||||
elif request.source_name == "facebook_posts":
|
||||
converted_data = convert_facebook_posts_json(request.file)
|
||||
elif request.source_name == "facebook_comments":
|
||||
converted_data = convert_facebook_comments_json(request.file)
|
||||
elif request.source_name == "instagram_posts":
|
||||
converted_data = convert_instagram_posts_json(request.file)
|
||||
elif request.source_name == "instagram_comments":
|
||||
converted_data = convert_instagram_comments_json(request.file)
|
||||
elif request.source_name == "instagram_stories":
|
||||
if request.source_format == "json":
|
||||
converted_data = convert_instagram_stories_json(request.file)
|
||||
elif request.source_format == "image":
|
||||
converted_data = convert_instagram_stories_image(request.file)
|
||||
elif request.source_name == "instagram_reels":
|
||||
if request.source_format == "json":
|
||||
converted_data = convert_instagram_reels_json(request.file)
|
||||
elif request.source_format == "video":
|
||||
converted_data = convert_instagram_reels_video(request.file)
|
||||
elif request.source_name == "bluesky":
|
||||
converted_data = convert_bluesky_car(request.file)
|
||||
elif request.source_name == "youtube_video":
|
||||
converted_data = convert_youtube_video_video(request.file)
|
||||
elif request.source_name == "youtube_shorts":
|
||||
converted_data = convert_youtube_shorts_video(request.file)
|
||||
elif request.source_name == "markdown":
|
||||
converted_data = convert_markdown_txt(request.file)
|
||||
elif request.source_name == "export":
|
||||
converted_data = convert_export_txt(request.file)
|
||||
else:
|
||||
value_error_message = f"Unsupported source name: {request.source_name}"
|
||||
raise ValueError(value_error_message)
|
||||
|
||||
return {
|
||||
"converted_data": converted_data,
|
||||
|
|
Loading…
Add table
Reference in a new issue