{"action":"created","comment":{"url":"https://api.github.com/repos/swcarpentry/amy/pulls/comments/45550589","id":45550589,"diff_hunk":"@@ -1017,14 +1046,50 @@ def event_delete(request, event_ident):\n def event_import(request):\n     \"\"\"Read tags from remote URL and return them as JSON.\n \n-    This is used to read tags from workshop index page and then fill up fields\n+    This is used to read tags from workshop website and then fill up fields\n     on event_create form.\"\"\"\n+\n+    url = request.POST['url'].strip()\n     try:\n-        url = request.POST['url']\n-        translated_data = parse_tags_from_event_index(url)\n-        return JsonResponse(translated_data)\n-    except (KeyError, WrongEventURL):\n-        raise SuspiciousOperation('Missing or wrong `url` POST parameter.')\n+        # fetch page\n+        response = requests.get(url)\n+        response.raise_for_status()  # assert it's 200 OK\n+        content = response.text\n+\n+        # find tags\n+        tags = find_tags_on_event_website(content)\n+\n+        if 'slug' not in tags:\n+            # there are no HTML tags, so let's try the old method\n+            url = generate_url_to_event_index(url)\n+\n+            # fetch page\n+            response = requests.get(url)\n+\n+            if response.status_code == 200:\n+                # don't throw errors for pages we fall back to\n+                content = response.text\n+                tags = find_tags_on_event_index(content)","path":"workshops/views.py","position":132,"original_position":132,"commit_id":"53eef72a51acc515026bd529c1c4b1464792e3d0","original_commit_id":"faaf571c863a8c9e74c25b49ff04e037e7f46548","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'd prefer [a more explicit versioning strategy][1], but this is enough for now.  Adding an explicit versioning strategy is something that gets more expensive with time, but it doesn't get *that* much more expensive ;).\r\n\r\n[1]: https://github.com/swcarpentry/amy/pull/580#issuecomment-158125458","created_at":"2015-11-21T20:55:05Z","updated_at":"2015-11-21T20:55:05Z","html_url":"https://github.com/swcarpentry/amy/pull/580#discussion_r45550589","pull_request_url":"https://api.github.com/repos/swcarpentry/amy/pulls/580","_links":{"self":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/comments/45550589"},"html":{"href":"https://github.com/swcarpentry/amy/pull/580#discussion_r45550589"},"pull_request":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/580"}}},"pull_request":{"url":"https://api.github.com/repos/swcarpentry/amy/pulls/580","id":50978963,"html_url":"https://github.com/swcarpentry/amy/pull/580","diff_url":"https://github.com/swcarpentry/amy/pull/580.diff","patch_url":"https://github.com/swcarpentry/amy/pull/580.patch","issue_url":"https://api.github.com/repos/swcarpentry/amy/issues/580","number":580,"state":"open","locked":false,"title":"Change event tag finding, parsing and validating","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":"1. No more @swcarpentry/workshop-template/bin/check.py dependency.\r\n2. Less restrictive tests (in some cases), for example:\r\n  * no testing if list of instructors (or helpers) is comma separated\r\n  * no testing of contact email format.\r\n3. Finding / normalizing (parsing) / validating functions don't use\r\n   network stack (python-requests), but rather work on provided data.\r\n4. No more need for URL normalization so it was removed.\r\n5. Some code for URL normalization is still intact in\r\n   `Event.repository_url`, `Event.website_url` (it will probably end up\r\n   being removed).\r\n6. This PR will be accompanied with related PR to\r\n   @swcarpentry/workshop-template that will bring `<meta>` tags to the\r\n   workshop's websites.\r\n\r\nThis fixes #465.\r\nThis fixes #571.","created_at":"2015-11-17T17:38:57Z","updated_at":"2015-11-21T20:55:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"12f1a138b47ef7b8f6081dcde6a56ca8eb5c0cf9","assignee":{"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},"milestone":{"url":"https://api.github.com/repos/swcarpentry/amy/milestones/15","html_url":"https://github.com/swcarpentry/amy/milestones/v1.2","labels_url":"https://api.github.com/repos/swcarpentry/amy/milestones/15/labels","id":1340804,"number":15,"title":"v1.2","description":"The rest of stuff.","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":15,"closed_issues":12,"state":"open","created_at":"2015-10-06T17:13:29Z","updated_at":"2015-11-21T16:15:51Z","due_on":"2015-11-29T23:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/swcarpentry/amy/pulls/580/commits","review_comments_url":"https://api.github.com/repos/swcarpentry/amy/pulls/580/comments","review_comment_url":"https://api.github.com/repos/swcarpentry/amy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/swcarpentry/amy/issues/580/comments","statuses_url":"https://api.github.com/repos/swcarpentry/amy/statuses/53eef72a51acc515026bd529c1c4b1464792e3d0","head":{"label":"pbanaszkiewicz:event-validation-importing","ref":"event-validation-importing","sha":"53eef72a51acc515026bd529c1c4b1464792e3d0","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-11-21T20:52:44Z","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":10297,"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:develop","ref":"develop","sha":"cb68604d503bf3d039d0b8f7e4892bbbfaabfb10","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-11-08T03:19:32Z","pushed_at":"2015-11-21T20:52:45Z","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":12040,"stargazers_count":28,"watchers_count":28,"language":"PLpgSQL","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":31,"mirror_url":null,"open_issues_count":57,"forks":31,"open_issues":57,"watchers":28,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/580"},"html":{"href":"https://github.com/swcarpentry/amy/pull/580"},"issue":{"href":"https://api.github.com/repos/swcarpentry/amy/issues/580"},"comments":{"href":"https://api.github.com/repos/swcarpentry/amy/issues/580/comments"},"review_comments":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/580/comments"},"review_comment":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/swcarpentry/amy/pulls/580/commits"},"statuses":{"href":"https://api.github.com/repos/swcarpentry/amy/statuses/53eef72a51acc515026bd529c1c4b1464792e3d0"}}}}