Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7124328
D1025.id3255.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Subscribers
None
D1025.id3255.diff
View Options
diff --git a/swh/scheduler/api/server.py b/swh/scheduler/api/server.py
--- a/swh/scheduler/api/server.py
+++ b/swh/scheduler/api/server.py
@@ -5,13 +5,16 @@
import logging
-from flask import request
+from flask import request, Flask
from swh.core import config
from swh.scheduler import get_scheduler as get_scheduler_from
-from swh.core.api import (SWHServerAPIApp, decode_request,
+from swh.core.api import (decode_request,
error_handler,
encode_data_server as encode_data)
+from swh.core.api.negotiate import negotiate
+from swh.core.api import JSONFormatter, MsgpackFormatter
+
DEFAULT_CONFIG_PATH = 'backend/scheduler'
DEFAULT_CONFIG = {
@@ -24,7 +27,7 @@
}
-app = SWHServerAPIApp(__name__)
+app = Flask(__name__)
scheduler = None
@@ -40,98 +43,152 @@
return scheduler
+def has_no_empty_params(rule):
+ defaults = rule.defaults if rule.defaults is not None else ()
+ arguments = rule.arguments if rule.arguments is not None else ()
+ return len(defaults) >= len(arguments)
+
+
@app.route('/')
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def index():
+ """main index"""
return 'SWH Scheduler API server'
-@app.route('/close_connection', methods=['POST'])
+@app.route('/close_connection', methods=['GET', 'POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def close_connection():
- return encode_data(get_sched().close_connection())
+ return get_sched().close_connection()
@app.route('/set_status_tasks', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def set_status_tasks():
- return encode_data(get_sched().set_status_tasks(**decode_request(request)))
+ return get_sched().set_status_tasks(**decode_request(request))
@app.route('/create_task_type', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def create_task_type():
- return encode_data(get_sched().create_task_type(**decode_request(request)))
+ return get_sched().create_task_type(**decode_request(request))
@app.route('/get_task_type', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def get_task_type():
- return encode_data(get_sched().get_task_type(**decode_request(request)))
+ return get_sched().get_task_type(**decode_request(request))
-@app.route('/get_task_types', methods=['POST'])
+@app.route('/get_task_types', methods=['GET', 'POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def get_task_types():
- return encode_data(get_sched().get_task_types(**decode_request(request)))
+ return get_sched().get_task_types(**decode_request(request))
@app.route('/create_tasks', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def create_tasks():
- return encode_data(get_sched().create_tasks(**decode_request(request)))
+ return get_sched().create_tasks(**decode_request(request))
@app.route('/disable_tasks', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def disable_tasks():
- return encode_data(get_sched().disable_tasks(**decode_request(request)))
+ return get_sched().disable_tasks(**decode_request(request))
@app.route('/get_tasks', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def get_tasks():
- return encode_data(get_sched().get_tasks(**decode_request(request)))
+ return get_sched().get_tasks(**decode_request(request))
@app.route('/search_tasks', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def search_tasks():
- return encode_data(get_sched().search_tasks(**decode_request(request)))
+ return get_sched().search_tasks(**decode_request(request))
@app.route('/peek_ready_tasks', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def peek_ready_tasks():
- return encode_data(get_sched().peek_ready_tasks(**decode_request(request)))
+ return get_sched().peek_ready_tasks(**decode_request(request))
@app.route('/grab_ready_tasks', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def grab_ready_tasks():
- return encode_data(get_sched().grab_ready_tasks(**decode_request(request)))
+ return get_sched().grab_ready_tasks(**decode_request(request))
@app.route('/schedule_task_run', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def schedule_task_run():
- return encode_data(get_sched().schedule_task_run(
- **decode_request(request)))
+ return get_sched().schedule_task_run(**decode_request(request))
@app.route('/mass_schedule_task_runs', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def mass_schedule_task_runs():
- return encode_data(
- get_sched().mass_schedule_task_runs(**decode_request(request)))
+ return get_sched().mass_schedule_task_runs(**decode_request(request))
@app.route('/start_task_run', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def start_task_run():
- return encode_data(get_sched().start_task_run(**decode_request(request)))
+ return get_sched().start_task_run(**decode_request(request))
@app.route('/end_task_run', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def end_task_run():
- return encode_data(get_sched().end_task_run(**decode_request(request)))
+ return get_sched().end_task_run(**decode_request(request))
@app.route('/filter_task_to_archive', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def filter_task_to_archive():
- return encode_data(
- get_sched().filter_task_to_archive(**decode_request(request)))
+ return get_sched().filter_task_to_archive(**decode_request(request))
@app.route('/delete_archived_tasks', methods=['POST'])
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
def delete_archived_tasks():
- return encode_data(
- get_sched().delete_archived_tasks(**decode_request(request)))
+ return get_sched().delete_archived_tasks(**decode_request(request))
+
+
+@app.route("/site-map")
+@negotiate(MsgpackFormatter)
+@negotiate(JSONFormatter)
+def site_map():
+ links = []
+ sched = get_sched()
+ for rule in app.url_map.iter_rules():
+ if has_no_empty_params(rule) and hasattr(sched, rule.endpoint):
+ links.append(dict(
+ rule=rule.rule,
+ description=getattr(sched, rule.endpoint).__doc__))
+ # links is now a list of url, endpoint tuples
+ return links
def run_from_webserver(environ, start_response,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Dec 21 2024, 7:38 AM (11 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3226050
Attached To
D1025: Add support for content-negotiation in the API
Event Timeline
Log In to Comment