{"action":"created","comment":{"url":"https://api.github.com/repos/inspirehep/inspire-next/pulls/comments/177344727","pull_request_review_id":107194926,"id":177344727,"diff_hunk":"@@ -52,3 +56,29 @@ def marcxml(self):\n     @marcxml.setter\n     def marcxml(self, value):\n         self._marcxml = compress(value)\n+\n+    @hybrid_property\n+    def error(self):\n+        return self._errors\n+\n+    @error.setter\n+    def error(self, value):\n+        \"\"\"errors column setter that stores an Exception and sets the ``valid`` flag.\"\"\"\n+        self.valid = False\n+        self._errors = u'{}: {}'.format(type(value).__name__, value)\n+\n+    @classmethod\n+    def from_marcxml(cls, raw_record):\n+        \"\"\"Create an instance from a MARCXML record.\n+\n+        The record must have a ``001`` tag containing the recid, otherwise it raises a ValueError.\n+        \"\"\"\n+        try:\n+            recid = int(cls.re_recid.search(raw_record).group('recid'))\n+        except (ValueError, AttributeError):\n+            raise ValueError('The MARCXML record contains no recid or recid is malformed')","path":"inspirehep/modules/migrator/models.py","position":44,"original_position":44,"commit_id":"cd9697dd06e034d6339fca2fcfe3dbb340199c8c","original_commit_id":"cd9697dd06e034d6339fca2fcfe3dbb340199c8c","user":{"login":"michamos","id":2895793,"avatar_url":"https://avatars3.githubusercontent.com/u/2895793?v=4","gravatar_id":"","url":"https://api.github.com/users/michamos","html_url":"https://github.com/michamos","followers_url":"https://api.github.com/users/michamos/followers","following_url":"https://api.github.com/users/michamos/following{/other_user}","gists_url":"https://api.github.com/users/michamos/gists{/gist_id}","starred_url":"https://api.github.com/users/michamos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michamos/subscriptions","organizations_url":"https://api.github.com/users/michamos/orgs","repos_url":"https://api.github.com/users/michamos/repos","events_url":"https://api.github.com/users/michamos/events{/privacy}","received_events_url":"https://api.github.com/users/michamos/received_events","type":"User","site_admin":false},"body":"I don't think it's very useful, as this is not something that should ever happen, it's more of a sanity check.","created_at":"2018-03-27T08:27:52Z","updated_at":"2018-03-27T08:27:52Z","html_url":"https://github.com/inspirehep/inspire-next/pull/3286#discussion_r177344727","pull_request_url":"https://api.github.com/repos/inspirehep/inspire-next/pulls/3286","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/inspirehep/inspire-next/pulls/comments/177344727"},"html":{"href":"https://github.com/inspirehep/inspire-next/pull/3286#discussion_r177344727"},"pull_request":{"href":"https://api.github.com/repos/inspirehep/inspire-next/pulls/3286"}},"in_reply_to_id":177324239},"pull_request":{"url":"https://api.github.com/repos/inspirehep/inspire-next/pulls/3286","id":177063347,"html_url":"https://github.com/inspirehep/inspire-next/pull/3286","diff_url":"https://github.com/inspirehep/inspire-next/pull/3286.diff","patch_url":"https://github.com/inspirehep/inspire-next/pull/3286.patch","issue_url":"https://api.github.com/repos/inspirehep/inspire-next/issues/3286","number":3286,"state":"open","locked":false,"title":"Two step migration","user":{"login":"michamos","id":2895793,"avatar_url":"https://avatars3.githubusercontent.com/u/2895793?v=4","gravatar_id":"","url":"https://api.github.com/users/michamos","html_url":"https://github.com/michamos","followers_url":"https://api.github.com/users/michamos/followers","following_url":"https://api.github.com/users/michamos/following{/other_user}","gists_url":"https://api.github.com/users/michamos/gists{/gist_id}","starred_url":"https://api.github.com/users/michamos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michamos/subscriptions","organizations_url":"https://api.github.com/users/michamos/orgs","repos_url":"https://api.github.com/users/michamos/repos","events_url":"https://api.github.com/users/michamos/events{/privacy}","received_events_url":"https://api.github.com/users/michamos/received_events","type":"User","site_admin":false},"body":"<!--- Provide a general summary of your changes in the Title above -->\r\n\r\n## Description\r\n<!--- Describe your changes in detail -->\r\nChanges migrator to use two-step migration, i.e. populating the mirror first (`inspire_prod_records` table) and migrating afterwards. This also introduces a new `migrate` cli which makes more sense.\r\n\r\n## Related Issue\r\n<!--- If suggesting a new feature or change, please discuss it in an issue first -->\r\n<!--- If fixing a bug, there should be an issue describing it with steps to reproduce -->\r\n<!--- Please link to the issue here: -->\r\n\r\n## Motivation and Context\r\n<!--- Why is this change required? What problem does it solve? -->\r\n\r\n## Checklist:\r\n<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->\r\n<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->\r\n- [ ] I have all the information that I need (if not, move to `RFC` and look for it).\r\n- [ ] I linked the related issue(s) in the corresponding commit logs.\r\n- [ ] I wrote [good commit log messages](https://github.com/torvalds/subsurface-for-dirk/blob/5f15ad5a86ada3c5e574041a5f9d85235322dabb/README#L92-L119).\r\n- [ ] My code follows the code style of this project.\r\n- [ ] I've added any new docs if API/utils methods were added.\r\n- [ ] I have updated the existing documentation accordingly.\r\n- [ ] I have added tests to cover my changes.\r\n- [ ] All new and existing tests passed.\r\n<!--- After this you can move the PR to `Needs Review` -->\r\n","created_at":"2018-03-23T13:02:14Z","updated_at":"2018-03-27T08:27:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e1b09764bd6448d7ea004ab345efe06780bb2b0b","assignee":{"login":"michamos","id":2895793,"avatar_url":"https://avatars3.githubusercontent.com/u/2895793?v=4","gravatar_id":"","url":"https://api.github.com/users/michamos","html_url":"https://github.com/michamos","followers_url":"https://api.github.com/users/michamos/followers","following_url":"https://api.github.com/users/michamos/following{/other_user}","gists_url":"https://api.github.com/users/michamos/gists{/gist_id}","starred_url":"https://api.github.com/users/michamos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michamos/subscriptions","organizations_url":"https://api.github.com/users/michamos/orgs","repos_url":"https://api.github.com/users/michamos/repos","events_url":"https://api.github.com/users/michamos/events{/privacy}","received_events_url":"https://api.github.com/users/michamos/received_events","type":"User","site_admin":false},"assignees":[{"login":"michamos","id":2895793,"avatar_url":"https://avatars3.githubusercontent.com/u/2895793?v=4","gravatar_id":"","url":"https://api.github.com/users/michamos","html_url":"https://github.com/michamos","followers_url":"https://api.github.com/users/michamos/followers","following_url":"https://api.github.com/users/michamos/following{/other_user}","gists_url":"https://api.github.com/users/michamos/gists{/gist_id}","starred_url":"https://api.github.com/users/michamos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michamos/subscriptions","organizations_url":"https://api.github.com/users/michamos/orgs","repos_url":"https://api.github.com/users/michamos/repos","events_url":"https://api.github.com/users/michamos/events{/privacy}","received_events_url":"https://api.github.com/users/michamos/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":828439694,"url":"https://api.github.com/repos/inspirehep/inspire-next/labels/Review:%20WIP","name":"Review: WIP","color":"e6e6e6","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/inspirehep/inspire-next/pulls/3286/commits","review_comments_url":"https://api.github.com/repos/inspirehep/inspire-next/pulls/3286/comments","review_comment_url":"https://api.github.com/repos/inspirehep/inspire-next/pulls/comments{/number}","comments_url":"https://api.github.com/repos/inspirehep/inspire-next/issues/3286/comments","statuses_url":"https://api.github.com/repos/inspirehep/inspire-next/statuses/cd9697dd06e034d6339fca2fcfe3dbb340199c8c","head":{"label":"michamos:two-step-migration","ref":"two-step-migration","sha":"cd9697dd06e034d6339fca2fcfe3dbb340199c8c","user":{"login":"michamos","id":2895793,"avatar_url":"https://avatars3.githubusercontent.com/u/2895793?v=4","gravatar_id":"","url":"https://api.github.com/users/michamos","html_url":"https://github.com/michamos","followers_url":"https://api.github.com/users/michamos/followers","following_url":"https://api.github.com/users/michamos/following{/other_user}","gists_url":"https://api.github.com/users/michamos/gists{/gist_id}","starred_url":"https://api.github.com/users/michamos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michamos/subscriptions","organizations_url":"https://api.github.com/users/michamos/orgs","repos_url":"https://api.github.com/users/michamos/repos","events_url":"https://api.github.com/users/michamos/events{/privacy}","received_events_url":"https://api.github.com/users/michamos/received_events","type":"User","site_admin":false},"repo":{"id":80839279,"name":"inspire-next","full_name":"michamos/inspire-next","owner":{"login":"michamos","id":2895793,"avatar_url":"https://avatars3.githubusercontent.com/u/2895793?v=4","gravatar_id":"","url":"https://api.github.com/users/michamos","html_url":"https://github.com/michamos","followers_url":"https://api.github.com/users/michamos/followers","following_url":"https://api.github.com/users/michamos/following{/other_user}","gists_url":"https://api.github.com/users/michamos/gists{/gist_id}","starred_url":"https://api.github.com/users/michamos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michamos/subscriptions","organizations_url":"https://api.github.com/users/michamos/orgs","repos_url":"https://api.github.com/users/michamos/repos","events_url":"https://api.github.com/users/michamos/events{/privacy}","received_events_url":"https://api.github.com/users/michamos/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/michamos/inspire-next","description":"The next version of INSPIRE","fork":true,"url":"https://api.github.com/repos/michamos/inspire-next","forks_url":"https://api.github.com/repos/michamos/inspire-next/forks","keys_url":"https://api.github.com/repos/michamos/inspire-next/keys{/key_id}","collaborators_url":"https://api.github.com/repos/michamos/inspire-next/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/michamos/inspire-next/teams","hooks_url":"https://api.github.com/repos/michamos/inspire-next/hooks","issue_events_url":"https://api.github.com/repos/michamos/inspire-next/issues/events{/number}","events_url":"https://api.github.com/repos/michamos/inspire-next/events","assignees_url":"https://api.github.com/repos/michamos/inspire-next/assignees{/user}","branches_url":"https://api.github.com/repos/michamos/inspire-next/branches{/branch}","tags_url":"https://api.github.com/repos/michamos/inspire-next/tags","blobs_url":"https://api.github.com/repos/michamos/inspire-next/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/michamos/inspire-next/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/michamos/inspire-next/git/refs{/sha}","trees_url":"https://api.github.com/repos/michamos/inspire-next/git/trees{/sha}","statuses_url":"https://api.github.com/repos/michamos/inspire-next/statuses/{sha}","languages_url":"https://api.github.com/repos/michamos/inspire-next/languages","stargazers_url":"https://api.github.com/repos/michamos/inspire-next/stargazers","contributors_url":"https://api.github.com/repos/michamos/inspire-next/contributors","subscribers_url":"https://api.github.com/repos/michamos/inspire-next/subscribers","subscription_url":"https://api.github.com/repos/michamos/inspire-next/subscription","commits_url":"https://api.github.com/repos/michamos/inspire-next/commits{/sha}","git_commits_url":"https://api.github.com/repos/michamos/inspire-next/git/commits{/sha}","comments_url":"https://api.github.com/repos/michamos/inspire-next/comments{/number}","issue_comment_url":"https://api.github.com/repos/michamos/inspire-next/issues/comments{/number}","contents_url":"https://api.github.com/repos/michamos/inspire-next/contents/{+path}","compare_url":"https://api.github.com/repos/michamos/inspire-next/compare/{base}...{head}","merges_url":"https://api.github.com/repos/michamos/inspire-next/merges","archive_url":"https://api.github.com/repos/michamos/inspire-next/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/michamos/inspire-next/downloads","issues_url":"https://api.github.com/repos/michamos/inspire-next/issues{/number}","pulls_url":"https://api.github.com/repos/michamos/inspire-next/pulls{/number}","milestones_url":"https://api.github.com/repos/michamos/inspire-next/milestones{/number}","notifications_url":"https://api.github.com/repos/michamos/inspire-next/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/michamos/inspire-next/labels{/name}","releases_url":"https://api.github.com/repos/michamos/inspire-next/releases{/id}","deployments_url":"https://api.github.com/repos/michamos/inspire-next/deployments","created_at":"2017-02-03T15:03:12Z","updated_at":"2017-02-03T15:03:15Z","pushed_at":"2018-03-26T19:20:42Z","git_url":"git://github.com/michamos/inspire-next.git","ssh_url":"git@github.com:michamos/inspire-next.git","clone_url":"https://github.com/michamos/inspire-next.git","svn_url":"https://github.com/michamos/inspire-next","homepage":"https://labs.inspirehep.net","size":79424,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"inspirehep:master","ref":"master","sha":"0e8cc3371a38311245f63f1ee07d33fd3444b261","user":{"login":"inspirehep","id":356664,"avatar_url":"https://avatars3.githubusercontent.com/u/356664?v=4","gravatar_id":"","url":"https://api.github.com/users/inspirehep","html_url":"https://github.com/inspirehep","followers_url":"https://api.github.com/users/inspirehep/followers","following_url":"https://api.github.com/users/inspirehep/following{/other_user}","gists_url":"https://api.github.com/users/inspirehep/gists{/gist_id}","starred_url":"https://api.github.com/users/inspirehep/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inspirehep/subscriptions","organizations_url":"https://api.github.com/users/inspirehep/orgs","repos_url":"https://api.github.com/users/inspirehep/repos","events_url":"https://api.github.com/users/inspirehep/events{/privacy}","received_events_url":"https://api.github.com/users/inspirehep/received_events","type":"Organization","site_admin":false},"repo":{"id":15221515,"name":"inspire-next","full_name":"inspirehep/inspire-next","owner":{"login":"inspirehep","id":356664,"avatar_url":"https://avatars3.githubusercontent.com/u/356664?v=4","gravatar_id":"","url":"https://api.github.com/users/inspirehep","html_url":"https://github.com/inspirehep","followers_url":"https://api.github.com/users/inspirehep/followers","following_url":"https://api.github.com/users/inspirehep/following{/other_user}","gists_url":"https://api.github.com/users/inspirehep/gists{/gist_id}","starred_url":"https://api.github.com/users/inspirehep/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inspirehep/subscriptions","organizations_url":"https://api.github.com/users/inspirehep/orgs","repos_url":"https://api.github.com/users/inspirehep/repos","events_url":"https://api.github.com/users/inspirehep/events{/privacy}","received_events_url":"https://api.github.com/users/inspirehep/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/inspirehep/inspire-next","description":"The next version of INSPIRE","fork":false,"url":"https://api.github.com/repos/inspirehep/inspire-next","forks_url":"https://api.github.com/repos/inspirehep/inspire-next/forks","keys_url":"https://api.github.com/repos/inspirehep/inspire-next/keys{/key_id}","collaborators_url":"https://api.github.com/repos/inspirehep/inspire-next/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/inspirehep/inspire-next/teams","hooks_url":"https://api.github.com/repos/inspirehep/inspire-next/hooks","issue_events_url":"https://api.github.com/repos/inspirehep/inspire-next/issues/events{/number}","events_url":"https://api.github.com/repos/inspirehep/inspire-next/events","assignees_url":"https://api.github.com/repos/inspirehep/inspire-next/assignees{/user}","branches_url":"https://api.github.com/repos/inspirehep/inspire-next/branches{/branch}","tags_url":"https://api.github.com/repos/inspirehep/inspire-next/tags","blobs_url":"https://api.github.com/repos/inspirehep/inspire-next/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/inspirehep/inspire-next/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/inspirehep/inspire-next/git/refs{/sha}","trees_url":"https://api.github.com/repos/inspirehep/inspire-next/git/trees{/sha}","statuses_url":"https://api.github.com/repos/inspirehep/inspire-next/statuses/{sha}","languages_url":"https://api.github.com/repos/inspirehep/inspire-next/languages","stargazers_url":"https://api.github.com/repos/inspirehep/inspire-next/stargazers","contributors_url":"https://api.github.com/repos/inspirehep/inspire-next/contributors","subscribers_url":"https://api.github.com/repos/inspirehep/inspire-next/subscribers","subscription_url":"https://api.github.com/repos/inspirehep/inspire-next/subscription","commits_url":"https://api.github.com/repos/inspirehep/inspire-next/commits{/sha}","git_commits_url":"https://api.github.com/repos/inspirehep/inspire-next/git/commits{/sha}","comments_url":"https://api.github.com/repos/inspirehep/inspire-next/comments{/number}","issue_comment_url":"https://api.github.com/repos/inspirehep/inspire-next/issues/comments{/number}","contents_url":"https://api.github.com/repos/inspirehep/inspire-next/contents/{+path}","compare_url":"https://api.github.com/repos/inspirehep/inspire-next/compare/{base}...{head}","merges_url":"https://api.github.com/repos/inspirehep/inspire-next/merges","archive_url":"https://api.github.com/repos/inspirehep/inspire-next/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/inspirehep/inspire-next/downloads","issues_url":"https://api.github.com/repos/inspirehep/inspire-next/issues{/number}","pulls_url":"https://api.github.com/repos/inspirehep/inspire-next/pulls{/number}","milestones_url":"https://api.github.com/repos/inspirehep/inspire-next/milestones{/number}","notifications_url":"https://api.github.com/repos/inspirehep/inspire-next/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/inspirehep/inspire-next/labels{/name}","releases_url":"https://api.github.com/repos/inspirehep/inspire-next/releases{/id}","deployments_url":"https://api.github.com/repos/inspirehep/inspire-next/deployments","created_at":"2013-12-16T09:11:58Z","updated_at":"2018-03-27T07:01:13Z","pushed_at":"2018-03-27T07:44:21Z","git_url":"git://github.com/inspirehep/inspire-next.git","ssh_url":"git@github.com:inspirehep/inspire-next.git","clone_url":"https://github.com/inspirehep/inspire-next.git","svn_url":"https://github.com/inspirehep/inspire-next","homepage":"https://labs.inspirehep.net","size":79201,"stargazers_count":34,"watchers_count":34,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":53,"mirror_url":null,"archived":false,"open_issues_count":247,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0"},"forks":53,"open_issues":247,"watchers":34,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/inspirehep/inspire-next/pulls/3286"},"html":{"href":"https://github.com/inspirehep/inspire-next/pull/3286"},"issue":{"href":"https://api.github.com/repos/inspirehep/inspire-next/issues/3286"},"comments":{"href":"https://api.github.com/repos/inspirehep/inspire-next/issues/3286/comments"},"review_comments":{"href":"https://api.github.com/repos/inspirehep/inspire-next/pulls/3286/comments"},"review_comment":{"href":"https://api.github.com/repos/inspirehep/inspire-next/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/inspirehep/inspire-next/pulls/3286/commits"},"statuses":{"href":"https://api.github.com/repos/inspirehep/inspire-next/statuses/cd9697dd06e034d6339fca2fcfe3dbb340199c8c"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"michamos"}}