Files
myceliumcloud-examples/examples/python-flask/app.py

126 lines
4.4 KiB
Python

from flask import Flask, jsonify, request
import random
import datetime
import platform
import os
import math
app = Flask(__name__)
@app.route('/')
def home():
return jsonify({
'api': 'Python Flask Tools API',
'version': '1.0.0',
'description': 'A practical API with useful endpoints for testing and development',
'endpoints': {
'/': 'API information',
'/time': 'Current timestamp',
'/random': 'Random data and quotes',
'/health': 'Health check',
'/calc': 'Mathematical calculations',
'/info': 'System information'
},
'examples': {
'time': '/time',
'random': '/random',
'calc': '/calc?operation=add&a=5&b=3',
'health': '/health'
}
})
@app.route('/time')
def get_time():
return jsonify({
'current_time': datetime.datetime.now().isoformat(),
'timestamp': datetime.datetime.now().timestamp(),
'timezone': 'UTC',
'date': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
})
@app.route('/random')
def get_random():
quotes = [
'The only way to do great work is to love what you do. - Steve Jobs',
'Life is what happens to you while you are busy making other plans. - John Lennon',
'The future belongs to those who believe in the beauty of their dreams. - Eleanor Roosevelt',
'It is during our darkest moments that we must focus to see the light. - Aristotle',
'The only impossible journey is the one you never begin. - Tony Robbins',
'In the middle of difficulty lies opportunity. - Albert Einstein',
'Success is not final, failure is not fatal: it is the courage to continue that counts. - Winston Churchill',
'The way to get started is to quit talking and begin doing. - Walt Disney'
]
return jsonify({
'quote': random.choice(quotes),
'number': random.randint(1, 100),
'boolean': random.choice([True, False]),
'list_item': random.choice(['apple', 'banana', 'cherry', 'date', 'elderberry']),
'uuid': str(random.randint(1000, 9999)) + '-' + str(random.randint(100, 999)),
'color': random.choice(['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7'])
})
@app.route('/health')
def health_check():
return jsonify({
'status': 'healthy',
'uptime': 'running',
'service': 'Python Flask Tools API',
'timestamp': datetime.datetime.now().isoformat()
}), 200
@app.route('/calc')
def calculate():
try:
operation = request.args.get('operation', 'add')
a = float(request.args.get('a', 0))
b = float(request.args.get('b', 0)) if request.args.get('b') is not None else None
operations = {
'add': lambda x, y: x + y,
'subtract': lambda x, y: x - y,
'multiply': lambda x, y: x * y,
'divide': lambda x, y: x / y if y != 0 else 'Cannot divide by zero',
'power': lambda x, y: x ** y,
'sqrt': lambda x, y: math.sqrt(x) if b is None else 'Only one parameter needed for sqrt',
'modulo': lambda x, y: x % y
}
if operation not in operations:
return jsonify({
'error': f'Operation {operation} not supported',
'available_operations': list(operations.keys())
}), 400
result = operations[operation](a, b)
return jsonify({
'operation': operation,
'a': a,
'b': b,
'result': result,
'calculation': f"{a} {operation} {b} = {result}"
})
except ValueError:
return jsonify({'error': 'Invalid numbers provided. Use /calc?operation=add&a=5&b=3'}), 400
except Exception as e:
return jsonify({'error': str(e)}), 500
@app.route('/info')
def system_info():
return jsonify({
'python_version': platform.python_version(),
'platform': platform.platform(),
'processor': platform.processor(),
'hostname': platform.node(),
'machine': platform.machine(),
'current_directory': os.getcwd(),
'environment': {
'HOSTNAME': os.getenv('HOSTNAME', 'N/A'),
'POD_NAME': os.getenv('POD_NAME', 'N/A')
}
})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=False)