| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/connector-interfaces |
| GIT | |
| GIT | https://github.com/OCA/connector-interfaces.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/connector-interfaces/tree/18.0/connector_importer |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Connector |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, Iván Todorovich, Simone Orsi, oca-ci, Maksym Yankin, thien |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/connector-interfaces |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:08 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/connector: - connector - component - component_event OCA/queue: - queue_job odoo/odoo: - base - base_setup - web - bus - web_tour - html_editor - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
chardet pytz pyyaml requests cachetools |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows to import / update records from files using the connector framework and job queue. To run an import you need at least: * a backend, hosts the global configuration of the import. * a recordset, hosts the configuration of the import for specific models and source * a source, provides the data to import * an import type, describes which models you want to import and how to import them |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
recordset_docs |
Import Recordset Docs | ir.ui.view | qweb | New |
recordset_report |
Import Recordset Report | ir.ui.view | qweb | New |
recordset_report_full |
Import Recordset FUll Report | ir.ui.view | qweb | New |
source_config_summary |
Source config summary | ir.ui.view | qweb | New |
view_import_backend_form |
import.backend | form | New | |
view_import_backend_tree |
import.backend | list | New | |
view_import_recordset_form |
import.recordset | form | New | |
view_import_recordset_search |
import.recordset | search | New | |
view_import_recordset_tree |
import.recordset | list | New | |
view_import_source_csv_form |
import.source.csv form | import.source.csv | group | Inherits view_import_source_form |
view_import_source_csv_tree |
import.source.csv tree | import.source.csv | list | New |
view_import_source_form |
import.source base form | import.source | form | New |
view_import_type_form |
connector_importer: import.type.csv form | import.type | form | New |
view_import_type_tree |
import.type | list | New |
cron_id
Many2one → ir.cron
domain=<expr>
string='Related cron'
args: 'ir.cron'
cron_interval_number
Integer
cron_interval_type
Selection
selection='_select_interval_type'
string='Interval type'
cron_mode
Boolean
cron_start_date
Datetime
create(self, vals_list)
get_cron_vals(self)
run_cron(self)
write(self, vals)
cron_cleanup_keep
Integer
help='If this value is greater than 0 a cron will cleanup old recordsets and keep only the latest N records matching this value.'
cron_master_recordset_id
Many2one → import.recordset
help='If an existing recordset is selected it will be used to create a new recordset each time the cron runs. \nIn this way you can keep every import session isolated. \nIf none, all recordsets will run.'
string='Master recordset'
args: 'import.recordset'
debug_mode
Boolean
help="Enabling debug mode causes the import to run in real time, without using any job queue. Make sure you don't do this in production!"
args: 'Debug mode?'
job_running
Boolean
compute='_compute_job_running'
help='Tells you if a job is running for this backend.'
readonly=True
name
Char
required=True
notes
Text
recordset_ids
One2many → import.recordset
string='Record Sets'
args: 'import.recordset', 'backend_id'
version
Selection
required=True
selection='_select_version'
button_complete_jobs(self)
cron_cleanup_recordsets(self)
run_all(self)
run_cron(self, backend_id)
unlink(self)
backend_id
Many2one → import.backend
readonly=True
related='recordset_id.backend_id'
string='Backend'
args: 'import.backend'
date
Datetime
default=fields.Datetime.now
args: 'Import date'
jsondata_file
Binary
attachment=True
recordset_id
Many2one → import.recordset
string='Recordset'
args: 'import.recordset'
debug_mode(self)
get_data(self)
import_record(self, importer_config)
run_import(self)
set_data(self, adict)
backend_id
Many2one → import.backend
string='Import Backend'
args: 'import.backend'
create_date
Datetime
docs_html
Html
compute='_compute_docs_html'
string='Docs'
full_report_url
Char
compute='_compute_full_report_url'
import_type_id
Many2one → import.type
comodel_name='import.type'
required=True
string='Import type'
importable_model_ids
Many2many → ir.model
column1='recordset_id'
column2='model_id'
comodel_name='ir.model'
compute='_compute_importable_model_ids'
help='Technical field'
relation='import_recordset_importable_model'
jobs_global_state
Selection
compute='_compute_jobs_global_state'
default='no_job'
help='Tells you if a job is running for this recordset. If any of the sub jobs is not DONE or FAILED we assume the global state is PENDING.'
selection=<expr>
last_run_on
Datetime
name
Char
compute='_compute_name'
notes
Html
help='Useful info for your users'
override_existing
Boolean
default=True
help='Enable to update existing items w/ new values. If disabled, matching records will be skipped.'
string='Override existing items'
record_ids
One2many → import.record
string='Records'
args: 'import.record', 'recordset_id'
report_data
Binary
attachment=True
report_file
Binary
report_filename
Char
report_html
Html
compute='_compute_report_html'
args: 'Report summary'
sequence
Integer
default=10
help='Sequence for the handle.'
server_action_ids
Many2many → ir.actions.server
help="Execute a server action when done. You can link a server action per model or a single one for import.recordset. In that case you'll have to use low level api to get the records that were processed. Eg: `get_report_by_model`."
string='Executre server actions'
args: 'ir.actions.server'
server_action_importable_model_ids
Many2many → ir.model
column1='recordset_id'
column2='model_id'
comodel_name='ir.model'
compute='_compute_importable_model_ids'
help='Technical field'
relation='import_recordset_server_action_importable_model'
server_action_trigger_on
Selection
default='never'
selection=[('never', 'Never'), ('last_importer_done', 'End of the whole import'), ('each_importer_done', 'End of each importer session')]
shared_data
Binary
attachment=True
available_importers(self)
debug_mode(self)
generate_report(self)
get_records(self)
get_report(self)
get_report_by_model(self, model_name=None)
get_shared(self)
import_recordset(self)
run_import(self)
set_report(self, values, reset=False)
set_shared(self, values, reset=False)
chunk_size
Integer
default=500
required=True
string='Chunks Size'
config_summary
Html
compute='_compute_config_summary'
name
Char
compute='_compute_name'
create(self, vals_list)
get_config_view_id(self)
get_lines(self)
get_reporter(self)
source_config_summary
Html
compute='_compute_source_config_summary'
readonly=True
source_id
Integer
required=False
string='Source ID'
source_model
Selection
selection='_selection_source_ref_id'
string='Source type'
source_ref_id
Reference
compute='_compute_source_ref_id'
selection='_selection_source_ref_id'
store=False
string='Source'
get_source(self)
open_source_config(self)
csv_delimiter
Char
default=';'
string='CSV delimiter'
csv_encoding
Char
string='CSV Encoding'
csv_file
Binary
csv_filename
Char
csv_filesize
Char
compute='_compute_csv_filesize'
readonly=True
string='CSV filesize'
csv_path
Char
csv_quotechar
Char
default='"'
string='CSV quotechar'
csv_rows_from_to
Char
string='CSV use only a slice of the available lines. Format: $from:$to. NOTE: recommended only for debug/test purpose.'
example_file_ext_id
Char
help="You can define example file by creating attachments with an external ID matching the 'import.source.csv' record external ID:\n\t${import.source.csv.ExtID}_example_file\n\nYou can also specify your own external ID by filling this field."
example_file_url
Char
compute='_compute_example_file_url'
string='Download example file'
No public methods.
description
Text
key
Char
copy=False
help='Unique mnemonic identifier'
required=True
name
Char
help='A meaningful human-friendly name'
required=True
options
Text
help='YAML configuration'
use_job
Boolean
default=True
help='For each importer used in the settings, one job will be spawned. Untick the box if an importer depends on the result of a previous one (for instance to link a record to the previously created one).'
available_importers(self)
copy_data(self, default=None)
job_id
Many2one → queue.job
index=True
readonly=True
string='Job'
args: 'queue.job'
job_state
Selection
index=True
related='job_id.state'
has_job(self)
job_done(self)
unlink(self)
No new fields.
Public methods (4)report_add_line(self, writer, item)
report_do(self, recordset, fileout, **options)
report_get_columns(self, recordset, orig_content, extra_keys=None, delimiter=';', quotechar='"')
report_get_writer(self, fileout, columns, delimiter=';', quotechar='"')
No new fields.
Public methods (4)report_do(self, recordset, fileout, **options)
report_finalize(self, recordset, fileout, **options)
report_get(self, recordset, **options)
report_get_metadata(self, recordset, **options)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/connector-interfaces |
| GIT | |
| GIT | https://github.com/OCA/connector-interfaces.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/connector-interfaces/tree/17.0/connector_importer |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Connector |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | OCA-git-bot, oca-ci, r.perez |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/connector-interfaces |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:03 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/connector: - connector - component - component_event OCA/queue: - queue_job odoo/odoo: - base - base_setup - web - bus - web_tour - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
chardet pytz pyyaml requests cachetools |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows to import / update records from files using the connector framework (i.e. mappers) and job queues. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
recordset_docs |
Import Recordset Docs | ir.ui.view | qweb | New |
recordset_report |
Import Recordset Report | ir.ui.view | qweb | New |
recordset_report_full |
Import Recordset FUll Report | ir.ui.view | qweb | New |
source_config_summary |
Source config summary | ir.ui.view | qweb | New |
view_import_backend_form |
import.backend | form | New | |
view_import_backend_tree |
import.backend | tree | New | |
view_import_recordset_form |
import.recordset | form | New | |
view_import_recordset_search |
import.recordset | search | New | |
view_import_recordset_tree |
import.recordset | tree | New | |
view_import_source_csv_form |
import.source.csv form | import.source.csv | group | Inherits view_import_source_form |
view_import_source_csv_tree |
import.source.csv tree | import.source.csv | tree | New |
view_import_source_form |
import.source base form | import.source | form | New |
view_import_type_form |
connector_importer: import.type.csv form | import.type | form | New |
view_import_type_tree |
import.type | tree | New |
cron_id
Many2one → ir.cron
domain=<expr>
string='Related cron'
args: 'ir.cron'
cron_interval_number
Integer
cron_interval_type
Selection
selection='_select_interval_type'
string='Interval type'
cron_mode
Boolean
cron_start_date
Datetime
create(self, vals_list)
get_cron_vals(self)
run_cron(self)
write(self, vals)
cron_cleanup_keep
Integer
help='If this value is greater than 0 a cron will cleanup old recordsets and keep only the latest N records matching this value.'
cron_master_recordset_id
Many2one → import.recordset
help='If an existing recordset is selected it will be used to create a new recordset each time the cron runs. \nIn this way you can keep every import session isolated. \nIf none, all recordsets will run.'
string='Master recordset'
args: 'import.recordset'
debug_mode
Boolean
help="Enabling debug mode causes the import to run in real time, without using any job queue. Make sure you don't do this in production!"
args: 'Debug mode?'
job_running
Boolean
compute='_compute_job_running'
help='Tells you if a job is running for this backend.'
readonly=True
name
Char
required=True
notes
Text
recordset_ids
One2many → import.recordset
string='Record Sets'
args: 'import.recordset', 'backend_id'
version
Selection
required=True
selection='_select_version'
button_complete_jobs(self)
cron_cleanup_recordsets(self)
run_all(self)
run_cron(self, backend_id)
unlink(self)
backend_id
Many2one → import.backend
readonly=True
related='recordset_id.backend_id'
string='Backend'
args: 'import.backend'
date
Datetime
default=fields.Datetime.now
args: 'Import date'
jsondata_file
Binary
attachment=True
recordset_id
Many2one → import.recordset
string='Recordset'
args: 'import.recordset'
debug_mode(self)
get_data(self)
import_record(self, importer_config)
run_import(self)
set_data(self, adict)
backend_id
Many2one → import.backend
string='Import Backend'
args: 'import.backend'
create_date
Datetime
docs_html
Html
compute='_compute_docs_html'
string='Docs'
full_report_url
Char
compute='_compute_full_report_url'
import_type_id
Many2one → import.type
comodel_name='import.type'
required=True
string='Import type'
importable_model_ids
Many2many → ir.model
column1='recordset_id'
column2='model_id'
comodel_name='ir.model'
compute='_compute_importable_model_ids'
help='Technical field'
relation='import_recordset_importable_model'
jobs_global_state
Selection
compute='_compute_jobs_global_state'
default='no_job'
help='Tells you if a job is running for this recordset. If any of the sub jobs is not DONE or FAILED we assume the global state is PENDING.'
selection=<expr>
last_run_on
Datetime
name
Char
compute='_compute_name'
notes
Html
help='Useful info for your users'
override_existing
Boolean
default=True
help='Enable to update existing items w/ new values. If disabled, matching records will be skipped.'
string='Override existing items'
record_ids
One2many → import.record
string='Records'
args: 'import.record', 'recordset_id'
report_data
Binary
attachment=True
report_file
Binary
report_filename
Char
report_html
Html
compute='_compute_report_html'
args: 'Report summary'
sequence
Integer
default=10
help='Sequence for the handle.'
server_action_ids
Many2many → ir.actions.server
help="Execute a server action when done. You can link a server action per model or a single one for import.recordset. In that case you'll have to use low level api to get the records that were processed. Eg: `get_report_by_model`."
string='Executre server actions'
args: 'ir.actions.server'
server_action_importable_model_ids
Many2many → ir.model
column1='recordset_id'
column2='model_id'
comodel_name='ir.model'
compute='_compute_importable_model_ids'
help='Technical field'
relation='import_recordset_server_action_importable_model'
server_action_trigger_on
Selection
default='never'
selection=[('never', 'Never'), ('last_importer_done', 'End of the whole import'), ('each_importer_done', 'End of each importer session')]
shared_data
Binary
attachment=True
available_importers(self)
debug_mode(self)
generate_report(self)
get_records(self)
get_report(self)
get_report_by_model(self, model_name=None)
get_shared(self)
import_recordset(self)
run_import(self)
set_report(self, values, reset=False)
set_shared(self, values, reset=False)
chunk_size
Integer
default=500
required=True
string='Chunks Size'
config_summary
Html
compute='_compute_config_summary'
name
Char
compute='_compute_name'
create(self, vals)
get_config_view_id(self)
get_lines(self)
get_reporter(self)
source_config_summary
Html
compute='_compute_source_config_summary'
readonly=True
source_id
Integer
required=False
string='Source ID'
source_model
Selection
selection='_selection_source_ref_id'
string='Source type'
source_ref_id
Reference
compute='_compute_source_ref_id'
selection='_selection_source_ref_id'
store=False
string='Source'
get_source(self)
open_source_config(self)
csv_delimiter
Char
default=';'
string='CSV delimiter'
csv_encoding
Char
string='CSV Encoding'
csv_file
Binary
csv_filename
Char
csv_filesize
Char
compute='_compute_csv_filesize'
readonly=True
string='CSV filesize'
csv_path
Char
csv_quotechar
Char
default='"'
string='CSV quotechar'
csv_rows_from_to
Char
string='CSV use only a slice of the available lines. Format: $from:$to. NOTE: recommended only for debug/test purpose.'
example_file_ext_id
Char
help="You can define example file by creating attachments with an external ID matching the 'import.source.csv' record external ID:\n\t${import.source.csv.ExtID}_example_file\n\nYou can also specify your own external ID by filling this field."
example_file_url
Char
compute='_compute_example_file_url'
string='Download example file'
No public methods.
description
Text
key
Char
copy=False
help='Unique mnemonic identifier'
required=True
name
Char
help='A meaningful human-friendly name'
required=True
options
Text
help='YAML configuration'
use_job
Boolean
default=True
help='For each importer used in the settings, one job will be spawned. Untick the box if an importer depends on the result of a previous one (for instance to link a record to the previously created one).'
available_importers(self)
copy_data(self, default=None)
job_id
Many2one → queue.job
index=True
readonly=True
string='Job'
args: 'queue.job'
job_state
Selection
index=True
related='job_id.state'
has_job(self)
job_done(self)
unlink(self)
No new fields.
Public methods (4)report_add_line(self, writer, item)
report_do(self, recordset, fileout, **options)
report_get_columns(self, recordset, orig_content, extra_keys=None, delimiter=';', quotechar='"')
report_get_writer(self, fileout, columns, delimiter=';', quotechar='"')
No new fields.
Public methods (4)report_do(self, recordset, fileout, **options)
report_finalize(self, recordset, fileout, **options)
report_get(self, recordset, **options)
report_get_metadata(self, recordset, **options)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/connector-interfaces |
| GIT | |
| GIT | https://github.com/OCA/connector-interfaces.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/connector-interfaces/tree/16.0/connector_importer |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Connector |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | Jacques-Etienne Baudoux, Weblate, OCA-git-bot, Simone Orsi, oca-ci, Ricardoalso, thien |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/connector-interfaces |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:41 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/connector: - connector - component - component_event OCA/queue: - queue_job odoo/odoo: - base - base_setup - web - bus - web_tour - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
chardet pytz pyyaml requests cachetools |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
recordset_docs |
Import Recordset Docs | ir.ui.view | qweb | New |
recordset_report |
Import Recordset Report | ir.ui.view | qweb | New |
recordset_report_full |
Import Recordset FUll Report | ir.ui.view | qweb | New |
source_config_summary |
Source config summary | ir.ui.view | qweb | New |
view_import_backend_form |
import.backend | form | New | |
view_import_backend_tree |
import.backend | tree | New | |
view_import_recordset_form |
import.recordset | form | New | |
view_import_recordset_search |
import.recordset | search | New | |
view_import_recordset_tree |
import.recordset | tree | New | |
view_import_source_csv_form |
import.source.csv form | import.source.csv | group | Inherits view_import_source_form |
view_import_source_csv_tree |
import.source.csv tree | import.source.csv | tree | New |
view_import_source_form |
import.source base form | import.source | form | New |
view_import_type_form |
connector_importer: import.type.csv form | import.type | form | New |
view_import_type_tree |
import.type | tree | New |
cron_id
Many2one → ir.cron
domain=<expr>
string='Related cron'
args: 'ir.cron'
cron_interval_number
Integer
cron_interval_type
Selection
selection='_select_interval_type'
string='Interval type'
cron_mode
Boolean
cron_start_date
Datetime
create(self, vals_list)
get_cron_vals(self)
run_cron(self)
write(self, vals)
cron_cleanup_keep
Integer
help='If this value is greater than 0 a cron will cleanup old recordsets and keep only the latest N records matching this value.'
cron_master_recordset_id
Many2one → import.recordset
help='If an existing recordset is selected it will be used to create a new recordset each time the cron runs. \nIn this way you can keep every import session isolated. \nIf none, all recordsets will run.'
string='Master recordset'
args: 'import.recordset'
debug_mode
Boolean
help="Enabling debug mode causes the import to run in real time, without using any job queue. Make sure you don't do this in production!"
args: 'Debug mode?'
job_running
Boolean
compute='_compute_job_running'
help='Tells you if a job is running for this backend.'
readonly=True
name
Char
required=True
notes
Text
recordset_ids
One2many → import.recordset
string='Record Sets'
args: 'import.recordset', 'backend_id'
version
Selection
required=True
selection='_select_version'
button_complete_jobs(self)
cron_cleanup_recordsets(self)
run_all(self)
run_cron(self, backend_id)
unlink(self)
backend_id
Many2one → import.backend
readonly=True
related='recordset_id.backend_id'
string='Backend'
args: 'import.backend'
date
Datetime
default=fields.Datetime.now
args: 'Import date'
jsondata_file
Binary
attachment=True
recordset_id
Many2one → import.recordset
string='Recordset'
args: 'import.recordset'
debug_mode(self)
get_data(self)
import_record(self, importer_config)
run_import(self)
set_data(self, adict)
backend_id
Many2one → import.backend
string='Import Backend'
args: 'import.backend'
create_date
Datetime
docs_html
Html
compute='_compute_docs_html'
string='Docs'
full_report_url
Char
compute='_compute_full_report_url'
import_type_id
Many2one → import.type
comodel_name='import.type'
required=True
string='Import type'
importable_model_ids
Many2many → ir.model
column1='recordset_id'
column2='model_id'
comodel_name='ir.model'
compute='_compute_importable_model_ids'
help='Technical field'
relation='import_recordset_importable_model'
jobs_global_state
Selection
compute='_compute_jobs_global_state'
default='no_job'
help='Tells you if a job is running for this recordset. If any of the sub jobs is not DONE or FAILED we assume the global state is PENDING.'
selection=<expr>
last_run_on
Datetime
name
Char
compute='_compute_name'
notes
Html
help='Useful info for your users'
override_existing
Boolean
default=True
help='Enable to update existing items w/ new values. If disabled, matching records will be skipped.'
string='Override existing items'
record_ids
One2many → import.record
string='Records'
args: 'import.record', 'recordset_id'
report_data
Binary
attachment=True
report_file
Binary
report_filename
Char
report_html
Html
compute='_compute_report_html'
args: 'Report summary'
sequence
Integer
default=10
help='Sequence for the handle.'
server_action_ids
Many2many → ir.actions.server
help="Execute a server action when done. You can link a server action per model or a single one for import.recordset. In that case you'll have to use low level api to get the records that were processed. Eg: `get_report_by_model`."
string='Executre server actions'
args: 'ir.actions.server'
server_action_importable_model_ids
Many2many → ir.model
column1='recordset_id'
column2='model_id'
comodel_name='ir.model'
compute='_compute_importable_model_ids'
help='Technical field'
relation='import_recordset_server_action_importable_model'
server_action_trigger_on
Selection
default='never'
selection=[('never', 'Never'), ('last_importer_done', 'End of the whole import'), ('each_importer_done', 'End of each importer session')]
shared_data
Binary
attachment=True
available_importers(self)
debug_mode(self)
generate_report(self)
get_records(self)
get_report(self)
get_report_by_model(self, model_name=None)
get_shared(self)
import_recordset(self)
run_import(self)
set_report(self, values, reset=False)
set_shared(self, values, reset=False)
chunk_size
Integer
default=500
required=True
string='Chunks Size'
config_summary
Html
compute='_compute_config_summary'
name
Char
compute='_compute_name'
create(self, vals)
get_config_view_id(self)
get_lines(self)
get_reporter(self)
source_config_summary
Html
compute='_compute_source_config_summary'
readonly=True
source_id
Integer
required=False
string='Source ID'
source_model
Selection
selection='_selection_source_ref_id'
string='Source type'
source_ref_id
Reference
compute='_compute_source_ref_id'
selection='_selection_source_ref_id'
store=False
string='Source'
get_source(self)
open_source_config(self)
csv_delimiter
Char
default=';'
string='CSV delimiter'
csv_encoding
Char
string='CSV Encoding'
csv_file
Binary
csv_filename
Char
csv_filesize
Char
compute='_compute_csv_filesize'
readonly=True
string='CSV filesize'
csv_path
Char
csv_quotechar
Char
default='"'
string='CSV quotechar'
csv_rows_from_to
Char
string='CSV use only a slice of the available lines. Format: $from:$to. NOTE: recommended only for debug/test purpose.'
example_file_ext_id
Char
help="You can define example file by creating attachments with an external ID matching the 'import.source.csv' record external ID:\n\t${import.source.csv.ExtID}_example_file\n\nYou can also specify your own external ID by filling this field."
example_file_url
Char
compute='_compute_example_file_url'
string='Download example file'
No public methods.
description
Text
key
Char
copy=False
help='Unique mnemonic identifier'
required=True
name
Char
help='A meaningful human-friendly name'
required=True
options
Text
help='YAML configuration'
use_job
Boolean
default=True
help='For each importer used in the settings, one job will be spawned. Untick the box if an importer depends on the result of a previous one (for instance to link a record to the previously created one).'
available_importers(self)
copy_data(self, default=None)
job_id
Many2one → queue.job
index=True
readonly=True
string='Job'
args: 'queue.job'
job_state
Selection
index=True
related='job_id.state'
has_job(self)
job_done(self)
unlink(self)
No new fields.
Public methods (4)report_add_line(self, writer, item)
report_do(self, recordset, fileout, **options)
report_get_columns(self, recordset, orig_content, extra_keys=None, delimiter=';', quotechar='"')
report_get_writer(self, fileout, columns, delimiter=';', quotechar='"')
No new fields.
Public methods (4)report_do(self, recordset, fileout, **options)
report_finalize(self, recordset, fileout, **options)
report_get(self, recordset, **options)
report_get_metadata(self, recordset, **options)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/connector-interfaces |
| GIT | |
| GIT | https://github.com/OCA/connector-interfaces.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/connector-interfaces/tree/15.0/connector_importer |
| VERSION | |
| VERSION | 1.7.0 |
| CATEGORY | |
| CATEGORY | Connector |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | Sébastien Alix, Weblate, OCA-git-bot, Simone Orsi, oca-ci, dhx |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/connector-interfaces |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:30 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/connector: - connector - component - component_event OCA/queue: - queue_job odoo/odoo: - base - base_setup - web - bus - web_tour - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
chardet pytz pyyaml requests cachetools |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
recordset_docs |
Import Recordset Docs | ir.ui.view | qweb | New |
recordset_report |
Import Recordset Report | ir.ui.view | qweb | New |
recordset_report_full |
Import Recordset FUll Report | ir.ui.view | qweb | New |
source_config_summary |
Source config summary | ir.ui.view | qweb | New |
view_import_backend_form |
import.backend | form | New | |
view_import_backend_tree |
import.backend | tree | New | |
view_import_recordset_form |
import.recordset | form | New | |
view_import_recordset_search |
import.recordset | search | New | |
view_import_recordset_tree |
import.recordset | tree | New | |
view_import_source_csv_form |
import.source.csv form | import.source.csv | group | Inherits view_import_source_form |
view_import_source_csv_tree |
import.source.csv tree | import.source.csv | tree | New |
view_import_source_form |
import.source base form | import.source | form | New |
view_import_type_form |
connector_importer: import.type.csv form | import.type | form | New |
view_import_type_tree |
import.type | tree | New |
cron_id
Many2one → ir.cron
domain=<expr>
string='Related cron'
args: 'ir.cron'
cron_interval_number
Integer
cron_interval_type
Selection
selection='_select_interval_type'
string='Interval type'
cron_mode
Boolean
cron_start_date
Datetime
create(self, vals_list)
get_cron_vals(self)
run_cron(self)
write(self, vals)
cron_cleanup_keep
Integer
help='If this value is greater than 0 a cron will cleanup old recordsets and keep only the latest N records matching this value.'
cron_master_recordset_id
Many2one → import.recordset
help='If an existing recordset is selected it will be used to create a new recordset each time the cron runs. \nIn this way you can keep every import session isolated. \nIf none, all recordsets will run.'
string='Master recordset'
args: 'import.recordset'
debug_mode
Boolean
help="Enabling debug mode causes the import to run in real time, without using any job queue. Make sure you don't do this in production!"
args: 'Debug mode?'
job_running
Boolean
compute='_compute_job_running'
help='Tells you if a job is running for this backend.'
readonly=True
name
Char
required=True
notes
Text
recordset_ids
One2many → import.recordset
string='Record Sets'
args: 'import.recordset', 'backend_id'
version
Selection
required=True
selection='_select_version'
button_complete_jobs(self)
cron_cleanup_recordsets(self)
run_all(self)
run_cron(self, backend_id)
unlink(self)
backend_id
Many2one → import.backend
readonly=True
related='recordset_id.backend_id'
string='Backend'
args: 'import.backend'
date
Datetime
default=fields.Datetime.now
args: 'Import date'
jsondata_file
Binary
attachment=True
recordset_id
Many2one → import.recordset
string='Recordset'
args: 'import.recordset'
debug_mode(self)
get_data(self)
import_record(self, importer_config)
run_import(self)
set_data(self, adict)
backend_id
Many2one → import.backend
string='Import Backend'
args: 'import.backend'
create_date
Datetime
docs_html
Html
compute='_compute_docs_html'
string='Docs'
full_report_url
Char
compute='_compute_full_report_url'
import_type_id
Many2one → import.type
comodel_name='import.type'
required=True
string='Import type'
importable_model_ids
Many2many → ir.model
column1='recordset_id'
column2='model_id'
comodel_name='ir.model'
compute='_compute_importable_model_ids'
help='Technical field'
relation='import_recordset_importable_model'
jobs_global_state
Selection
compute='_compute_jobs_global_state'
default='no_job'
help='Tells you if a job is running for this recordset. If any of the sub jobs is not DONE or FAILED we assume the global state is PENDING.'
selection=<expr>
last_run_on
Datetime
name
Char
compute='_compute_name'
notes
Html
help='Useful info for your users'
override_existing
Boolean
default=True
help='Enable to update existing items w/ new values. If disabled, matching records will be skipped.'
string='Override existing items'
record_ids
One2many → import.record
string='Records'
args: 'import.record', 'recordset_id'
report_file
Binary
report_filename
Char
report_html
Html
compute='_compute_report_html'
args: 'Report summary'
sequence
Integer
default=10
help='Sequence for the handle.'
server_action_ids
Many2many → ir.actions.server
help="Execute a server action when done. You can link a server action per model or a single one for import.recordset. In that case you'll have to use low level api to get the records that were processed. Eg: `get_report_by_model`."
string='Executre server actions'
args: 'ir.actions.server'
server_action_importable_model_ids
Many2many → ir.model
column1='recordset_id'
column2='model_id'
comodel_name='ir.model'
compute='_compute_importable_model_ids'
help='Technical field'
relation='import_recordset_server_action_importable_model'
server_action_trigger_on
Selection
default='never'
selection=[('never', 'Never'), ('last_importer_done', 'End of the whole import'), ('each_importer_done', 'End of each importer session')]
available_importers(self)
debug_mode(self)
generate_report(self)
get_records(self)
get_report(self)
get_report_by_model(self, model_name=None)
get_shared(self)
import_recordset(self)
run_import(self)
set_report(self, values, reset=False)
set_shared(self, values, reset=False)
chunk_size
Integer
default=500
required=True
string='Chunks Size'
config_summary
Html
compute='_compute_config_summary'
name
Char
compute='_compute_name'
create(self, vals)
get_config_view_id(self)
get_lines(self)
get_reporter(self)
source_config_summary
Html
compute='_compute_source_config_summary'
readonly=True
source_id
Integer
required=False
string='Source ID'
source_model
Selection
selection='_selection_source_ref_id'
string='Source type'
source_ref_id
Reference
compute='_compute_source_ref_id'
selection='_selection_source_ref_id'
store=False
string='Source'
get_source(self)
open_source_config(self)
csv_delimiter
Char
default=';'
string="CSV delimiter ('\\t' will be replaced with a tab character)"
csv_encoding
Char
string='CSV Encoding'
csv_file
Binary
csv_filename
Char
csv_filesize
Char
compute='_compute_csv_filesize'
readonly=True
string='CSV filesize'
csv_path
Char
csv_quotechar
Char
default='"'
string='CSV quotechar'
csv_rows_from_to
Char
string='CSV use only a slice of the available lines. Format: $from:$to. NOTE: recommended only for debug/test purpose.'
example_file_ext_id
Char
help="You can define example file by creating attachments with an external ID matching the 'import.source.csv' record external ID:\n\t${import.source.csv.ExtID}_example_file\n\nYou can also specify your own external ID by filling this field."
example_file_url
Char
compute='_compute_example_file_url'
string='Download example file'
create(self, vals_list)
write(self, vals)
description
Text
key
Char
copy=False
help='Unique mnemonic identifier'
required=True
name
Char
help='A meaningful human-friendly name'
required=True
options
Text
help='YAML configuration'
settings
Text
help='\n # comment me\n product.template::template.importer.component.name\n product.product::product.importer.component.name\n # another one\n product.supplierinfo::supplierinfo.importer.component.name\n '
required=False
string='Legacy Settings'
use_job
Boolean
default=True
help='For each importer used in the settings, one job will be spawned. Untick the box if an importer depends on the result of a previous one (for instance to link a record to the previously created one).'
available_importers(self)
available_models(self)
copy_data(self, default=None)
job_id
Many2one → queue.job
readonly=True
string='Job'
args: 'queue.job'
job_state
Selection
index=True
related='job_id.state'
has_job(self)
job_done(self)
unlink(self)
No new fields.
Public methods (4)report_add_line(self, writer, item)
report_do(self, recordset, fileout, **options)
report_get_columns(self, recordset, orig_content, extra_keys=None, delimiter=';', quotechar='"')
report_get_writer(self, fileout, columns, delimiter=';', quotechar='"')
No new fields.
Public methods (4)report_do(self, recordset, fileout, **options)
report_finalize(self, recordset, fileout, **options)
report_get(self, recordset, **options)
report_get_metadata(self, recordset, **options)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/connector-interfaces |
| GIT | |
| GIT | https://github.com/OCA/connector-interfaces.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/connector-interfaces/tree/14.0/connector_importer |
| VERSION | |
| VERSION | 2.8.0 |
| CATEGORY | |
| CATEGORY | Connector |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | oca-travis, Weblate, OCA-git-bot, Simone Orsi, oca-ci, Kitti U, Ricardoalso |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/connector-interfaces |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:40:51 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/connector: - connector - component - component_event OCA/queue: - queue_job odoo/odoo: - base - base_setup - web - bus - web_tour - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
chardet pytz pyyaml requests cachetools |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
recordset_docs |
Import Recordset Docs | ir.ui.view | qweb | New |
recordset_report |
Import Recordset Report | ir.ui.view | qweb | New |
recordset_report_full |
Import Recordset FUll Report | ir.ui.view | qweb | New |
source_config_summary |
Source config summary | ir.ui.view | qweb | New |
view_import_backend_form |
import.backend | form | New | |
view_import_backend_tree |
import.backend | tree | New | |
view_import_recordset_form |
import.recordset | form | New | |
view_import_recordset_search |
import.recordset | search | New | |
view_import_recordset_tree |
import.recordset | tree | New | |
view_import_source_csv_form |
import.source.csv form | import.source.csv | group | Inherits view_import_source_form |
view_import_source_csv_tree |
import.source.csv tree | import.source.csv | tree | New |
view_import_source_form |
import.source base form | import.source | form | New |
view_import_type_form |
connector_importer: import.type.csv form | import.type | form | New |
view_import_type_tree |
import.type | tree | New |
cron_id
Many2one → ir.cron
domain=<expr>
string='Related cron'
args: 'ir.cron'
cron_interval_number
Integer
cron_interval_type
Selection
selection='_select_interval_type'
string='Interval type'
cron_mode
Boolean
cron_start_date
Datetime
create(self, vals_list)
get_cron_vals(self)
run_cron(self)
write(self, vals)
cron_cleanup_keep
Integer
help='If this value is greater than 0 a cron will cleanup old recordsets and keep only the latest N records matching this value.'
string='Cron cleanup keep'
cron_master_recordset_id
Many2one → import.recordset
help='If an existing recordset is selected it will be used to create a new recordset each time the cron runs. \nIn this way you can keep every import session isolated. \nIf none, all recordsets will run.'
string='Master recordset'
args: 'import.recordset'
debug_mode
Boolean
help="Enabling debug mode causes the import to run in real time, without using any job queue. Make sure you don't do this in production!"
args: 'Debug mode?'
job_running
Boolean
compute='_compute_job_running'
help='Tells you if a job is running for this backend.'
readonly=True
args: 'Job running'
name
Char
required=True
notes
Text
recordset_ids
One2many → import.recordset
string='Record Sets'
args: 'import.recordset', 'backend_id'
version
Selection
required=True
selection='_select_version'
string='Version'
button_complete_jobs(self)
cron_cleanup_recordsets(self)
run_all(self)
run_cron(self, backend_id)
unlink(self)
backend_id
Many2one → import.backend
readonly=True
related='recordset_id.backend_id'
string='Backend'
args: 'import.backend'
date
Datetime
default=fields.Datetime.now
args: 'Import date'
jsondata_file
Binary
attachment=True
recordset_id
Many2one → import.recordset
string='Recordset'
args: 'import.recordset'
debug_mode(self)
get_data(self)
import_record(self, importer_config)
run_import(self)
set_data(self, adict)
backend_id
Many2one → import.backend
string='Import Backend'
args: 'import.backend'
create_date
Datetime
docs_html
Html
compute='_compute_docs_html'
string='Docs'
full_report_url
Char
compute='_compute_full_report_url'
args: 'Full report url'
import_type_id
Many2one → import.type
comodel_name='import.type'
required=True
string='Import type'
importable_model_ids
Many2many → ir.model
column1='recordset_id'
column2='model_id'
comodel_name='ir.model'
compute='_compute_importable_model_ids'
help='Technical field'
relation='import_recordset_importable_model'
jobs_global_state
Selection
compute='_compute_jobs_global_state'
default='no_job'
help='Tells you if a job is running for this recordset. If any of the sub jobs is not DONE or FAILED we assume the global state is PENDING.'
selection=<expr>
string='Jobs global state'
last_run_on
Datetime
name
Char
compute='_compute_name'
string='Name'
notes
Html
help='Useful info for your users'
args: 'Notes'
override_existing
Boolean
default=True
help='Enable to update existing items w/ new values. If disabled, matching records will be skipped.'
string='Override existing items'
record_ids
One2many → import.record
string='Records'
args: 'import.record', 'recordset_id'
report_file
Binary
report_filename
Char
report_html
Html
compute='_compute_report_html'
args: 'Report summary'
sequence
Integer
default=10
help='Sequence for the handle.'
args: 'Sequence'
server_action_ids
Many2many → ir.actions.server
help="Execute a server action when done. You can link a server action per model or a single one for import.recordset. In that case you'll have to use low level api to get the records that were processed. Eg: `get_report_by_model`."
string='Executre server actions'
args: 'ir.actions.server'
server_action_importable_model_ids
Many2many → ir.model
column1='recordset_id'
column2='model_id'
comodel_name='ir.model'
compute='_compute_importable_model_ids'
help='Technical field'
relation='import_recordset_server_action_importable_model'
server_action_trigger_on
Selection
default='never'
selection=[('never', 'Never'), ('last_importer_done', 'End of the whole import'), ('each_importer_done', 'End of each importer session')]
available_importers(self)
debug_mode(self)
generate_report(self)
get_records(self)
get_report(self)
get_report_by_model(self, model_name=None)
get_shared(self)
import_recordset(self)
run_import(self)
set_report(self, values, reset=False)
set_shared(self, values, reset=False)
chunk_size
Integer
default=500
required=True
string='Chunks Size'
config_summary
Html
compute='_compute_config_summary'
name
Char
compute='_compute_name'
create(self, vals)
get_config_view_id(self)
get_lines(self)
get_reporter(self)
source_config_summary
Html
compute='_compute_source_config_summary'
readonly=True
source_id
Integer
required=False
string='Source ID'
source_model
Selection
selection='_selection_source_ref_id'
string='Source type'
source_ref_id
Reference
compute='_compute_source_ref_id'
selection='_selection_source_ref_id'
store=False
string='Source'
get_source(self)
open_source_config(self)
csv_delimiter
Char
default=';'
string='CSV delimiter'
csv_encoding
Char
string='CSV Encoding'
csv_file
Binary
csv_filename
Char
csv_filesize
Char
compute='_compute_csv_filesize'
readonly=True
string='CSV filesize'
csv_path
Char
csv_quotechar
Char
default='"'
string='CSV quotechar'
csv_rows_from_to
Char
string='CSV use only a slice of the available lines. Format: $from:$to. NOTE: recommended only for debug/test purpose.'
example_file_ext_id
Char
help="You can define example file by creating attachments with an external ID matching the 'import.source.csv' record external ID:\n\t${import.source.csv.ExtID}_example_file\n\nYou can also specify your own external ID by filling this field."
example_file_url
Char
compute='_compute_example_file_url'
string='Download example file'
No public methods.
description
Text
key
Char
copy=False
help='Unique mnemonic identifier'
required=True
name
Char
help='A meaningful human-friendly name'
required=True
options
Text
help='YAML configuration'
settings
Text
help='\n # comment me\n product.template::template.importer.component.name\n product.product::product.importer.component.name\n # another one\n product.supplierinfo::supplierinfo.importer.component.name\n '
required=False
string='Legacy Settings'
use_job
Boolean
default=True
help='For each importer used in the settings, one job will be spawned. Untick the box if an importer depends on the result of a previous one (for instance to link a record to the previously created one).'
string='Use job'
available_importers(self)
available_models(self)
copy_data(self, default=None)
job_id
Many2one → queue.job
readonly=True
string='Job'
args: 'queue.job'
job_state
Selection
index=True
related='job_id.state'
has_job(self)
job_done(self)
unlink(self)
No new fields.
Public methods (4)report_add_line(self, writer, item)
report_do(self, recordset, fileout, **options)
report_get_columns(self, recordset, orig_content, extra_keys=None, delimiter=';', quotechar='"')
report_get_writer(self, fileout, columns, delimiter=';', quotechar='"')
No new fields.
Public methods (4)report_do(self, recordset, fileout, **options)
report_finalize(self, recordset, fileout, **options)
report_get(self, recordset, **options)
report_get_metadata(self, recordset, **options)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/connector-interfaces |
| GIT | |
| GIT | https://github.com/OCA/connector-interfaces.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/connector-interfaces/tree/13.0/connector_importer |
| VERSION | |
| VERSION | 1.7.0 |
| CATEGORY | |
| CATEGORY | Connector |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | Guewen Baconnier, sebalix, Tonow-c2c, oca-travis, OCA-git-bot, Simone Orsi |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/connector-interfaces |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:10 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/connector: - connector - component - component_event OCA/queue: - queue_job odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
chardet pytz pyyaml requests cachetools |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
recordset_docs |
Import Recordset Docs | ir.ui.view | qweb | New |
recordset_report |
Import Recordset Report | ir.ui.view | qweb | New |
recordset_report_full |
Import Recordset FUll Report | ir.ui.view | qweb | New |
source_config_summary |
Source config summary | ir.ui.view | qweb | New |
view_import_backend_form |
import.backend | form | New | |
view_import_backend_tree |
import.backend | tree | New | |
view_import_recordset_form |
import.recordset | form | New | |
view_import_recordset_search |
import.recordset | search | New | |
view_import_recordset_tree |
import.recordset | tree | New | |
view_import_source_csv_form |
import.source.csv form | import.source.csv | group | Inherits view_import_source_form |
view_import_source_form |
import.source base form | import.source | form | New |
cron_id
Many2one → ir.cron
domain=<expr>
string='Related cron'
args: 'ir.cron'
cron_interval_number
Integer
cron_interval_type
Selection
selection='_select_interval_type'
string='Interval type'
cron_mode
Boolean
cron_start_date
Datetime
create(self, vals_list)
get_cron_vals(self)
run_cron(self)
write(self, vals)
cron_cleanup_keep
Integer
help='If this value is greater than 0 a cron will cleanup old recordsets and keep only the latest N records matching this value.'
string='Cron cleanup keep'
cron_master_recordset_id
Many2one → import.recordset
help='If an existing recordset is selected it will be used to create a new recordset each time the cron runs. \nIn this way you can keep every import session isolated. \nIf none, all recordsets will run.'
string='Master recordset'
args: 'import.recordset'
debug_mode
Boolean
help="Enabling debug mode causes the import to run in real time, without using any job queue. Make sure you don't do this in production!"
args: 'Debug mode?'
job_running
Boolean
compute='_compute_job_running'
help='Tells you if a job is running for this backend.'
readonly=True
args: 'Job running'
name
Char
required=True
notes
Text
recordset_ids
One2many → import.recordset
string='Record Sets'
args: 'import.recordset', 'backend_id'
version
Selection
required=True
selection='_select_version'
string='Version'
button_complete_jobs(self)
check_delete(self)
cron_cleanup_recordsets(self)
run_all(self)
run_cron(self, backend_id)
unlink(self)
backend_id
Many2one → import.backend
readonly=True
related='recordset_id.backend_id'
string='Backend'
args: 'import.backend'
date
Datetime
default=fields.Datetime.now
args: 'Import date'
jsondata_file
Binary
attachment=True
recordset_id
Many2one → import.recordset
string='Recordset'
args: 'import.recordset'
debug_mode(self)
get_data(self)
import_record(self, importer_config)
run_import(self)
set_data(self, adict)
unlink(self)
backend_id
Many2one → import.backend
string='Import Backend'
args: 'import.backend'
create_date
Datetime
docs_html
Html
compute='_compute_docs_html'
string='Docs'
full_report_url
Char
compute='_compute_full_report_url'
args: 'Full report url'
import_type_id
Many2one → import.type
comodel_name='import.type'
required=True
string='Import type'
jobs_global_state
Selection
compute='_compute_jobs_global_state'
help='Tells you if a job is running for this recordset. If any of the sub jobs is not DONE or FAILED we assume the global state is PENDING.'
readonly=True
selection=STATES
string='Jobs global state'
name
Char
compute='_compute_name'
string='Name'
notes
Html
help='Useful info for your users'
args: 'Notes'
override_existing
Boolean
default=True
help='Enable to update existing items w/ new values. If disabled, matching records will be skipped.'
string='Override existing items'
record_ids
One2many → import.record
string='Records'
args: 'import.record', 'recordset_id'
report_file
Binary
report_filename
Char
report_html
Html
compute='_compute_report_html'
args: 'Report summary'
sequence
Integer
default=10
help='Sequence for the handle.'
args: 'Sequence'
available_importers(self)
debug_mode(self)
generate_report(self)
get_records(self)
get_report(self)
get_shared(self)
import_recordset(self)
run_import(self)
set_report(self, values, reset=False)
set_shared(self, values, reset=False)
unlink(self)
chunk_size
Integer
default=500
required=True
string='Chunks Size'
config_summary
Html
compute='_compute_config_summary'
readonly=True
name
Char
compute='_compute_name'
readony=True
create(self, vals)
get_config_view_id(self)
get_lines(self)
get_reporter(self)
source_config_summary
Html
compute='_compute_source_config_summary'
readonly=True
source_id
Integer
ondelete='cascade'
required=False
string='Source ID'
source_model
Selection
selection='_selection_source_ref_id'
string='Source type'
source_ref_id
Reference
compute='_compute_source_ref_id'
selection='_selection_source_ref_id'
store=False
string='Source'
get_source(self)
open_source_config(self)
csv_delimiter
Char
default=';'
string='CSV delimiter'
csv_encoding
Char
string='CSV Encoding'
csv_file
Binary
csv_filename
Char
csv_filesize
Char
compute='_compute_csv_filesize'
readonly=True
string='CSV filesize'
csv_path
Char
csv_quotechar
Char
default='"'
string='CSV quotechar'
example_file_ext_id
Char
help="You can define example file by creating attachments with an external ID matching the 'import.source.csv' record external ID:\n\t${import.source.csv.ExtID}_example_file\n\nYou can also specify your own external ID by filling this field."
example_file_url
Char
compute='_compute_example_file_url'
string='Download example file'
No public methods.
key
Char
help='Unique mnemonic identifier'
required=True
name
Char
help='A meaningful human-friendly name'
required=True
options
Text
help='YAML configuration'
settings
Text
help='\n # comment me\n product.template::template.importer.component.name\n product.product::product.importer.component.name\n # another one\n product.supplierinfo::supplierinfo.importer.component.name\n '
required=False
string='Legacy Settings'
use_job
Boolean
default=True
help='For each importer used in the settings, one job will be spawned. Untick the box if an importer depends on the result of a previous one (for instance to link a record to the previously created one).'
string='Use job'
available_importers(self)
available_models(self)
No new fields.
Public methods (4)report_add_line(self, writer, item)
report_do(self, recordset, fileout, **options)
report_get_columns(self, recordset, orig_content, extra_keys=None, delimiter=';', quotechar='"')
report_get_writer(self, fileout, columns, delimiter=';', quotechar='"')
No new fields.
Public methods (4)report_do(self, recordset, fileout, **options)
report_finalize(self, recordset, fileout, **options)
report_get(self, recordset, **options)
report_get_metadata(self, recordset, **options)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/connector-interfaces |
| GIT | |
| GIT | https://github.com/OCA/connector-interfaces.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/connector-interfaces/tree/12.0/connector_importer |
| VERSION | |
| VERSION | 1.4.0 |
| CATEGORY | |
| CATEGORY | Connector |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | GitHub, sebalix, OCA-git-bot, Simone Orsi, Timon Tschanz, Matthieu Méquignon |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/connector-interfaces |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:14 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/connector: - connector - component - component_event OCA/queue: - queue_job odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
chardet requests cachetools |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
recordset_docs |
Import Recordset Docs | ir.ui.view | qweb | New |
recordset_report |
Import Recordset Report | ir.ui.view | qweb | New |
recordset_report_full |
Import Recordset FUll Report | ir.ui.view | qweb | New |
source_config_summary |
Source config summary | ir.ui.view | qweb | New |
view_import_backend_form |
import.backend | form | New | |
view_import_backend_tree |
import.backend | tree | New | |
view_import_recordset_form |
import.recordset | form | New | |
view_import_recordset_search |
import.recordset | search | New | |
view_import_recordset_tree |
import.recordset | tree | New | |
view_import_source_csv_form |
import.source.csv form | import.source.csv | group | Inherits view_import_source_form |
view_import_source_form |
import.source base form | import.source | form | New |
cron_id
Many2one → ir.cron
domain=<expr>
string='Related cron'
args: 'ir.cron'
cron_interval_number
Integer
cron_interval_type
Selection
selection='_select_interval_type'
string='Interval type'
cron_mode
Boolean
cron_start_date
Datetime
create(self, vals_list)
get_cron_vals(self)
run_cron(self)
write(self, vals)
cron_cleanup_keep
Integer
help='If this value is greater than 0 a cron will cleanup old recordsets and keep only the latest N records matching this value.'
string='Cron cleanup keep'
cron_master_recordset_id
Many2one → import.recordset
help='If an existing recordset is selected it will be used to create a new recordset each time the cron runs. \nIn this way you can keep every import session isolated. \nIf none, all recordsets will run.'
string='Master recordset'
args: 'import.recordset'
debug_mode
Boolean
help="Enabling debug mode causes the import to run in real time, without using any job queue. Make sure you don't do this in production!"
args: 'Debug mode?'
job_running
Boolean
compute='_compute_job_running'
help='Tells you if a job is running for this backend.'
readonly=True
args: 'Job running'
name
Char
required=True
notes
Text
recordset_ids
One2many → import.recordset
string='Record Sets'
args: 'import.recordset', 'backend_id'
version
Selection
required=True
selection='_select_version'
string='Version'
button_complete_jobs(self)
check_delete(self)
cron_cleanup_recordsets(self)
run_all(self)
run_cron(self, backend_id)
unlink(self)
backend_id
Many2one → import.backend
readonly=True
related='recordset_id.backend_id'
string='Backend'
args: 'import.backend'
date
Datetime
default=fields.Datetime.now
args: 'Import date'
jsondata_file
Binary
attachment=True
recordset_id
Many2one → import.recordset
string='Recordset'
args: 'import.recordset'
debug_mode(self)
get_data(self)
import_record(self, component_name, model_name, is_last_importer=True)
run_import(self)
set_data(self, adict)
unlink(self)
backend_id
Many2one → import.backend
string='Import Backend'
args: 'import.backend'
create_date
Datetime
docs_html
Html
compute='_compute_docs_html'
string='Docs'
full_report_url
Char
compute='_compute_full_report_url'
args: 'Full report url'
import_type_id
Many2one → import.type
comodel_name='import.type'
required=True
string='Import type'
jobs_global_state
Selection
compute='_compute_jobs_global_state'
help='Tells you if a job is running for this recordset. If any of the sub jobs is not DONE or FAILED we assume the global state is PENDING.'
readonly=True
selection=STATES
string='Jobs global state'
name
Char
compute='_compute_name'
string='Name'
notes
Html
help='Useful info for your users'
args: 'Notes'
override_existing
Boolean
default=True
help='Enable to update existing items w/ new values. If disabled, matching records will be skipped.'
string='Override existing items'
record_ids
One2many → import.record
string='Records'
args: 'import.record', 'recordset_id'
report_file
Binary
report_filename
Char
report_html
Html
compute='_compute_report_html'
args: 'Report summary'
sequence
Integer
default=10
help='Sequence for the handle.'
args: 'Sequence'
available_models(self)
debug_mode(self)
generate_report(self)
get_records(self)
get_report(self)
get_shared(self)
import_recordset(self)
run_import(self)
set_report(self, values, reset=False)
set_shared(self, values, reset=False)
unlink(self)
chunk_size
Integer
default=500
required=True
string='Chunks Size'
config_summary
Html
compute='_compute_config_summary'
readonly=True
name
Char
compute='_compute_name'
readony=True
create(self, vals)
get_config_view_id(self)
get_lines(self)
get_reporter(self)
source_config_summary
Html
compute='_compute_source_config_summary'
readonly=True
source_id
Integer
ondelete='cascade'
required=False
string='Source ID'
source_model
Selection
selection='_selection_source_ref_id'
string='Source type'
source_ref_id
Reference
compute='_compute_source_ref_id'
selection='_selection_source_ref_id'
store=True
string='Source'
get_source(self)
open_source_config(self)
csv_delimiter
Char
default=';'
string='CSV delimiter'
csv_encoding
Char
string='CSV Encoding'
csv_file
Binary
csv_filename
Char
csv_filesize
Char
compute='_compute_csv_filesize'
readonly=True
string='CSV filesize'
csv_path
Char
csv_quotechar
Char
default='"'
string='CSV quotechar'
No public methods.
key
Char
help='Unique mnemonic identifier'
required=True
name
Char
help='A meaningful human-friendly name'
required=True
settings
Text
help='\n # comment me\n product.template::template.importer.component.name\n product.product::product.importer.component.name\n # another one\n product.supplierinfo::supplierinfo.importer.component.name\n '
required=True
string='Settings'
use_job
Boolean
default=True
help='For each importer used in the settings, one job will be spawned. Untick the box if an importer depends on the result of a previous one (for instance to link a record to the previously created one).'
string='Use job'
available_models(self)
No new fields.
Public methods (4)report_add_line(self, writer, item)
report_do(self, recordset, fileout, **options)
report_get_columns(self, recordset, orig_content, extra_keys=None, delimiter=';', quotechar='"')
report_get_writer(self, fileout, columns, delimiter=';', quotechar='"')
No new fields.
Public methods (4)report_do(self, recordset, fileout, **options)
report_finalize(self, recordset, fileout, **options)
report_get(self, recordset, **options)
report_get_metadata(self, recordset, **options)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/connector-interfaces |
| GIT | |
| GIT | https://github.com/OCA/connector-interfaces.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/connector-interfaces/tree/11.0/connector_importer |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Connector |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | OCA-git-bot |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/connector-interfaces |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:23:56 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/connector: - connector - component - component_event OCA/queue: - queue_job odoo/odoo: - base - base_setup - web - bus - web_tour - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
chardet requests cachetools |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
recordset_docs |
Import Recordset Docs | ir.ui.view | qweb | New |
recordset_report |
Import Recordset Report | ir.ui.view | qweb | New |
recordset_report_full |
Import Recordset FUll Report | ir.ui.view | qweb | New |
source_config_summary |
Source config summary | ir.ui.view | qweb | New |
view_import_backend_form |
import.backend | form | New | |
view_import_backend_tree |
import.backend | tree | New | |
view_import_recordset_form |
import.recordset | form | New | |
view_import_recordset_search |
import.recordset | search | New | |
view_import_recordset_tree |
import.recordset | tree | New | |
view_import_source_csv_form |
import.source.csv form | import.source.csv | group | Inherits view_import_source_form |
view_import_source_form |
import.source base form | import.source | form | New |
cron_id
Many2one → ir.cron
domain=<expr>
string='Related cron'
args: 'ir.cron'
cron_interval_number
Integer
cron_interval_type
Selection
selection='_select_interval_type'
string='Interval type'
cron_mode
Boolean
cron_start_date
Datetime
create(self, vals)
get_cron_vals(self)
run_cron(self)
write(self, vals)
cron_cleanup_keep
Integer
help='If this value is greater than 0 a cron will cleanup old recordsets and keep only the latest N records matching this value.'
string='Cron cleanup keep'
cron_master_recordset_id
Many2one → import.recordset
help='If an existing recordset is selected it will be used to create a new recordset each time the cron runs. \nIn this way you can keep every import session isolated. \nIf none, all recordsets will run.'
string='Master recordset'
args: 'import.recordset'
debug_mode
Boolean
help="Enabling debug mode causes the import to run in real time, without using any job queue. Make sure you don't do this in production!"
args: 'Debug mode?'
job_running
Boolean
compute='_compute_job_running'
help='Tells you if a job is running for this backend.'
readonly=True
args: 'Job running'
name
Char
required=True
notes
Text
recordset_ids
One2many → import.recordset
string='Record Sets'
args: 'import.recordset', 'backend_id'
version
Selection
required=True
selection='_select_version'
string='Version'
button_complete_jobs(self)
check_delete(self)
cron_cleanup_recordsets(self)
run_all(self)
run_cron(self, backend_id)
unlink(self)
backend_id
Many2one → import.backend
readonly=True
related='recordset_id.backend_id'
string='Backend'
args: 'import.backend'
date
Datetime
default=fields.Date.context_today
args: 'Import date'
jsondata_file
Binary
attachment=True
recordset_id
Many2one → import.recordset
string='Recordset'
args: 'import.recordset'
debug_mode(self)
get_data(self)
import_record(self, component_name, model_name, is_last_importer=True)
run_import(self)
set_data(self, adict)
unlink(self)
backend_id
Many2one → import.backend
string='Import Backend'
args: 'import.backend'
create_date
Datetime
docs_html
Html
compute='_compute_docs_html'
string='Docs'
full_report_url
Char
compute='_compute_full_report_url'
args: 'Full report url'
import_type_id
Many2one → import.type
comodel_name='import.type'
required=True
string='Import type'
jobs_global_state
Selection
compute='_compute_jobs_global_state'
help='Tells you if a job is running for this recordset. If any of the sub jobs is not DONE or FAILED we assume the global state is PENDING.'
readonly=True
selection=STATES
string='Jobs global state'
name
Char
compute='_compute_name'
string='Name'
notes
Html
help='Useful info for your users'
args: 'Notes'
override_existing
Boolean
default=True
help='Enable to update existing items w/ new values. If disabled, matching records will be skipped.'
string='Override existing items'
record_ids
One2many → import.record
string='Records'
args: 'import.record', 'recordset_id'
report_file
Binary
report_filename
Char
report_html
Html
compute='_compute_report_html'
args: 'Report summary'
sequence
Integer
default=10
help='Sequence for the handle.'
args: 'Sequence'
available_models(self)
debug_mode(self)
generate_report(self)
get_records(self)
get_report(self)
get_shared(self)
import_recordset(self)
run_import(self)
set_report(self, values, reset=False)
set_shared(self, values, reset=False)
unlink(self)
chunk_size
Integer
default=500
required=True
string='Chunks Size'
config_summary
Html
compute='_compute_config_summary'
readonly=True
name
Char
compute='_compute_name'
readony=True
create(self, vals)
get_config_view_id(self)
get_lines(self)
get_reporter(self)
source_config_summary
Html
compute='_compute_source_config_summary'
readonly=True
source_id
Integer
ondelete='cascade'
required=False
string='Source ID'
source_model
Selection
selection='_selection_source_ref_id'
string='Source type'
source_ref_id
Reference
compute='_compute_source_ref_id'
selection='_selection_source_ref_id'
store=True
string='Source'
get_source(self)
open_source_config(self)
csv_delimiter
Char
default=';'
string='CSV delimiter'
csv_file
Binary
csv_filename
Char
csv_filesize
Char
compute='_compute_csv_filesize'
readonly=True
string='CSV filesize'
csv_path
Char
csv_quotechar
Char
default='"'
string='CSV quotechar'
No public methods.
key
Char
help='Unique mnemonic identifier'
required=True
name
Char
help='A meaningful human-friendly name'
required=True
settings
Text
help='\n # comment me\n product.template::template.importer.component.name\n product.product::product.importer.component.name\n # another one\n product.supplierinfo::supplierinfo.importer.component.name\n '
required=True
string='Settings'
available_models(self)
No new fields.
Public methods (4)report_add_line(self, writer, item)
report_do(self, recordset, fileout, **options)
report_get_columns(self, recordset, orig_content, extra_keys=None, delimiter=';')
report_get_writer(self, fileout, columns, delimiter=';', quotechar='"')
No new fields.
Public methods (4)report_do(self, recordset, fileout, **options)
report_finalize(self, recordset, fileout, **options)
report_get(self, recordset, **options)
report_get_metadata(self, recordset, **options)