You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

40 lines
1.5 KiB

  1. from abc import ABC, abstractmethod
  2. from tabulate import tabulate
  3. from skyfield import almanac
  4. class Dumper(ABC):
  5. def __init__(self, ephemeris):
  6. self.ephemeris = ephemeris
  7. @abstractmethod
  8. def to_string(self):
  9. pass
  10. class TextDumper(Dumper):
  11. def to_string(self):
  12. s = '\n\n'.join([self.get_planets(self.ephemeris['planets'], self.ephemeris['sun']),
  13. self.get_moon(self.ephemeris['moon'])])
  14. return s
  15. @staticmethod
  16. def get_planets(planets, sun):
  17. s = [['SUN', sun['rise'].utc_strftime('%H:%M'), '-', sun['set'].utc_strftime('%H:%M')]]
  18. for planet in planets:
  19. name = planet
  20. planet_data = planets[planet]
  21. planet_rise = planet_data['rise'].utc_strftime('%H:%M') if planet_data['rise'] is not None else ' -'
  22. planet_maximum = planet_data['maximum'].utc_strftime('%H:%M') if planet_data['maximum'] is not None\
  23. else ' -'
  24. planet_set = planet_data['set'].utc_strftime('%H:%M') if planet_data['set'] is not None else ' -'
  25. s.append([name, planet_rise, planet_maximum, planet_set])
  26. return tabulate(s, headers=['Planet', 'Rise time', 'Maximum time', 'Set time'], tablefmt='simple',
  27. stralign='center', colalign=('left',))
  28. @staticmethod
  29. def get_moon(moon):
  30. return 'Moon phase: %s' % almanac.MOON_PHASES[moon['phase']]