Adding moon phase module

This commit is contained in:
Aaron Fordham 2015-09-11 10:32:43 +00:00
parent 78d9bdda27
commit f8223286e0

View File

@ -2,8 +2,10 @@ from i3pystatus import IntervalModule, formatp
import datetime import datetime
import math import math
import decimal import decimal
import os import os
from i3pystatus.core.util import TimeWrapper from i3pystatus.core.util import TimeWrapper
dec = decimal.Decimal dec = decimal.Decimal
@ -11,117 +13,106 @@ dec = decimal.Decimal
# Moon phase module # Moon phase module
class MoonPhase(IntervalModule): class MoonPhase(IntervalModule):
"""
Available Formatters
""" status: Allows for mapping of current moon phase to various
Available Formatters - New Moon:
- Waxing Crescent:
- First Quarter:
- Waxing Gibbous:
- Full Moon:
- Waning Gibbous:
- Last Quarter:
- Waning Crescent:
status: Allow for mapping of current moon phase """
status {
New Moon: settings = (
Waxing Crescent: "format",
First Quarter: ("status", "Current moon phase"),
Waxing Gibbous: ("illum", "Percentage that is illuminated"),
Full Moon: ("color", "Set color"),
Waning Gibbous:
Last Quarter:
Waning Crescent:
}
"""
settings = ( )
"format",
("status", "Current moon phase"),
("illum", "Percentage that is illuminated"),
("color", "Set color"),
) format = "{illum} {status}"
format = "{illum} {status}" interval = 60 * 60 * 2 # every 2 hours
interval = 60 * 60 * 2 # every 2 hours status = {
status = { "New Moon": "NM",
"Waxing Crescent": "WaxCres",
"First Quarter": "FQ",
"Waxing Gibbous": "WaxGib",
"Full Moon": "FM",
"Waning Gibbous": "WanGib",
"Last Quarter": "LQ",
"Waning Cresent": "WanCres",
"New Moon": "NM", }
"Waxing Crescent": "WaxCres",
"First Quarter": "FQ",
"Waxing Gibbous": "WaxGib",
"Full Moon": "FM",
"Waning Gibbous": "WanGib",
"Last Quarter": "LQ",
"Waning Cresent": "WanCres",
color = {
"New Moon": "#00BDE5",
"Waxing Crescent": "#138DD8",
"First Quarter": "#265ECC",
"Waxing Gibbous": "#392FBF",
"Full Moon": "#4C00B3",
"Waning Gibbous": "#871181",
"Last Quarter": "#C32250",
"Waning Crescent": "#FF341F",
}
def pos(now=None):
days_in_second = 86400
now = datetime.datetime.now()
difference = now - datetime.datetime(2001, 1, 1)
days = dec(difference.days) + (dec(difference.seconds) / dec(days_in_second))
lunarCycle = dec("0.20439731") + (days * dec("0.03386319269"))
return lunarCycle % dec(1)
def current_phase(self):
lunarCycle = self.pos()
index = (lunarCycle * dec(8)) + dec("0.5")
index = math.floor(index)
return {
0: "New Moon",
1: "Waxing Crescent",
2: "First Quarter",
3: "Waxing Gibbous",
4: "Full Moon",
5: "Waning Gibbous",
6: "Last Quarter",
7: "Waning Crescent",
}[int(index) & 7]
def illum(self):
phase = 0
lunarCycle = float(self.pos()) * 100
if lunarCycle > 50:
phase = 100 - lunarCycle
else:
phase = lunarCycle * 2
return phase
def run(self):
fdict = {
"status": self.status[self.current_phase()],
"illum": self.illum(),
} }
color = "#ffffff" self.output = {
"full_text": formatp(self.format, **fdict),
phase_color = { "color": self.color[self.current_phase()],
"New Moon": "#00BDE5",
"Waxing Crescent": "#138DD8",
"First Quarter": "#265ECC",
"Waxing Gibbous": "#392FBF",
"Full Moon": "#4C00B3",
"Waning Gibbous": "#871181",
"Last Quarter": "#C32250",
"Waning Crescent": "#FF341F",
} }
def pos(now=None):
now = None
days_in_second = 86400
if now is None:
now = datetime.datetime.now()
difference = now - datetime.datetime(2001, 1, 1)
days = dec(difference.days) + (dec(difference.seconds) / dec(days_in_second))
lunarCycle = dec("0.20439731") + (days * dec("0.03386319269"))
return lunarCycle % dec(1)
def current_phase(self):
lunarCycle = self.pos()
index = (lunarCycle * dec(8)) + dec("0.5")
index = math.floor(index)
return {
0: "New Moon",
1: "Waxing Crescent",
2: "First Quarter",
3: "Waxing Gibbous",
4: "Full Moon",
5: "Waning Gibbous",
6: "Last Quarter",
7: "Waning Crescent",
}[int(index) & 7]
def illum(self):
phase = 0
lunarCycle = float(self.pos()) * 100
if lunarCycle > 50:
phase = 100 - lunarCycle
else:
phase = lunarCycle * 2
return phase
def run(self):
color = self.color
fdict = {
"status": self.status[self.current_phase()],
"illum": self.illum(),
}
self.output = {
"full_text": formatp(self.format, **fdict),
"color": self.phase_color[self.current_phase()],
}