{"action":"created","comment":{"url":"https://api.github.com/repos/OCA/connector-magento/pulls/comments/28955366","id":28955366,"diff_hunk":"@@ -0,0 +1,662 @@\n+# -*- coding: utf-8 -*-\n+##############################################################################\n+#\n+#    Author: Guewen Baconnier\n+#    Copyright 2013 Camptocamp SA\n+#    Copyright 2013 Akretion\n+#\n+#    This program is free software: you can redistribute it and/or modify\n+#    it under the terms of the GNU Affero General Public License as\n+#    published by the Free Software Foundation, either version 3 of the\n+#    License, or (at your option) any later version.\n+#\n+#    This program is distributed in the hope that it will be useful,\n+#    but WITHOUT ANY WARRANTY; without even the implied warranty of\n+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+#    GNU Affero General Public License for more details.\n+#\n+#    You should have received a copy of the GNU Affero General Public License\n+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n+#\n+##############################################################################\n+\n+import logging\n+from datetime import datetime, timedelta\n+from openerp import models, fields, api, _\n+from openerp.addons.connector.session import ConnectorSession\n+from openerp.addons.connector.connector import ConnectorUnit\n+from openerp.addons.connector.unit.mapper import mapping, ImportMapper\n+from .unit.backend_adapter import GenericAdapter\n+from .unit.import_synchronizer import (import_batch,\n+                                       DirectBatchImporter,\n+                                       MagentoImporter,\n+                                       )\n+from .partner import partner_import_batch\n+from .sale import sale_order_import_batch\n+from .backend import magento\n+from .connector import add_checkpoint\n+\n+_logger = logging.getLogger(__name__)\n+\n+IMPORT_DELTA_BUFFER = 30  # seconds\n+\n+\n+class MagentoBackend(models.Model):\n+    _name = 'magento.backend'\n+    _description = 'Magento Backend'\n+    _inherit = 'connector.backend'\n+\n+    _backend_type = 'magento'\n+\n+    @api.model\n+    def select_versions(self):\n+        \"\"\" Available versions in the backend.\n+\n+        Can be inherited to add custom versions.  Using this method\n+        to add a version from an ``_inherit`` does not constrain\n+        to redefine the ``version`` field in the ``_inherit`` model.\n+        \"\"\"\n+        return [('1.7', '1.7+')]\n+\n+    @api.model\n+    def _get_stock_field_id(self):\n+        field = self.env['ir.model.fields'].search(\n+            [('model', '=', 'product.product'),\n+             ('name', '=', 'virtual_available')],\n+            limit=1)\n+        return field\n+\n+    version = fields.Selection(selection='select_versions', required=True)\n+    location = fields.Char(\n+        string='Location',\n+        required=True,\n+        help=\"Url to magento application\",\n+    )\n+    admin_location = fields.Char(string='Admin Location')\n+    use_custom_api_path = fields.Boolean(\n+        string='Custom Api Path',\n+        help=\"The default API path is '/index.php/api/xmlrpc'. \"\n+             \"Check this box if you use a custom API path, in that case, \"\n+             \"the location has to be completed with the custom API path \",\n+    )\n+    username = fields.Char(\n+        string='Username',\n+        help=\"Webservice user\",\n+    )\n+    password = fields.Char(\n+        string='Password',\n+        help=\"Webservice password\",\n+    )\n+    use_auth_basic = fields.Boolean(\n+        string='Use HTTP Auth Basic',\n+        help=\"Use a Basic Access Authentication for the API. \"\n+             \"The Magento server could be configured to restrict access \"\n+             \"using a HTTP authentication based on a username and \"\n+             \"a password.\",\n+    )\n+    auth_basic_username = fields.Char(\n+        string='Basic Auth. Username',\n+        help=\"Basic access authentication web server side username\",\n+    )\n+    auth_basic_password = fields.Char(\n+        string='Basic Auth. Password',\n+        help=\"Basic access authentication web server side password\",\n+    )\n+    sale_prefix = fields.Char(\n+        string='Sale Prefix',\n+        help=\"A prefix put before the name of imported sales orders.\\n\"\n+             \"For instance, if the prefix is 'mag-', the sales \"\n+             \"order 100000692 in Magento, will be named 'mag-100000692' \"\n+             \"in OpenERP.\",\n+    )\n+    warehouse_id = fields.Many2one(\n+        comodel_name='stock.warehouse',\n+        string='Warehouse',\n+        required=True,\n+        help='Warehouse used to compute the '\n+             'stock quantities.',\n+    )\n+    company_id = fields.Many2one(\n+        comodel_name='res.company',\n+        related='warehouse_id.company_id',\n+        string='Company',\n+        readonly=True,\n+    )\n+    website_ids = fields.One2many(\n+        comodel_name='magento.website',\n+        inverse_name='backend_id',\n+        string='Website',\n+        readonly=True,\n+    )\n+    default_lang_id = fields.Many2one(\n+        comodel_name='res.lang',\n+        string='Default Language',\n+        help=\"If a default language is selected, the records \"\n+             \"will be imported in the translation of this language.\\n\"\n+             \"Note that a similar configuration exists \"\n+             \"for each storeview.\",\n+    )\n+    default_category_id = fields.Many2one(\n+        comodel_name='product.category',\n+        string='Default Product Category',\n+        help='If a default category is selected, products imported '\n+             'without a category will be linked to it.',\n+    )\n+\n+    # TODO? add a field `auto_activate` -> activate a cron\n+    import_products_from_date = fields.Datetime(\n+        string='Import products from date',\n+    )\n+    import_categories_from_date = fields.Datetime(\n+        string='Import categories from date',\n+    )\n+    product_stock_field_id = fields.Many2one(\n+        comodel_name='ir.model.fields',\n+        string='Stock Field',\n+        default=_get_stock_field_id,\n+        domain=\"[('model', 'in', ['product.product', 'product.template']),\"\n+               \" ('ttype', '=', 'float')]\",\n+        help=\"Choose the field of the product which will be used for \"\n+             \"stock inventory updates.\\nIf empty, Quantity Available \"\n+             \"is used.\",\n+    )\n+    product_binding_ids = fields.One2many(\n+        comodel_name='magento.product.product',\n+        inverse_name='backend_id',\n+        string='Magento Products',\n+        readonly=True,\n+    )\n+\n+    _sql_constraints = [\n+        ('sale_prefix_uniq', 'unique(sale_prefix)',\n+         \"A backend with the same sale prefix already exists\")\n+    ]\n+\n+    @api.multi\n+    def check_magento_structure(self):\n+        \"\"\" Used in each data import.\n+\n+        Verify if a website exists for each backend before starting the import.\n+        \"\"\"\n+        for backend in self:\n+            websites = backend.website_ids\n+            if not websites:\n+                backend.synchronize_metadata()\n+        return True\n+\n+    @api.multi\n+    def synchronize_metadata(self):\n+        session = ConnectorSession(self.env.cr, self.env.uid,\n+                                   context=self.env.context)\n+        for backend in self:\n+            for model in ('magento.website',\n+                          'magento.store',\n+                          'magento.storeview'):\n+                # import directly, do not delay because this\n+                # is a fast operation, a direct return is fine\n+                # and it is simpler to import them sequentially\n+                import_batch(session, model, backend.id)\n+        return True\n+\n+    @api.multi\n+    def import_partners(self):\n+        \"\"\" Import partners from all websites \"\"\"\n+        for backend in self:\n+            backend.check_magento_structure()\n+            backend.website_ids.import_partners()\n+        return True\n+\n+    @api.multi\n+    def import_sale_orders(self):\n+        \"\"\" Import sale orders from all store views \"\"\"\n+        storeview_obj = self.env['magento.storeview']\n+        storeviews = storeview_obj.search([('backend_id', 'in', self.ids)])\n+        storeviews.import_sale_orders()\n+        return True\n+\n+    @api.multi\n+    def import_customer_groups(self):\n+        session = ConnectorSession(self.env.cr, self.env.uid,\n+                                   context=self.env.context)\n+        for backend in self:\n+            backend.check_magento_structure()\n+            import_batch.delay(session, 'magento.res.partner.category',\n+                               backend.id)\n+\n+        return True\n+\n+    @api.multi\n+    def _import_from_date(self, model, from_date_field):\n+        session = ConnectorSession(self.env.cr, self.env.uid,\n+                                   context=self.env.context)\n+        import_start_time = datetime.now()\n+        for backend in self:\n+            backend.check_magento_structure()\n+            from_date = getattr(backend, from_date_field)\n+            if from_date:\n+                from_date = fields.Datetime.from_string(from_date)\n+            else:\n+                from_date = None\n+            import_batch.delay(session, model,\n+                               backend.id,\n+                               filters={'from_date': from_date,\n+                                        'to_date': import_start_time})\n+        # Records from Magento are imported based on their `created_at`\n+        # date.  This date is set on Magento at the beginning of a\n+        # transaction, so if the import is run between the beginning and\n+        # the end of a transaction, the import of a record may be\n+        # missed.  That's why we add a small buffer back in time where\n+        # the eventually missed records will be retrieved.  This also\n+        # means that we'll have jobs that import twice the same records,\n+        # but this is not a big deal because they will be skipped when\n+        # the last `sync_date` is the same.\n+        next_time = import_start_time - timedelta(seconds=IMPORT_DELTA_BUFFER)\n+        next_time = fields.Datetime.to_string(next_time)\n+        self.write({from_date_field: next_time})\n+\n+    @api.multi\n+    def import_product_categories(self):\n+        self._import_from_date('magento.product.category',\n+                               'import_categories_from_date')\n+        return True\n+\n+    @api.multi\n+    def import_product_product(self):\n+        self._import_from_date('magento.product.product',\n+                               'import_products_from_date')\n+        return True\n+\n+    @api.multi\n+    def _domain_for_update_product_stock_qty(self):\n+        return [\n+            ('backend_id', 'in', self.ids),\n+            ('type', '!=', 'service'),\n+            ('no_stock_sync', '=', False),\n+        ]\n+\n+    @api.multi\n+    def update_product_stock_qty(self):\n+        mag_product_obj = self.env['magento.product.product']\n+        domain = self._domain_for_update_product_stock_qty()\n+        magento_products = mag_product_obj.search(domain)\n+        magento_products.recompute_magento_qty()\n+        return True\n+\n+    @api.model\n+    def _magento_backend(self, callback, domain=None):\n+        if domain is None:\n+            domain = []\n+        backends = self.search(domain)\n+        if backends:\n+            getattr(backends, callback)","path":"magentoerpconnect/magento_model.py","position":291,"original_position":291,"commit_id":"c08ecf5b8090217543233cbb7cabcea60c6c65ed","original_commit_id":"c08ecf5b8090217543233cbb7cabcea60c6c65ed","user":{"login":"tremlin","id":271119,"avatar_url":"https://avatars.githubusercontent.com/u/271119?v=3","gravatar_id":"","url":"https://api.github.com/users/tremlin","html_url":"https://github.com/tremlin","followers_url":"https://api.github.com/users/tremlin/followers","following_url":"https://api.github.com/users/tremlin/following{/other_user}","gists_url":"https://api.github.com/users/tremlin/gists{/gist_id}","starred_url":"https://api.github.com/users/tremlin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tremlin/subscriptions","organizations_url":"https://api.github.com/users/tremlin/orgs","repos_url":"https://api.github.com/users/tremlin/repos","events_url":"https://api.github.com/users/tremlin/events{/privacy}","received_events_url":"https://api.github.com/users/tremlin/received_events","type":"User","site_admin":false},"body":"This should probably be `getattr(backends, callback)()`","created_at":"2015-04-23T11:45:39Z","updated_at":"2015-04-23T11:45:39Z","html_url":"https://github.com/OCA/connector-magento/pull/85#discussion_r28955366","pull_request_url":"https://api.github.com/repos/OCA/connector-magento/pulls/85","_links":{"self":{"href":"https://api.github.com/repos/OCA/connector-magento/pulls/comments/28955366"},"html":{"href":"https://github.com/OCA/connector-magento/pull/85#discussion_r28955366"},"pull_request":{"href":"https://api.github.com/repos/OCA/connector-magento/pulls/85"}}},"pull_request":{"url":"https://api.github.com/repos/OCA/connector-magento/pulls/85","id":29610738,"html_url":"https://github.com/OCA/connector-magento/pull/85","diff_url":"https://github.com/OCA/connector-magento/pull/85.diff","patch_url":"https://github.com/OCA/connector-magento/pull/85.patch","issue_url":"https://api.github.com/repos/OCA/connector-magento/issues/85","number":85,"state":"open","locked":false,"title":"[WIP] Migration of magentoerpconnect","user":{"login":"guewen","id":417223,"avatar_url":"https://avatars.githubusercontent.com/u/417223?v=3","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":"# Phase: \r\n\r\n**testing / debugging**\r\n\r\n# How to build yourself\r\n\r\nI use this configuration to have all the required pull requests merged https://github.com/guewen/odoo-connector-magento-buildout/tree/8.0-merge-migration-pull-requests\r\n\r\n# What is in there\r\n\r\n## Changes\r\n* Migrated on the new Odoo API and the new Connector API\r\n* Extended the test coverage\r\n* Show the failed calls in the logger with the ERROR level\r\n* New Docker image for Magento, mentionned in the documentation\r\n* Allow to choose a default sales team for sales orders on the storeviews\r\n* Lot of improvements/cleaning of the code\r\n* The binders can now return records (new ``browse`` argument)\r\n* The Importer now pass the binding report instead of the binding_id\r\n  internally\r\n* Remove sale.shop\r\n\r\n## More details on the API changes\r\n\r\nFirst have a look on OCA/connector#47 for details on the Connector changes.\r\n\r\n### Binders\r\n\r\n* A new argument allows to return records instead of ids in `to_openerp()`. `to_backend()` and `bind()` both accept ids and records as input.\r\n\r\n### Importer\r\n\r\n* `get_binding_id()` has been renamed to `get_binding` and returns a binding instead of an ID. It also means that internally, the methods should now work with the record and not with the ID.\r\n* The base synchronizers have been renamed from `MagentoImportSynchronizer` to `MagentoImporter` and `MagentoExportSynchronizer` to `MagentoExporter` \r\n* All the specialized importers/exporters have been renamed to `SomethingImporter`, instead of `SomethingImport`\r\n\r\n","created_at":"2015-02-19T13:26:01Z","updated_at":"2015-04-23T11:45:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e18f06c8667b1ccbd1e32da1f16b629e84c1fe0e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/OCA/connector-magento/pulls/85/commits","review_comments_url":"https://api.github.com/repos/OCA/connector-magento/pulls/85/comments","review_comment_url":"https://api.github.com/repos/OCA/connector-magento/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OCA/connector-magento/issues/85/comments","statuses_url":"https://api.github.com/repos/OCA/connector-magento/statuses/c08ecf5b8090217543233cbb7cabcea60c6c65ed","head":{"label":"guewen:8.0-connector_magento-migr","ref":"8.0-connector_magento-migr","sha":"c08ecf5b8090217543233cbb7cabcea60c6c65ed","user":{"login":"guewen","id":417223,"avatar_url":"https://avatars.githubusercontent.com/u/417223?v=3","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},"repo":{"id":21215260,"name":"connector-magento","full_name":"guewen/connector-magento","owner":{"login":"guewen","id":417223,"avatar_url":"https://avatars.githubusercontent.com/u/417223?v=3","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},"private":false,"html_url":"https://github.com/guewen/connector-magento","description":"","fork":true,"url":"https://api.github.com/repos/guewen/connector-magento","forks_url":"https://api.github.com/repos/guewen/connector-magento/forks","keys_url":"https://api.github.com/repos/guewen/connector-magento/keys{/key_id}","collaborators_url":"https://api.github.com/repos/guewen/connector-magento/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/guewen/connector-magento/teams","hooks_url":"https://api.github.com/repos/guewen/connector-magento/hooks","issue_events_url":"https://api.github.com/repos/guewen/connector-magento/issues/events{/number}","events_url":"https://api.github.com/repos/guewen/connector-magento/events","assignees_url":"https://api.github.com/repos/guewen/connector-magento/assignees{/user}","branches_url":"https://api.github.com/repos/guewen/connector-magento/branches{/branch}","tags_url":"https://api.github.com/repos/guewen/connector-magento/tags","blobs_url":"https://api.github.com/repos/guewen/connector-magento/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/guewen/connector-magento/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/guewen/connector-magento/git/refs{/sha}","trees_url":"https://api.github.com/repos/guewen/connector-magento/git/trees{/sha}","statuses_url":"https://api.github.com/repos/guewen/connector-magento/statuses/{sha}","languages_url":"https://api.github.com/repos/guewen/connector-magento/languages","stargazers_url":"https://api.github.com/repos/guewen/connector-magento/stargazers","contributors_url":"https://api.github.com/repos/guewen/connector-magento/contributors","subscribers_url":"https://api.github.com/repos/guewen/connector-magento/subscribers","subscription_url":"https://api.github.com/repos/guewen/connector-magento/subscription","commits_url":"https://api.github.com/repos/guewen/connector-magento/commits{/sha}","git_commits_url":"https://api.github.com/repos/guewen/connector-magento/git/commits{/sha}","comments_url":"https://api.github.com/repos/guewen/connector-magento/comments{/number}","issue_comment_url":"https://api.github.com/repos/guewen/connector-magento/issues/comments{/number}","contents_url":"https://api.github.com/repos/guewen/connector-magento/contents/{+path}","compare_url":"https://api.github.com/repos/guewen/connector-magento/compare/{base}...{head}","merges_url":"https://api.github.com/repos/guewen/connector-magento/merges","archive_url":"https://api.github.com/repos/guewen/connector-magento/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/guewen/connector-magento/downloads","issues_url":"https://api.github.com/repos/guewen/connector-magento/issues{/number}","pulls_url":"https://api.github.com/repos/guewen/connector-magento/pulls{/number}","milestones_url":"https://api.github.com/repos/guewen/connector-magento/milestones{/number}","notifications_url":"https://api.github.com/repos/guewen/connector-magento/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/guewen/connector-magento/labels{/name}","releases_url":"https://api.github.com/repos/guewen/connector-magento/releases{/id}","created_at":"2014-06-25T19:16:33Z","updated_at":"2014-06-25T06:58:33Z","pushed_at":"2015-03-20T08:01:14Z","git_url":"git://github.com/guewen/connector-magento.git","ssh_url":"git@github.com:guewen/connector-magento.git","clone_url":"https://github.com/guewen/connector-magento.git","svn_url":"https://github.com/guewen/connector-magento","homepage":null,"size":15498,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":0,"forks":2,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"OCA:8.0","ref":"8.0","sha":"c748091af979d36e02cdf7d7e773fee81d7ad467","user":{"login":"OCA","id":7600578,"avatar_url":"https://avatars.githubusercontent.com/u/7600578?v=3","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":20919966,"name":"connector-magento","full_name":"OCA/connector-magento","owner":{"login":"OCA","id":7600578,"avatar_url":"https://avatars.githubusercontent.com/u/7600578?v=3","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/connector-magento","description":"Connect Odoo with Magento","fork":false,"url":"https://api.github.com/repos/OCA/connector-magento","forks_url":"https://api.github.com/repos/OCA/connector-magento/forks","keys_url":"https://api.github.com/repos/OCA/connector-magento/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OCA/connector-magento/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OCA/connector-magento/teams","hooks_url":"https://api.github.com/repos/OCA/connector-magento/hooks","issue_events_url":"https://api.github.com/repos/OCA/connector-magento/issues/events{/number}","events_url":"https://api.github.com/repos/OCA/connector-magento/events","assignees_url":"https://api.github.com/repos/OCA/connector-magento/assignees{/user}","branches_url":"https://api.github.com/repos/OCA/connector-magento/branches{/branch}","tags_url":"https://api.github.com/repos/OCA/connector-magento/tags","blobs_url":"https://api.github.com/repos/OCA/connector-magento/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OCA/connector-magento/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OCA/connector-magento/git/refs{/sha}","trees_url":"https://api.github.com/repos/OCA/connector-magento/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OCA/connector-magento/statuses/{sha}","languages_url":"https://api.github.com/repos/OCA/connector-magento/languages","stargazers_url":"https://api.github.com/repos/OCA/connector-magento/stargazers","contributors_url":"https://api.github.com/repos/OCA/connector-magento/contributors","subscribers_url":"https://api.github.com/repos/OCA/connector-magento/subscribers","subscription_url":"https://api.github.com/repos/OCA/connector-magento/subscription","commits_url":"https://api.github.com/repos/OCA/connector-magento/commits{/sha}","git_commits_url":"https://api.github.com/repos/OCA/connector-magento/git/commits{/sha}","comments_url":"https://api.github.com/repos/OCA/connector-magento/comments{/number}","issue_comment_url":"https://api.github.com/repos/OCA/connector-magento/issues/comments{/number}","contents_url":"https://api.github.com/repos/OCA/connector-magento/contents/{+path}","compare_url":"https://api.github.com/repos/OCA/connector-magento/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OCA/connector-magento/merges","archive_url":"https://api.github.com/repos/OCA/connector-magento/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OCA/connector-magento/downloads","issues_url":"https://api.github.com/repos/OCA/connector-magento/issues{/number}","pulls_url":"https://api.github.com/repos/OCA/connector-magento/pulls{/number}","milestones_url":"https://api.github.com/repos/OCA/connector-magento/milestones{/number}","notifications_url":"https://api.github.com/repos/OCA/connector-magento/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OCA/connector-magento/labels{/name}","releases_url":"https://api.github.com/repos/OCA/connector-magento/releases{/id}","created_at":"2014-06-17T10:54:03Z","updated_at":"2015-04-14T13:22:35Z","pushed_at":"2015-04-22T09:09:46Z","git_url":"git://github.com/OCA/connector-magento.git","ssh_url":"git@github.com:OCA/connector-magento.git","clone_url":"https://github.com/OCA/connector-magento.git","svn_url":"https://github.com/OCA/connector-magento","homepage":"http://odoo-magento-connector.com/","size":16437,"stargazers_count":18,"watchers_count":18,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":63,"mirror_url":null,"open_issues_count":23,"forks":63,"open_issues":23,"watchers":18,"default_branch":"8.0"}},"_links":{"self":{"href":"https://api.github.com/repos/OCA/connector-magento/pulls/85"},"html":{"href":"https://github.com/OCA/connector-magento/pull/85"},"issue":{"href":"https://api.github.com/repos/OCA/connector-magento/issues/85"},"comments":{"href":"https://api.github.com/repos/OCA/connector-magento/issues/85/comments"},"review_comments":{"href":"https://api.github.com/repos/OCA/connector-magento/pulls/85/comments"},"review_comment":{"href":"https://api.github.com/repos/OCA/connector-magento/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OCA/connector-magento/pulls/85/commits"},"statuses":{"href":"https://api.github.com/repos/OCA/connector-magento/statuses/c08ecf5b8090217543233cbb7cabcea60c6c65ed"}}}}