Skip to content

Instantly share code, notes, and snippets.

@sebble
Last active September 20, 2016 14:05
Show Gist options
  • Save sebble/dd4e1de5a79881c0508d8fceb3bdb2e4 to your computer and use it in GitHub Desktop.
Save sebble/dd4e1de5a79881c0508d8fceb3bdb2e4 to your computer and use it in GitHub Desktop.
Best match gist redirection (no cache, no rate-limit protection)
#!/usr/bin/env python
from SimpleHTTPServer import SimpleHTTPRequestHandler
from SocketServer import TCPServer
from requests import get
from os import environ
cache = {}
user = environ.get('GITHUB_USERNAME','sebble')
def find(key):
m = [x['id'] for x in cache if x['id'][:len(key)]==key]
return m[0] if len(m) else None
def update():
global cache
cache = get('https://api.github.com/users/%s/gists?per_page=100'%user).json()
class MyRedirector(SimpleHTTPRequestHandler):
def do_GET(self):
global cache
key = self.path.split('/')[1]
gist = find(key)
if gist is None:
try:
update()
gist = find(key)
if gist is None:
self.send_response(404)
self.end_headers()
return
except:
self.send_response(500)
self.end_headers()
return
url = 'https://bl.ocks.org/%s/%s'%(user,gist)
self.send_response(302)
self.send_header('Location',url)
self.end_headers()
TCPServer(('0.0.0.0', environ.get('PORT',8080)), MyRedirector).serve_forever()
# docker run --rm -it -v "$PWD/server.py:/server.py" -p 8081:8080 python:2-alpine sh -c 'pip install requests && /server.py'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment