Функция вспомогательной вспомогательной флажки не сохранение файлов в app.config ['upload_folder'] путьPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Функция вспомогательной вспомогательной флажки не сохранение файлов в app.config ['upload_folder'] путь

Сообщение Anonymous »

Я работаю над приложением Flask и создал файл file_handler.py для организации некоторых функций утилиты. Предполагается, что одна из функций в helper.py содержит загруженный файл в папку, указанную App.config ['upload_folder'] , определенный в App.py .
Чтобы получить доступ к пути загрузки, я передаю app.config ['upload_folder'] в качестве аргумента. Тем не менее, файл фактически не сохранен в указанном папке, и система не возникает. Хотя моя обработка ошибок повышает значение ValueError: «Нет контента, доступного для обработки» .
Кроме того, у меня есть другая функция в helper.py walile_loader () , которая использует запрос Flask для получения данных. Поскольку helper.py является отдельным файлом, я также передаю объект запроса в качестве аргумента. Мне интересно, может ли это вызвать проблему - может ли функция не сработает молча, потому что она не может должным образом получить должным образом доступа к хосту или контексту из другого модуля?

Код: Выделить всё

from file_handler import File
import logging

load_dotenv()

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)

files = File(app)

@app.route('/', methods=['GET', 'POST'])
def index():
result = ''

if request.method == 'POST':
query = request.form.get('query', '').lower().strip()
text = []

input_groups = set()
for key in request.form.keys():
if key.startswith('file_type_'):
group_id = key.split('_')[2]
input_groups.add(group_id)

for group_id in sorted(input_groups):
file_type = request.form.get(f'file_type_{group_id}')
if file_type:
try:
content = File.file_loader(file_type, request, group_id)
text.extend(content)
except Exception as e:
print(f"Error processing input {group_id}: {e}")

if len(text)==0:
raise ValueError("No content available for processing")

return render_template('index.html', result=result)
file_handler.py

Код: Выделить всё

class File():
def __init__(self, app):
self.SUPPORTED_FILE_TYPES = {}
self.app = app

def validate_file_type(self, filename, expected_type):
"""Validate if the uploaded file matches the expected type"""
if not filename:
return False, "No filename provided"

ext = filename.rsplit('.', 1)[-1].lower() if '.' in filename else ''

if not ext:
return False, "File has no extension"

if ext not in self.SUPPORTED_FILE_TYPES:
return False, f"Unsupported file extension: .{ext}"

if expected_type == 'text' and ext != 'txt':
return False, "Please upload a .txt file for Text File type"
elif expected_type == 'pdf' and ext != 'pdf':
return False, "Please upload a .pdf file for PDF File type"
elif expected_type == 'code' and ext in ['txt', 'pdf']:
return False, "Please upload a programming file for Code File type"

return True, ext

def file_save(self, file, expected_type):
"""Save uploaded file with proper validation"""
if not file or file.filename == '':
return None, "No file selected"

is_valid, result = self.validate_file_type(file.filename, expected_type)
if not is_valid:
return None, result

ext = result
secure_name = secure_filename(file.filename)
file_path = os.path.join(self.app.config['UPLOAD_FOLDER'], secure_name)

try:
file.save(file_path)
return file_path, ext
except Exception as e:
return None, f"Failed to save file:  {str(e)}"

@staticmethod
def validate_url(url):
"""Validate URL format"""
if not url or not url.strip():
return False, "URL cannot be empty"

url = url.strip()
if not url.startswith(('http://', 'https://')):
url = 'https://' + url

if not validators.url(url):
return False, "Invalid URL format"

return True, url

def file_loader(self, file_type, request, group_id):
"""Load and process different file types"""
content = ''
splitter = RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=30)

if file_type == 'text':
file_path, _ = self.file_save(request.files.get(f'file_{group_id}'), 'text')
loader = TextLoader(file_path)

elif file_type == 'pdf':
file_path, _ = self.file_save(request.files.get(f'file_{group_id}'), 'pdf')
loader = PyMuPDFLoader(file_path, mode="page", images_inner_format="text", images_parser=RapidOCRBlobParser())

elif file_type == 'code':
file_path, ext = self.file_save(request.files.get(f'file_{group_id}'), 'code')
if ext != 'ipynb':
loader = TextLoader(file_path)
try:
splitter = splitter.from_language(self.SUPPORTED_FILE_TYPES[ext])
except:
pass
else:
loader = NotebookLoader(file_path, include_outputs=True, max_output_length=30)

elif file_type == 'link':
url = request.form.get(f'url_{group_id}', '').strip()
is_valid, validated_url = self.validate_url(url)
if not is_valid:
raise ValueError(validated_url)

loader = WebBaseLoader(validated_url)

elif file_type == 'pasted':
content = request.form.get(f'pasted_{group_id}', '').strip()
if not content:
raise ValueError("No text was pasted")

try:
for page in loader.lazy_load():
content += page.page_content + '\n'

except Exception as e:
raise ValueError(f"Could not load content from file: {str(e)}")

if not content.strip():
raise ValueError("The file appears to be empty or contains no readable content")

chunks = splitter.split_text(content)

return chunks
< /code>
Вопросы: < /p>

  может перенести запрос в вспомогательную функцию, подобную этой причине, связанные с доступом к данным формы или заголовкам? app.config ['upload_folder'] 
? И это работает нормально, если эти коды присутствуют в одном и том же файле.
Любая идея будет оценена!>

Подробнее здесь: https://stackoverflow.com/questions/796 ... older-path
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»