{"action":"created","comment":{"url":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/comments/105014215","pull_request_review_id":25874737,"id":105014215,"diff_hunk":"@@ -0,0 +1,321 @@\n+from __future__ import absolute_import, unicode_literals\n+\n+import HTMLParser\n+\n+from django import forms\n+from django.apps import apps\n+from django.db import models\n+from django.utils import html\n+from wagtail.wagtailcore.fields import RichTextField\n+from wagtail.wagtailcore.models import Page\n+from wagtail.wagtailadmin.edit_handlers import (\n+    FieldPanel,\n+    MultiFieldPanel,\n+    FieldRowPanel)\n+\n+from v1.util.migrations import get_or_create_page\n+\n+html_parser = HTMLParser.HTMLParser()\n+\n+PARENT_SLUG = 'ask-cfpb'\n+\n+\n+class Audience(models.Model):\n+    name = models.CharField(max_length=255)\n+\n+    panels = [\n+        FieldPanel('name'),\n+    ]\n+\n+    def __str__(self):\n+        return self.name\n+\n+\n+class NextStep(models.Model):\n+    title = models.CharField(max_length=255)\n+    show_title = models.BooleanField(default=False)\n+    text = RichTextField(blank=True)\n+\n+    panels = [\n+        FieldPanel('title'),\n+        FieldPanel('show_title'),\n+        FieldPanel('text'),\n+    ]\n+\n+    def __str__(self):\n+        return self.title\n+\n+\n+class Category(models.Model):\n+    name = models.CharField(max_length=255)\n+    name_es = models.CharField(max_length=255)\n+    slug = models.SlugField()\n+    slug_es = models.SlugField()\n+    intro = RichTextField(blank=True)\n+    intro_es = RichTextField(blank=True)\n+    featured_questions = models.ManyToManyField(\n+        'Answer', blank=True, related_name='featured_questions')\n+    panels = [\n+        FieldPanel('name', classname=\"title\"),\n+        FieldPanel('slug'),\n+        FieldPanel('intro'),\n+        FieldPanel('name_es', classname=\"title\"),\n+        FieldPanel('slug_es'),\n+        FieldPanel('intro_es'),\n+        FieldPanel('featured_questions'),\n+    ]\n+\n+    def __str__(self):\n+        return self.name\n+\n+    class Meta:\n+        ordering = ['name']\n+        verbose_name_plural = 'Categories'\n+\n+\n+class Answer(models.Model):\n+    category = models.ManyToManyField('Category', blank=True)\n+    question = models.TextField(blank=True)\n+    snippet = RichTextField(blank=True, help_text=\"Optional answer intro\")\n+    answer = RichTextField(blank=True)\n+    slug = models.SlugField(max_length=255, blank=True)\n+    question_es = models.TextField(blank=True)\n+    snippet_es = RichTextField(\n+        blank=True, help_text=\"Optional Spanish answer intro\")\n+    answer_es = RichTextField(blank=True)\n+    slug_es = models.SlugField(max_length=255, blank=True)\n+    tagging = models.CharField(\n+        max_length=1000, blank=True, help_text=\"Tags used for search index\")\n+    update_english_page = models.BooleanField(\n+        default=False,\n+        verbose_name=\"Update the English page when saving\")\n+    update_spanish_page = models.BooleanField(\n+        default=False,\n+        verbose_name=\"Update the Spanish page when saving\")\n+    created_at = models.DateTimeField(auto_now_add=True)\n+    updated_at = models.DateTimeField(auto_now=True)\n+    last_edited = models.DateField(\n+        blank=True,\n+        null=True,\n+        help_text=\"Change the date to today \"\n+                  \"if you edit an English question, snippet or answer.\")\n+    last_edited_es = models.DateField(\n+        blank=True,\n+        null=True,\n+        help_text=\"Change the date to today \"\n+                  \"if you edit a Spanish question, snippet or answer.\")\n+    subcategory = models.ManyToManyField(\n+        'SubCategory',\n+        blank=True)\n+    audiences = models.ManyToManyField('Audience', blank=True)\n+    next_step = models.ForeignKey(\n+        NextStep,\n+        blank=True,\n+        null=True)\n+    related_questions = models.ManyToManyField(\n+        'self',\n+        symmetrical=False,\n+        blank=True,\n+        related_name='related_question',\n+        help_text='Maximum of 3')\n+\n+    def __str__(self):\n+        return \"{} {}\".format(self.id, self.slug)\n+\n+    @property\n+    def available_subcategories(self):\n+        subcats = []\n+        for parent in self.category.all():\n+            subcats += list(parent.subcategory_set.all())\n+        return subcats\n+\n+    panels = [\n+        MultiFieldPanel([\n+            FieldPanel('last_edited'),\n+            FieldPanel('last_edited_es'),\n+            FieldRowPanel([\n+                FieldPanel('update_english_page'),\n+                FieldPanel('update_spanish_page')])],\n+            heading=\"Workflow fields -- check before saving\",\n+            classname=\"collapsible collapsed\"),\n+        FieldPanel('question', classname=\"title\"),\n+        FieldPanel('snippet', classname=\"full\"),\n+        FieldPanel('answer', classname=\"full\"),\n+        FieldPanel('slug'),\n+        FieldPanel('question_es', classname=\"title\"),\n+        FieldPanel('snippet_es', classname=\"full\"),\n+        FieldPanel('answer_es', classname=\"full\"),\n+        FieldPanel('slug_es'),\n+        FieldPanel('audiences', widget=forms.CheckboxSelectMultiple),\n+        FieldPanel('next_step'),\n+        FieldPanel('category', widget=forms.CheckboxSelectMultiple),\n+        FieldPanel(\n+            'subcategory', widget=forms.CheckboxSelectMultiple),\n+        FieldPanel('related_questions', widget=forms.SelectMultiple),\n+        FieldPanel('tagging')\n+    ]\n+\n+    def answer_text(self):\n+        \"\"\"Unescapes and removes html tags from answer fields\"\"\"\n+        unescaped = (\"{} {}\".format(\n+            html_parser.unescape(self.snippet),\n+            html_parser.unescape(self.answer)))\n+        return html.strip_tags(unescaped).strip()\n+\n+    def answer_text_es(self):\n+        \"\"\"Unescapes and removes html tags from Spanish answer fields\"\"\"\n+        unescaped = (\"{} {}\".format(\n+            html_parser.unescape(self.snippet_es),\n+            html_parser.unescape(self.answer_es)))\n+        return html.strip_tags(unescaped).strip()\n+\n+    def cleaned_questions(self):\n+        cleaned_terms = html_parser.unescape(self.question)\n+        return [html.strip_tags(cleaned_terms).strip()]\n+\n+    def cleaned_questions_es(self):\n+        cleaned_terms = html_parser.unescape(self.question_es)\n+        return [html.strip_tags(cleaned_terms).strip()]\n+\n+    def subcat_slugs(self):\n+        cats = [cat.slug for cat in self.subcategory.all()]\n+        return cats\n+\n+    def category_text(self):\n+        if self.category.all():\n+            return [cat.name for cat in self.category.all()]\n+        else:\n+            return ''\n+\n+    def audience_strings(self):\n+        for audience in self.audiences.all():\n+            yield audience.name\n+\n+    def tags(self):\n+        for tag in self.tagging.split(','):\n+            tag = tag.replace('\"', '')\n+            tag = tag.strip()\n+            if tag != u'':\n+                yield tag\n+\n+    def create_or_update_page(self, language=None):\n+        \"\"\"Create or update an English or Spanish Answer page\"\"\"\n+        answer_parent = Page.objects.get(slug=PARENT_SLUG)\n+        if language == 'en':\n+            _slug = self.slug\n+            _question = self.question\n+            _snippet = self.snippet\n+            _answer = self.answer\n+        elif language == 'es':\n+            _slug = self.slug_es\n+            _question = self.question_es\n+            _snippet = self.snippet_es\n+            _answer = self.answer_es\n+        else:\n+            raise Exception('unsupported language: \"{}\"'.format(language))\n+        base_page = get_or_create_page(\n+            apps,\n+            'ask_cfpb',\n+            'AnswerPage',\n+            '{}: {}'.format(self.id, _question[:248]),","path":"cfgov/ask_cfpb/models/django.py","position":220,"original_position":220,"commit_id":"029c10a06a39bc6c02b66ba9bc51a06d1d4eab1a","original_commit_id":"029c10a06a39bc6c02b66ba9bc51a06d1d4eab1a","user":{"login":"Scotchester","id":1044670,"avatar_url":"https://avatars0.githubusercontent.com/u/1044670?v=3","gravatar_id":"","url":"https://api.github.com/users/Scotchester","html_url":"https://github.com/Scotchester","followers_url":"https://api.github.com/users/Scotchester/followers","following_url":"https://api.github.com/users/Scotchester/following{/other_user}","gists_url":"https://api.github.com/users/Scotchester/gists{/gist_id}","starred_url":"https://api.github.com/users/Scotchester/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Scotchester/subscriptions","organizations_url":"https://api.github.com/users/Scotchester/orgs","repos_url":"https://api.github.com/users/Scotchester/repos","events_url":"https://api.github.com/users/Scotchester/events{/privacy}","received_events_url":"https://api.github.com/users/Scotchester/received_events","type":"User","site_admin":false},"body":"Hmm... I think it's OK for it to be visible in the URL, but having it in the `<title>` seems like a mistake. It's not useful information for the user.","created_at":"2017-03-08T20:26:14Z","updated_at":"2017-03-08T20:26:14Z","html_url":"https://github.com/cfpb/cfgov-refresh/pull/2780#discussion_r105014215","pull_request_url":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/2780","_links":{"self":{"href":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/comments/105014215"},"html":{"href":"https://github.com/cfpb/cfgov-refresh/pull/2780#discussion_r105014215"},"pull_request":{"href":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/2780"}}},"pull_request":{"url":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/2780","id":109402232,"html_url":"https://github.com/cfpb/cfgov-refresh/pull/2780","diff_url":"https://github.com/cfpb/cfgov-refresh/pull/2780.diff","patch_url":"https://github.com/cfpb/cfgov-refresh/pull/2780.patch","issue_url":"https://api.github.com/repos/cfpb/cfgov-refresh/issues/2780","number":2780,"state":"open","locked":false,"title":"First pass at migrating Ask CFPB content","user":{"login":"higs4281","id":515885,"avatar_url":"https://avatars1.githubusercontent.com/u/515885?v=3","gravatar_id":"","url":"https://api.github.com/users/higs4281","html_url":"https://github.com/higs4281","followers_url":"https://api.github.com/users/higs4281/followers","following_url":"https://api.github.com/users/higs4281/following{/other_user}","gists_url":"https://api.github.com/users/higs4281/gists{/gist_id}","starred_url":"https://api.github.com/users/higs4281/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/higs4281/subscriptions","organizations_url":"https://api.github.com/users/higs4281/orgs","repos_url":"https://api.github.com/users/higs4281/repos","events_url":"https://api.github.com/users/higs4281/events{/privacy}","received_events_url":"https://api.github.com/users/higs4281/received_events","type":"User","site_admin":false},"body":"This focuses on simplifying knowledgebase data models and migrating\r\nthe content into Wagtail. The parent question-categories that we're using\r\nas portal-page topics are broken out as categories, each having a set\r\nof subcategories, for organizing answers and pages.\r\nThe core content bits -- questions and answers in two languages --\r\nare consolidated into Answer objects that carry the English and Spanish\r\nforms of a question, its answer, its slug, and metadata.\r\n\r\n## Workflow\r\n- An Answer object is where content editing is done. \r\n- Wagtail pages are created or updated based on workflow checkboxes for each language. If a box is checked, the relevant page will be updated with a draft status when the answer is saved.\r\n- Each language also has its own manual `last edited` field, intended to give us a more useful timestamp to track  editorial updates. Editors choose when to mark an answer as updated, so minor metadata changes (or, say, a migration) won't pollute these values.\r\n- Pages then follow our standard Wagtail review and approval workflow.\r\n- The original Ask IDs get migrated to `ask_cfpb` as Answer IDs, which can be handy for searching both answers and pages. The answer page titles carry the ID as a prefix with a colon, so searching the Wagtail admin for \"1979:\" will find just the English and Spanish pages associated with answer 1979. \r\n\r\n## Additions\r\n\r\n- ask_cfpb app\r\n\r\n## Removals\r\n\r\n- None. Knowledgebase remains a satellite app for now.\r\n\r\n## Changes\r\n\r\n- `settings/base.py` changed to add ask_cfpb to INSTALLED_APP\r\n\r\n## Known bugs/omissions\r\n- Answers are generating updates to both draft and live versions of their related pages, instead of draft-only. I suspect this is related to the in-progress removal of our \"sharing\" code, but I'd like to see how the admin behaves in the build environment. This should not affect any current pages.\r\n- Ask search is not addressed in this PR.\r\n\r\n## Testing\r\n\r\nThese steps will get the current data migrated into the new models in Wagtail.\r\n- Create a new db, load recent prod data, run `migrate` and fire up runserver\r\n```\r\n./drop-db.sh\r\n./create-mysql-db.sh\r\nmysql -uroot v1 < ~/Downloads/production_django.sql\r\npython cfgov/manage.py migrate\r\n./runserver.sh\r\n```\r\n\r\n- In Wagtail, create a landing page under CFGov with the title \"Ask CFPB\" and publish it to www\r\n- If you want to view live and draft pages, edit your sites so default is localhost/port 8000\r\n- Optionally add a sharing site for the default site\r\n- In another terminal, open the `cfgov-refresh` shell and migrate the knowledgebase data.\r\n\r\n```\r\npython cfgov/manage.py shell\r\n```\r\n\r\n```python\r\nfrom ask_cfpb.migration_scripts.migrate_knowledgebase import migrate_knowledgebase\r\nmigrate_knowledgebase()\r\n```\r\n\r\nThis take a few minutes and generates 2K+  English and Spanish pages.\r\n\r\nYou now should see the data tables in the Wagtail admin's left sidebar under \"Ask CFPB,\" and the pages should be live in the Explorer under `CFGov > Ask CFPB >` \r\n\r\n## Screenshots\r\n\r\n<img width=\"358\" alt=\"ask_in_wagtail\" src=\"https://cloud.githubusercontent.com/assets/515885/23640657/1ced058e-02bd-11e7-8b2e-69b7f94c0561.png\">\r\n\r\nTry editing an Answer, selecting a workflow update box and saving to update a page.  \r\n\r\n## Tests\r\nFiles in `ask_cfpb/migration_scripts/` are exploratory and as yet don't have tests.","created_at":"2017-03-07T03:57:18Z","updated_at":"2017-03-08T20:26:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8ae024b0f3e9cf2ddec8103a4d1c4ea6193c674b","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/2780/commits","review_comments_url":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/2780/comments","review_comment_url":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cfpb/cfgov-refresh/issues/2780/comments","statuses_url":"https://api.github.com/repos/cfpb/cfgov-refresh/statuses/029c10a06a39bc6c02b66ba9bc51a06d1d4eab1a","head":{"label":"cfpb:ask-cfpb","ref":"ask-cfpb","sha":"029c10a06a39bc6c02b66ba9bc51a06d1d4eab1a","user":{"login":"cfpb","id":1071563,"avatar_url":"https://avatars1.githubusercontent.com/u/1071563?v=3","gravatar_id":"","url":"https://api.github.com/users/cfpb","html_url":"https://github.com/cfpb","followers_url":"https://api.github.com/users/cfpb/followers","following_url":"https://api.github.com/users/cfpb/following{/other_user}","gists_url":"https://api.github.com/users/cfpb/gists{/gist_id}","starred_url":"https://api.github.com/users/cfpb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cfpb/subscriptions","organizations_url":"https://api.github.com/users/cfpb/orgs","repos_url":"https://api.github.com/users/cfpb/repos","events_url":"https://api.github.com/users/cfpb/events{/privacy}","received_events_url":"https://api.github.com/users/cfpb/received_events","type":"Organization","site_admin":false},"repo":{"id":18852566,"name":"cfgov-refresh","full_name":"cfpb/cfgov-refresh","owner":{"login":"cfpb","id":1071563,"avatar_url":"https://avatars1.githubusercontent.com/u/1071563?v=3","gravatar_id":"","url":"https://api.github.com/users/cfpb","html_url":"https://github.com/cfpb","followers_url":"https://api.github.com/users/cfpb/followers","following_url":"https://api.github.com/users/cfpb/following{/other_user}","gists_url":"https://api.github.com/users/cfpb/gists{/gist_id}","starred_url":"https://api.github.com/users/cfpb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cfpb/subscriptions","organizations_url":"https://api.github.com/users/cfpb/orgs","repos_url":"https://api.github.com/users/cfpb/repos","events_url":"https://api.github.com/users/cfpb/events{/privacy}","received_events_url":"https://api.github.com/users/cfpb/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cfpb/cfgov-refresh","description":"Django project that powers the redesigned consumerfinance.gov website.","fork":false,"url":"https://api.github.com/repos/cfpb/cfgov-refresh","forks_url":"https://api.github.com/repos/cfpb/cfgov-refresh/forks","keys_url":"https://api.github.com/repos/cfpb/cfgov-refresh/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cfpb/cfgov-refresh/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cfpb/cfgov-refresh/teams","hooks_url":"https://api.github.com/repos/cfpb/cfgov-refresh/hooks","issue_events_url":"https://api.github.com/repos/cfpb/cfgov-refresh/issues/events{/number}","events_url":"https://api.github.com/repos/cfpb/cfgov-refresh/events","assignees_url":"https://api.github.com/repos/cfpb/cfgov-refresh/assignees{/user}","branches_url":"https://api.github.com/repos/cfpb/cfgov-refresh/branches{/branch}","tags_url":"https://api.github.com/repos/cfpb/cfgov-refresh/tags","blobs_url":"https://api.github.com/repos/cfpb/cfgov-refresh/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cfpb/cfgov-refresh/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cfpb/cfgov-refresh/git/refs{/sha}","trees_url":"https://api.github.com/repos/cfpb/cfgov-refresh/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cfpb/cfgov-refresh/statuses/{sha}","languages_url":"https://api.github.com/repos/cfpb/cfgov-refresh/languages","stargazers_url":"https://api.github.com/repos/cfpb/cfgov-refresh/stargazers","contributors_url":"https://api.github.com/repos/cfpb/cfgov-refresh/contributors","subscribers_url":"https://api.github.com/repos/cfpb/cfgov-refresh/subscribers","subscription_url":"https://api.github.com/repos/cfpb/cfgov-refresh/subscription","commits_url":"https://api.github.com/repos/cfpb/cfgov-refresh/commits{/sha}","git_commits_url":"https://api.github.com/repos/cfpb/cfgov-refresh/git/commits{/sha}","comments_url":"https://api.github.com/repos/cfpb/cfgov-refresh/comments{/number}","issue_comment_url":"https://api.github.com/repos/cfpb/cfgov-refresh/issues/comments{/number}","contents_url":"https://api.github.com/repos/cfpb/cfgov-refresh/contents/{+path}","compare_url":"https://api.github.com/repos/cfpb/cfgov-refresh/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cfpb/cfgov-refresh/merges","archive_url":"https://api.github.com/repos/cfpb/cfgov-refresh/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cfpb/cfgov-refresh/downloads","issues_url":"https://api.github.com/repos/cfpb/cfgov-refresh/issues{/number}","pulls_url":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls{/number}","milestones_url":"https://api.github.com/repos/cfpb/cfgov-refresh/milestones{/number}","notifications_url":"https://api.github.com/repos/cfpb/cfgov-refresh/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cfpb/cfgov-refresh/labels{/name}","releases_url":"https://api.github.com/repos/cfpb/cfgov-refresh/releases{/id}","deployments_url":"https://api.github.com/repos/cfpb/cfgov-refresh/deployments","created_at":"2014-04-16T19:22:03Z","updated_at":"2017-03-06T04:17:07Z","pushed_at":"2017-03-08T17:41:27Z","git_url":"git://github.com/cfpb/cfgov-refresh.git","ssh_url":"git@github.com:cfpb/cfgov-refresh.git","clone_url":"https://github.com/cfpb/cfgov-refresh.git","svn_url":"https://github.com/cfpb/cfgov-refresh","homepage":"http://www.consumerfinance.gov/","size":64379,"stargazers_count":84,"watchers_count":84,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":43,"mirror_url":null,"open_issues_count":96,"forks":43,"open_issues":96,"watchers":84,"default_branch":"master"}},"base":{"label":"cfpb:master","ref":"master","sha":"f246bf4fde0f10165a8c09985b2471a6e2e9e373","user":{"login":"cfpb","id":1071563,"avatar_url":"https://avatars1.githubusercontent.com/u/1071563?v=3","gravatar_id":"","url":"https://api.github.com/users/cfpb","html_url":"https://github.com/cfpb","followers_url":"https://api.github.com/users/cfpb/followers","following_url":"https://api.github.com/users/cfpb/following{/other_user}","gists_url":"https://api.github.com/users/cfpb/gists{/gist_id}","starred_url":"https://api.github.com/users/cfpb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cfpb/subscriptions","organizations_url":"https://api.github.com/users/cfpb/orgs","repos_url":"https://api.github.com/users/cfpb/repos","events_url":"https://api.github.com/users/cfpb/events{/privacy}","received_events_url":"https://api.github.com/users/cfpb/received_events","type":"Organization","site_admin":false},"repo":{"id":18852566,"name":"cfgov-refresh","full_name":"cfpb/cfgov-refresh","owner":{"login":"cfpb","id":1071563,"avatar_url":"https://avatars1.githubusercontent.com/u/1071563?v=3","gravatar_id":"","url":"https://api.github.com/users/cfpb","html_url":"https://github.com/cfpb","followers_url":"https://api.github.com/users/cfpb/followers","following_url":"https://api.github.com/users/cfpb/following{/other_user}","gists_url":"https://api.github.com/users/cfpb/gists{/gist_id}","starred_url":"https://api.github.com/users/cfpb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cfpb/subscriptions","organizations_url":"https://api.github.com/users/cfpb/orgs","repos_url":"https://api.github.com/users/cfpb/repos","events_url":"https://api.github.com/users/cfpb/events{/privacy}","received_events_url":"https://api.github.com/users/cfpb/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cfpb/cfgov-refresh","description":"Django project that powers the redesigned consumerfinance.gov website.","fork":false,"url":"https://api.github.com/repos/cfpb/cfgov-refresh","forks_url":"https://api.github.com/repos/cfpb/cfgov-refresh/forks","keys_url":"https://api.github.com/repos/cfpb/cfgov-refresh/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cfpb/cfgov-refresh/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cfpb/cfgov-refresh/teams","hooks_url":"https://api.github.com/repos/cfpb/cfgov-refresh/hooks","issue_events_url":"https://api.github.com/repos/cfpb/cfgov-refresh/issues/events{/number}","events_url":"https://api.github.com/repos/cfpb/cfgov-refresh/events","assignees_url":"https://api.github.com/repos/cfpb/cfgov-refresh/assignees{/user}","branches_url":"https://api.github.com/repos/cfpb/cfgov-refresh/branches{/branch}","tags_url":"https://api.github.com/repos/cfpb/cfgov-refresh/tags","blobs_url":"https://api.github.com/repos/cfpb/cfgov-refresh/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cfpb/cfgov-refresh/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cfpb/cfgov-refresh/git/refs{/sha}","trees_url":"https://api.github.com/repos/cfpb/cfgov-refresh/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cfpb/cfgov-refresh/statuses/{sha}","languages_url":"https://api.github.com/repos/cfpb/cfgov-refresh/languages","stargazers_url":"https://api.github.com/repos/cfpb/cfgov-refresh/stargazers","contributors_url":"https://api.github.com/repos/cfpb/cfgov-refresh/contributors","subscribers_url":"https://api.github.com/repos/cfpb/cfgov-refresh/subscribers","subscription_url":"https://api.github.com/repos/cfpb/cfgov-refresh/subscription","commits_url":"https://api.github.com/repos/cfpb/cfgov-refresh/commits{/sha}","git_commits_url":"https://api.github.com/repos/cfpb/cfgov-refresh/git/commits{/sha}","comments_url":"https://api.github.com/repos/cfpb/cfgov-refresh/comments{/number}","issue_comment_url":"https://api.github.com/repos/cfpb/cfgov-refresh/issues/comments{/number}","contents_url":"https://api.github.com/repos/cfpb/cfgov-refresh/contents/{+path}","compare_url":"https://api.github.com/repos/cfpb/cfgov-refresh/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cfpb/cfgov-refresh/merges","archive_url":"https://api.github.com/repos/cfpb/cfgov-refresh/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cfpb/cfgov-refresh/downloads","issues_url":"https://api.github.com/repos/cfpb/cfgov-refresh/issues{/number}","pulls_url":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls{/number}","milestones_url":"https://api.github.com/repos/cfpb/cfgov-refresh/milestones{/number}","notifications_url":"https://api.github.com/repos/cfpb/cfgov-refresh/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cfpb/cfgov-refresh/labels{/name}","releases_url":"https://api.github.com/repos/cfpb/cfgov-refresh/releases{/id}","deployments_url":"https://api.github.com/repos/cfpb/cfgov-refresh/deployments","created_at":"2014-04-16T19:22:03Z","updated_at":"2017-03-06T04:17:07Z","pushed_at":"2017-03-08T17:41:27Z","git_url":"git://github.com/cfpb/cfgov-refresh.git","ssh_url":"git@github.com:cfpb/cfgov-refresh.git","clone_url":"https://github.com/cfpb/cfgov-refresh.git","svn_url":"https://github.com/cfpb/cfgov-refresh","homepage":"http://www.consumerfinance.gov/","size":64379,"stargazers_count":84,"watchers_count":84,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":43,"mirror_url":null,"open_issues_count":96,"forks":43,"open_issues":96,"watchers":84,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/2780"},"html":{"href":"https://github.com/cfpb/cfgov-refresh/pull/2780"},"issue":{"href":"https://api.github.com/repos/cfpb/cfgov-refresh/issues/2780"},"comments":{"href":"https://api.github.com/repos/cfpb/cfgov-refresh/issues/2780/comments"},"review_comments":{"href":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/2780/comments"},"review_comment":{"href":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cfpb/cfgov-refresh/pulls/2780/commits"},"statuses":{"href":"https://api.github.com/repos/cfpb/cfgov-refresh/statuses/029c10a06a39bc6c02b66ba9bc51a06d1d4eab1a"}}}}
{"actor":{"display_login":"Scotchester"}}