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