add error handling & numpy to readme
[matrixnullspace.com.git] / matrix.py
index 41713e2..f7da2d7 100755 (executable)
--- a/matrix.py
+++ b/matrix.py
@@ -13,13 +13,25 @@ def calculate_eigenvalues(A, eps=1e-15):
     u, s, vh = svd(A)
     return s
 
+def fail(start_response, message):
+    start_response('400 Bad Request', [])
+    return 'error: ' + message
+
 def application(environ, start_response):
-    parameters = cgi.parse_qs(environ.get('QUERY_STRING', ''))
+    parameters = cgi.parse_qs(environ.get('QUERY_STRING'))
 
+    if not 'matrix' in parameters or parameters['matrix'] == '':
+        return fail(start_response, 'missing matrix')
     query_string = str(parameters['matrix'][0])
     matrix = query_string.splitlines()
     for index, row in enumerate(matrix):
         matrix[index] = row.split()
+        if len(matrix[index]) != len(matrix[0]):
+            return fail(start_response, 'ragged matrix')
+        for index, n in enumerate(matrix[index]):
+            try: float(n)
+            except ValueError:
+                return fail(start_response, 'invalid matrix element')
 
     while len(matrix) < len(matrix[0]):
         matrix.append([0]*len(matrix[0]))