Skip to content

Instantly share code, notes, and snippets.

@kbabioch kbabioch/hooks.py
Created Jun 7, 2018

Embed
What would you like to do?
Prototype of a hook for urlwatch to retrieve releases from GitHub via official API
# Copyright (c) 2018 Karol Babioch <karol@babioch.de>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This is a very basic hook for urlwatch [1], that will retrieve
# information about releases from a GitHub repository. An effort is
# ongoing [2] to include this functionality into the upstream project.
#
# To monitor a repostory, add the following to your urls.yml (e.g. by
# invoking `urlwatch --edit`:
#
# ---
# kind: github
# repo: thp/urlwatch
# ---
#
# This will retrieve the release information via the official GitHub
# API [3].
#
# NOTE: The public API is rate limited. Without an authorization
# token you can only perform 60 requests per hour. You can create
# a token at [4]. This token only requires the `public_repo`
# permission. Put it into the `__token__` attribute.
# [1]: https://github.com/thp/urlwatch
# [2]: https://github.com/thp/urlwatch/issues/246
# [3]: https://developer.github.com/
# [4]: https://github.com/settings/tokens
import requests
from urlwatch import jobs
class GitHubJob(jobs.Job):
__API__ = 'https://api.github.com'
# FILL IN YOUR API token here
# -> https://github.com/settings/tokens
# only public_repo permission is required
__token__ = ''
__kind__ = 'github'
__required__ = ('repo',)
def get_location(self):
return '{} (GitHub)'.format(self.repo)
def retrieve(self, job_state):
headers = {}
if self.__token__:
headers['Authorization'] = 'token {}'.format(self.__token__)
r = requests.get('{}/repos/{}/releases'.format(self.__API__, self.repo), headers=headers)¬
r.raise_for_status()¬
return r.text¬
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.