{"action":"created","comment":{"url":"https://api.github.com/repos/learningequality/ka-lite/pulls/comments/32144119","id":32144119,"diff_hunk":"@@ -0,0 +1,26 @@\n+import os\n+import re\n+\n+from django.core.management.base import NoArgsCommand\n+\n+from kalite.settings import USER_DATA_ROOT\n+from os import walk\n+\n+class Command(NoArgsCommand):\n+    \"\"\"\n+    Pre-process html files in sphinx-docs.\n+    At the moment, this just means making static file references (css, js) use an absolute href.\n+    \"\"\"\n+\n+    def handle_noargs(*args, **kwargs):\n+        expr = re.compile(r'(href|src)=\"(\\.\\./)*(_static|_images)/')\n+        repl = r'\\1=\"/static/\\3/'\n+        docs_path = os.path.join(USER_DATA_ROOT, \"sphinx-docs\", \"_build\", \"html\")\n+        for dirpath, dirnames, filenames in walk(docs_path):\n+            for filename in filenames:\n+                if \".html\" in filename:\n+                    with open(os.path.join(dirpath, filename), \"r+\") as f:\n+                        preprocess = f.read()\n+                        postprocess = expr.sub(repl, preprocess)","path":"kalite/distributed/management/commands/sphinx_docs_preprocess.py","position":24,"original_position":24,"commit_id":"994330cdcde1abf2a351971b5323ff2d550472ab","original_commit_id":"994330cdcde1abf2a351971b5323ff2d550472ab","user":{"login":"MCGallaspy","id":8888020,"avatar_url":"https://avatars.githubusercontent.com/u/8888020?v=3","gravatar_id":"","url":"https://api.github.com/users/MCGallaspy","html_url":"https://github.com/MCGallaspy","followers_url":"https://api.github.com/users/MCGallaspy/followers","following_url":"https://api.github.com/users/MCGallaspy/following{/other_user}","gists_url":"https://api.github.com/users/MCGallaspy/gists{/gist_id}","starred_url":"https://api.github.com/users/MCGallaspy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MCGallaspy/subscriptions","organizations_url":"https://api.github.com/users/MCGallaspy/orgs","repos_url":"https://api.github.com/users/MCGallaspy/repos","events_url":"https://api.github.com/users/MCGallaspy/events{/privacy}","received_events_url":"https://api.github.com/users/MCGallaspy/received_events","type":"User","site_admin":false},"body":"You got it.","created_at":"2015-06-10T17:38:10Z","updated_at":"2015-06-10T17:38:10Z","html_url":"https://github.com/learningequality/ka-lite/pull/3806#discussion_r32144119","pull_request_url":"https://api.github.com/repos/learningequality/ka-lite/pulls/3806","_links":{"self":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/comments/32144119"},"html":{"href":"https://github.com/learningequality/ka-lite/pull/3806#discussion_r32144119"},"pull_request":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/3806"}}},"pull_request":{"url":"https://api.github.com/repos/learningequality/ka-lite/pulls/3806","id":37202733,"html_url":"https://github.com/learningequality/ka-lite/pull/3806","diff_url":"https://github.com/learningequality/ka-lite/pull/3806.diff","patch_url":"https://github.com/learningequality/ka-lite/pull/3806.patch","issue_url":"https://api.github.com/repos/learningequality/ka-lite/issues/3806","number":3806,"state":"open","locked":false,"title":"Serve built docs within app","user":{"login":"MCGallaspy","id":8888020,"avatar_url":"https://avatars.githubusercontent.com/u/8888020?v=3","gravatar_id":"","url":"https://api.github.com/users/MCGallaspy","html_url":"https://github.com/MCGallaspy","followers_url":"https://api.github.com/users/MCGallaspy/followers","following_url":"https://api.github.com/users/MCGallaspy/following{/other_user}","gists_url":"https://api.github.com/users/MCGallaspy/gists{/gist_id}","starred_url":"https://api.github.com/users/MCGallaspy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MCGallaspy/subscriptions","organizations_url":"https://api.github.com/users/MCGallaspy/orgs","repos_url":"https://api.github.com/users/MCGallaspy/repos","events_url":"https://api.github.com/users/MCGallaspy/events{/privacy}","received_events_url":"https://api.github.com/users/MCGallaspy/received_events","type":"User","site_admin":false},"body":"What's inside:\r\n* In `kalite.settings.base`, the `STATICFILES_DIRS` setting includes `os.path.join(_data_path, \"sphinx-docs\", \"_build\", \"html\")` if it exists. For me, this resolved to `/usr/share/kalite/sphinx-docs/_build/html`. This is so the included static files in that directory are served by Django.\r\n* A new view and url that serves documentation pages (html files only) found in the directory `[[ROOT_DATA_PATH]]/sphinx-docs/build/html`, or serves a 404 page if the file doesn't exist. The url matches e.g. `documentation/`, `documentation/usermanual/userman_admin.html`.\r\n* A management command (`sphinx_docs_preprocess`) to preprocess bundled docs during the build process. This is necessary so that `img` tags and references to css and js files resolve correctly. This is meant to be used in the build process, after building or otherwise obtaining docs.\r\n\r\nTodo: Include an access point to the docs somewhere in the app itself... suggestions?","created_at":"2015-06-08T22:27:55Z","updated_at":"2015-06-10T17:38:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d0579e8f12300a767e8bdea02db43a1ccab97c0f","assignee":{"login":"jamalex","id":618416,"avatar_url":"https://avatars.githubusercontent.com/u/618416?v=3","gravatar_id":"","url":"https://api.github.com/users/jamalex","html_url":"https://github.com/jamalex","followers_url":"https://api.github.com/users/jamalex/followers","following_url":"https://api.github.com/users/jamalex/following{/other_user}","gists_url":"https://api.github.com/users/jamalex/gists{/gist_id}","starred_url":"https://api.github.com/users/jamalex/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamalex/subscriptions","organizations_url":"https://api.github.com/users/jamalex/orgs","repos_url":"https://api.github.com/users/jamalex/repos","events_url":"https://api.github.com/users/jamalex/events{/privacy}","received_events_url":"https://api.github.com/users/jamalex/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/learningequality/ka-lite/milestones/41","html_url":"https://github.com/learningequality/ka-lite/milestones/0.14.0","labels_url":"https://api.github.com/repos/learningequality/ka-lite/milestones/41/labels","id":795036,"number":41,"title":"0.14.0","description":"","creator":{"login":"aronasorman","id":191955,"avatar_url":"https://avatars.githubusercontent.com/u/191955?v=3","gravatar_id":"","url":"https://api.github.com/users/aronasorman","html_url":"https://github.com/aronasorman","followers_url":"https://api.github.com/users/aronasorman/followers","following_url":"https://api.github.com/users/aronasorman/following{/other_user}","gists_url":"https://api.github.com/users/aronasorman/gists{/gist_id}","starred_url":"https://api.github.com/users/aronasorman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aronasorman/subscriptions","organizations_url":"https://api.github.com/users/aronasorman/orgs","repos_url":"https://api.github.com/users/aronasorman/repos","events_url":"https://api.github.com/users/aronasorman/events{/privacy}","received_events_url":"https://api.github.com/users/aronasorman/received_events","type":"User","site_admin":false},"open_issues":53,"closed_issues":246,"state":"open","created_at":"2014-09-18T21:53:07Z","updated_at":"2015-06-09T21:03:05Z","due_on":"2015-07-01T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/learningequality/ka-lite/pulls/3806/commits","review_comments_url":"https://api.github.com/repos/learningequality/ka-lite/pulls/3806/comments","review_comment_url":"https://api.github.com/repos/learningequality/ka-lite/pulls/comments{/number}","comments_url":"https://api.github.com/repos/learningequality/ka-lite/issues/3806/comments","statuses_url":"https://api.github.com/repos/learningequality/ka-lite/statuses/994330cdcde1abf2a351971b5323ff2d550472ab","head":{"label":"MCGallaspy:serve-built-docs","ref":"serve-built-docs","sha":"994330cdcde1abf2a351971b5323ff2d550472ab","user":{"login":"MCGallaspy","id":8888020,"avatar_url":"https://avatars.githubusercontent.com/u/8888020?v=3","gravatar_id":"","url":"https://api.github.com/users/MCGallaspy","html_url":"https://github.com/MCGallaspy","followers_url":"https://api.github.com/users/MCGallaspy/followers","following_url":"https://api.github.com/users/MCGallaspy/following{/other_user}","gists_url":"https://api.github.com/users/MCGallaspy/gists{/gist_id}","starred_url":"https://api.github.com/users/MCGallaspy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MCGallaspy/subscriptions","organizations_url":"https://api.github.com/users/MCGallaspy/orgs","repos_url":"https://api.github.com/users/MCGallaspy/repos","events_url":"https://api.github.com/users/MCGallaspy/events{/privacy}","received_events_url":"https://api.github.com/users/MCGallaspy/received_events","type":"User","site_admin":false},"repo":{"id":25265236,"name":"ka-lite","full_name":"MCGallaspy/ka-lite","owner":{"login":"MCGallaspy","id":8888020,"avatar_url":"https://avatars.githubusercontent.com/u/8888020?v=3","gravatar_id":"","url":"https://api.github.com/users/MCGallaspy","html_url":"https://github.com/MCGallaspy","followers_url":"https://api.github.com/users/MCGallaspy/followers","following_url":"https://api.github.com/users/MCGallaspy/following{/other_user}","gists_url":"https://api.github.com/users/MCGallaspy/gists{/gist_id}","starred_url":"https://api.github.com/users/MCGallaspy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MCGallaspy/subscriptions","organizations_url":"https://api.github.com/users/MCGallaspy/orgs","repos_url":"https://api.github.com/users/MCGallaspy/repos","events_url":"https://api.github.com/users/MCGallaspy/events{/privacy}","received_events_url":"https://api.github.com/users/MCGallaspy/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/MCGallaspy/ka-lite","description":"KA Lite: lightweight web server for serving core Khan Academy content (videos and exercises) without needing internet connectivity","fork":true,"url":"https://api.github.com/repos/MCGallaspy/ka-lite","forks_url":"https://api.github.com/repos/MCGallaspy/ka-lite/forks","keys_url":"https://api.github.com/repos/MCGallaspy/ka-lite/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MCGallaspy/ka-lite/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MCGallaspy/ka-lite/teams","hooks_url":"https://api.github.com/repos/MCGallaspy/ka-lite/hooks","issue_events_url":"https://api.github.com/repos/MCGallaspy/ka-lite/issues/events{/number}","events_url":"https://api.github.com/repos/MCGallaspy/ka-lite/events","assignees_url":"https://api.github.com/repos/MCGallaspy/ka-lite/assignees{/user}","branches_url":"https://api.github.com/repos/MCGallaspy/ka-lite/branches{/branch}","tags_url":"https://api.github.com/repos/MCGallaspy/ka-lite/tags","blobs_url":"https://api.github.com/repos/MCGallaspy/ka-lite/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MCGallaspy/ka-lite/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MCGallaspy/ka-lite/git/refs{/sha}","trees_url":"https://api.github.com/repos/MCGallaspy/ka-lite/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MCGallaspy/ka-lite/statuses/{sha}","languages_url":"https://api.github.com/repos/MCGallaspy/ka-lite/languages","stargazers_url":"https://api.github.com/repos/MCGallaspy/ka-lite/stargazers","contributors_url":"https://api.github.com/repos/MCGallaspy/ka-lite/contributors","subscribers_url":"https://api.github.com/repos/MCGallaspy/ka-lite/subscribers","subscription_url":"https://api.github.com/repos/MCGallaspy/ka-lite/subscription","commits_url":"https://api.github.com/repos/MCGallaspy/ka-lite/commits{/sha}","git_commits_url":"https://api.github.com/repos/MCGallaspy/ka-lite/git/commits{/sha}","comments_url":"https://api.github.com/repos/MCGallaspy/ka-lite/comments{/number}","issue_comment_url":"https://api.github.com/repos/MCGallaspy/ka-lite/issues/comments{/number}","contents_url":"https://api.github.com/repos/MCGallaspy/ka-lite/contents/{+path}","compare_url":"https://api.github.com/repos/MCGallaspy/ka-lite/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MCGallaspy/ka-lite/merges","archive_url":"https://api.github.com/repos/MCGallaspy/ka-lite/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MCGallaspy/ka-lite/downloads","issues_url":"https://api.github.com/repos/MCGallaspy/ka-lite/issues{/number}","pulls_url":"https://api.github.com/repos/MCGallaspy/ka-lite/pulls{/number}","milestones_url":"https://api.github.com/repos/MCGallaspy/ka-lite/milestones{/number}","notifications_url":"https://api.github.com/repos/MCGallaspy/ka-lite/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MCGallaspy/ka-lite/labels{/name}","releases_url":"https://api.github.com/repos/MCGallaspy/ka-lite/releases{/id}","created_at":"2014-10-15T17:21:39Z","updated_at":"2015-04-06T20:44:34Z","pushed_at":"2015-06-09T22:27:49Z","git_url":"git://github.com/MCGallaspy/ka-lite.git","ssh_url":"git@github.com:MCGallaspy/ka-lite.git","clone_url":"https://github.com/MCGallaspy/ka-lite.git","svn_url":"https://github.com/MCGallaspy/ka-lite","homepage":"https://learningequality.org/ka-lite/","size":152600,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"learningequality:develop","ref":"develop","sha":"f193fb401821bc6bec284243e7e9931178173487","user":{"login":"learningequality","id":3926525,"avatar_url":"https://avatars.githubusercontent.com/u/3926525?v=3","gravatar_id":"","url":"https://api.github.com/users/learningequality","html_url":"https://github.com/learningequality","followers_url":"https://api.github.com/users/learningequality/followers","following_url":"https://api.github.com/users/learningequality/following{/other_user}","gists_url":"https://api.github.com/users/learningequality/gists{/gist_id}","starred_url":"https://api.github.com/users/learningequality/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/learningequality/subscriptions","organizations_url":"https://api.github.com/users/learningequality/orgs","repos_url":"https://api.github.com/users/learningequality/repos","events_url":"https://api.github.com/users/learningequality/events{/privacy}","received_events_url":"https://api.github.com/users/learningequality/received_events","type":"Organization","site_admin":false},"repo":{"id":5741125,"name":"ka-lite","full_name":"learningequality/ka-lite","owner":{"login":"learningequality","id":3926525,"avatar_url":"https://avatars.githubusercontent.com/u/3926525?v=3","gravatar_id":"","url":"https://api.github.com/users/learningequality","html_url":"https://github.com/learningequality","followers_url":"https://api.github.com/users/learningequality/followers","following_url":"https://api.github.com/users/learningequality/following{/other_user}","gists_url":"https://api.github.com/users/learningequality/gists{/gist_id}","starred_url":"https://api.github.com/users/learningequality/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/learningequality/subscriptions","organizations_url":"https://api.github.com/users/learningequality/orgs","repos_url":"https://api.github.com/users/learningequality/repos","events_url":"https://api.github.com/users/learningequality/events{/privacy}","received_events_url":"https://api.github.com/users/learningequality/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/learningequality/ka-lite","description":"KA Lite: lightweight web server for serving core Khan Academy content (videos and exercises) without needing internet connectivity","fork":false,"url":"https://api.github.com/repos/learningequality/ka-lite","forks_url":"https://api.github.com/repos/learningequality/ka-lite/forks","keys_url":"https://api.github.com/repos/learningequality/ka-lite/keys{/key_id}","collaborators_url":"https://api.github.com/repos/learningequality/ka-lite/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/learningequality/ka-lite/teams","hooks_url":"https://api.github.com/repos/learningequality/ka-lite/hooks","issue_events_url":"https://api.github.com/repos/learningequality/ka-lite/issues/events{/number}","events_url":"https://api.github.com/repos/learningequality/ka-lite/events","assignees_url":"https://api.github.com/repos/learningequality/ka-lite/assignees{/user}","branches_url":"https://api.github.com/repos/learningequality/ka-lite/branches{/branch}","tags_url":"https://api.github.com/repos/learningequality/ka-lite/tags","blobs_url":"https://api.github.com/repos/learningequality/ka-lite/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/learningequality/ka-lite/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/learningequality/ka-lite/git/refs{/sha}","trees_url":"https://api.github.com/repos/learningequality/ka-lite/git/trees{/sha}","statuses_url":"https://api.github.com/repos/learningequality/ka-lite/statuses/{sha}","languages_url":"https://api.github.com/repos/learningequality/ka-lite/languages","stargazers_url":"https://api.github.com/repos/learningequality/ka-lite/stargazers","contributors_url":"https://api.github.com/repos/learningequality/ka-lite/contributors","subscribers_url":"https://api.github.com/repos/learningequality/ka-lite/subscribers","subscription_url":"https://api.github.com/repos/learningequality/ka-lite/subscription","commits_url":"https://api.github.com/repos/learningequality/ka-lite/commits{/sha}","git_commits_url":"https://api.github.com/repos/learningequality/ka-lite/git/commits{/sha}","comments_url":"https://api.github.com/repos/learningequality/ka-lite/comments{/number}","issue_comment_url":"https://api.github.com/repos/learningequality/ka-lite/issues/comments{/number}","contents_url":"https://api.github.com/repos/learningequality/ka-lite/contents/{+path}","compare_url":"https://api.github.com/repos/learningequality/ka-lite/compare/{base}...{head}","merges_url":"https://api.github.com/repos/learningequality/ka-lite/merges","archive_url":"https://api.github.com/repos/learningequality/ka-lite/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/learningequality/ka-lite/downloads","issues_url":"https://api.github.com/repos/learningequality/ka-lite/issues{/number}","pulls_url":"https://api.github.com/repos/learningequality/ka-lite/pulls{/number}","milestones_url":"https://api.github.com/repos/learningequality/ka-lite/milestones{/number}","notifications_url":"https://api.github.com/repos/learningequality/ka-lite/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/learningequality/ka-lite/labels{/name}","releases_url":"https://api.github.com/repos/learningequality/ka-lite/releases{/id}","created_at":"2012-09-09T20:01:40Z","updated_at":"2015-06-08T22:27:23Z","pushed_at":"2015-06-09T23:58:04Z","git_url":"git://github.com/learningequality/ka-lite.git","ssh_url":"git@github.com:learningequality/ka-lite.git","clone_url":"https://github.com/learningequality/ka-lite.git","svn_url":"https://github.com/learningequality/ka-lite","homepage":"https://learningequality.org/ka-lite/","size":229969,"stargazers_count":217,"watchers_count":217,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":245,"mirror_url":null,"open_issues_count":202,"forks":245,"open_issues":202,"watchers":217,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/3806"},"html":{"href":"https://github.com/learningequality/ka-lite/pull/3806"},"issue":{"href":"https://api.github.com/repos/learningequality/ka-lite/issues/3806"},"comments":{"href":"https://api.github.com/repos/learningequality/ka-lite/issues/3806/comments"},"review_comments":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/3806/comments"},"review_comment":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/3806/commits"},"statuses":{"href":"https://api.github.com/repos/learningequality/ka-lite/statuses/994330cdcde1abf2a351971b5323ff2d550472ab"}}}}