Strange behavior when updating the CPU and memory Limits
From #474:

> I get strange behavior when updating the CPU and Memory Limits. Individually they update fine, but when updating one after the other the least recent change seems to get overwritten by the default values of proc = 8 and mem = 16.

> Changing multiple fields in task-specific limits also overwrites changes with default values.
memory limit accepts float values (one decimal place) but will only save the floored integer equivalent.
diff --git a/virtool/handlers/settings.py b/virtool/handlers/settings.py
index 2e2331a7b..8c2c85aea 100644
--- a/virtool/handlers/settings.py
+++ b/virtool/handlers/settings.py
@@ -23,19 +23,23 @@ async def get_one(req):
 
 
 @protected("modify_settings")
-@validation(virtool.app_settings.SCHEMA)
 async def update(req):
     """
     Update application settings based on request data.
 
     """
-    data = req["data"]
+    data = await req.json()
 
     keys = data.keys()
 
+    v = Validator(virtool.app_settings.SCHEMA)
+
+    if not v(data):
+        return invalid_input(v.errors)
+
     settings = req.app["settings"]
 
-    settings.data.update({key: data[key] for key in keys})
+    settings.data.update({key: v.document[key] for key in keys})
 
     await settings.write()
 
['virtool/handlers/settings.py']