Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

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