1- # -*- coding: utf-8 -*-
1+ # Licensed under a 3-clause BSD style license - see LICENSE.rst
22"""
33Main module from ESA NEOCC library. This module contains the two main
44methods of the library: *query_list* and *query_object*. The information
55is obtained from ESA Near-Earth Object Coordination Centre's (NEOCC) web
66portal: 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
459import time
5115
5216__all__ = ['neocc' , 'ESAneoccClass' ]
5317
18+
5419@async_to_sync
5520class 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
0 commit comments