| Index: sitescripts/filterhits/web/submit.py |
| diff --git a/sitescripts/filterhits/web/submit.py b/sitescripts/filterhits/web/submit.py |
| index 3b4bd1c14c4536d09b68c19d4f284f3b591d13bf..26e945613c57bb70566c64bbcd7b39b6db45de12 100644 |
| --- a/sitescripts/filterhits/web/submit.py |
| +++ b/sitescripts/filterhits/web/submit.py |
| @@ -1,7 +1,7 @@ |
| # coding: utf-8 |
| # This file is part of the Adblock Plus web scripts, |
| -# Copyright (C) 2006-2014 Eyeo GmbH |
| +# Copyright (C) 2006-2015 Eyeo GmbH |
| # |
| # Adblock Plus is free software: you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License version 3 as |
| @@ -30,14 +30,14 @@ def submit(environ, start_response): |
| config = get_config() |
| # Check that this is a POST request |
| - if environ["REQUEST_METHOD"].upper() != "POST": |
| + if environ["REQUEST_METHOD"] != "POST": |
| return common.showError("Unsupported request method", start_response) |
| # Parse the submitted JSON |
| data = "{}" |
| try: |
| - data_length = int(environ.get("CONTENT_LENGTH", "0")) |
| - except ValueError: |
| + data_length = int(environ["CONTENT_LENGTH"]) |
| + except (ValueError, KeyError): |
| data_length = 0 |
| if data_length != 0: |
| data = environ["wsgi.input"].read(data_length) |
| @@ -46,26 +46,22 @@ def submit(environ, start_response): |
| except json.decoder.JSONDecodeError: |
| return common.showError("Error while parsing JSON data.", start_response) |
| - # Make sure it looks roughly valid |
| - if not common.valid_log_data(data): |
| - return common.showError("Data looks invalid.", start_response) |
| - |
| # Log the data to a file |
| log_dir = config.get("filterhitstats", "log_dir") |
| try: |
| log_file = common.log_filterhits(data, log_dir, |
| environ.get("QUERY_STRING", "")) |
| - except OSError, IOError: |
| + except (OSError, IOError): |
| return common.showError("Failed to write data to log file!", start_response, |
| "500 Logging error") |
| # Update the geometrical_mean aggregations in the database |
| interval = config.get("filterhitstats", "interval") |
| try: |
| - db.connect(config.get("filterhitstats", "dbuser"), |
| - config.get("filterhitstats", "dbpassword"), |
| - config.get("filterhitstats", "database")) |
| - db.write(geometrical_mean.update(interval, data)) |
| + db_connection = db.connect(config.get("filterhitstats", "dbuser"), |
| + config.get("filterhitstats", "dbpassword"), |
| + config.get("filterhitstats", "database")) |
| + db.write(db_connection, geometrical_mean.update(interval, data)) |
| except MySQLdb.Error, e: |
| # Updating the aggregations in the database failed for whatever reason, |
| # log the details but continue to return 200 OK to the client to avoid |
| @@ -78,7 +74,8 @@ def submit(environ, start_response): |
| e.args[0], log_file, e.args[1] |
| )) |
| finally: |
| - db.disconnect() |
| + if db_connection: |
|
Sebastian Noack
2015/02/17 14:59:17
This will result in a NameError, in case db_connec
kzar
2015/02/24 18:05:11
Done.
|
| + db_connection.close() |
| # Send back a 200 OK response |
| response_headers = [("Content-type", "text/plain")] |