Skip to content

Commit 4ff2b78

Browse files
committed
Merge pull request #629 from keflavich/issue629
NRAO votable: datatype specified incorrectly
2 parents 5e91bd6 + 28817dd commit 4ff2b78

File tree

3 files changed

+20
-25
lines changed

3 files changed

+20
-25
lines changed

CHANGES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
---------
33

44
- Fix NASA ADS, which had an internal syntax error (#602)
5+
- Bugifx in NRAO queries: telescope config was parsed incorrectly (#629)
56
- IBE - added new module for locating data from PTF, WISE, and 2MASS from IRSA.
67
See <http://irsa.ipac.caltech.edu/ibe/> for more information about IBE and
78
<http://www.ptf.caltech.edu/page/ibe> for more information about PTF survey

astroquery/nrao/core.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ def _args_to_payload(self, **kwargs):
197197
@prepend_docstr_noreturns(_args_to_payload.__doc__)
198198
def query_async(self,
199199
get_query_payload=False,
200+
cache=True,
200201
**kwargs):
201202
"""
202203
Returns
@@ -209,10 +210,8 @@ def query_async(self,
209210

210211
if get_query_payload:
211212
return request_payload
212-
response = commons.send_request(Nrao.DATA_URL,
213-
request_payload,
214-
Nrao.TIMEOUT,
215-
request_type='POST')
213+
response = self._request('POST', self.DATA_URL, params=request_payload,
214+
timeout=self.TIMEOUT, cache=cache)
216215
return response
217216

218217
@prepend_docstr_noreturns(_args_to_payload.__doc__)
@@ -244,11 +243,8 @@ def query_region_async(self, coordinates, radius=1 * u.deg,
244243
def _parse_result(self, response, verbose=False):
245244
if not verbose:
246245
commons.suppress_vo_warnings()
247-
# fix to replace non standard datatype 'integer' in returned VOTable
248-
# with 'int' to make it parsable by astropy.io.votable
249-
integer_re = re.compile(r'datatype="integer"')
250-
content = response.text
251-
new_content = integer_re.sub(r'datatype="int"', content)
246+
247+
new_content = response.text
252248

253249
# these are pretty bad hacks, but also needed...
254250
days_re = re.compile(r'unit="days" datatype="double"')
@@ -257,10 +253,17 @@ def _parse_result(self, response, verbose=False):
257253
degrees_re = re.compile(r'unit="degrees" datatype="double"')
258254
new_content = degrees_re.sub(r'unit="degrees" datatype="char" '
259255
'arraysize="*"', new_content)
256+
telconfig_re = re.compile(r'datatype="char" name="Telescope:config"')
257+
new_content = telconfig_re.sub(r'datatype="unicodeChar" '
258+
'name="Telescope:config" '
259+
' arraysize="*" ', new_content)
260+
261+
datatype_mapping = {'integer':'long'}
260262

261263
try:
262264
tf = six.BytesIO(new_content.encode())
263-
first_table = votable.parse(tf, pedantic=False).get_first_table()
265+
first_table = votable.parse(tf, pedantic=False,
266+
datatype_mapping=datatype_mapping).get_first_table()
264267
try:
265268
table = first_table.to_table(use_names_over_ids=True)
266269
except TypeError:

astroquery/nrao/tests/test_nrao.py

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,20 @@ def parse_coordinates_mock_return(c):
2828
return mp
2929

3030

31-
@pytest.fixture
32-
def patch_get(request):
33-
mp = request.getfuncargvalue("monkeypatch")
34-
mp.setattr(requests, 'get', get_mockreturn)
35-
return mp
36-
3731

3832
@pytest.fixture
3933
def patch_post(request):
4034
mp = request.getfuncargvalue("monkeypatch")
41-
mp.setattr(requests, 'post', post_mockreturn)
35+
mp.setattr(requests.Session, 'request', post_mockreturn)
4236
return mp
4337

4438

45-
def get_mockreturn(url, params=None, timeout=10, **kwargs):
46-
filename = data_path(DATA_FILES['votable'])
47-
content = open(filename, 'rb').read()
48-
return MockResponse(content, **kwargs)
49-
50-
51-
def post_mockreturn(url, data=None, timeout=10, **kwargs):
39+
def post_mockreturn(self, method, url, data=None, timeout=10, files=None,
40+
params=None, headers=None, **kwargs):
41+
if method != 'POST':
42+
raise ValueError("A 'post request' was made with method != POST")
5243
filename = data_path(DATA_FILES['votable'])
53-
content = open(filename, 'rb').read()
44+
content = open(filename, "rb").read()
5445
return MockResponse(content, **kwargs)
5546

5647

0 commit comments

Comments
 (0)