Skip to content

Commit 0bb5ccf

Browse files
ceb8XePeleato
authored andcommitted
removing pandas from tabs.py
1 parent 27b15cb commit 0bb5ccf

File tree

5 files changed

+771
-2051
lines changed

5 files changed

+771
-2051
lines changed

astroquery/esa/neocc/__init__.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1+
# Licensed under a 3-clause BSD style license - see LICENSE.rst
12
"""
3+
NEOCC Query Tool
4+
================
25
3-
@author: C. Álvaro Arroyo
4-
5-
6-
European Space Agency (ESA)
7-
8-
Created on 16 Jun. 2021
9-
Last update 01 Mar. 2022
6+
Module to query the Near Earth Objects Coordination Centre (NEOCC).
107
118
"""
9+
1210
import os
1311
from astropy import config as _config
1412

13+
1514
class Conf(_config.ConfigNamespace):
1615
"""
1716
Configuration parameters for 'ESANEOCC'
1817
"""
18+
1919
BASE_URL = 'https://' + os.getenv('NEOCC_PORTAL_IP',
2020
default='neo.ssa.esa.int')
2121

@@ -30,10 +30,10 @@ class Conf(_config.ConfigNamespace):
3030

3131
TIMEOUT = 60
3232

33-
3433
SSL_CERT_VERIFICATION = bool(int(os.getenv('SSL_CERT_VERIFICATION',
3534
default="1")))
3635

36+
3737
conf = Conf()
3838

3939
from .core import neocc, ESAneoccClass

astroquery/esa/neocc/core.py

Lines changed: 32 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,9 @@
1-
# -*- coding: utf-8 -*-
1+
# Licensed under a 3-clause BSD style license - see LICENSE.rst
22
"""
33
Main module from ESA NEOCC library. This module contains the two main
44
methods of the library: *query_list* and *query_object*. The information
55
is obtained from ESA Near-Earth Object Coordination Centre's (NEOCC) web
66
portal: https://neo.ssa.esa.int/.
7-
8-
* Project: NEOCC portal Python interface
9-
* Property: European Space Agency (ESA)
10-
* Developed by: Elecnor Deimos
11-
* Author: C. Álvaro Arroyo Parejo
12-
* Issue: 2.1.0
13-
* Date: 01-03-2021
14-
* Purpose: Main module which gets NEAs data from https://neo.ssa.esa.int/
15-
* Module: core.py
16-
* History:
17-
18-
======== =========== ============================================
19-
Version Date Change History
20-
======== =========== ============================================
21-
1.0 26-02-2021 Initial version
22-
1.1 26-03-2021 Adding new docstrings
23-
1.2 17-05-2021 Adding new docstrings for *help*
24-
property in dataframes and *<tab>*
25-
specification for obtaining attributes.\n
26-
For orbit properties *orbit_elements*
27-
changes to *orbital_elements*.\n
28-
Adding impacted objects lists.\n
29-
Minor typos changes.
30-
1.3 16-06-2021 Renamed module from *neocc* to *core*.\n
31-
Adding class type as for astroquery
32-
implementation.\n
33-
Define methods as static.\n
34-
1.3.1 29-06-2021 No changes
35-
1.4.0 29-10-2021 Adding new docstrings.\n
36-
Change method for obtaining physical
37-
properties
38-
2.0.0 21-01-2022 Prepare module for Astroquery integration
39-
2.1.0 01-03-2022 Remove *parse* dependency
40-
41-
© Copyright [European Space Agency][2022]
42-
All rights reserved
437
"""
448

459
import time
@@ -51,6 +15,7 @@
5115

5216
__all__ = ['neocc', 'ESAneoccClass']
5317

18+
5419
@async_to_sync
5520
class ESAneoccClass(BaseQuery):
5621
"""
@@ -89,13 +54,13 @@ def query_list(list_name):
8954
9055
Returns
9156
-------
92-
neocc_lst : *pandas.Series* or *pandas.DataFrame*
93-
Data Frame which contains the information of the requested list
57+
neocc_lst : `~astropy.table.Table`
58+
Astropy Table which contains the data of the requested list.
9459
9560
Examples
9661
--------
9762
**NEA list, Updated NEA list, Monthly computation date:** The output
98-
of this list is a *pandas.Series* which contains the list of all NEAs
63+
of this list is a `~astropy.table.Table` which contains the list of all NEAs
9964
currently considered in the NEOCC system.
10065
10166
>>> from astroquery.esa.neocc import neocc
@@ -120,7 +85,7 @@ def query_list(list_name):
12085
>>> list_data[4]
12186
'1221 Amor'
12287
123-
**Other lists:** The output of this list is a *pandas.DataFrame* which
88+
**Other lists:** The output of this list is a `~astropy.table.Table` which
12489
contains the information of the requested list.
12590
12691
>>> from astroquery.esa.neocc import neocc
@@ -192,7 +157,7 @@ def query_list(list_name):
192157

193158
return neocc_list
194159

195-
except ConnectionError: # pragma: no cover
160+
except ConnectionError: # pragma: no cover
196161
print('Initial attempt to obtain list failed. Reattempting...')
197162
# Wait 5 seconds
198163
time.sleep(5)
@@ -439,12 +404,13 @@ def query_object(name, tab, **kwargs):
439404
tab_list = ['impacts', 'close_approaches', 'observations',
440405
'physical_properties', 'orbit_properties',
441406
'ephemerides', 'summary']
407+
442408
# Check the input of the method if tab is not in the list
443409
# print and error and show the valid names
444410
if tab not in tab_list:
445411
raise KeyError('Please introduce a valid tab name. '
446-
'valid tabs names are: ' +\
447-
', '.join([str(elem) for elem in tab_list]))
412+
'valid tabs names are: '
413+
', '.join([str(elem) for elem in tab_list]))
448414
# Depending on the tab selected the information will be requested
449415
# following different methods. Create "switch" for each case:
450416

@@ -458,32 +424,27 @@ def query_object(name, tab, **kwargs):
458424
try:
459425
# Get object data
460426
data_obj = tabs.get_object_data(url)
461-
except ConnectionError: # pragma: no cover
427+
except ConnectionError: # pragma: no cover
462428
print('Initial attempt to obtain object data failed. '
463429
'Reattempting...')
464430
# Wait 5 seconds
465431
time.sleep(5)
466432
# Get object data
467433
data_obj = tabs.get_object_data(url)
468434

435+
resp_str = data_obj.decode('utf-8')
436+
437+
# TODO: check data here
438+
469439
if tab == 'impacts':
470-
# Create empty object with class Impacts
471-
neocc_obj = tabs.Impacts()
472-
# Parse the requested data using Impacts parser
473-
neocc_obj._impacts_parser(data_obj)
440+
neocc_obj = tabs.parse_impacts(resp_str)
474441
elif tab == 'close_approaches':
475-
# Parse the requested data using Close Approaches parser
476-
neocc_obj = tabs.CloseApproaches.clo_appr_parser(data_obj)
442+
neocc_obj = tabs.parse_close_aproach(resp_str)
477443
elif tab == 'observations':
478-
# Create empty object
479-
neocc_obj = tabs.AsteroidObservations()
480-
# Get object with attributes from data
481-
neocc_obj._ast_obs_parser(data_obj)
444+
neocc_obj = tabs.parse_observations(resp_str)
482445
elif tab == 'physical_properties':
483-
# Create empty object with class Physical properties
484-
neocc_obj = tabs.PhysicalProperties()
485-
# Parse the requested data using Physical properties parser
486-
neocc_obj._phys_prop_parser(data_obj)
446+
neocc_obj = tabs.parse_physical_properties(resp_str)
447+
487448
# Orbit properties
488449
elif tab == 'orbit_properties':
489450
# Raise error if no elements are provided
@@ -505,25 +466,16 @@ def query_object(name, tab, **kwargs):
505466
try:
506467
# Get object data
507468
data_obj = tabs.get_object_data(url)
508-
except ConnectionError: # pragma: no cover
469+
except ConnectionError: # pragma: no cover
509470
print('Initial attempt to obtain object data failed. '
510471
'Reattempting...')
511472
# Wait 5 seconds
512473
time.sleep(5)
513474
# Get object data
514475
data_obj = tabs.get_object_data(url)
515476

516-
# Assign orbit properties depending on the elements requested
517-
if kwargs['orbital_elements'] == "keplerian":
518-
# Create empty object with class Orbit properties
519-
neocc_obj = tabs.KeplerianOrbitProperties()
520-
# Parse the requested data using Orbit properties parser
521-
neocc_obj._orb_kep_prop_parser(data_obj)
522-
elif kwargs['orbital_elements'] == "equinoctial":
523-
# Create empty object with class Orbit properties
524-
neocc_obj = tabs.EquinoctialOrbitProperties()
525-
# Parse the requested data using Orbit properties parser
526-
neocc_obj._orb_equi_prop_parser(data_obj)
477+
resp_str = data_obj.decode('utf-8')
478+
neocc_obj = tabs.parse_orbital_properties(resp_str)
527479

528480
# Ephemerides
529481
elif tab == 'ephemerides':
@@ -536,21 +488,22 @@ def query_object(name, tab, **kwargs):
536488
# Check if any kwargs is missing
537489
for element in args_dict:
538490
if element not in kwargs:
539-
raise KeyError ('Please specify ' + args_dict[element]
540-
+ ' for ephemerides')
491+
raise KeyError(f'Please specify {args_dict[element]} for ephemerides.')
541492

542-
# Create empty object with class Ephemerides
543-
neocc_obj = tabs.Ephemerides()
544-
# Parse the requested data using Ephemerides parser
545-
neocc_obj._ephem_parser(name, observatory=kwargs['observatory'],
493+
resp_str = tabs.get_ephemerides_data(name, observatory=kwargs['observatory'],
546494
start=kwargs['start'], stop=kwargs['stop'],
547495
step=kwargs['step'],
548496
step_unit=kwargs['step_unit'])
497+
neocc_obj = tabs.parse_ephemerides(resp_str)
498+
549499
elif tab == 'summary':
500+
resp_str = tabs.get_summary_data(name)
501+
502+
neocc_obj = tabs.parse_summary(resp_str)
550503
# Create empty object with class Summary
551-
neocc_obj = tabs.Summary()
504+
#neocc_obj = tabs.Summary()
552505
# Parse the requested data using Summary parser
553-
neocc_obj._summary_parser(name)
506+
#neocc_obj._summary_parser(name)
554507

555508
return neocc_obj
556509

astroquery/esa/neocc/lists.py

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from astropy.time import Time, TimeDelta
1414

1515
from astroquery.esa.neocc import conf
16+
from astroquery.esa.neocc.utils import convert_time
1617

1718
# Import BASE URL and TIMEOUT
1819
API_URL = conf.API_URL
@@ -87,8 +88,8 @@ def get_list_data(url, list_name):
8788
8889
Returns
8990
-------
90-
neocc_lst : *pandas.Series* or *pandas.DataDrame*
91-
Data frame which contains the data of the requested list.
91+
neocc_lst : `~astropy.table.Table`
92+
Astropy Table which contains the data of the requested list.
9293
"""
9394

9495
# Get data from URL
@@ -113,8 +114,8 @@ def parse_list(list_name, data_string):
113114
114115
Returns
115116
-------
116-
neocc_lst : *pandas.Series* or *pandas.DataFrame*
117-
Data frame with data from the list parsed.
117+
neocc_lst : `~astropy.table.Table`
118+
Astropy Table which contains the data of the requested list.
118119
"""
119120

120121
# Parse data for each type of list
@@ -156,8 +157,8 @@ def parse_nea(resp_str):
156157
Decoded StringIO object.
157158
Returns
158159
-------
159-
neocc_lst : *pandas.Series* or *pandas.DataFrame*
160-
Data frame with NEA list data parsed.
160+
neocc_lst : `~astropy.table.Table`
161+
Astropy Table with NEA list data parsed.
161162
"""
162163

163164
resp_str = resp_str.replace('#', '')
@@ -174,8 +175,8 @@ def parse_risk(resp_str):
174175
175176
Returns
176177
-------
177-
neocc_lst : *pandas.Series* or *pandas.DataFrame*
178-
Data frame with risk list data parsed.
178+
neocc_lst : `~astropy.table.Table`
179+
Astropy Table with risk list data parsed.
179180
"""
180181

181182
neocc_lst = Table.read(resp_str, header_start=2, data_start=4, format="ascii.fixed_width")
@@ -216,8 +217,8 @@ def parse_clo(resp_str):
216217
Decoded StringIO object.
217218
Returns
218219
-------
219-
neocc_lst : *pandas.Series* or *pandas.DataFrame*
220-
Data frame with close approaches list data parsed.
220+
neocc_lst : `~astropy.table.Table`
221+
Astropy Table with close approaches list data parsed.
221222
"""
222223

223224
neocc_lst = Table.read(resp_str, header_start=2, data_start=4, format="ascii.fixed_width",
@@ -250,8 +251,8 @@ def parse_pri(resp_str):
250251
Decoded StringIO object.
251252
Returns
252253
-------
253-
neocc_lst : *pandas.Series* or *pandas.DataFrame*
254-
Data frame with priority list data parsed.
254+
neocc_lst : `~astropy.table.Table`
255+
Astropy Table with priority list data parsed.
255256
"""
256257

257258
neocc_lst = Table.read(resp_str, data_start=1, format="ascii.no_header",
@@ -281,14 +282,12 @@ def parse_encounter(resp_str):
281282
Decoded StringIO object.
282283
Returns
283284
-------
284-
neocc_lst : *pandas.Series* or *pandas.DataFrame*
285-
Data frame with close encounter list data parsed.
285+
neocc_lst : `~astropy.table.Table`
286+
Astropy Table with close encounter list data parsed.
286287
"""
287288

288289
neocc_lst = Table.read(resp_str, header_start=1, data_start=3, format="ascii.fixed_width")
289-
290-
day, tme = np.array([x.split(".") for x in neocc_lst['Date']]).swapaxes(0,1)
291-
neocc_lst['Date'] = Time.strptime(day, '%Y/%m/%d') + TimeDelta(tme.astype(int)/1e5, format="jd")
290+
neocc_lst['Date'] = convert_time(neocc_lst['Date'], conversion_string='%Y/%m/%d')
292291

293292
neocc_lst.meta = {'Name/design': 'designator of the NEA',
294293
'Planet': 'planet or massive asteroid is involved in the close approach',
@@ -338,8 +337,8 @@ def parse_neo_catalogue(resp_str):
338337
Decoded StringIO object.
339338
Returns
340339
-------
341-
neocc_lst : *pandas.DataFrame*
342-
Data frame with catalogues of NEAs list data parsed.
340+
neocc_lst : `~astropy.table.Table`
341+
Astropy Table with catalogues of NEAs list data parsed.
343342
"""
344343

345344
neocc_lst = Table.read(resp_str, data_start=6, format="ascii.no_header",

0 commit comments

Comments
 (0)