up_fail / app.py
DmitrMakeev's picture
Update app.py
f1e11eb verified
raw
history blame
5.9 kB
from flask import Flask, request, render_template_string, send_from_directory, jsonify, render_template, Response
from flask import render_template
import sqlite3
import os
import uuid
import shutil
import requests
from datetime import datetime
import pytz
from ns import send_ns
api_key_sys = os.getenv('api_key_sys')
app = Flask(__name__, template_folder="./")
app.config['DEBUG'] = True
UPLOAD_FOLDER = 'static'
HTML_FOLDER = 'html'
# Создание директорий, если они не существуют
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
if not os.path.exists(HTML_FOLDER):
os.makedirs(HTML_FOLDER)
@app.route('/get_current_time', methods=['GET'])
def get_current_time():
utc_now = datetime.utcnow()
msk_tz = pytz.timezone('Europe/Moscow')
msk_now = utc_now.replace(tzinfo=pytz.utc).astimezone(msk_tz)
current_time = msk_now.strftime('%Y-%m-%d %H:%M:%S')
return jsonify({'current_time': current_time})
# Отправка в НС1 в раб. дни нужно поправить нас групп
@app.route('/add_ns', methods=['GET'])
def handle_in1():
datas = request.json
name = datas.get('name')
email = datas.get('email')
phone = datas.get('phone')
base_url = 'https://api.notisend.ru/v1'
token = datas.get('token')
list_id = datas.get('list_id')
phone_id = datas.get('phone_id')
name_id = datas.get('name_id')
# Отправляем запросы в три разных места
response_ns = send_request(base_url, token, list_id, email, phone, name, phone_id, name_id)
# Возвращаем список ответов
return jsonify({'responses': [response_ns]})
def send_for_ns(*args):
# Здесь должен быть код для отправки запроса
# Вместо реальной отправки запроса, возвращаем фиктивный ответ
return {'status': 'success', 'message': 'Request sent successfully'}
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return "No file part", 400
file = request.files['file']
if file.filename == '':
return "No selected file", 400
# Генерация уникального имени файла
unique_filename = str(uuid.uuid4()) + os.path.splitext(file.filename)[1]
save_path = os.path.join(UPLOAD_FOLDER, unique_filename)
file.save(save_path)
# Возвращаем полный URL загруженного файла с протоколом https
full_url = request.url_root.replace('http://', 'https://') + 'uploads/' + unique_filename
return f"File uploaded successfully and saved to {full_url}", 200
@app.route('/uploads/<filename>', methods=['GET'])
def uploaded_file(filename):
return send_from_directory(UPLOAD_FOLDER, filename)
@app.route('/up_fa', methods=['GET'])
def up_fa():
return render_template('up_fa.html')
@app.route('/ns_info', methods=['GET'])
def ns_info():
return render_template('ns_info.html')
@app.route('/api/group/<int:group_id>/parameters', methods=['GET'])
def get_group_parameters(group_id):
api_token = request.args.get('apiToken')
if not api_token:
return jsonify({'error': 'API Token is required'}), 400
url = f'https://api.notisend.ru/v1/email/lists/{group_id}/parameters'
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {api_token}'
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
data = response.json()
return jsonify(data)
except requests.RequestException as e:
return jsonify({'error': str(e)}), 500
@app.route('/up_page', methods=['POST'])
def upload_page():
if 'file' not in request.files:
return "No file part", 400
file = request.files['file']
if file.filename == '':
return "No selected file", 400
filename = request.form.get('filename')
if not filename:
return "Filename is required", 400
save_path = os.path.join(HTML_FOLDER, filename + '.html')
file.save(save_path)
# Возвращаем полный URL загруженного файла с протоколом https
full_url = request.url_root.replace('http://', 'https://') + filename
return f"Page uploaded successfully and saved to {full_url}", 200
@app.route('/<path:filename>', methods=['GET'])
def serve_html(filename):
if not filename.endswith('.html'):
filename += '.html'
return send_from_directory(HTML_FOLDER, filename)
@app.route('/up_page', methods=['GET'])
def up_page():
return render_template('up_page.html')
@app.route('/monitor', methods=['GET'])
def monitor():
# Получаем информацию о загруженных файлах
files = os.listdir(UPLOAD_FOLDER)
html_files = os.listdir(HTML_FOLDER)
# Получаем информацию о дисковом пространстве
total, used, free = shutil.disk_usage("/")
# Преобразуем байты в гигабайты для удобства чтения
total_gb = total // (2**30)
used_gb = used // (2**30)
free_gb = free // (2**30)
return render_template('monitor.html',
uploaded_files=files,
uploaded_html_files=html_files,
disk_space={
'total': f"{total_gb} GB",
'used': f"{used_gb} GB",
'free': f"{free_gb} GB"
})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))