#coding: utf-8 import keychain import console import editor import time import re import requests import json import base64 SITE_BRANCH = 'gh-pages' # either master or gh-pages #keychain.delete_password('GitHub', 'username') #keychain.delete_password('GitHub', 'token') #keychain.delete_password('GitHub', 'repository') # Get Username, API Token and Repository username = keychain.get_password('GitHub', 'username') if not username: username = console.input_alert("Username", "Enter your GitHub Username", '', "Save") keychain.set_password('GitHub', 'username', username) tokn = keychain.get_password('GitHub', 'token') if not tokn: tokn = console.password_alert("API Token", "Enter your GitHub API Token", '', "Save") keychain.set_password('GitHub', 'token', tokn) repo = keychain.get_password('GitHub', 'repository') if not repo: repo = console.input_alert("Repository", "Enter your GitHub Repository name", '', "Save") keychain.set_password('GitHub', 'repository', repo) # Mangle the post ;) post_text = editor.get_text() post_sections = post_text.split('---') if len(post_sections) > 1: yaml_header = post_sections[1].splitlines() # Find the title in the YAML post_title = None date = None for line in yaml_header: if line[:6] == 'title:': post_title = line[6:].strip() elif line[:5] == 'date:': date = line[5:].strip()[:10] if post_title and date: safe_title = re.sub('[^a-zA-Z0-9\s]', '', post_title).replace(' ', '-') safe_title.replace('--', '-') post_filename = '_posts/%s-%s.markdown' % (date, safe_title) URL = 'https://api.github.com/repos/%s/%s/contents/%s' % (username, repo, post_filename) header = { 'Authorization': 'token %s' % tokn, 'User-Agent': username } get_data = { 'path': post_filename, 'ref': SITE_BRANCH } response = requests.get(URL, headers=header, params=get_data) response_json = response.json() if response.status_code == 200: new_text = base64.b64decode(response_json['content']) editor.replace_text(0, len(post_text), new_text) console.hud_alert("Post downloaded from GitHub.", 'success', 2.0) else: # Something went wrong! console.alert("This post does not exist.") else: console.alert("Couldn't find a title or date.\n\nAction Halted.") else: console.alert("No YAML header found.\n\nAction Halted.")