Browse Source

Return the ephemeris in a nice table 🤩

tags/v0.1.0
Jérôme Deuchnord 4 years ago
parent
commit
d444e4e727
No known key found for this signature in database GPG Key ID: BC6F3C345B7D33B0
6 changed files with 77 additions and 9 deletions
  1. +1
    -0
      Pipfile
  2. +8
    -1
      Pipfile.lock
  3. +19
    -0
      README.md
  4. +39
    -0
      dumper.py
  5. +7
    -7
      ephemeris.py
  6. +3
    -1
      kosmorro.py

+ 1
- 0
Pipfile View File

@@ -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"

+ 8
- 1
Pipfile.lock View File

@@ -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": {


+ 19
- 0
README.md View File

@@ -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
``` ```

+ 39
- 0
dumper.py View File

@@ -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']]

+ 7
- 7
ephemeris.py View File

@@ -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(),
'maximum': maximum_time.utc_iso(),
'set': set_time.utc_iso()
'rise': rise_time,
'maximum': maximum_time,
'set': set_time
} }


return { return {
'name': o['planet'], 'name': o['planet'],
'rise': rise_time.utc_iso() if rise_time is not None else None,
'maximum': maximum_time.utc_iso() if maximum_time is not None else None,
'set': set_time.utc_iso() if set_time is not None else None
'rise': rise_time if rise_time is not None else None,
'maximum': maximum_time if maximum_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:


+ 3
- 1
kosmorro.py View File

@@ -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():


Loading…
Cancel
Save