{"action":"created","comment":{"url":"https://api.github.com/repos/swcarpentry/amy/pulls/comments/32225405","id":32225405,"diff_hunk":"@@ -178,6 +178,16 @@ class SiteUpdate(LoginRequiredMixin, UpdateViewContext):\n     slug_url_kwarg = 'site_domain'\n     template_name = 'workshops/generic_form.html'\n \n+\n+@login_required\n+def site_delete(request, site_domain):\n+    \"\"\"Delete specific site.\"\"\"\n+    site = get_object_or_404(Site, domain=site_domain)\n+    site.delete()","path":"workshops/views.py","position":9,"original_position":9,"commit_id":"831d7e2de4169298fe34a1b28a952484722831ee","original_commit_id":"a7c9eb544488400dc0533fb4c5144b2da96592e1","user":{"login":"wking","id":209920,"avatar_url":"https://avatars.githubusercontent.com/u/209920?v=3","gravatar_id":"","url":"https://api.github.com/users/wking","html_url":"https://github.com/wking","followers_url":"https://api.github.com/users/wking/followers","following_url":"https://api.github.com/users/wking/following{/other_user}","gists_url":"https://api.github.com/users/wking/gists{/gist_id}","starred_url":"https://api.github.com/users/wking/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wking/subscriptions","organizations_url":"https://api.github.com/users/wking/orgs","repos_url":"https://api.github.com/users/wking/repos","events_url":"https://api.github.com/users/wking/events{/privacy}","received_events_url":"https://api.github.com/users/wking/received_events","type":"User","site_admin":false},"body":"I tend to prefer idempotent deletes, because it seems odd to have one of a pair of racy deletes return a 404 because the object has already been deleted.  The deleter just wants to remove the item from play, and if it's already gone (even if it never existed) that seems like success to me ;).  In Django, that's:\r\n\r\n    Site.objects.filter(domain=site_domain).delete()\r\n","created_at":"2015-06-11T14:23:32Z","updated_at":"2015-06-11T14:23:32Z","html_url":"https://github.com/swcarpentry/amy/pull/357#discussion_r32225405","pull_request_url":"https://api.github.com/repos/swcarpentry/amy/pulls/357","_links":{"self":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/comments/32225405"},"html":{"href":"https://github.com/swcarpentry/amy/pull/357#discussion_r32225405"},"pull_request":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/357"}}},"pull_request":{"url":"https://api.github.com/repos/swcarpentry/amy/pulls/357","id":37459731,"html_url":"https://github.com/swcarpentry/amy/pull/357","diff_url":"https://github.com/swcarpentry/amy/pull/357.diff","patch_url":"https://github.com/swcarpentry/amy/pull/357.patch","issue_url":"https://api.github.com/repos/swcarpentry/amy/issues/357","number":357,"state":"open","locked":false,"title":"A way to delete things","user":{"login":"pbanaszkiewicz","id":72821,"avatar_url":"https://avatars.githubusercontent.com/u/72821?v=3","gravatar_id":"","url":"https://api.github.com/users/pbanaszkiewicz","html_url":"https://github.com/pbanaszkiewicz","followers_url":"https://api.github.com/users/pbanaszkiewicz/followers","following_url":"https://api.github.com/users/pbanaszkiewicz/following{/other_user}","gists_url":"https://api.github.com/users/pbanaszkiewicz/gists{/gist_id}","starred_url":"https://api.github.com/users/pbanaszkiewicz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pbanaszkiewicz/subscriptions","organizations_url":"https://api.github.com/users/pbanaszkiewicz/orgs","repos_url":"https://api.github.com/users/pbanaszkiewicz/repos","events_url":"https://api.github.com/users/pbanaszkiewicz/events{/privacy}","received_events_url":"https://api.github.com/users/pbanaszkiewicz/received_events","type":"User","site_admin":false},"body":"This solves #289.","created_at":"2015-06-11T12:52:18Z","updated_at":"2015-06-11T14:23:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1b09d0d85fbbb5398516ddfee7a99f5f1ef76b9f","assignee":{"login":"gvwilson","id":911566,"avatar_url":"https://avatars.githubusercontent.com/u/911566?v=3","gravatar_id":"","url":"https://api.github.com/users/gvwilson","html_url":"https://github.com/gvwilson","followers_url":"https://api.github.com/users/gvwilson/followers","following_url":"https://api.github.com/users/gvwilson/following{/other_user}","gists_url":"https://api.github.com/users/gvwilson/gists{/gist_id}","starred_url":"https://api.github.com/users/gvwilson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gvwilson/subscriptions","organizations_url":"https://api.github.com/users/gvwilson/orgs","repos_url":"https://api.github.com/users/gvwilson/repos","events_url":"https://api.github.com/users/gvwilson/events{/privacy}","received_events_url":"https://api.github.com/users/gvwilson/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/swcarpentry/amy/milestones/3","html_url":"https://github.com/swcarpentry/amy/milestones/v0.4","labels_url":"https://api.github.com/repos/swcarpentry/amy/milestones/3/labels","id":1108676,"number":3,"title":"v0.4","description":"Adding further features.","creator":{"login":"pbanaszkiewicz","id":72821,"avatar_url":"https://avatars.githubusercontent.com/u/72821?v=3","gravatar_id":"","url":"https://api.github.com/users/pbanaszkiewicz","html_url":"https://github.com/pbanaszkiewicz","followers_url":"https://api.github.com/users/pbanaszkiewicz/followers","following_url":"https://api.github.com/users/pbanaszkiewicz/following{/other_user}","gists_url":"https://api.github.com/users/pbanaszkiewicz/gists{/gist_id}","starred_url":"https://api.github.com/users/pbanaszkiewicz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pbanaszkiewicz/subscriptions","organizations_url":"https://api.github.com/users/pbanaszkiewicz/orgs","repos_url":"https://api.github.com/users/pbanaszkiewicz/repos","events_url":"https://api.github.com/users/pbanaszkiewicz/events{/privacy}","received_events_url":"https://api.github.com/users/pbanaszkiewicz/received_events","type":"User","site_admin":false},"open_issues":27,"closed_issues":8,"state":"open","created_at":"2015-05-13T14:19:08Z","updated_at":"2015-06-11T14:06:49Z","due_on":"2015-06-19T04:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/swcarpentry/amy/pulls/357/commits","review_comments_url":"https://api.github.com/repos/swcarpentry/amy/pulls/357/comments","review_comment_url":"https://api.github.com/repos/swcarpentry/amy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/swcarpentry/amy/issues/357/comments","statuses_url":"https://api.github.com/repos/swcarpentry/amy/statuses/831d7e2de4169298fe34a1b28a952484722831ee","head":{"label":"pbanaszkiewicz:a-way-to-delete-things","ref":"a-way-to-delete-things","sha":"831d7e2de4169298fe34a1b28a952484722831ee","user":{"login":"pbanaszkiewicz","id":72821,"avatar_url":"https://avatars.githubusercontent.com/u/72821?v=3","gravatar_id":"","url":"https://api.github.com/users/pbanaszkiewicz","html_url":"https://github.com/pbanaszkiewicz","followers_url":"https://api.github.com/users/pbanaszkiewicz/followers","following_url":"https://api.github.com/users/pbanaszkiewicz/following{/other_user}","gists_url":"https://api.github.com/users/pbanaszkiewicz/gists{/gist_id}","starred_url":"https://api.github.com/users/pbanaszkiewicz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pbanaszkiewicz/subscriptions","organizations_url":"https://api.github.com/users/pbanaszkiewicz/orgs","repos_url":"https://api.github.com/users/pbanaszkiewicz/repos","events_url":"https://api.github.com/users/pbanaszkiewicz/events{/privacy}","received_events_url":"https://api.github.com/users/pbanaszkiewicz/received_events","type":"User","site_admin":false},"repo":{"id":28005098,"name":"amy","full_name":"pbanaszkiewicz/amy","owner":{"login":"pbanaszkiewicz","id":72821,"avatar_url":"https://avatars.githubusercontent.com/u/72821?v=3","gravatar_id":"","url":"https://api.github.com/users/pbanaszkiewicz","html_url":"https://github.com/pbanaszkiewicz","followers_url":"https://api.github.com/users/pbanaszkiewicz/followers","following_url":"https://api.github.com/users/pbanaszkiewicz/following{/other_user}","gists_url":"https://api.github.com/users/pbanaszkiewicz/gists{/gist_id}","starred_url":"https://api.github.com/users/pbanaszkiewicz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pbanaszkiewicz/subscriptions","organizations_url":"https://api.github.com/users/pbanaszkiewicz/orgs","repos_url":"https://api.github.com/users/pbanaszkiewicz/repos","events_url":"https://api.github.com/users/pbanaszkiewicz/events{/privacy}","received_events_url":"https://api.github.com/users/pbanaszkiewicz/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/pbanaszkiewicz/amy","description":"A web-based workshop administration application built using Django.","fork":true,"url":"https://api.github.com/repos/pbanaszkiewicz/amy","forks_url":"https://api.github.com/repos/pbanaszkiewicz/amy/forks","keys_url":"https://api.github.com/repos/pbanaszkiewicz/amy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pbanaszkiewicz/amy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pbanaszkiewicz/amy/teams","hooks_url":"https://api.github.com/repos/pbanaszkiewicz/amy/hooks","issue_events_url":"https://api.github.com/repos/pbanaszkiewicz/amy/issues/events{/number}","events_url":"https://api.github.com/repos/pbanaszkiewicz/amy/events","assignees_url":"https://api.github.com/repos/pbanaszkiewicz/amy/assignees{/user}","branches_url":"https://api.github.com/repos/pbanaszkiewicz/amy/branches{/branch}","tags_url":"https://api.github.com/repos/pbanaszkiewicz/amy/tags","blobs_url":"https://api.github.com/repos/pbanaszkiewicz/amy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pbanaszkiewicz/amy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pbanaszkiewicz/amy/git/refs{/sha}","trees_url":"https://api.github.com/repos/pbanaszkiewicz/amy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pbanaszkiewicz/amy/statuses/{sha}","languages_url":"https://api.github.com/repos/pbanaszkiewicz/amy/languages","stargazers_url":"https://api.github.com/repos/pbanaszkiewicz/amy/stargazers","contributors_url":"https://api.github.com/repos/pbanaszkiewicz/amy/contributors","subscribers_url":"https://api.github.com/repos/pbanaszkiewicz/amy/subscribers","subscription_url":"https://api.github.com/repos/pbanaszkiewicz/amy/subscription","commits_url":"https://api.github.com/repos/pbanaszkiewicz/amy/commits{/sha}","git_commits_url":"https://api.github.com/repos/pbanaszkiewicz/amy/git/commits{/sha}","comments_url":"https://api.github.com/repos/pbanaszkiewicz/amy/comments{/number}","issue_comment_url":"https://api.github.com/repos/pbanaszkiewicz/amy/issues/comments{/number}","contents_url":"https://api.github.com/repos/pbanaszkiewicz/amy/contents/{+path}","compare_url":"https://api.github.com/repos/pbanaszkiewicz/amy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pbanaszkiewicz/amy/merges","archive_url":"https://api.github.com/repos/pbanaszkiewicz/amy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pbanaszkiewicz/amy/downloads","issues_url":"https://api.github.com/repos/pbanaszkiewicz/amy/issues{/number}","pulls_url":"https://api.github.com/repos/pbanaszkiewicz/amy/pulls{/number}","milestones_url":"https://api.github.com/repos/pbanaszkiewicz/amy/milestones{/number}","notifications_url":"https://api.github.com/repos/pbanaszkiewicz/amy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pbanaszkiewicz/amy/labels{/name}","releases_url":"https://api.github.com/repos/pbanaszkiewicz/amy/releases{/id}","created_at":"2014-12-14T19:25:22Z","updated_at":"2015-05-08T17:10:25Z","pushed_at":"2015-06-11T14:10:35Z","git_url":"git://github.com/pbanaszkiewicz/amy.git","ssh_url":"git@github.com:pbanaszkiewicz/amy.git","clone_url":"https://github.com/pbanaszkiewicz/amy.git","svn_url":"https://github.com/pbanaszkiewicz/amy","homepage":null,"size":6880,"stargazers_count":0,"watchers_count":0,"language":"PLpgSQL","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"swcarpentry:master","ref":"master","sha":"daf715bc0b9c96e00b9ee0cc14c839a694992254","user":{"login":"swcarpentry","id":2238358,"avatar_url":"https://avatars.githubusercontent.com/u/2238358?v=3","gravatar_id":"","url":"https://api.github.com/users/swcarpentry","html_url":"https://github.com/swcarpentry","followers_url":"https://api.github.com/users/swcarpentry/followers","following_url":"https://api.github.com/users/swcarpentry/following{/other_user}","gists_url":"https://api.github.com/users/swcarpentry/gists{/gist_id}","starred_url":"https://api.github.com/users/swcarpentry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swcarpentry/subscriptions","organizations_url":"https://api.github.com/users/swcarpentry/orgs","repos_url":"https://api.github.com/users/swcarpentry/repos","events_url":"https://api.github.com/users/swcarpentry/events{/privacy}","received_events_url":"https://api.github.com/users/swcarpentry/received_events","type":"Organization","site_admin":false},"repo":{"id":27387287,"name":"amy","full_name":"swcarpentry/amy","owner":{"login":"swcarpentry","id":2238358,"avatar_url":"https://avatars.githubusercontent.com/u/2238358?v=3","gravatar_id":"","url":"https://api.github.com/users/swcarpentry","html_url":"https://github.com/swcarpentry","followers_url":"https://api.github.com/users/swcarpentry/followers","following_url":"https://api.github.com/users/swcarpentry/following{/other_user}","gists_url":"https://api.github.com/users/swcarpentry/gists{/gist_id}","starred_url":"https://api.github.com/users/swcarpentry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swcarpentry/subscriptions","organizations_url":"https://api.github.com/users/swcarpentry/orgs","repos_url":"https://api.github.com/users/swcarpentry/repos","events_url":"https://api.github.com/users/swcarpentry/events{/privacy}","received_events_url":"https://api.github.com/users/swcarpentry/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/swcarpentry/amy","description":"A web-based workshop administration application built using Django.","fork":false,"url":"https://api.github.com/repos/swcarpentry/amy","forks_url":"https://api.github.com/repos/swcarpentry/amy/forks","keys_url":"https://api.github.com/repos/swcarpentry/amy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/swcarpentry/amy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/swcarpentry/amy/teams","hooks_url":"https://api.github.com/repos/swcarpentry/amy/hooks","issue_events_url":"https://api.github.com/repos/swcarpentry/amy/issues/events{/number}","events_url":"https://api.github.com/repos/swcarpentry/amy/events","assignees_url":"https://api.github.com/repos/swcarpentry/amy/assignees{/user}","branches_url":"https://api.github.com/repos/swcarpentry/amy/branches{/branch}","tags_url":"https://api.github.com/repos/swcarpentry/amy/tags","blobs_url":"https://api.github.com/repos/swcarpentry/amy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/swcarpentry/amy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/swcarpentry/amy/git/refs{/sha}","trees_url":"https://api.github.com/repos/swcarpentry/amy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/swcarpentry/amy/statuses/{sha}","languages_url":"https://api.github.com/repos/swcarpentry/amy/languages","stargazers_url":"https://api.github.com/repos/swcarpentry/amy/stargazers","contributors_url":"https://api.github.com/repos/swcarpentry/amy/contributors","subscribers_url":"https://api.github.com/repos/swcarpentry/amy/subscribers","subscription_url":"https://api.github.com/repos/swcarpentry/amy/subscription","commits_url":"https://api.github.com/repos/swcarpentry/amy/commits{/sha}","git_commits_url":"https://api.github.com/repos/swcarpentry/amy/git/commits{/sha}","comments_url":"https://api.github.com/repos/swcarpentry/amy/comments{/number}","issue_comment_url":"https://api.github.com/repos/swcarpentry/amy/issues/comments{/number}","contents_url":"https://api.github.com/repos/swcarpentry/amy/contents/{+path}","compare_url":"https://api.github.com/repos/swcarpentry/amy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/swcarpentry/amy/merges","archive_url":"https://api.github.com/repos/swcarpentry/amy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/swcarpentry/amy/downloads","issues_url":"https://api.github.com/repos/swcarpentry/amy/issues{/number}","pulls_url":"https://api.github.com/repos/swcarpentry/amy/pulls{/number}","milestones_url":"https://api.github.com/repos/swcarpentry/amy/milestones{/number}","notifications_url":"https://api.github.com/repos/swcarpentry/amy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/swcarpentry/amy/labels{/name}","releases_url":"https://api.github.com/repos/swcarpentry/amy/releases{/id}","created_at":"2014-12-01T16:07:14Z","updated_at":"2015-06-09T04:55:10Z","pushed_at":"2015-06-11T14:15:28Z","git_url":"git://github.com/swcarpentry/amy.git","ssh_url":"git@github.com:swcarpentry/amy.git","clone_url":"https://github.com/swcarpentry/amy.git","svn_url":"https://github.com/swcarpentry/amy","homepage":null,"size":8049,"stargazers_count":19,"watchers_count":19,"language":"PLpgSQL","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":30,"mirror_url":null,"open_issues_count":63,"forks":30,"open_issues":63,"watchers":19,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/357"},"html":{"href":"https://github.com/swcarpentry/amy/pull/357"},"issue":{"href":"https://api.github.com/repos/swcarpentry/amy/issues/357"},"comments":{"href":"https://api.github.com/repos/swcarpentry/amy/issues/357/comments"},"review_comments":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/357/comments"},"review_comment":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/357/commits"},"statuses":{"href":"https://api.github.com/repos/swcarpentry/amy/statuses/831d7e2de4169298fe34a1b28a952484722831ee"}}}}