Skip to content

Commit

Permalink
Merge pull request #427 from LilithWittmann/numpy_json_encoder
Browse files Browse the repository at this point in the history
Convert numpy types to their native python types
  • Loading branch information
mistercrunch committed Sep 24, 2015
2 parents 7c78705 + 46886a3 commit 70b342f
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion airflow/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from builtins import str, input, object
from past.builtins import basestring
from copy import copy
from datetime import datetime, timedelta
from datetime import datetime, date, timedelta
from dateutil.relativedelta import relativedelta # for doctest
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
Expand All @@ -29,6 +29,8 @@
from sqlalchemy import event, exc
from sqlalchemy.pool import Pool

import numpy as np

from airflow import settings
from airflow.configuration import conf

Expand Down Expand Up @@ -621,9 +623,20 @@ def chain(*tasks):

class AirflowJsonEncoder(json.JSONEncoder):
def default(self, obj):
# convert dates and numpy objects in a json serializable format
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%dT%H:%M:%SZ')
elif isinstance(obj, date):
return obj.strftime('%Y-%m-%d')
elif type(obj) in [np.int_, np.intc, np.intp, np.int8, np.int16,
np.int32, np.int64, np.uint8, np.uint16,
np.uint32, np.uint64]:
return int(obj)
elif type(obj) in [np.bool_]:
return bool(obj)
elif type(obj) in [np.float_, np.float16, np.float32, np.float64,
np.complex_, np.complex64, np.complex128]:
return float(obj)

# Let the base class default method raise the TypeError
return json.JSONEncoder.default(self, obj)

0 comments on commit 70b342f

Please sign in to comment.