{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/comments/244397815","pull_request_review_id":188358859,"id":244397815,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0NDM5NzgxNQ==","diff_hunk":"@@ -0,0 +1,91 @@\n+# Copyright 2017 The Forseti Security Authors. All rights reserved.\n+#\n+# Licensed under the Apache License, Version 2.0 (the \"License\");\n+# you may not use this file except in compliance with the License.\n+# You may obtain a copy of the License at\n+#\n+#    http://www.apache.org/licenses/LICENSE-2.0\n+#\n+# Unless required by applicable law or agreed to in writing, software\n+# distributed under the License is distributed on an \"AS IS\" BASIS,\n+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+# See the License for the specific language governing permissions and\n+# limitations under the License.\n+\n+\"\"\"Email factory to select connector\"\"\"\n+\n+from google.cloud.forseti.common.util import logger\n+from google.cloud.forseti.common.util.email import sendgrid_connector\n+\n+LOGGER = logger.get_logger(__name__)\n+\n+EMAIL_CONNECTOR_FACTORY = {\n+    'sendgrid': sendgrid_connector.SendgridConnector\n+}\n+\n+\n+class InvalidInputError(Exception):\n+    \"\"\"Exception raised when an invalid input is encountered.\"\"\"\n+\n+    def __init__(self, invalid_input):\n+        \"\"\"Constructor for the base notifier.\n+\n+        Args:\n+            invalid_input (dict): the invalid data format in question.\n+        \"\"\"\n+        super(InvalidInputError, self).__init__(\n+            'Invalid input found: %s' % invalid_input)\n+\n+\n+class EmailFactory(object):\n+    \"\"\"Email Factory to select connector.\"\"\"\n+\n+    def __init__(self, notifier_config):\n+        \"\"\"Constructor for the email factory.\n+\n+        Args:\n+            notifier_config (dict): Notifier configurations.\n+        \"\"\"\n+        self.notifier_config = notifier_config\n+        if notifier_config.get('email_connector'):\n+            self.email_connector_config = (\n+                notifier_config.get('email_connector'))\n+\n+    def get_connector(self):\n+        \"\"\"Gets the connector and executes it.\n+\n+        Returns:\n+            object: Connector class\n+\n+        Raises:\n+            InvalidInputError: if not valid\n+        \"\"\"\n+        if not self.notifier_config:\n+            raise InvalidInputError(self.notifier_config)\n+        if self.notifier_config.get('email_connector'):\n+            try:\n+                connector_name = self.email_connector_config.get('name')\n+                auth = self.email_connector_config.get('auth')\n+                sender = self.email_connector_config.get('sender')\n+                recipient = self.email_connector_config.get('recipient')\n+                return EMAIL_CONNECTOR_FACTORY[connector_name](sender,\n+                                                               recipient,\n+                                                               auth)\n+            except:\n+                LOGGER.exception(","path":"google/cloud/forseti/common/util/email/email_factory.py","position":75,"original_position":75,"commit_id":"edcc632296d997501f54112938e156063801ef26","original_commit_id":"edcc632296d997501f54112938e156063801ef26","user":{"login":"blueandgold","id":6977544,"node_id":"MDQ6VXNlcjY5Nzc1NDQ=","avatar_url":"https://avatars3.githubusercontent.com/u/6977544?v=4","gravatar_id":"","url":"https://api.github.com/users/blueandgold","html_url":"https://github.com/blueandgold","followers_url":"https://api.github.com/users/blueandgold/followers","following_url":"https://api.github.com/users/blueandgold/following{/other_user}","gists_url":"https://api.github.com/users/blueandgold/gists{/gist_id}","starred_url":"https://api.github.com/users/blueandgold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/blueandgold/subscriptions","organizations_url":"https://api.github.com/users/blueandgold/orgs","repos_url":"https://api.github.com/users/blueandgold/repos","events_url":"https://api.github.com/users/blueandgold/events{/privacy}","received_events_url":"https://api.github.com/users/blueandgold/received_events","type":"User","site_admin":false},"body":"The exception handling can be more targeted, so that troubleshooting will be easier.  The 2 errors that will happen here are:\r\n1: if the key is not found in `EMAIL_CONNECTOR_FACTORY` dictionary, so you can handle that directly\r\n2: if the connector fails to initialize, then we need a more clear message about that","created_at":"2018-12-28T20:05:10Z","updated_at":"2018-12-28T20:14:59Z","html_url":"https://github.com/GoogleCloudPlatform/forseti-security/pull/2445#discussion_r244397815","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/2445","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/comments/244397815"},"html":{"href":"https://github.com/GoogleCloudPlatform/forseti-security/pull/2445#discussion_r244397815"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/2445"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/2445","id":240894644,"node_id":"MDExOlB1bGxSZXF1ZXN0MjQwODk0NjQ0","html_url":"https://github.com/GoogleCloudPlatform/forseti-security/pull/2445","diff_url":"https://github.com/GoogleCloudPlatform/forseti-security/pull/2445.diff","patch_url":"https://github.com/GoogleCloudPlatform/forseti-security/pull/2445.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/issues/2445","number":2445,"state":"open","locked":false,"title":"Email Connector Interface Implementation","user":{"login":"red2k18","id":41486977,"node_id":"MDQ6VXNlcjQxNDg2OTc3","avatar_url":"https://avatars1.githubusercontent.com/u/41486977?v=4","gravatar_id":"","url":"https://api.github.com/users/red2k18","html_url":"https://github.com/red2k18","followers_url":"https://api.github.com/users/red2k18/followers","following_url":"https://api.github.com/users/red2k18/following{/other_user}","gists_url":"https://api.github.com/users/red2k18/gists{/gist_id}","starred_url":"https://api.github.com/users/red2k18/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/red2k18/subscriptions","organizations_url":"https://api.github.com/users/red2k18/orgs","repos_url":"https://api.github.com/users/red2k18/repos","events_url":"https://api.github.com/users/red2k18/events{/privacy}","received_events_url":"https://api.github.com/users/red2k18/received_events","type":"User","site_admin":false},"body":"This PR implements an interface provided to users to add the email connector of their choice.","created_at":"2018-12-25T21:54:58Z","updated_at":"2018-12-28T20:14:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f020ef9e61f668399693b7418db0df07afa965e2","assignee":{"login":"red2k18","id":41486977,"node_id":"MDQ6VXNlcjQxNDg2OTc3","avatar_url":"https://avatars1.githubusercontent.com/u/41486977?v=4","gravatar_id":"","url":"https://api.github.com/users/red2k18","html_url":"https://github.com/red2k18","followers_url":"https://api.github.com/users/red2k18/followers","following_url":"https://api.github.com/users/red2k18/following{/other_user}","gists_url":"https://api.github.com/users/red2k18/gists{/gist_id}","starred_url":"https://api.github.com/users/red2k18/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/red2k18/subscriptions","organizations_url":"https://api.github.com/users/red2k18/orgs","repos_url":"https://api.github.com/users/red2k18/repos","events_url":"https://api.github.com/users/red2k18/events{/privacy}","received_events_url":"https://api.github.com/users/red2k18/received_events","type":"User","site_admin":false},"assignees":[{"login":"red2k18","id":41486977,"node_id":"MDQ6VXNlcjQxNDg2OTc3","avatar_url":"https://avatars1.githubusercontent.com/u/41486977?v=4","gravatar_id":"","url":"https://api.github.com/users/red2k18","html_url":"https://github.com/red2k18","followers_url":"https://api.github.com/users/red2k18/followers","following_url":"https://api.github.com/users/red2k18/following{/other_user}","gists_url":"https://api.github.com/users/red2k18/gists{/gist_id}","starred_url":"https://api.github.com/users/red2k18/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/red2k18/subscriptions","organizations_url":"https://api.github.com/users/red2k18/orgs","repos_url":"https://api.github.com/users/red2k18/repos","events_url":"https://api.github.com/users/red2k18/events{/privacy}","received_events_url":"https://api.github.com/users/red2k18/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":658852504,"node_id":"MDU6TGFiZWw2NTg4NTI1MDQ=","url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/labels/cla:%20yes","name":"cla: yes","color":"ededed","default":false},{"id":769538991,"node_id":"MDU6TGFiZWw3Njk1Mzg5OTE=","url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/labels/status:%20in-progress","name":"status: in-progress","color":"1d76db","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/2445/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/2445/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/issues/2445/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/statuses/edcc632296d997501f54112938e156063801ef26","head":{"label":"GoogleCloudPlatform:email_adapter","ref":"email_adapter","sha":"edcc632296d997501f54112938e156063801ef26","user":{"login":"GoogleCloudPlatform","id":2810941,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI4MTA5NDE=","avatar_url":"https://avatars0.githubusercontent.com/u/2810941?v=4","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":82210080,"node_id":"MDEwOlJlcG9zaXRvcnk4MjIxMDA4MA==","name":"forseti-security","full_name":"GoogleCloudPlatform/forseti-security","private":false,"owner":{"login":"GoogleCloudPlatform","id":2810941,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI4MTA5NDE=","avatar_url":"https://avatars0.githubusercontent.com/u/2810941?v=4","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/GoogleCloudPlatform/forseti-security","description":"Forseti Security","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/releases{/id}","deployments_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/deployments","created_at":"2017-02-16T18:01:26Z","updated_at":"2018-12-28T19:16:48Z","pushed_at":"2018-12-28T19:08:43Z","git_url":"git://github.com/GoogleCloudPlatform/forseti-security.git","ssh_url":"git@github.com:GoogleCloudPlatform/forseti-security.git","clone_url":"https://github.com/GoogleCloudPlatform/forseti-security.git","svn_url":"https://github.com/GoogleCloudPlatform/forseti-security","homepage":"https://forsetisecurity.org","size":38953,"stargazers_count":853,"watchers_count":853,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":172,"mirror_url":null,"archived":false,"open_issues_count":311,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":172,"open_issues":311,"watchers":853,"default_branch":"dev"}},"base":{"label":"GoogleCloudPlatform:dev","ref":"dev","sha":"8011283fbd5cc0ad7ba13ef2bfa65f183f1d8d43","user":{"login":"GoogleCloudPlatform","id":2810941,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI4MTA5NDE=","avatar_url":"https://avatars0.githubusercontent.com/u/2810941?v=4","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":82210080,"node_id":"MDEwOlJlcG9zaXRvcnk4MjIxMDA4MA==","name":"forseti-security","full_name":"GoogleCloudPlatform/forseti-security","private":false,"owner":{"login":"GoogleCloudPlatform","id":2810941,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI4MTA5NDE=","avatar_url":"https://avatars0.githubusercontent.com/u/2810941?v=4","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/GoogleCloudPlatform/forseti-security","description":"Forseti Security","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/releases{/id}","deployments_url":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/deployments","created_at":"2017-02-16T18:01:26Z","updated_at":"2018-12-28T19:16:48Z","pushed_at":"2018-12-28T19:08:43Z","git_url":"git://github.com/GoogleCloudPlatform/forseti-security.git","ssh_url":"git@github.com:GoogleCloudPlatform/forseti-security.git","clone_url":"https://github.com/GoogleCloudPlatform/forseti-security.git","svn_url":"https://github.com/GoogleCloudPlatform/forseti-security","homepage":"https://forsetisecurity.org","size":38953,"stargazers_count":853,"watchers_count":853,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":172,"mirror_url":null,"archived":false,"open_issues_count":311,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":172,"open_issues":311,"watchers":853,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/2445"},"html":{"href":"https://github.com/GoogleCloudPlatform/forseti-security/pull/2445"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/issues/2445"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/issues/2445/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/2445/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/pulls/2445/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/forseti-security/statuses/edcc632296d997501f54112938e156063801ef26"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"blueandgold"}}