Skip to content
Health
54/100
fair
  • Security19/25
    2 minor findings
  • Activity25/25
    Human commit this month
  • Required by5/25
    0 modules depend on it
  • Maturity5/25
    In 1 Odoo series since 19.0

Heuristic over the facts below, not an audit · How it's computed

Security findings
Grave / minor (static analysis)
Required by
0
Modules depending on it
External deps
3 pip · 0 bin
Python packages / system binaries
License
AGPL-3
No conflicts with its dependencies
Folder size
0.14 MB
Module directory on disk
Code analysis 1 migration note 3 models 6 views 2 HTTP endpoints

Description

Connect an Odoo company to a Mercado Libre seller account.

This is the core of the connector. It stores the seller backend, authorizes the application with OAuth 2.0, refreshes access tokens, and receives Mercado Libre notifications. Listing, stock, and sale synchronization live in connector_mercadolibre_product and connector_mercadolibre_sale.

A notification is stored and acknowledged in the HTTP request. The work runs afterwards in an OCA queue job.

Dependencies

Odoo dependencies
Python dependencies
requests, openupgradelib, cachetools
System dependencies
None
Required by
None

Code analysis

Extracted from the source by best-effort static analysis (no code is executed); details may be incomplete.

Views touched 6

XML IDNameModelTypeStatus
mercadolibre_backend_view_form mercadolibre.backend.form mercadolibre.backend form New
mercadolibre_backend_view_list mercadolibre.backend.list mercadolibre.backend list New
mercadolibre_backend_view_search mercadolibre.backend.search mercadolibre.backend search New
mercadolibre_notification_view_form mercadolibre.notification.form mercadolibre.notification form New
mercadolibre_notification_view_list mercadolibre.notification.list mercadolibre.notification list New
mercadolibre_notification_view_search mercadolibre.notification.search mercadolibre.notification search New

HTTP endpoints 2

Route(s)HandlerAuthTypeMethodsFlags
/mercadolibre/notification/<int:backend_id> MercadoLibreController.notification public http GET, POST csrf off sudo
/mercadolibre/oauth/callback MercadoLibreController.oauth_callback user http GET csrf off

Models touched 3

New fields (19)
  • access_token Char
    copy=False groups='connector_mercadolibre.group_mercadolibre_manager'
  • access_token_expires_at Datetime
    copy=False
  • active Boolean
    default=True
  • auth_error Text
    copy=False readonly=True
  • client_id Char
    required=True string='Client ID'
  • client_secret Char
    copy=False groups='connector_mercadolibre.group_mercadolibre_manager' required=True
  • code_verifier Char
    copy=False groups='connector_mercadolibre.group_mercadolibre_manager'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> index=True required=True
  • name Char
    required=True
  • nickname Char
    copy=False readonly=True
  • notification_count Integer
    compute='_compute_notification_count'
  • notification_ids One2many → mercadolibre.notification
    comodel_name='mercadolibre.notification' inverse_name='backend_id'
  • redirect_uri Char
    required=True
  • refresh_token Char
    copy=False groups='connector_mercadolibre.group_mercadolibre_manager'
  • seller_id Char
    copy=False index=True readonly=True string='Seller ID'
  • site_id Selection
    required=True selection='_select_sites'
  • state Selection
    default='draft' required=True selection=[('draft', 'Draft'), ('connected', 'Connected'), ('error', 'Error')] tracking=True
  • user_payload Json
    copy=False groups='connector_mercadolibre.group_mercadolibre_manager' readonly=True
  • versions Selection
    default='user_product' required=True selection='_select_versions'
Public methods (6)
  • action_view_notifications(self)
  • button_connect(self)
  • button_disconnect(self)
  • button_refresh_token(self)
  • cron_refresh_tokens(self)
    @api.model
  • write(self, vals)

New fields (2)
  • error_message Text
    readonly=True
  • state Selection
    default='pending' index=True required=True selection=[('pending', 'Pending'), ('synced', 'Synced'), ('error', 'Error')]
Public methods (3)
  • button_retry(self)
    Reset the binding. Concrete models enqueue the next job.
  • mark_error(self, message)
  • mark_synced(self)

New fields (12)
  • actions Char
  • application_id Char
  • attempts Integer
  • backend_id Many2one → mercadolibre.backend
    comodel_name='mercadolibre.backend' index=True ondelete='cascade' required=True
  • company_id Many2one → res.company
    comodel_name='res.company' index=True related='backend_id.company_id' store=True
  • error_message Text
    readonly=True
  • payload Json
  • resource Char
    required=True
  • sent Datetime
  • state Selection
    default='received' index=True required=True selection=[('received', 'Received'), ('enqueued', 'Enqueued'), ('done', 'Done'), ('skipped', 'Skipped'), ('error', 'Error')]
  • topic Char
    index=True required=True
  • user_id Char
    string='Mercado Libre User'
Public methods (3)
  • button_requeue(self)
  • create_from_payload(self, backend, payload)
    @api.model
  • receive(self, backend_id, payload)
    @api.model
    Store a callback. This method does not call Mercado Libre.