TIP: You can type at any time to perform a new search.
Connector Importer
connector_importer · OCA/connector-interfaces
- Repository
- OCA/connector-interfaces · module folder · Try on Runboat
- Module version
- 1.0.0
- Category
- Connector
- Folder size
- 0.34 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/connector-interfaces
- Last tracking update
- 2026-08-07 09:06:36
- Authors
- Camptocamp, Odoo Community Association (OCA)
- Maintainers
- Camptocamp, Odoo Community Association (OCA)
- Committers
- Aungkokolin1997, OCA-git-bot, oca-ci
- Odoo dependencies
- Python dependencies
- chardet, pytz, pyyaml, openupgradelib, requests, cachetools
- System dependencies
- None
- Required by
- None
- 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
Code Analysis ⓘ
Views touched (14)
| 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 | form | 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 |
HTTP endpoints (1)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/importer/import-recordset/<model("import.recordset"):recordset> |
ReportController.full_report |
user | http | ALL |
Models touched (11)
New fields (5)
-
cron_idMany2one → ir.crondomain=<expr>string='Related cron' args: 'ir.cron' -
cron_interval_numberIntegerargs: 'Interval number' -
cron_interval_typeSelectionselection='_select_interval_type'string='Interval type' -
cron_modeBooleanargs: 'Cron mode?' -
cron_start_dateDatetimeargs: 'Start date'
-
create(self, vals_list)@api.model_create_multi -
get_cron_vals(self)@api.model -
run_cron(self)@api.model -
write(self, vals)
New fields (8)
-
cron_cleanup_keepIntegerhelp='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_idMany2one → import.recordsethelp='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_modeBooleanhelp="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_runningBooleancompute='_compute_job_running'help='Tells you if a job is running for this backend.'readonly=True -
nameCharrequired=True -
notesText -
recordset_idsOne2many → import.recordsetstring='Record Sets' args: 'import.recordset', 'backend_id' -
versionSelectionrequired=Trueselection='_select_version'
-
button_complete_jobs(self)Set all jobs to "completed" state. -
cron_cleanup_recordsets(self)@api.modelDelete obsolete recordsets. If you are running imports via cron and you create one recorset per each run then you might end up w/ tons of old recordsets. You can use `cron_cleanup_keep` to enable auto-cleanup. Here we lookup for backends w/ this settings and keep only latest recordsets. -
run_all(self)Run all recordset imports. -
run_cron(self, backend_id)@api.model -
unlink(self)Prevent delete if jobs are running.
New fields (4)
-
backend_idMany2one → import.backendreadonly=Truerelated='recordset_id.backend_id'string='Backend' args: 'import.backend' -
dateDatetimedefault=fields.Datetime.now args: 'Import date' -
jsondata_fileBinaryattachment=True -
recordset_idMany2one → import.recordsetstring='Recordset' args: 'import.recordset'
-
debug_mode(self) -
get_data(self) -
import_record(self, importer_config)This job will import a record. # TODO rewrite :param component_name: name of the importer component to use :param model_name: name of the model to import :param is_last_importer: flag for last importer of the recordset -
run_import(self)Queue a job for importing data stored in to self -
set_data(self, adict)
New fields (21)
-
backend_idMany2one → import.backendstring='Import Backend' args: 'import.backend' -
create_dateDatetime -
docs_htmlHtmlcompute='_compute_docs_html'string='Docs' -
full_report_urlCharcompute='_compute_full_report_url' -
import_type_idMany2one → import.typecomodel_name='import.type'required=Truestring='Import type' -
importable_model_idsMany2many → ir.modelcolumn1='recordset_id'column2='model_id'comodel_name='ir.model'compute='_compute_importable_model_ids'help='Technical field'relation='import_recordset_importable_model' -
jobs_global_stateSelectioncompute='_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_onDatetime -
nameCharcompute='_compute_name' -
notesHtmlhelp='Useful info for your users' -
override_existingBooleandefault=Truehelp='Enable to update existing items w/ new values. If disabled, matching records will be skipped.'string='Override existing items' -
record_idsOne2many → import.recordstring='Records' args: 'import.record', 'recordset_id' -
report_dataBinaryattachment=True -
report_fileBinary -
report_filenameChar -
report_htmlHtmlcompute='_compute_report_html' args: 'Report summary' -
sequenceIntegerdefault=10help='Sequence for the handle.' -
server_action_idsMany2many → ir.actions.serverhelp="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_idsMany2many → ir.modelcolumn1='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_onSelectiondefault='never'selection=[('never', 'Never'), ('last_importer_done', 'End of the whole import'), ('each_importer_done', 'End of each importer session')] -
shared_dataBinaryattachment=True
-
available_importers(self) -
debug_mode(self) -
generate_report(self) -
get_records(self)Retrieve importable records and keep ordering. -
get_report(self) -
get_report_by_model(self, model_name=None) -
get_shared(self) -
import_recordset(self)This job will import a recordset. -
run_import(self)queue a job for creating records (import.record items) -
set_report(self, values, reset=False)Update import report values. -
set_shared(self, values, reset=False)Update import report values.
New fields (3)
-
chunk_sizeIntegerdefault=500required=Truestring='Chunks Size' -
config_summaryHtmlcompute='_compute_config_summary' -
nameCharcompute='_compute_name'
-
create(self, vals_list)@api.model_create_multi -
get_config_view_id(self)Retrieve configuration view. -
get_lines(self)Retrieve lines to import. -
get_reporter(self)Retrieve a specific reporter for this source. A report can be used to produce and extensive report for the end user. See `reporter` models.
New fields (4)
-
source_config_summaryHtmlcompute='_compute_source_config_summary'readonly=True -
source_idIntegerrequired=Falsestring='Source ID' -
source_modelSelectionselection='_selection_source_ref_id'string='Source type' -
source_ref_idReferencecompute='_compute_source_ref_id'selection='_selection_source_ref_id'store=Falsestring='Source'
-
get_source(self)Return the source to the consumer. -
open_source_config(self)
New fields (10)
-
csv_delimiterChardefault=';'string='CSV delimiter' -
csv_encodingCharstring='CSV Encoding' -
csv_fileBinaryargs: 'CSV file' -
csv_filenameCharargs: 'CSV filename' -
csv_filesizeCharcompute='_compute_csv_filesize'readonly=Truestring='CSV filesize' -
csv_pathCharargs: 'CSV path' -
csv_quotecharChardefault='"'string='CSV quotechar' -
csv_rows_from_toCharstring='CSV use only a slice of the available lines. Format: $from:$to. NOTE: recommended only for debug/test purpose.' -
example_file_ext_idCharhelp="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_urlCharcompute='_compute_example_file_url'string='Download example file'
No public methods.
New fields (5)
-
descriptionText -
keyCharcopy=Falsehelp='Unique mnemonic identifier'required=True -
nameCharhelp='A meaningful human-friendly name'required=True -
optionsTexthelp='YAML configuration' -
use_jobBooleandefault=Truehelp='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)
New fields (2)
-
job_idMany2one → queue.jobindex=Truereadonly=Truestring='Job' args: 'queue.job' -
job_stateSelectionindex=Truerelated='job_id.state'
-
has_job(self) -
job_done(self) -
unlink(self)
New fields (0)
No new fields.
Public methods (4)-
report_add_line(self, writer, item) -
report_do(self, recordset, fileout, **options)Produce report. -
report_get_columns(self, recordset, orig_content, extra_keys=None, delimiter=';', quotechar='"')Retrieve columns by recordset. :param recordset: instance of recordset. :param orig_content: original csv content list of line. :param extra_keys: report-related extra columns. -
report_get_writer(self, fileout, columns, delimiter=';', quotechar='"')
New fields (0)
No new fields.
Public methods (4)-
report_do(self, recordset, fileout, **options)Override me to generate the report. -
report_finalize(self, recordset, fileout, **options)Apply late updates to report. -
report_get(self, recordset, **options)@api.modelCreate and return a report for given recordset. -
report_get_metadata(self, recordset, **options)Retrieve report file's metadata.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…