Skip to content

Commit 230891a

Browse files
committed
removing pandas from tabs.py
1 parent 1a42547 commit 230891a

File tree

5 files changed

+754
-2034
lines changed

5 files changed

+754
-2034
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 22 Aug. 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: 31 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +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.2.0
13-
* Date: 19-08-2022
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-
2.2.0 19-08-2022 Impacted objects list format change
41-
======== =========== ============================================
42-
43-
44-
© Copyright [European Space Agency][2022]
45-
All rights reserved
467
"""
478

489
import time
@@ -54,6 +15,7 @@
5415

5516
__all__ = ['neocc', 'ESAneoccClass']
5617

18+
5719
@async_to_sync
5820
class ESAneoccClass(BaseQuery):
5921
"""
@@ -195,7 +157,7 @@ def query_list(list_name):
195157

196158
return neocc_list
197159

198-
except ConnectionError: # pragma: no cover
160+
except ConnectionError: # pragma: no cover
199161
print('Initial attempt to obtain list failed. Reattempting...')
200162
# Wait 5 seconds
201163
time.sleep(5)
@@ -442,12 +404,13 @@ def query_object(name, tab, **kwargs):
442404
tab_list = ['impacts', 'close_approaches', 'observations',
443405
'physical_properties', 'orbit_properties',
444406
'ephemerides', 'summary']
407+
445408
# Check the input of the method if tab is not in the list
446409
# print and error and show the valid names
447410
if tab not in tab_list:
448411
raise KeyError('Please introduce a valid tab name. '
449-
'valid tabs names are: ' +\
450-
', '.join([str(elem) for elem in tab_list]))
412+
'valid tabs names are: '
413+
', '.join([str(elem) for elem in tab_list]))
451414
# Depending on the tab selected the information will be requested
452415
# following different methods. Create "switch" for each case:
453416

@@ -457,36 +420,34 @@ def query_object(name, tab, **kwargs):
457420
# Get URL to obtain the data from NEOCC
458421
url = tabs.get_object_url(name, tab)
459422

423+
print("First")
424+
print(url)
425+
460426
# Request data two times if the first attempt fails
461427
try:
462428
# Get object data
463429
data_obj = tabs.get_object_data(url)
464-
except ConnectionError: # pragma: no cover
430+
except ConnectionError: # pragma: no cover
465431
print('Initial attempt to obtain object data failed. '
466432
'Reattempting...')
467433
# Wait 5 seconds
468434
time.sleep(5)
469435
# Get object data
470436
data_obj = tabs.get_object_data(url)
471437

438+
resp_str = data_obj.decode('utf-8')
439+
440+
# TODO: check data here
441+
472442
if tab == 'impacts':
473-
# Create empty object with class Impacts
474-
neocc_obj = tabs.Impacts()
475-
# Parse the requested data using Impacts parser
476-
neocc_obj._impacts_parser(data_obj)
443+
neocc_obj = tabs.parse_impacts(resp_str)
477444
elif tab == 'close_approaches':
478-
# Parse the requested data using Close Approaches parser
479-
neocc_obj = tabs.CloseApproaches.clo_appr_parser(data_obj)
445+
neocc_obj = tabs.parse_close_aproach(resp_str)
480446
elif tab == 'observations':
481-
# Create empty object
482-
neocc_obj = tabs.AsteroidObservations()
483-
# Get object with attributes from data
484-
neocc_obj._ast_obs_parser(data_obj)
447+
neocc_obj = tabs.parse_observations(resp_str)
485448
elif tab == 'physical_properties':
486-
# Create empty object with class Physical properties
487-
neocc_obj = tabs.PhysicalProperties()
488-
# Parse the requested data using Physical properties parser
489-
neocc_obj._phys_prop_parser(data_obj)
449+
neocc_obj = tabs.parse_physical_properties(resp_str)
450+
490451
# Orbit properties
491452
elif tab == 'orbit_properties':
492453
# Raise error if no elements are provided
@@ -508,25 +469,16 @@ def query_object(name, tab, **kwargs):
508469
try:
509470
# Get object data
510471
data_obj = tabs.get_object_data(url)
511-
except ConnectionError: # pragma: no cover
472+
except ConnectionError: # pragma: no cover
512473
print('Initial attempt to obtain object data failed. '
513474
'Reattempting...')
514475
# Wait 5 seconds
515476
time.sleep(5)
516477
# Get object data
517478
data_obj = tabs.get_object_data(url)
518479

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

531483
# Ephemerides
532484
elif tab == 'ephemerides':
@@ -539,21 +491,22 @@ def query_object(name, tab, **kwargs):
539491
# Check if any kwargs is missing
540492
for element in args_dict:
541493
if element not in kwargs:
542-
raise KeyError ('Please specify ' + args_dict[element]
543-
+ ' for ephemerides')
494+
raise KeyError(f'Please specify {args_dict[element]} for ephemerides.')
544495

545-
# Create empty object with class Ephemerides
546-
neocc_obj = tabs.Ephemerides()
547-
# Parse the requested data using Ephemerides parser
548-
neocc_obj._ephem_parser(name, observatory=kwargs['observatory'],
496+
resp_str = tabs.get_ephemerides_data(name, observatory=kwargs['observatory'],
549497
start=kwargs['start'], stop=kwargs['stop'],
550498
step=kwargs['step'],
551499
step_unit=kwargs['step_unit'])
500+
neocc_obj = tabs.parse_ephemerides(resp_str)
501+
552502
elif tab == 'summary':
503+
resp_str = tabs.get_summary_data(name)
504+
505+
neocc_obj = tabs.parse_summary(resp_str)
553506
# Create empty object with class Summary
554-
neocc_obj = tabs.Summary()
507+
#neocc_obj = tabs.Summary()
555508
# Parse the requested data using Summary parser
556-
neocc_obj._summary_parser(name)
509+
#neocc_obj._summary_parser(name)
557510

558511
return neocc_obj
559512

astroquery/esa/neocc/lists.py

Lines changed: 2 additions & 3 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
@@ -286,9 +287,7 @@ def parse_encounter(resp_str):
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',

0 commit comments

Comments
 (0)