@@ -8,6 +8,7 @@ pylintfileheader = "*" | |||||
[packages] | [packages] | ||||
skyfield = ">=1.13.0,<2.0.0" | skyfield = ">=1.13.0,<2.0.0" | ||||
tabulate = "*" | |||||
[requires] | [requires] | ||||
python_version = "3.7" | python_version = "3.7" |
@@ -1,7 +1,7 @@ | |||||
{ | { | ||||
"_meta": { | "_meta": { | ||||
"hash": { | "hash": { | ||||
"sha256": "87e49f26ac5fcddb454c1ec4233406938f06ba68534ee464a1b1c2398f2d1d26" | "sha256": "2567979765f3ac22ecdbf4c6fbaf6e20c75bc83173db4f43d961e7a405804685" | ||||
}, | }, | ||||
"pipfile-spec": 6, | "pipfile-spec": 6, | ||||
"requires": { | "requires": { | ||||
@@ -60,6 +60,13 @@ | |||||
], | ], | ||||
"index": "pypi", | "index": "pypi", | ||||
"version": "==1.13" | "version": "==1.13" | ||||
}, | |||||
"tabulate": { | |||||
"hashes": [ | |||||
"sha256:d0097023658d4dea848d6ae73af84532d1e86617ac0925d1adf1dd903985dac3" | |||||
], | |||||
"index": "pypi", | |||||
"version": "==0.8.5" | |||||
} | } | ||||
}, | }, | ||||
"develop": { | "develop": { | ||||
@@ -51,4 +51,23 @@ optional arguments: | |||||
By default, the observer will be set at position (0,0) with an altitude of 0. | By default, the observer will be set at position (0,0) with an altitude of 0. | ||||
You will more likely want to change that. | You will more likely want to change that. | ||||
``` | |||||
For instance, if you want the ephemeris of October 31th, 2019 in Paris, France: | |||||
```console | |||||
$ python kosmorro.py --latitude 48.8032 --longitude 2.3511 -m 10 -d 31 2019 | |||||
Planet Rise time Maximum time Set time | |||||
-------- ----------- -------------- ---------- | |||||
SUN 06:35 - 16:32 | |||||
MERCURY 08:44 13:01 16:59 | |||||
VENUS 08:35 13:01 17:18 | |||||
MARS 04:48 10:20 15:51 | |||||
JUPITER 10:40 15:01 18:46 | |||||
SATURN 12:12 16:20 20:26 | |||||
URANUS 16:23 - 06:22 | |||||
NEPTUNE 14:53 20:23 01:56 | |||||
PLUTO 12:36 17:01 20:50 | |||||
Moon phase: New Moon | |||||
``` | ``` |
@@ -0,0 +1,39 @@ | |||||
from abc import ABC, abstractmethod | |||||
from tabulate import tabulate | |||||
from skyfield import almanac | |||||
class Dumper(ABC): | |||||
def __init__(self, ephemeris): | |||||
self.ephemeris = ephemeris | |||||
@abstractmethod | |||||
def to_string(self): | |||||
pass | |||||
class TextDumper(Dumper): | |||||
def to_string(self): | |||||
s = '\n\n'.join([self.get_planets(self.ephemeris['planets'], self.ephemeris['sun']), | |||||
self.get_moon(self.ephemeris['moon'])]) | |||||
return s | |||||
@staticmethod | |||||
def get_planets(planets, sun): | |||||
s = [['SUN', sun['rise'].utc_strftime('%H:%M'), '-', sun['set'].utc_strftime('%H:%M')]] | |||||
for planet in planets: | |||||
name = planet | |||||
planet_data = planets[planet] | |||||
planet_rise = planet_data['rise'].utc_strftime('%H:%M') if planet_data['rise'] is not None else ' -' | |||||
planet_maximum = planet_data['maximum'].utc_strftime('%H:%M') if planet_data['maximum'] is not None\ | |||||
else ' -' | |||||
planet_set = planet_data['set'].utc_strftime('%H:%M') if planet_data['set'] is not None else ' -' | |||||
s.append([name, planet_rise, planet_maximum, planet_set]) | |||||
return tabulate(s, headers=['Planet', 'Rise time', 'Maximum time', 'Set time'], tablefmt='simple', | |||||
stralign='center', colalign=('left',)) | |||||
@staticmethod | |||||
def get_moon(moon): | |||||
return 'Moon phase: %s' % almanac.MOON_PHASES[moon['phase']] |
@@ -39,7 +39,7 @@ class Ephemeris: | |||||
sunrise = t[0] if y[0] else t[1] | sunrise = t[0] if y[0] else t[1] | ||||
sunset = t[1] if not y[1] else t[0] | sunset = t[1] if not y[1] else t[0] | ||||
return {'rise': sunrise.utc_iso(), 'set': sunset.utc_iso()} | return {'rise': sunrise, 'set': sunset} | ||||
def get_moon(self, year, month, day) -> dict: | def get_moon(self, year, month, day) -> dict: | ||||
time1 = self.timescale.utc(year, month, day - 10) | time1 = self.timescale.utc(year, month, day - 10) | ||||
@@ -138,16 +138,16 @@ class Ephemeris: | |||||
if rise_time is not None and set_time is not None and maximum_time is not None: | if rise_time is not None and set_time is not None and maximum_time is not None: | ||||
return { | return { | ||||
'name': o['planet'], | 'name': o['planet'], | ||||
'rise': rise_time.utc_iso(), | 'rise': rise_time, | ||||
'maximum': maximum_time.utc_iso(), | 'maximum': maximum_time, | ||||
'set': set_time.utc_iso() | 'set': set_time | ||||
} | } | ||||
return { | return { | ||||
'name': o['planet'], | 'name': o['planet'], | ||||
'rise': rise_time.utc_iso() if rise_time is not None else None, | 'rise': rise_time if rise_time is not None else None, | ||||
'maximum': maximum_time.utc_iso() if maximum_time is not None else None, | 'maximum': maximum_time if maximum_time is not None else None, | ||||
'set': set_time.utc_iso() if set_time is not None else None | 'set': set_time if set_time is not None else None | ||||
} | } | ||||
def compute_ephemeris_for_month(self, year: int, month: int) -> list: | def compute_ephemeris_for_month(self, year: int, month: int) -> list: | ||||
@@ -18,6 +18,7 @@ import argparse | |||||
import numpy | import numpy | ||||
from datetime import date | from datetime import date | ||||
from ephemeris import Ephemeris | from ephemeris import Ephemeris | ||||
import dumper | |||||
import json | import json | ||||
@@ -42,7 +43,8 @@ def main(): | |||||
ephemeris = Ephemeris(position) | ephemeris = Ephemeris(position) | ||||
e = ephemeris.compute_ephemeris(year, month, day) | e = ephemeris.compute_ephemeris(year, month, day) | ||||
print(json.dumps(e, default=json_default, indent=4, separators=(',', ': '))) | d = dumper.TextDumper(e) | ||||
print(d.to_string()) | |||||
def get_args(): | def get_args(): | ||||