Change Cart disposition

This commit is contained in:
Pierret Hugo
2024-10-28 14:56:47 +01:00
parent b3d8ef6f36
commit 390c90d607
11 changed files with 133 additions and 8 deletions

8
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="Flask">
<option name="enabled" value="true" />
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PackageRequirementsSettings">
<option name="versionSpecifier" value="Strong equality (==x.y.z)" />
</component>
<component name="TemplatesService">
<option name="TEMPLATE_CONFIGURATION" value="Jinja2" />
</component>
</module>

View File

@@ -0,0 +1,20 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N803" />
<option value="N806" />
</list>
</option>
</inspection_tool>
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="main.models.oq.scanner.scan.serialize" />
</list>
</option>
</inspection_tool>
</profile>
</component>

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.8 (Letterboxd-Diary-Posters-Picker-Backend)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (Letterboxd-Diary-Posters-Picker-Backend)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Letterboxd-Diary-Posters-Picker-Backend.iml" filepath="$PROJECT_DIR$/.idea/Letterboxd-Diary-Posters-Picker-Backend.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@@ -5,6 +5,7 @@ from src.api.routes import api_bp
from flask_sse import sse from flask_sse import sse
from config import config from config import config
def create_app(): def create_app():
app = Flask(__name__) app = Flask(__name__)
CORS(app) CORS(app)
@@ -17,8 +18,9 @@ def create_app():
return app return app
if __name__ == "__main__": if __name__ == "__main__":
port = int(os.environ.get("PORT", 5000)) port = int(os.environ.get("PORT", 5000))
app = create_app() app = create_app()
app.run(host='0.0.0.0', port=port, debug=True) app.run(host='0.0.0.0', port=port, debug=True)

View File

@@ -1,7 +1,10 @@
import io import io
import math import math
import os import os
from flask import Blueprint, jsonify, request, session import zipfile
import requests
from flask import Blueprint, jsonify, request, session, send_file
from werkzeug.utils import secure_filename from werkzeug.utils import secure_filename
from src.services.tmdb_service import TMDBService from src.services.tmdb_service import TMDBService
from src.services.image_service import ImageService from src.services.image_service import ImageService
@@ -149,3 +152,48 @@ def delete_csv():
except Exception as e: except Exception as e:
print(f"Error in delete_csv: {str(e)}") print(f"Error in delete_csv: {str(e)}")
return jsonify({'error': 'An error occurred while deleting the CSV file'}), 500 return jsonify({'error': 'An error occurred while deleting the CSV file'}), 500
@api_bp.route('/download-posters', methods=['POST'])
def download_posters():
user_id = session.get('user_id')
if user_id not in user_csvs:
return jsonify({'error': 'No CSV file found. Please upload a CSV file.'}), 404
csv_content = user_csvs[user_id]
try:
zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zip_file:
if isinstance(csv_content, bytes):
df = pd.read_csv(io.StringIO(csv_content.decode('utf-8')))
else:
df = pd.read_csv(io.StringIO(csv_content))
movies = df.to_dict('records')
for movie in movies:
poster_url = get_poster_url(movie['Name'], movie['Year'])
if poster_url:
try:
response = requests.get(poster_url)
if response.status_code == 200:
zip_file.writestr(f"{movie['Name']}_{movie['Year']}.jpg", response.content)
except Exception as e:
print(f"Error downloading poster for {movie['Name']}: {str(e)}")
continue
zip_buffer.seek(0)
return send_file(
zip_buffer,
mimetype='application/zip',
as_attachment=True,
download_name='posters.zip'
)
except Exception as e:
print(f"Error in download_posters: {str(e)}")
return jsonify({'error': 'An error occurred while fetching movie posters'}), 500

View File

@@ -1,8 +1,10 @@
import re import re
import os import os
def clean_filename(filename): def clean_filename(filename):
return re.sub(r'[\\/*?:"<>|]', '_', filename) return re.sub(r'[\\/*?:"<>|]', '_', filename)
def ensure_directory(directory): def ensure_directory(directory):
os.makedirs(directory, exist_ok=True) os.makedirs(directory, exist_ok=True)

View File

@@ -2,6 +2,7 @@ import requests
from PIL import Image from PIL import Image
import io import io
class ImageService: class ImageService:
def download_image(self, image_url, save_path=None): def download_image(self, image_url, save_path=None):
response = requests.get(image_url, stream=True) response = requests.get(image_url, stream=True)