forked from dgomes/home-assistant-custom-components
-
Notifications
You must be signed in to change notification settings - Fork 0
/
developer.py
110 lines (84 loc) · 3.93 KB
/
developer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
"""
Support to check for pull requests related to current configuration.
Configuration:
developer:
github_personal_token: 3456784235482398577563485739
get your token from https://github.com/settings/tokens
"""
import logging
from datetime import timedelta
import voluptuous as vol
from homeassistant.const import ATTR_FRIENDLY_NAME
from homeassistant.helpers.restore_state import async_get_last_state
from homeassistant.helpers import event
import homeassistant.helpers.config_validation as cv
import homeassistant.util.dt as dt_util
_LOGGER = logging.getLogger(__name__)
REQUIREMENTS = ['PyGithub']
HOMEASSITANT_ORGANIZATION = 'home-assistant'
HOMEASSITANT_REPO = 'home-assistant'
ATTR_LAST_UPDATED = 'last_updated'
NOTIFICATION_ID = 'developer_notification'
DOMAIN = 'developer'
FRIENDLY_NAME = 'Last reviewed PR'
ENTITY_ID = 'developer.last_signaled_pr'
CONF_GITHUB_PERSONAL_TOKEN = 'github_personal_token'
CONFIG_SCHEMA = vol.Schema({DOMAIN: {
vol.Optional(CONF_GITHUB_PERSONAL_TOKEN, default=None): cv.string,
}}, extra=vol.ALLOW_EXTRA)
async def async_setup(hass, config):
"""Set up the hardware owner and developer component."""
conf = config.get(DOMAIN, {})
github_personal_token = conf[CONF_GITHUB_PERSONAL_TOKEN]
last_state = await async_get_last_state(hass, ENTITY_ID)
_LOGGER.debug("Last state: %s", last_state)
if last_state:
hass.states.async_set(ENTITY_ID, last_state.state,
{ATTR_FRIENDLY_NAME: FRIENDLY_NAME})
def check_new_pullrequests(now):
"""Check on github for pull requests on platforms currently running."""
from github import Github
_LOGGER.debug("check_new_pullrequests")
github_client = Github(github_personal_token)
organization = github_client.get_organization(HOMEASSITANT_ORGANIZATION)
repository = organization.get_repo(HOMEASSITANT_REPO)
last_signaled_pr = hass.states.get(ENTITY_ID)
_LOGGER.debug("Last signaled PR: %s", last_signaled_pr)
installed_platforms = [p.split('.')[1] for p in list(hass.config.components) if "." in p]
installed_platforms = set([p for p in installed_platforms if p not in ['homeassistant']])
_LOGGER.debug(installed_platforms)
pr_list = []
for pull_request in repository.get_pulls():
found = False
_LOGGER.debug(pull_request.number)
pr_list.append(pull_request.number)
if last_signaled_pr and\
pull_request.number <= int(last_signaled_pr.state):
break
for changed_file in pull_request.get_files():
if found:
break
for platform in installed_platforms:
if not found and\
platform in changed_file.filename.split('/')[-1]:
_LOGGER.debug("FOUND an interesting PR %s",
pull_request.number)
hass.components.persistent_notification.create(
'#{}: {}<br />'
'{}<br />'
'You are using {}'
''.format(pull_request.number, pull_request.title,
pull_request.html_url, platform),
title="New Pull Request",
notification_id="{}{}".format(NOTIFICATION_ID,
pull_request.number))
found = True
_LOGGER.debug("Set %s to %s", ENTITY_ID, max(pr_list))
hass.states.set(ENTITY_ID, max(pr_list),
{ATTR_FRIENDLY_NAME: FRIENDLY_NAME})
# Update daily, start 1 hour after startup
_dt = dt_util.utcnow() + timedelta(hours=1)
event.async_track_utc_time_change(
hass, check_new_pullrequests,
hour=_dt.hour, minute=_dt.minute, second=_dt.second)
return True