Source code for astroquery.open_exoplanet_catalogue.oec_query

# Licensed under a 3-clause BSD style license - see LICENSE.rst
import xml.etree.ElementTree as ET
import gzip
import io
from .utils import Number

oec_server_url = "https://github.com/OpenExoplanetCatalogue/oec_gzip/raw/master/systems.xml.gz"

__all__ = ['xml_element_to_dict', 'findvalue', 'get_catalogue']

try:
    import urllib.request as urllib2
except ImportError:
    import urllib2


[docs] def get_catalogue(filepath=None): """ Parses the Open Exoplanet Catalogue file. Parameters ---------- filepath : str or None if no filepath is given, remote source is used. Returns ------- An Element Tree containing the open exoplanet catalogue """ if filepath is None: oec = ET.parse(gzip.GzipFile( fileobj=io.BytesIO(urllib2.urlopen(oec_server_url).read()))) else: oec = ET.parse(gzip.GzipFile(filepath)) return oec
[docs] def xml_element_to_dict(e): """ Creates a dictionary of the given xml tree. Parameters ---------- e : str str of an xml tree Returns ------- A dictionary of the given xml tree """ d = {} for c in e.getchildren(): d[c.tag] = c.text return d
[docs] def findvalue(element, searchstring): """ Searches given string in element. Parameters ---------- element : Element Element from the ElementTree module. searchstring : str name of the tag to look for in element Returns ------- None if tag does not exist. str if the tag cannot be expressed as a float. Number if the tag is a numerical value """ if element is not None: res = element.find(searchstring) if res is None: return None tempnum = Number() if res.text is not None: try: float(res.text) setattr(tempnum, 'value', res.text) except ValueError: return res.text if "errorminus" in res.attrib: tempnum.errorminus = res.attrib["errorminus"] if "errorplus" in res.attrib: tempnum.errorplus = res.attrib["errorplus"] if "upperlimit" in res.attrib: tempnum.upperlimit = res.attrib["upperlimit"] if "lowerlimit" in res.attrib: tempnum.lowerlimit = res.attrib["lowerlimit"] return tempnum