0
Fixed
TableParseError when querying ESASky through astroquery
I am having issues querying ESASky through astroquery. When following the examples here, running the following three lines yieldsa Table Parse Error (below).
>>> from astroquery.esasky import ESASky >>> import astropy.units as u >>> result = ESASky.query_region_catalogs("M51", 10 * u.arcmin, "integral")
This seems to happens with different catalogs. Has anyone encountered this issue before?
Thanks a lot!
------------
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) ~/opt/anaconda3/lib/python3.7/site-packages/astroquery/esasky/core.py in _parse_xml_table(self, response) 861 vo_table = votable.parse(tf, pedantic=False) --> 862 first_table = vo_table.get_first_table() 863 table = first_table.to_table(use_names_over_ids=True) ~/opt/anaconda3/lib/python3.7/site-packages/astropy/io/votable/tree.py in get_first_table(self) 3492 return table -> 3493 raise IndexError("No table found in VOTABLE file.") 3494 IndexError: No table found in VOTABLE file. During handling of the above exception, another exception occurred: TableParseError Traceback (most recent call last) in 1 from astroquery.esasky import ESASky 2 import astropy.units as u ----> 3 result = ESASky.query_region_catalogs("M51", 10 * u.arcmin, "integral") ~/opt/anaconda3/lib/python3.7/site-packages/astroquery/esasky/core.py in query_region_catalogs(self, position, radius, catalogs, row_limit, get_query_payload, cache) 303 coordinates, sanitized_radius, 304 sanitized_row_limit, --> 305 get_query_payload, cache) 306 307 if (get_query_payload): ~/opt/anaconda3/lib/python3.7/site-packages/astroquery/esasky/core.py in _store_query_result_catalogs(self, query_result, catalogs, coordinates, radius, row_limit, get_query_payload, cache) 767 catalog_table = self._query_region_catalog(coordinates, radius, 768 catalog, row_limit, --> 769 get_query_payload, cache) 770 if (len(catalog_table) > 0): 771 query_result[catalog.upper()] = catalog_table ~/opt/anaconda3/lib/python3.7/site-packages/astroquery/esasky/core.py in _query_region_catalog(self, coordinates, radius, catalog_name, row_limit, get_query_payload, cache) 688 if (get_query_payload): 689 return request_payload --> 690 return self._get_and_parse_from_tap(request_payload, cache) 691 692 def _build_observation_query(self, coordinates, radius, json): ~/opt/anaconda3/lib/python3.7/site-packages/astroquery/esasky/core.py in _get_and_parse_from_tap(self, request_payload, cache) 843 def _get_and_parse_from_tap(self, request_payload, cache): 844 response = self._send_get_request("/tap/sync", request_payload, cache) --> 845 return self._parse_xml_table(response) 846 847 def _send_get_request(self, url_extension, request_payload, cache): ~/opt/anaconda3/lib/python3.7/site-packages/astroquery/esasky/core.py in _parse_xml_table(self, response) 867 self.table_parse_error = ex 868 raise TableParseError( --> 869 "Failed to parse ESASky VOTABLE result! The raw response can be " 870 "found in self.response, and the error in " 871 "self.table_parse_error.") TableParseError: Failed to parse ESASky VOTABLE result! The raw response can be found in self.response, and the error in self.table_parse_error.
Customer support service by UserEcho
Dear Alvaro,
The issue has now been fixed in the ESASky astroquery module. If you update astroquery you should find the module working correctly now.
Many thanks for reporting this to us!
Best regards,
Debbie, on behalf of the ESASky team
Thanks Debbie! I will try it and let you know if I run into any issues.
Best,
Álvaro
The second way isn't through astroquery, but it is within a jupyter notebook and using our ESASky Jupyter Widget called pyESASky. We have an example notebook on how to download data from pyESASky here:
https://github.com/esdc-esac-esa-int/pyesasky/blob/master/samples/What_can_you_do_with_pyESASky.ipynb
Installation instructions etc can be found here:
https://www.cosmos.esa.int/web/esdc/pyesasky
and https://github.com/esdc-esac-esa-int/pyesasky/blob/master/README.md
We've an example in Binder (Cluster Analysis notebook):
https://gke.mybinder.org/v2/gh/esdc-esac-esa-int/notebooks/master/
And we've a video here:
I hope one of these options is good for you. Let us know how you go and if you need any help installing pyESASky!
Best regards,
Debbie, on behalf of the ESASky team
Thanks a lot! The TAP+ method works fine for he purpose I had in mind.
Best,
Álvaro
Hi Alvaro,
There are two ways I can think to do this. Firstly, you can use the astroquery TAP+ module and call the ESASky TAP:
https://astroquery.readthedocs.io/en/latest/utils/tap.html
You select the table you're interested in, then perform a cone search using ADQL.
Here's some example jupyter notebook code:
If you know TOPCAT, you can also inspect the ESASky TAP and try some ADQL code. Open Topcat -> VO -> Table Access Protocol (TAP) Query -> In keyword type 'ESASky' , click 'Find Service' -> Click 'use service' button.
Dear Alvaro,
Many thanks for letting us know. We'll look into it and get back to you asap!
Best regards,
Debbie, on behalf of the ESASky team.
Dear Debbie,
Thanks a lot for your reply. I was wondering if you know if there has been any progress on this. Absolutely no hurries, I am just checking because I need a few of the catalogs under ESASky and it would be very convenient to access them through astroquery, but I can look for other options if you think it would take some time to fix.
Thanks again!
Álvaro