{"action":"created","comment":{"url":"https://api.github.com/repos/OCA/product-attribute/pulls/comments/167160304","pull_request_review_id":95328182,"id":167160304,"diff_hunk":"@@ -0,0 +1,187 @@\n+# Copyright (C) 2018 - TODAY, Open Source Integrators\n+# Integrators License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).\n+\n+from odoo import api, fields, models\n+from datetime import datetime, timedelta\n+\n+\n+class ProductTemplate(models.Model):\n+    _inherit = 'product.template'\n+\n+    eol_date = fields.Date(\n+        compute='_compute_eol_date',\n+        inverse='_inverse_eol_date',\n+        string='End of Life Date')\n+\n+    @api.depends('product_variant_ids', 'product_variant_ids.eol_date')\n+    def _compute_eol_date(self):\n+        unique_variants = self.filtered(\n+            lambda template: len(template.product_variant_ids) == 1)\n+        for template in unique_variants:\n+            template.eol_date = template.product_variant_ids.eol_date\n+        for template in (self - unique_variants):\n+            template.eol_date = False\n+\n+    @api.multi\n+    def _inverse_eol_date(self):\n+        self.ensure_one()\n+        if len(self.product_variant_ids) == 1:\n+            self.product_variant_ids.eol_date = self.eol_date\n+\n+    @api.model\n+    def email_product_eol_list(self,product_eol_ids, run_date):\n+        if not product_eol_ids:\n+           return\n+        channel_id = self.env['mail.channel'].search([\n+            ('name', '=', 'Product End-Of-Life Channel')],\n+            limit=1)\n+        data = \"Run Date: %s\" % str(run_date)\n+        data += \"<br/><br/><strong> [Product Name]    [Days Before Eol Date] \\\n+                    [End-of-Life Date] </strong>\" \n+        for pid in product_eol_ids:\n+           data += \"<br/> [ %s ]\" % pid.name\n+           data += \"[ %s ]\" % str(datetime.strptime(pid.eol_date,\\\n+               \"%Y-%m-%d\").date() - run_date)\n+           data += \"[ %s ]\" % str(pid.eol_date)\n+        self.env['mail.message'].sudo(self._uid).create({\n+            'model': 'mail.channel', \n+            'res_id': channel_id.id, \n+            'subject':'Product End-Of-Life Notification',\n+            'body': data,\n+            'message_type':'comment',\n+            'subtype_id':1})\n+\n+    @api.model\n+    def send_notify_product_eol(self):\n+        # get the cronjob record\n+        ir_act_server = self.env['ir.actions.server'].search([\n+            (\"code\", \"=\", \"model.send_notify_product_eol()\")],\n+            limit=1)\n+        ir_cron = self.env['ir.cron'].search([\n+            ('ir_actions_server_id', '=', ir_act_server.id)],\n+            limit=1)\n+        # set approaching eol interval\n+        if ir_cron.approaching_type == 'weeks':\n+            apr_day = ir_cron.approaching_number * 7\n+            apr_month = 0\n+        # TBD: need to correctly compute based on months.\n+        elif ir_cron.approaching_type == 'months':\n+            apr_day = ir_cron.approaching_number * 30\n+            apr_month = 0\n+        else:\n+            apr_day = ir_cron.approaching_number\n+            apr_month = 0\n+        # set execute every interval\n+        if ir_cron.interval_type == 'weeks':\n+            int_day = ir_cron.interval_number * 7\n+            int_month = 0\n+        # TBD: need to correctly compute based on months.\n+        elif ir_cron.interval_type == 'months':\n+            int_day = ir_cron.approaching_number * 30\n+            int_month = 0\n+        elif ir_cron.interval_type == 'days':\n+            int_day = ir_cron.interval_number\n+            int_month = 0\n+        # for minutes/hours throw an exception\n+        else:\n+            int_day = 1\n+            int_month = 0\n+        run_day = datetime.strptime(ir_cron.nextcall, \\\n+            \"%Y-%m-%d %H:%M:%S\").date() \n+        # Start Date is equal to  run_day + approaching interval\n+        start_date = run_day + timedelta(apr_day)\n+\n+        # End Date is equal to  run_day + approaching interval + \n+        # execution interval\n+        end_date = run_day + timedelta(apr_day) + timedelta(int_day)\n+\n+        # search products that are days approaching Eol in\n+        # reference to today's date.\n+        product_eol_ids = self.env['product.product'].search([\n+            ('eol_date', '>=', start_date),\n+            ('eol_date', '<=', end_date),\n+            ('type', '=', 'product')])\n+\n+        # send email to recipients from the Product Eol Discussion Channel.\n+        self.email_product_eol_list(product_eol_ids, run_day)\n+        return True\n+\n+\n+class ProductVariants(models.Model):\n+    _inherit = 'product.product'\n+\n+    eol_date = fields.Date(\n+        string='End of Life Date'\n+    )\n+\n+    @api.model\n+    def name_search(self, name, args=None, operator='ilike', limit=100):\n+        result = super(ProductVariants, self).name_search(\n+            name=name,\n+            args=args,\n+            operator=operator,\n+            limit=limit)\n+        context = self._context or {}\n+        update_result = []\n+        today = fields.Date.today()\n+        if 'source_from' in context and \\\n+                context.get('source_from') == 'purchase_order':\n+            if result:\n+                for res in result:\n+                    for product in self.browse(res[0]):\n+                        # Exclude expired products\n+                        if product.eol_date and product.eol_date <= today:\n+                            continue\n+                        else:\n+                            # Design product code, name\n+                            def _name_get(d):\n+                                name = d.get('name', '')\n+                                code = \\\n+                                    context.get('display_default_code', True) \\\n+                                    and d.get('default_code', False) or False\n+                                if code:\n+                                    name = '[%s] %s' % (code, name)\n+                                return (d['id'], name)\n+                                # prepare product attributes\n+                            variant = \", \".join([v.name for v in\n+                                                 product.attribute_value_ids])\n+                            name = variant and \"%s (%s)\" % \\\n+                                (product.name, variant) or product.name\n+                            mydict = {\n+                                'id': product.id,\n+                                'name': name,\n+                                'default_code': product.default_code,\n+                            }\n+                            update_result.append(_name_get(mydict))\n+        else:\n+            update_result = result\n+        return update_result\n+\n+    @api.model\n+    def search_read(self, domain=None, fields=None, offset=0, limit=None,\n+                    order=None):\n+        res = super(ProductVariants, self).search_read(domain=domain,\n+                                                       fields=fields,\n+                                                       offset=offset,\n+                                                       limit=limit,\n+                                                       order=order)\n+        today = str(datetime.today().date())\n+        context = self._context or {}\n+        if 'source_from' in context and \\\n+                context.get('source_from') == 'purchase_order':\n+            if not((res and domain) is None) and len(domain) > 0:","path":"product_end_of_life/models/product.py","position":172,"original_position":172,"commit_id":"f31adbb7a51c5f7a2776a5d206e61506668fcaa8","original_commit_id":"f31adbb7a51c5f7a2776a5d206e61506668fcaa8","user":{"login":"guewen","id":417223,"avatar_url":"https://avatars1.githubusercontent.com/u/417223?v=4","gravatar_id":"","url":"https://api.github.com/users/guewen","html_url":"https://github.com/guewen","followers_url":"https://api.github.com/users/guewen/followers","following_url":"https://api.github.com/users/guewen/following{/other_user}","gists_url":"https://api.github.com/users/guewen/gists{/gist_id}","starred_url":"https://api.github.com/users/guewen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/guewen/subscriptions","organizations_url":"https://api.github.com/users/guewen/orgs","repos_url":"https://api.github.com/users/guewen/repos","events_url":"https://api.github.com/users/guewen/events{/privacy}","received_events_url":"https://api.github.com/users/guewen/received_events","type":"User","site_admin":false},"body":"hmm, not sure exactly what you want, but it can be simpler, don't you want `if res and domain:`?","created_at":"2018-02-09T08:02:11Z","updated_at":"2018-02-09T08:13:48Z","html_url":"https://github.com/OCA/product-attribute/pull/328#discussion_r167160304","pull_request_url":"https://api.github.com/repos/OCA/product-attribute/pulls/328","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/OCA/product-attribute/pulls/comments/167160304"},"html":{"href":"https://github.com/OCA/product-attribute/pull/328#discussion_r167160304"},"pull_request":{"href":"https://api.github.com/repos/OCA/product-attribute/pulls/328"}}},"pull_request":{"url":"https://api.github.com/repos/OCA/product-attribute/pulls/328","id":168052558,"html_url":"https://github.com/OCA/product-attribute/pull/328","diff_url":"https://github.com/OCA/product-attribute/pull/328.diff","patch_url":"https://github.com/OCA/product-attribute/pull/328.patch","issue_url":"https://api.github.com/repos/OCA/product-attribute/issues/328","number":328,"state":"open","locked":false,"title":"[11.0] Product End-of-Life ","user":{"login":"agyamuta","id":14207366,"avatar_url":"https://avatars1.githubusercontent.com/u/14207366?v=4","gravatar_id":"","url":"https://api.github.com/users/agyamuta","html_url":"https://github.com/agyamuta","followers_url":"https://api.github.com/users/agyamuta/followers","following_url":"https://api.github.com/users/agyamuta/following{/other_user}","gists_url":"https://api.github.com/users/agyamuta/gists{/gist_id}","starred_url":"https://api.github.com/users/agyamuta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agyamuta/subscriptions","organizations_url":"https://api.github.com/users/agyamuta/orgs","repos_url":"https://api.github.com/users/agyamuta/repos","events_url":"https://api.github.com/users/agyamuta/events{/privacy}","received_events_url":"https://api.github.com/users/agyamuta/received_events","type":"User","site_admin":false},"body":"#319 ","created_at":"2018-02-08T18:33:01Z","updated_at":"2018-02-09T08:13:48Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a6a315690ac5a2d93e21c5313595c31da6fe8b3f","assignee":{"login":"agyamuta","id":14207366,"avatar_url":"https://avatars1.githubusercontent.com/u/14207366?v=4","gravatar_id":"","url":"https://api.github.com/users/agyamuta","html_url":"https://github.com/agyamuta","followers_url":"https://api.github.com/users/agyamuta/followers","following_url":"https://api.github.com/users/agyamuta/following{/other_user}","gists_url":"https://api.github.com/users/agyamuta/gists{/gist_id}","starred_url":"https://api.github.com/users/agyamuta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agyamuta/subscriptions","organizations_url":"https://api.github.com/users/agyamuta/orgs","repos_url":"https://api.github.com/users/agyamuta/repos","events_url":"https://api.github.com/users/agyamuta/events{/privacy}","received_events_url":"https://api.github.com/users/agyamuta/received_events","type":"User","site_admin":false},"assignees":[{"login":"agyamuta","id":14207366,"avatar_url":"https://avatars1.githubusercontent.com/u/14207366?v=4","gravatar_id":"","url":"https://api.github.com/users/agyamuta","html_url":"https://github.com/agyamuta","followers_url":"https://api.github.com/users/agyamuta/followers","following_url":"https://api.github.com/users/agyamuta/following{/other_user}","gists_url":"https://api.github.com/users/agyamuta/gists{/gist_id}","starred_url":"https://api.github.com/users/agyamuta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agyamuta/subscriptions","organizations_url":"https://api.github.com/users/agyamuta/orgs","repos_url":"https://api.github.com/users/agyamuta/repos","events_url":"https://api.github.com/users/agyamuta/events{/privacy}","received_events_url":"https://api.github.com/users/agyamuta/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"milestone":{"url":"https://api.github.com/repos/OCA/product-attribute/milestones/4","html_url":"https://github.com/OCA/product-attribute/milestone/4","labels_url":"https://api.github.com/repos/OCA/product-attribute/milestones/4/labels","id":2810715,"number":4,"title":"11.0","description":null,"creator":{"login":"pedrobaeza","id":7165771,"avatar_url":"https://avatars2.githubusercontent.com/u/7165771?v=4","gravatar_id":"","url":"https://api.github.com/users/pedrobaeza","html_url":"https://github.com/pedrobaeza","followers_url":"https://api.github.com/users/pedrobaeza/followers","following_url":"https://api.github.com/users/pedrobaeza/following{/other_user}","gists_url":"https://api.github.com/users/pedrobaeza/gists{/gist_id}","starred_url":"https://api.github.com/users/pedrobaeza/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pedrobaeza/subscriptions","organizations_url":"https://api.github.com/users/pedrobaeza/orgs","repos_url":"https://api.github.com/users/pedrobaeza/repos","events_url":"https://api.github.com/users/pedrobaeza/events{/privacy}","received_events_url":"https://api.github.com/users/pedrobaeza/received_events","type":"User","site_admin":false},"open_issues":7,"closed_issues":7,"state":"open","created_at":"2017-10-03T14:51:48Z","updated_at":"2018-02-08T18:44:20Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/OCA/product-attribute/pulls/328/commits","review_comments_url":"https://api.github.com/repos/OCA/product-attribute/pulls/328/comments","review_comment_url":"https://api.github.com/repos/OCA/product-attribute/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OCA/product-attribute/issues/328/comments","statuses_url":"https://api.github.com/repos/OCA/product-attribute/statuses/f31adbb7a51c5f7a2776a5d206e61506668fcaa8","head":{"label":"camptocamp:yamuta_product_eol","ref":"yamuta_product_eol","sha":"f31adbb7a51c5f7a2776a5d206e61506668fcaa8","user":{"login":"camptocamp","id":28109,"avatar_url":"https://avatars0.githubusercontent.com/u/28109?v=4","gravatar_id":"","url":"https://api.github.com/users/camptocamp","html_url":"https://github.com/camptocamp","followers_url":"https://api.github.com/users/camptocamp/followers","following_url":"https://api.github.com/users/camptocamp/following{/other_user}","gists_url":"https://api.github.com/users/camptocamp/gists{/gist_id}","starred_url":"https://api.github.com/users/camptocamp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/camptocamp/subscriptions","organizations_url":"https://api.github.com/users/camptocamp/orgs","repos_url":"https://api.github.com/users/camptocamp/repos","events_url":"https://api.github.com/users/camptocamp/events{/privacy}","received_events_url":"https://api.github.com/users/camptocamp/received_events","type":"Organization","site_admin":false},"repo":{"id":67204160,"name":"product-attribute","full_name":"camptocamp/product-attribute","owner":{"login":"camptocamp","id":28109,"avatar_url":"https://avatars0.githubusercontent.com/u/28109?v=4","gravatar_id":"","url":"https://api.github.com/users/camptocamp","html_url":"https://github.com/camptocamp","followers_url":"https://api.github.com/users/camptocamp/followers","following_url":"https://api.github.com/users/camptocamp/following{/other_user}","gists_url":"https://api.github.com/users/camptocamp/gists{/gist_id}","starred_url":"https://api.github.com/users/camptocamp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/camptocamp/subscriptions","organizations_url":"https://api.github.com/users/camptocamp/orgs","repos_url":"https://api.github.com/users/camptocamp/repos","events_url":"https://api.github.com/users/camptocamp/events{/privacy}","received_events_url":"https://api.github.com/users/camptocamp/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/camptocamp/product-attribute","description":"Odoo Product Attribute","fork":true,"url":"https://api.github.com/repos/camptocamp/product-attribute","forks_url":"https://api.github.com/repos/camptocamp/product-attribute/forks","keys_url":"https://api.github.com/repos/camptocamp/product-attribute/keys{/key_id}","collaborators_url":"https://api.github.com/repos/camptocamp/product-attribute/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/camptocamp/product-attribute/teams","hooks_url":"https://api.github.com/repos/camptocamp/product-attribute/hooks","issue_events_url":"https://api.github.com/repos/camptocamp/product-attribute/issues/events{/number}","events_url":"https://api.github.com/repos/camptocamp/product-attribute/events","assignees_url":"https://api.github.com/repos/camptocamp/product-attribute/assignees{/user}","branches_url":"https://api.github.com/repos/camptocamp/product-attribute/branches{/branch}","tags_url":"https://api.github.com/repos/camptocamp/product-attribute/tags","blobs_url":"https://api.github.com/repos/camptocamp/product-attribute/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/camptocamp/product-attribute/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/camptocamp/product-attribute/git/refs{/sha}","trees_url":"https://api.github.com/repos/camptocamp/product-attribute/git/trees{/sha}","statuses_url":"https://api.github.com/repos/camptocamp/product-attribute/statuses/{sha}","languages_url":"https://api.github.com/repos/camptocamp/product-attribute/languages","stargazers_url":"https://api.github.com/repos/camptocamp/product-attribute/stargazers","contributors_url":"https://api.github.com/repos/camptocamp/product-attribute/contributors","subscribers_url":"https://api.github.com/repos/camptocamp/product-attribute/subscribers","subscription_url":"https://api.github.com/repos/camptocamp/product-attribute/subscription","commits_url":"https://api.github.com/repos/camptocamp/product-attribute/commits{/sha}","git_commits_url":"https://api.github.com/repos/camptocamp/product-attribute/git/commits{/sha}","comments_url":"https://api.github.com/repos/camptocamp/product-attribute/comments{/number}","issue_comment_url":"https://api.github.com/repos/camptocamp/product-attribute/issues/comments{/number}","contents_url":"https://api.github.com/repos/camptocamp/product-attribute/contents/{+path}","compare_url":"https://api.github.com/repos/camptocamp/product-attribute/compare/{base}...{head}","merges_url":"https://api.github.com/repos/camptocamp/product-attribute/merges","archive_url":"https://api.github.com/repos/camptocamp/product-attribute/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/camptocamp/product-attribute/downloads","issues_url":"https://api.github.com/repos/camptocamp/product-attribute/issues{/number}","pulls_url":"https://api.github.com/repos/camptocamp/product-attribute/pulls{/number}","milestones_url":"https://api.github.com/repos/camptocamp/product-attribute/milestones{/number}","notifications_url":"https://api.github.com/repos/camptocamp/product-attribute/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/camptocamp/product-attribute/labels{/name}","releases_url":"https://api.github.com/repos/camptocamp/product-attribute/releases{/id}","deployments_url":"https://api.github.com/repos/camptocamp/product-attribute/deployments","created_at":"2016-09-02T08:14:13Z","updated_at":"2017-12-31T21:37:01Z","pushed_at":"2018-02-09T03:10:26Z","git_url":"git://github.com/camptocamp/product-attribute.git","ssh_url":"git@github.com:camptocamp/product-attribute.git","clone_url":"https://github.com/camptocamp/product-attribute.git","svn_url":"https://github.com/camptocamp/product-attribute","homepage":"https://odoo-community.org/project/product-maintainers-27","size":3562,"stargazers_count":1,"watchers_count":1,"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":1,"default_branch":"9.0"}},"base":{"label":"OCA:11.0","ref":"11.0","sha":"4919fee803e4306bd2ba250995249f27526df51e","user":{"login":"OCA","id":7600578,"avatar_url":"https://avatars1.githubusercontent.com/u/7600578?v=4","gravatar_id":"","url":"https://api.github.com/users/OCA","html_url":"https://github.com/OCA","followers_url":"https://api.github.com/users/OCA/followers","following_url":"https://api.github.com/users/OCA/following{/other_user}","gists_url":"https://api.github.com/users/OCA/gists{/gist_id}","starred_url":"https://api.github.com/users/OCA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OCA/subscriptions","organizations_url":"https://api.github.com/users/OCA/orgs","repos_url":"https://api.github.com/users/OCA/repos","events_url":"https://api.github.com/users/OCA/events{/privacy}","received_events_url":"https://api.github.com/users/OCA/received_events","type":"Organization","site_admin":false},"repo":{"id":20894654,"name":"product-attribute","full_name":"OCA/product-attribute","owner":{"login":"OCA","id":7600578,"avatar_url":"https://avatars1.githubusercontent.com/u/7600578?v=4","gravatar_id":"","url":"https://api.github.com/users/OCA","html_url":"https://github.com/OCA","followers_url":"https://api.github.com/users/OCA/followers","following_url":"https://api.github.com/users/OCA/following{/other_user}","gists_url":"https://api.github.com/users/OCA/gists{/gist_id}","starred_url":"https://api.github.com/users/OCA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OCA/subscriptions","organizations_url":"https://api.github.com/users/OCA/orgs","repos_url":"https://api.github.com/users/OCA/repos","events_url":"https://api.github.com/users/OCA/events{/privacy}","received_events_url":"https://api.github.com/users/OCA/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OCA/product-attribute","description":"Odoo Product Attribute","fork":false,"url":"https://api.github.com/repos/OCA/product-attribute","forks_url":"https://api.github.com/repos/OCA/product-attribute/forks","keys_url":"https://api.github.com/repos/OCA/product-attribute/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OCA/product-attribute/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OCA/product-attribute/teams","hooks_url":"https://api.github.com/repos/OCA/product-attribute/hooks","issue_events_url":"https://api.github.com/repos/OCA/product-attribute/issues/events{/number}","events_url":"https://api.github.com/repos/OCA/product-attribute/events","assignees_url":"https://api.github.com/repos/OCA/product-attribute/assignees{/user}","branches_url":"https://api.github.com/repos/OCA/product-attribute/branches{/branch}","tags_url":"https://api.github.com/repos/OCA/product-attribute/tags","blobs_url":"https://api.github.com/repos/OCA/product-attribute/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OCA/product-attribute/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OCA/product-attribute/git/refs{/sha}","trees_url":"https://api.github.com/repos/OCA/product-attribute/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OCA/product-attribute/statuses/{sha}","languages_url":"https://api.github.com/repos/OCA/product-attribute/languages","stargazers_url":"https://api.github.com/repos/OCA/product-attribute/stargazers","contributors_url":"https://api.github.com/repos/OCA/product-attribute/contributors","subscribers_url":"https://api.github.com/repos/OCA/product-attribute/subscribers","subscription_url":"https://api.github.com/repos/OCA/product-attribute/subscription","commits_url":"https://api.github.com/repos/OCA/product-attribute/commits{/sha}","git_commits_url":"https://api.github.com/repos/OCA/product-attribute/git/commits{/sha}","comments_url":"https://api.github.com/repos/OCA/product-attribute/comments{/number}","issue_comment_url":"https://api.github.com/repos/OCA/product-attribute/issues/comments{/number}","contents_url":"https://api.github.com/repos/OCA/product-attribute/contents/{+path}","compare_url":"https://api.github.com/repos/OCA/product-attribute/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OCA/product-attribute/merges","archive_url":"https://api.github.com/repos/OCA/product-attribute/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OCA/product-attribute/downloads","issues_url":"https://api.github.com/repos/OCA/product-attribute/issues{/number}","pulls_url":"https://api.github.com/repos/OCA/product-attribute/pulls{/number}","milestones_url":"https://api.github.com/repos/OCA/product-attribute/milestones{/number}","notifications_url":"https://api.github.com/repos/OCA/product-attribute/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OCA/product-attribute/labels{/name}","releases_url":"https://api.github.com/repos/OCA/product-attribute/releases{/id}","deployments_url":"https://api.github.com/repos/OCA/product-attribute/deployments","created_at":"2014-06-16T17:57:41Z","updated_at":"2018-02-02T17:35:43Z","pushed_at":"2018-02-09T03:10:27Z","git_url":"git://github.com/OCA/product-attribute.git","ssh_url":"git@github.com:OCA/product-attribute.git","clone_url":"https://github.com/OCA/product-attribute.git","svn_url":"https://github.com/OCA/product-attribute","homepage":"https://odoo-community.org/project/product-maintainers-27","size":8043,"stargazers_count":46,"watchers_count":46,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":256,"mirror_url":null,"archived":false,"open_issues_count":62,"license":null,"forks":256,"open_issues":62,"watchers":46,"default_branch":"11.0"}},"_links":{"self":{"href":"https://api.github.com/repos/OCA/product-attribute/pulls/328"},"html":{"href":"https://github.com/OCA/product-attribute/pull/328"},"issue":{"href":"https://api.github.com/repos/OCA/product-attribute/issues/328"},"comments":{"href":"https://api.github.com/repos/OCA/product-attribute/issues/328/comments"},"review_comments":{"href":"https://api.github.com/repos/OCA/product-attribute/pulls/328/comments"},"review_comment":{"href":"https://api.github.com/repos/OCA/product-attribute/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OCA/product-attribute/pulls/328/commits"},"statuses":{"href":"https://api.github.com/repos/OCA/product-attribute/statuses/f31adbb7a51c5f7a2776a5d206e61506668fcaa8"}},"author_association":"NONE"}}
{"actor":{"display_login":"guewen"}}