From ba6b342e28501b37ac5dffed3db22e53806a43d8 Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Fri, 5 Aug 2016 17:12:22 -0700 Subject: [PATCH] fix exception happening now that we have binary data in rethinkdb (the cookie db) "TypeError: is not JSON serializable" --- brozzler/webconsole/__init__.py | 15 +++++++++++---- setup.py | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/brozzler/webconsole/__init__.py b/brozzler/webconsole/__init__.py index 43f306c..2044110 100644 --- a/brozzler/webconsole/__init__.py +++ b/brozzler/webconsole/__init__.py @@ -34,6 +34,7 @@ import os import importlib import rethinkdb import yaml +import base64 # flask does its own logging config # logging.basicConfig( @@ -120,8 +121,10 @@ def page_yaml(page_id): @app.route("/api/sites/") @app.route("/api/site/") def site(site_id): - site_ = r.table("sites").get(site_id).run() - return flask.jsonify(site_) + s = r.table("sites").get(site_id).run() + if "cookie_db" in s: + s["cookie_db"] = base64.b64encode(s["cookie_db"]).decode("ascii") + return flask.jsonify(s) @app.route("/api/sites//yaml") @app.route("/api/site//yaml") @@ -139,8 +142,12 @@ def stats(bucket): @app.route("/api/jobs//sites") @app.route("/api/job//sites") def sites(job_id): - sites_ = r.table("sites").get_all(job_id, index="job_id").run() - return flask.jsonify(sites=list(sites_)) + sites_ = list(r.table("sites").get_all(job_id, index="job_id").run()) + # TypeError: is not JSON serializable + for s in sites_: + if "cookie_db" in s: + s["cookie_db"] = base64.b64encode(s["cookie_db"]).decode("ascii") + return flask.jsonify(sites=sites_) @app.route("/api/jobs/") @app.route("/api/job/") diff --git a/setup.py b/setup.py index 37ba660..ba8484e 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ def find_package_data(package): setuptools.setup( name='brozzler', - version='1.1b6.dev68', + version='1.1b6.dev69', description='Distributed web crawling with browsers', url='https://github.com/internetarchive/brozzler', author='Noah Levitt',