Source code for eve_panel.utils
import numpy as np
import json
from functools import wraps
import re
url_regex = re.compile(
r'^(?:http|ftp)s?://' # http:// or https://
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain...
r'localhost|' #localhost...
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
r'(?::\d+)?' # optional port
r'(?:/?|[/?]\S+)$', re.IGNORECASE)
[docs]def is_valid_url(url):
return re.match(url_regex, url) is not None
[docs]def requires_login(method):
@wraps(method)
def wrapper(self, *args, **kwargs):
if not self.session.logged_in:
raise RuntimeError("You are not logged in.")
return method(self, *args, **kwargs)
return wrapper
[docs]def to_json_compliant(obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
else:
return obj
[docs]class NumpyJSONENncoder(json.JSONEncoder):
[docs] def default(self, obj):
obj = to_json_compliant(obj)
return super(NumpyJSONENncoder, self).default(obj)
[docs]def to_data_dict(doc):
data = {}
for k,v in doc.items():
if isinstance(v, str):
data[k] = v
else:
data[k] = json.dumps(v, cls=NumpyJSONENncoder)
return data