Загрузить файлы в «/»
This commit is contained in:
parent
30059aaa52
commit
d80dbd5d01
1 changed files with 291 additions and 409 deletions
120
main.py
120
main.py
|
|
@ -5,10 +5,6 @@ import aiosqlite
|
|||
from quart import Quart, render_template, request, send_from_directory, Response
|
||||
from datetime import datetime
|
||||
from babel.dates import format_datetime
|
||||
<<<<<<< HEAD
|
||||
from urllib.parse import quote
|
||||
=======
|
||||
>>>>>>> 9cc0929a09596abeb93ee7f2711527fb5da25f7a
|
||||
|
||||
|
||||
|
||||
|
|
@ -33,7 +29,6 @@ last_download_times = {}
|
|||
DOWNLOAD_COOLDOWN = 10
|
||||
|
||||
async def get_maps(page=1, per_page=30):
|
||||
print(f"Запрос карт на странице {page}, с {per_page} картами на странице.")
|
||||
async with aiosqlite.connect(DB_PATH) as conn:
|
||||
cursor = await conn.cursor()
|
||||
|
||||
|
|
@ -48,89 +43,54 @@ async def get_maps(page=1, per_page=30):
|
|||
|
||||
maps = await cursor.fetchall()
|
||||
|
||||
print(f"Получено {len(maps)} карт на странице {page}.")
|
||||
return maps
|
||||
|
||||
def get_image_path(filepath):
|
||||
<<<<<<< HEAD
|
||||
print(f"Получение пути изображения для файла: {filepath}")
|
||||
image_path = os.path.join(DATA, filepath)
|
||||
if not os.path.exists(image_path):
|
||||
print("Изображение не найдено, возвращаем дефолтное.")
|
||||
=======
|
||||
image_path = os.path.join(DATA, filepath)
|
||||
if not os.path.exists(image_path):
|
||||
>>>>>>> 9cc0929a09596abeb93ee7f2711527fb5da25f7a
|
||||
return "/images/image.jpg"
|
||||
return f"/images/{filepath.split('/')[0]}/{filepath.split('/')[1]}/{filepath.split('/')[1]}.jpg"
|
||||
|
||||
def get_star_image(stars):
|
||||
print(f"Получение изображения для {stars} звезд.")
|
||||
if stars is None or stars == 0:
|
||||
return "/stars/0-star.png"
|
||||
return f"/stars/{stars}-star.png"
|
||||
|
||||
@app.route('/images/<path:filename>')
|
||||
async def serve_image(filename):
|
||||
<<<<<<< HEAD
|
||||
print(f"Запрос изображения с именем: {filename}")
|
||||
image_path = os.path.join(DATA, filename)
|
||||
if os.path.exists(image_path):
|
||||
print(f"Изображение {filename} найдено и отправляется.")
|
||||
=======
|
||||
image_path = os.path.join(DATA, filename)
|
||||
if os.path.exists(image_path):
|
||||
>>>>>>> 9cc0929a09596abeb93ee7f2711527fb5da25f7a
|
||||
return await send_from_directory(DATA, filename)
|
||||
else:
|
||||
default_image_path = os.path.join(DATA, 'image.jpg')
|
||||
if os.path.exists(default_image_path):
|
||||
<<<<<<< HEAD
|
||||
print("Изображение не найдено, отправляем дефолтное.")
|
||||
return await send_from_directory(DATA, 'image.jpg')
|
||||
print("Не найдено ни одного изображения.")
|
||||
=======
|
||||
return await send_from_directory(DATA, 'image.jpg')
|
||||
>>>>>>> 9cc0929a09596abeb93ee7f2711527fb5da25f7a
|
||||
return "Default image not found", 404
|
||||
|
||||
@app.route('/stars/<filename>')
|
||||
async def serve_star_image(filename):
|
||||
<<<<<<< HEAD
|
||||
print(f"Запрос изображения звезды: {filename}")
|
||||
stars = os.path.join(DATA, 'stars')
|
||||
star_path = os.path.join(stars, filename)
|
||||
if os.path.exists(star_path):
|
||||
print(f"Звезда {filename} найдена и отправляется.")
|
||||
=======
|
||||
stars = os.path.join(DATA, 'stars')
|
||||
star_path = os.path.join(stars, filename)
|
||||
if os.path.exists(star_path):
|
||||
>>>>>>> 9cc0929a09596abeb93ee7f2711527fb5da25f7a
|
||||
return await send_from_directory(stars, filename)
|
||||
else:
|
||||
print("Изображение звезды не найдено.")
|
||||
return "Star image not found", 404
|
||||
|
||||
@app.route('/download_bsp')
|
||||
async def download_bsp():
|
||||
user_ip = request.remote_addr
|
||||
print(f"Запрос на скачивание от IP: {user_ip}")
|
||||
|
||||
current_time = time.time()
|
||||
last_time = last_download_times.get(user_ip, 0)
|
||||
|
||||
if current_time - last_time < DOWNLOAD_COOLDOWN:
|
||||
wait_time = DOWNLOAD_COOLDOWN - (current_time - last_time)
|
||||
print(f"Пользователь должен подождать {int(wait_time)} секунд до следующего скачивания.")
|
||||
return f"Please wait {int(wait_time)} seconds before downloading again.", 429
|
||||
|
||||
last_download_times[user_ip] = current_time
|
||||
print("Тайм-аут скачивания обновлен.")
|
||||
|
||||
image_path = request.args.get('image_path')
|
||||
if not image_path:
|
||||
print("Не указан путь к изображению.")
|
||||
return "No image path provided", 400
|
||||
|
||||
image_folder = os.path.dirname(image_path.replace("/images/", ""))
|
||||
|
|
@ -142,19 +102,13 @@ async def download_bsp():
|
|||
break
|
||||
|
||||
if not bsp_filename:
|
||||
print("Не найден .bsp файл в той же директории.")
|
||||
return "No .bsp file found in the same directory", 404
|
||||
|
||||
file_path = os.path.join(DATA, image_folder, bsp_filename)
|
||||
<<<<<<< HEAD
|
||||
print(f"Найден файл для скачивания: {file_path}")
|
||||
=======
|
||||
>>>>>>> 9cc0929a09596abeb93ee7f2711527fb5da25f7a
|
||||
|
||||
SPEED_LIMIT = 60 * 1024 * 1024 // 8
|
||||
SPEED_LIMIT = 40 * 1024 * 1024 // 8
|
||||
|
||||
async def file_stream():
|
||||
print("Начало передачи файла по частям.")
|
||||
with open(file_path, 'rb') as f:
|
||||
while chunk := f.read(SPEED_LIMIT):
|
||||
yield chunk
|
||||
|
|
@ -167,7 +121,6 @@ async def download_bsp():
|
|||
|
||||
@app.route('/main')
|
||||
async def main_page():
|
||||
print("Запрос страницы карты с параметрами:", request.args)
|
||||
image_url = request.args.get('image_url', 'default_image.jpg')
|
||||
map_title = request.args.get('map_title', 'Default Map Title')
|
||||
|
||||
|
|
@ -214,9 +167,6 @@ async def main_page():
|
|||
else:
|
||||
file_size_display = 'Не найден'
|
||||
|
||||
print(f"Отправка страницы карты {map_title} с данными:")
|
||||
print(f"Игра: {game_mode}, Теги: {tags}, Размер файла: {file_size_display}, Время добавления: {added_time}")
|
||||
|
||||
return await render_template(
|
||||
'main.html',
|
||||
image_url=image_url,
|
||||
|
|
@ -232,7 +182,6 @@ async def main_page():
|
|||
|
||||
@app.route('/')
|
||||
async def index():
|
||||
print("Запрос главной страницы с параметрами фильтрации:", request.args)
|
||||
page = int(request.args.get('page', 1))
|
||||
selected_game_modes = request.args.getlist('game_modes')
|
||||
start_date = request.args.get('start_date')
|
||||
|
|
@ -283,7 +232,6 @@ async def index():
|
|||
([f'stars={selected_stars}'] if selected_stars else [])
|
||||
)
|
||||
|
||||
print(f"Общее количество карт: {total_maps}, Страниц: {total_pages}")
|
||||
return await render_template(
|
||||
'workshop.html',
|
||||
maps_data=maps_data,
|
||||
|
|
@ -297,7 +245,6 @@ async def index():
|
|||
)
|
||||
|
||||
async def get_maps_filtered(page=1, selected_game_modes=None, start_date=None, end_date=None, search_title=None, selected_stars=None):
|
||||
print(f"Фильтрация карт с параметрами: {locals()}")
|
||||
async with aiosqlite.connect(DB_PATH) as conn:
|
||||
cursor = await conn.cursor()
|
||||
|
||||
|
|
@ -334,76 +281,11 @@ async def get_maps_filtered(page=1, selected_game_modes=None, start_date=None, e
|
|||
await cursor.execute(query, params)
|
||||
maps = await cursor.fetchall()
|
||||
|
||||
print(f"Найдено {len(maps)} карт после фильтрации.")
|
||||
return maps
|
||||
|
||||
|
||||
@app.route('/favicon.ico')
|
||||
async def favicon():
|
||||
return await send_from_directory(os.getcwd(), 'favicon.ico')
|
||||
|
||||
|
||||
@app.route('/sitemap.xml')
|
||||
async def sitemap():
|
||||
domain = "https://csgoworkshop.ru"
|
||||
async with aiosqlite.connect(DB_PATH) as conn:
|
||||
cursor = await conn.cursor()
|
||||
|
||||
# Получаем список всех карт
|
||||
await cursor.execute('SELECT Title FROM maps')
|
||||
maps = await cursor.fetchall()
|
||||
|
||||
# Создаем базовые URL для sitemap
|
||||
urls = [
|
||||
f"{domain}/",
|
||||
f"{domain}/main",
|
||||
]
|
||||
|
||||
# Добавляем URL-адреса для всех карт
|
||||
for map_title, in maps:
|
||||
encoded_title = quote(map_title)
|
||||
urls.append(f"{domain}/main?map_title={encoded_title}")
|
||||
|
||||
# Генерируем XML
|
||||
sitemap_xml = '<?xml version="1.0" encoding="UTF-8"?>\n'
|
||||
sitemap_xml += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n'
|
||||
|
||||
for url in urls:
|
||||
sitemap_xml += " <url>\n"
|
||||
sitemap_xml += f" <loc>{url}</loc>\n"
|
||||
sitemap_xml += f" <lastmod>{datetime.utcnow().strftime('%Y-%m-%d')}</lastmod>\n"
|
||||
sitemap_xml += " <changefreq>weekly</changefreq>\n"
|
||||
sitemap_xml += " <priority>0.8</priority>\n"
|
||||
sitemap_xml += " </url>\n"
|
||||
|
||||
sitemap_xml += '</urlset>'
|
||||
|
||||
return Response(sitemap_xml, content_type='application/xml')
|
||||
|
||||
|
||||
|
||||
@app.route('/robots.txt')
|
||||
async def robots_txt():
|
||||
content = """
|
||||
User-agent: *
|
||||
Disallow:
|
||||
"""
|
||||
return Response(content, content_type='text/plain')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
<<<<<<< HEAD
|
||||
print("Запуск приложения...")
|
||||
import hypercorn.asyncio
|
||||
from hypercorn.config import Config
|
||||
|
||||
config = Config()
|
||||
config.bind = ["0.0.0.0:5000"]
|
||||
hypercorn.asyncio.run(app, config)
|
||||
=======
|
||||
import hypercorn.asyncio
|
||||
from hypercorn.config import Config
|
||||
config = Config()
|
||||
config.bind = ["0.0.0.0:5000"]
|
||||
hypercorn.asyncio.run(app, config)
|
||||
>>>>>>> 9cc0929a09596abeb93ee7f2711527fb5da25f7a
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue