Spaces:
Sleeping
Sleeping
from flask import Flask, render_template, request, redirect, url_for, jsonify, flash | |
from db import signals as signals_module | |
from db import deeper as deeper_module | |
from db import paires as paires_module | |
import json | |
app = Flask(__name__) | |
app.secret_key = 'trading_signals_secret_key' | |
def index(): | |
# Fetch signals from GitHub | |
signals_response = signals_module.fetch_json_from_github() | |
deeper_response = deeper_module.fetch_json_from_github() | |
paires_response = paires_module.fetch_json_from_github() | |
signals_data = [] | |
system_status = { | |
'deeper': False, | |
'paires': False | |
} | |
if signals_response['success']: | |
signals_data = signals_response['data'] | |
if deeper_response['success']: | |
system_status['deeper'] = deeper_response['data'].get('status', False) | |
if paires_response['success']: | |
system_status['paires'] = paires_response['data'].get('status', False) | |
return render_template('index.html', | |
signals=signals_data, | |
system_status=system_status) | |
def get_signals(): | |
# Fetch signals from GitHub | |
response = signals_module.fetch_json_from_github() | |
if response['success']: | |
return jsonify(response['data']) | |
else: | |
return jsonify({"error": response['message']}), 500 | |
def delete_signal(signal_id): | |
# Get current signals | |
response = signals_module.fetch_json_from_github() | |
if not response['success']: | |
flash('Failed to fetch signals data', 'error') | |
return redirect(url_for('index')) | |
signals_data = response['data'] | |
# Check if signal_id is valid | |
if signal_id < 0 or signal_id >= len(signals_data): | |
flash('Invalid signal ID', 'error') | |
return redirect(url_for('index')) | |
# Remove the signal | |
signals_data.pop(signal_id) | |
# Update the signals.json file | |
auth_token, commit_oid = signals_module.fetch_authenticity_token_and_commit_oid() | |
if not auth_token or not commit_oid: | |
flash('Failed to get authentication tokens', 'error') | |
return redirect(url_for('index')) | |
# Convert the updated signals data to JSON string | |
new_content = json.dumps(signals_data, ensure_ascii=False) | |
# Update the signals.json file | |
update_response = signals_module.update_user_json_file(auth_token, commit_oid, new_content) | |
if update_response['success']: | |
flash('Signal deleted successfully', 'success') | |
else: | |
flash(f'Failed to delete signal: {update_response["message"]}', 'error') | |
return redirect(url_for('index')) | |
def delete_all_signals(): | |
# Get authentication tokens | |
auth_token, commit_oid = signals_module.fetch_authenticity_token_and_commit_oid() | |
if not auth_token or not commit_oid: | |
flash('Failed to get authentication tokens', 'error') | |
return redirect(url_for('index')) | |
# Create an empty array for signals | |
empty_signals = [] | |
new_content = json.dumps(empty_signals, ensure_ascii=False) | |
# Update the signals.json file | |
update_response = signals_module.update_user_json_file(auth_token, commit_oid, new_content) | |
if update_response['success']: | |
flash('All signals deleted successfully', 'success') | |
else: | |
flash(f'Failed to delete all signals: {update_response["message"]}', 'error') | |
return redirect(url_for('index')) | |
def edit_signal(signal_id): | |
# Get current signals | |
response = signals_module.fetch_json_from_github() | |
if not response['success']: | |
flash('Failed to fetch signals data', 'error') | |
return redirect(url_for('index')) | |
signals_data = response['data'] | |
# Check if signal_id is valid | |
if signal_id < 0 or signal_id >= len(signals_data): | |
flash('Invalid signal ID', 'error') | |
return redirect(url_for('index')) | |
if request.method == 'POST': | |
# Update signal with form data | |
signals_data[signal_id]['pair'] = request.form['pair'] | |
signals_data[signal_id]['timeframe'] = request.form['timeframe'] | |
signals_data[signal_id]['type'] = request.form['type'] | |
signals_data[signal_id]['entry'] = request.form['entry'] | |
signals_data[signal_id]['stop_loss'] = request.form['stop_loss'] | |
signals_data[signal_id]['take_profit'] = request.form['take_profit'] | |
signals_data[signal_id]['duration'] = request.form['duration'] | |
signals_data[signal_id]['reason'] = request.form['reason'] | |
signals_data[signal_id]['status'] = request.form['status'] | |
# Get authentication tokens | |
auth_token, commit_oid = signals_module.fetch_authenticity_token_and_commit_oid() | |
if not auth_token or not commit_oid: | |
flash('Failed to get authentication tokens', 'error') | |
return redirect(url_for('index')) | |
# Convert the updated signals data to JSON string | |
new_content = json.dumps(signals_data, ensure_ascii=False) | |
# Update the signals.json file | |
update_response = signals_module.update_user_json_file(auth_token, commit_oid, new_content) | |
if update_response['success']: | |
flash('Signal updated successfully', 'success') | |
return redirect(url_for('index')) | |
else: | |
flash(f'Failed to update signal: {update_response["message"]}', 'error') | |
return redirect(url_for('index')) | |
# GET request - display edit form with current signal data | |
return render_template('edit_signal.html', signal=signals_data[signal_id], signal_id=signal_id) | |
def add_signal(): | |
if request.method == 'POST': | |
# Get current signals | |
response = signals_module.fetch_json_from_github() | |
if not response['success']: | |
flash('Failed to fetch signals data', 'error') | |
return redirect(url_for('index')) | |
signals_data = response['data'] | |
# Create new signal from form data | |
new_signal = { | |
'pair': request.form['pair'], | |
'timeframe': request.form['timeframe'], | |
'type': request.form['type'], | |
'entry': request.form['entry'], | |
'stop_loss': request.form['stop_loss'], | |
'take_profit': request.form['take_profit'], | |
'duration': request.form['duration'], | |
'reason': request.form['reason'], | |
'status': request.form['status'] | |
} | |
# Add new signal to the beginning of the list | |
signals_data.insert(0, new_signal) | |
# Get authentication tokens | |
auth_token, commit_oid = signals_module.fetch_authenticity_token_and_commit_oid() | |
if not auth_token or not commit_oid: | |
flash('Failed to get authentication tokens', 'error') | |
return redirect(url_for('index')) | |
# Convert the updated signals data to JSON string | |
new_content = json.dumps(signals_data, ensure_ascii=False) | |
# Update the signals.json file | |
update_response = signals_module.update_user_json_file(auth_token, commit_oid, new_content) | |
if update_response['success']: | |
flash('Signal added successfully', 'success') | |
return redirect(url_for('index')) | |
else: | |
flash(f'Failed to add signal: {update_response["message"]}', 'error') | |
return redirect(url_for('index')) | |
# GET request - display add form | |
return render_template('add_signal.html') | |
def toggle_system(): | |
system_type = request.form.get('system_type') | |
new_status = request.form.get('status') == 'true' | |
if system_type == 'deeper': | |
# Update deeper.json | |
response = deeper_module.fetch_json_from_github() | |
if not response['success']: | |
return jsonify({"success": False, "message": "Failed to fetch deeper.json data"}), 500 | |
deeper_data = response['data'] | |
deeper_data['status'] = new_status | |
auth_token, commit_oid = deeper_module.fetch_authenticity_token_and_commit_oid() | |
if not auth_token or not commit_oid: | |
return jsonify({"success": False, "message": "Failed to get authentication tokens"}), 500 | |
new_content = json.dumps(deeper_data, ensure_ascii=False) | |
update_response = deeper_module.update_user_json_file(auth_token, commit_oid, new_content) | |
return jsonify(update_response) | |
elif system_type == 'paires': | |
# Update paires.json | |
response = paires_module.fetch_json_from_github() | |
if not response['success']: | |
return jsonify({"success": False, "message": "Failed to fetch paires.json data"}), 500 | |
paires_data = response['data'] | |
paires_data['status'] = new_status | |
auth_token, commit_oid = paires_module.fetch_authenticity_token_and_commit_oid() | |
if not auth_token or not commit_oid: | |
return jsonify({"success": False, "message": "Failed to get authentication tokens"}), 500 | |
new_content = json.dumps(paires_data, ensure_ascii=False) | |
update_response = paires_module.update_user_json_file(auth_token, commit_oid, new_content) | |
return jsonify(update_response) | |
else: | |
return jsonify({"success": False, "message": "Invalid system type"}), 400 | |
if __name__ == '__main__': | |
app.run(host='0.0.0.0', port=7860, debug=False) |