{"action":"closed","number":164,"pull_request":{"url":"https://api.github.com/repos/loris-imageserver/loris/pulls/164","id":38888655,"html_url":"https://github.com/loris-imageserver/loris/pull/164","diff_url":"https://github.com/loris-imageserver/loris/pull/164.diff","patch_url":"https://github.com/loris-imageserver/loris/pull/164.patch","issue_url":"https://api.github.com/repos/loris-imageserver/loris/issues/164","number":164,"state":"closed","locked":false,"title":"TemplateHttpResolver (based on SimpleHttpResolver)","user":{"login":"rlskoeser","id":691231,"avatar_url":"https://avatars.githubusercontent.com/u/691231?v=3","gravatar_id":"","url":"https://api.github.com/users/rlskoeser","html_url":"https://github.com/rlskoeser","followers_url":"https://api.github.com/users/rlskoeser/followers","following_url":"https://api.github.com/users/rlskoeser/following{/other_user}","gists_url":"https://api.github.com/users/rlskoeser/gists{/gist_id}","starred_url":"https://api.github.com/users/rlskoeser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rlskoeser/subscriptions","organizations_url":"https://api.github.com/users/rlskoeser/orgs","repos_url":"https://api.github.com/users/rlskoeser/repos","events_url":"https://api.github.com/users/rlskoeser/events{/privacy}","received_events_url":"https://api.github.com/users/rlskoeser/received_events","type":"User","site_admin":false},"body":"I've extend the SimpleHttpResolver to create a template-based http resolver, based in part on the syntax proposed in #98.  Currently it only supports url patterns, no other configurations are per-template.  If you think that needs to be added before this can be merged, I'm willing to add some logic for that but would like some feedback.  I held off on that in part because I wasn't sure of the best config file format to use; it looks like configobj supports nested settings groups, does that make sense here?  I did write unit tests, and documented the configuration in the class docstring.  Please let me know what additional functionality or documentation you think this needs before it's usable.\r\n\r\nI had to refactor SimpleHttpResolver in a couple of places to make it easier to extend, so that I could override just the logic that is different and let the base class do all the real work of resolving and caching, so this is probably also of interest to @scande3.","created_at":"2015-06-30T15:09:53Z","updated_at":"2015-06-30T16:38:01Z","closed_at":"2015-06-30T16:38:01Z","merged_at":"2015-06-30T16:38:01Z","merge_commit_sha":"3f70c55e096a14b214048ac93007efcc55eeb57f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/loris-imageserver/loris/pulls/164/commits","review_comments_url":"https://api.github.com/repos/loris-imageserver/loris/pulls/164/comments","review_comment_url":"https://api.github.com/repos/loris-imageserver/loris/pulls/comments{/number}","comments_url":"https://api.github.com/repos/loris-imageserver/loris/issues/164/comments","statuses_url":"https://api.github.com/repos/loris-imageserver/loris/statuses/361ab49d79c623374e1d5f7ca6cf1e85ea33a598","head":{"label":"rlskoeser:template-http-resolver","ref":"template-http-resolver","sha":"361ab49d79c623374e1d5f7ca6cf1e85ea33a598","user":{"login":"rlskoeser","id":691231,"avatar_url":"https://avatars.githubusercontent.com/u/691231?v=3","gravatar_id":"","url":"https://api.github.com/users/rlskoeser","html_url":"https://github.com/rlskoeser","followers_url":"https://api.github.com/users/rlskoeser/followers","following_url":"https://api.github.com/users/rlskoeser/following{/other_user}","gists_url":"https://api.github.com/users/rlskoeser/gists{/gist_id}","starred_url":"https://api.github.com/users/rlskoeser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rlskoeser/subscriptions","organizations_url":"https://api.github.com/users/rlskoeser/orgs","repos_url":"https://api.github.com/users/rlskoeser/repos","events_url":"https://api.github.com/users/rlskoeser/events{/privacy}","received_events_url":"https://api.github.com/users/rlskoeser/received_events","type":"User","site_admin":false},"repo":{"id":37724140,"name":"loris","full_name":"rlskoeser/loris","owner":{"login":"rlskoeser","id":691231,"avatar_url":"https://avatars.githubusercontent.com/u/691231?v=3","gravatar_id":"","url":"https://api.github.com/users/rlskoeser","html_url":"https://github.com/rlskoeser","followers_url":"https://api.github.com/users/rlskoeser/followers","following_url":"https://api.github.com/users/rlskoeser/following{/other_user}","gists_url":"https://api.github.com/users/rlskoeser/gists{/gist_id}","starred_url":"https://api.github.com/users/rlskoeser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rlskoeser/subscriptions","organizations_url":"https://api.github.com/users/rlskoeser/orgs","repos_url":"https://api.github.com/users/rlskoeser/repos","events_url":"https://api.github.com/users/rlskoeser/events{/privacy}","received_events_url":"https://api.github.com/users/rlskoeser/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rlskoeser/loris","description":"Loris IIIF Image Server","fork":true,"url":"https://api.github.com/repos/rlskoeser/loris","forks_url":"https://api.github.com/repos/rlskoeser/loris/forks","keys_url":"https://api.github.com/repos/rlskoeser/loris/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rlskoeser/loris/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rlskoeser/loris/teams","hooks_url":"https://api.github.com/repos/rlskoeser/loris/hooks","issue_events_url":"https://api.github.com/repos/rlskoeser/loris/issues/events{/number}","events_url":"https://api.github.com/repos/rlskoeser/loris/events","assignees_url":"https://api.github.com/repos/rlskoeser/loris/assignees{/user}","branches_url":"https://api.github.com/repos/rlskoeser/loris/branches{/branch}","tags_url":"https://api.github.com/repos/rlskoeser/loris/tags","blobs_url":"https://api.github.com/repos/rlskoeser/loris/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rlskoeser/loris/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rlskoeser/loris/git/refs{/sha}","trees_url":"https://api.github.com/repos/rlskoeser/loris/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rlskoeser/loris/statuses/{sha}","languages_url":"https://api.github.com/repos/rlskoeser/loris/languages","stargazers_url":"https://api.github.com/repos/rlskoeser/loris/stargazers","contributors_url":"https://api.github.com/repos/rlskoeser/loris/contributors","subscribers_url":"https://api.github.com/repos/rlskoeser/loris/subscribers","subscription_url":"https://api.github.com/repos/rlskoeser/loris/subscription","commits_url":"https://api.github.com/repos/rlskoeser/loris/commits{/sha}","git_commits_url":"https://api.github.com/repos/rlskoeser/loris/git/commits{/sha}","comments_url":"https://api.github.com/repos/rlskoeser/loris/comments{/number}","issue_comment_url":"https://api.github.com/repos/rlskoeser/loris/issues/comments{/number}","contents_url":"https://api.github.com/repos/rlskoeser/loris/contents/{+path}","compare_url":"https://api.github.com/repos/rlskoeser/loris/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rlskoeser/loris/merges","archive_url":"https://api.github.com/repos/rlskoeser/loris/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rlskoeser/loris/downloads","issues_url":"https://api.github.com/repos/rlskoeser/loris/issues{/number}","pulls_url":"https://api.github.com/repos/rlskoeser/loris/pulls{/number}","milestones_url":"https://api.github.com/repos/rlskoeser/loris/milestones{/number}","notifications_url":"https://api.github.com/repos/rlskoeser/loris/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rlskoeser/loris/labels{/name}","releases_url":"https://api.github.com/repos/rlskoeser/loris/releases{/id}","created_at":"2015-06-19T13:46:42Z","updated_at":"2015-06-19T13:46:43Z","pushed_at":"2015-06-30T16:04:10Z","git_url":"git://github.com/rlskoeser/loris.git","ssh_url":"git@github.com:rlskoeser/loris.git","clone_url":"https://github.com/rlskoeser/loris.git","svn_url":"https://github.com/rlskoeser/loris","homepage":"","size":125487,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"development"}},"base":{"label":"loris-imageserver:development","ref":"development","sha":"ecf8e06740e82ddb973d15d7c99869c282e48cc0","user":{"login":"loris-imageserver","id":11686729,"avatar_url":"https://avatars.githubusercontent.com/u/11686729?v=3","gravatar_id":"","url":"https://api.github.com/users/loris-imageserver","html_url":"https://github.com/loris-imageserver","followers_url":"https://api.github.com/users/loris-imageserver/followers","following_url":"https://api.github.com/users/loris-imageserver/following{/other_user}","gists_url":"https://api.github.com/users/loris-imageserver/gists{/gist_id}","starred_url":"https://api.github.com/users/loris-imageserver/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/loris-imageserver/subscriptions","organizations_url":"https://api.github.com/users/loris-imageserver/orgs","repos_url":"https://api.github.com/users/loris-imageserver/repos","events_url":"https://api.github.com/users/loris-imageserver/events{/privacy}","received_events_url":"https://api.github.com/users/loris-imageserver/received_events","type":"Organization","site_admin":false},"repo":{"id":5800709,"name":"loris","full_name":"loris-imageserver/loris","owner":{"login":"loris-imageserver","id":11686729,"avatar_url":"https://avatars.githubusercontent.com/u/11686729?v=3","gravatar_id":"","url":"https://api.github.com/users/loris-imageserver","html_url":"https://github.com/loris-imageserver","followers_url":"https://api.github.com/users/loris-imageserver/followers","following_url":"https://api.github.com/users/loris-imageserver/following{/other_user}","gists_url":"https://api.github.com/users/loris-imageserver/gists{/gist_id}","starred_url":"https://api.github.com/users/loris-imageserver/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/loris-imageserver/subscriptions","organizations_url":"https://api.github.com/users/loris-imageserver/orgs","repos_url":"https://api.github.com/users/loris-imageserver/repos","events_url":"https://api.github.com/users/loris-imageserver/events{/privacy}","received_events_url":"https://api.github.com/users/loris-imageserver/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/loris-imageserver/loris","description":"Loris IIIF Image Server","fork":false,"url":"https://api.github.com/repos/loris-imageserver/loris","forks_url":"https://api.github.com/repos/loris-imageserver/loris/forks","keys_url":"https://api.github.com/repos/loris-imageserver/loris/keys{/key_id}","collaborators_url":"https://api.github.com/repos/loris-imageserver/loris/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/loris-imageserver/loris/teams","hooks_url":"https://api.github.com/repos/loris-imageserver/loris/hooks","issue_events_url":"https://api.github.com/repos/loris-imageserver/loris/issues/events{/number}","events_url":"https://api.github.com/repos/loris-imageserver/loris/events","assignees_url":"https://api.github.com/repos/loris-imageserver/loris/assignees{/user}","branches_url":"https://api.github.com/repos/loris-imageserver/loris/branches{/branch}","tags_url":"https://api.github.com/repos/loris-imageserver/loris/tags","blobs_url":"https://api.github.com/repos/loris-imageserver/loris/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/loris-imageserver/loris/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/loris-imageserver/loris/git/refs{/sha}","trees_url":"https://api.github.com/repos/loris-imageserver/loris/git/trees{/sha}","statuses_url":"https://api.github.com/repos/loris-imageserver/loris/statuses/{sha}","languages_url":"https://api.github.com/repos/loris-imageserver/loris/languages","stargazers_url":"https://api.github.com/repos/loris-imageserver/loris/stargazers","contributors_url":"https://api.github.com/repos/loris-imageserver/loris/contributors","subscribers_url":"https://api.github.com/repos/loris-imageserver/loris/subscribers","subscription_url":"https://api.github.com/repos/loris-imageserver/loris/subscription","commits_url":"https://api.github.com/repos/loris-imageserver/loris/commits{/sha}","git_commits_url":"https://api.github.com/repos/loris-imageserver/loris/git/commits{/sha}","comments_url":"https://api.github.com/repos/loris-imageserver/loris/comments{/number}","issue_comment_url":"https://api.github.com/repos/loris-imageserver/loris/issues/comments{/number}","contents_url":"https://api.github.com/repos/loris-imageserver/loris/contents/{+path}","compare_url":"https://api.github.com/repos/loris-imageserver/loris/compare/{base}...{head}","merges_url":"https://api.github.com/repos/loris-imageserver/loris/merges","archive_url":"https://api.github.com/repos/loris-imageserver/loris/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/loris-imageserver/loris/downloads","issues_url":"https://api.github.com/repos/loris-imageserver/loris/issues{/number}","pulls_url":"https://api.github.com/repos/loris-imageserver/loris/pulls{/number}","milestones_url":"https://api.github.com/repos/loris-imageserver/loris/milestones{/number}","notifications_url":"https://api.github.com/repos/loris-imageserver/loris/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/loris-imageserver/loris/labels{/name}","releases_url":"https://api.github.com/repos/loris-imageserver/loris/releases{/id}","created_at":"2012-09-13T20:41:52Z","updated_at":"2015-06-19T17:33:27Z","pushed_at":"2015-06-30T16:38:01Z","git_url":"git://github.com/loris-imageserver/loris.git","ssh_url":"git@github.com:loris-imageserver/loris.git","clone_url":"https://github.com/loris-imageserver/loris.git","svn_url":"https://github.com/loris-imageserver/loris","homepage":"","size":126681,"stargazers_count":70,"watchers_count":70,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":16,"mirror_url":null,"open_issues_count":24,"forks":16,"open_issues":24,"watchers":70,"default_branch":"development"}},"_links":{"self":{"href":"https://api.github.com/repos/loris-imageserver/loris/pulls/164"},"html":{"href":"https://github.com/loris-imageserver/loris/pull/164"},"issue":{"href":"https://api.github.com/repos/loris-imageserver/loris/issues/164"},"comments":{"href":"https://api.github.com/repos/loris-imageserver/loris/issues/164/comments"},"review_comments":{"href":"https://api.github.com/repos/loris-imageserver/loris/pulls/164/comments"},"review_comment":{"href":"https://api.github.com/repos/loris-imageserver/loris/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/loris-imageserver/loris/pulls/164/commits"},"statuses":{"href":"https://api.github.com/repos/loris-imageserver/loris/statuses/361ab49d79c623374e1d5f7ca6cf1e85ea33a598"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"jpstroop","id":999701,"avatar_url":"https://avatars.githubusercontent.com/u/999701?v=3","gravatar_id":"","url":"https://api.github.com/users/jpstroop","html_url":"https://github.com/jpstroop","followers_url":"https://api.github.com/users/jpstroop/followers","following_url":"https://api.github.com/users/jpstroop/following{/other_user}","gists_url":"https://api.github.com/users/jpstroop/gists{/gist_id}","starred_url":"https://api.github.com/users/jpstroop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jpstroop/subscriptions","organizations_url":"https://api.github.com/users/jpstroop/orgs","repos_url":"https://api.github.com/users/jpstroop/repos","events_url":"https://api.github.com/users/jpstroop/events{/privacy}","received_events_url":"https://api.github.com/users/jpstroop/received_events","type":"User","site_admin":false},"comments":4,"review_comments":0,"commits":2,"additions":146,"deletions":19,"changed_files":3}}