Skip to main content

Python CSV to OpenERP importation library

Project description

csv2oerp is a simple tool to perform a data migration, through an OpenERP mapping bounded to a CSV file. You can easily order your data as the manner of OpenERP (models, fields). The structure of the mapping is simple and intuitive, you can also perform a pre-process on data being imported, omit it or just modify it.

Quick start

Import csv2oerp and some callbacks:

from csv2oerp import Import_session
from csv2oerp.fields import Column, Custom, Relation
from csv2oerp.callbacks import get_id, get_ids

Configure OpenERP connection:

host = '198.168.0.1'
port = 8069
dbname = 'database'
user = 'admin'
pwd = 'admin'
csv2oerp.connect(host, port, user, pwd, dbname)

Create a new importation instance:

example_file = Import_session()

Set the CSV file to use:

example_file.set_input_file('example_file.csv', ',', '"', 'utf-8')

Define a custom callback(Field’s value pre-treatment):

def country_code(self, model, field, value, line):
    """Return the first two uppered characters from current column value
    """
    return value[:2].upper()

Define your mapping to link both csv and OpenERP:

mapping = {
    # Define a base model (Always in list form)
    'res.partner.address': [
        {

        # Custom field's value
        'type':         Custom('default', search=True),

        # Concatenated columns fields
        'street':       Column([7, 6]),
        'street2':      Column([8, 5]),

        # Simple fields
        'zip':          Column(9),
        'city':         Column(10),
        'cedex':        Column(68),
        'phone':        Column(14),
        'fax':          Column(15),
        'email':        Column(17),

        # Model's relation with dynamic insertion from OpenERP database
        # Not native object from OpenERP framework
        'region_id':    Custom(11, get_id('res.region', ['name']))
        'dep_id':       Custom(12, get_id('res.dep', ['name']))

        # Model's relations not updated if exists
        'country_id':   Relation('REL_res_partner_address,NO_UPDATE::res.country'),

        # Model's relations with unique value between objects
        'partner_id':   Relation('REL_res_partner_address::res.partner', search=True),

        },
    ],

    # Define relations between models
    'REL_res_partner_address::res.partner': {
        'name':         Column(1),
        'siren':        Column(2),
        'website':      Column(16),
        'comment':      Column(56),
        },

    # Relation without write if exists
    'REL_res_partner_address,NO_UPDATE::res.country':  {
        'code':         Column(13, callback=_country_code, search=True),
        'name':         Column(13, search=True),
        },
    })
example_file.set_mapping(mapping)

Finally start the import process:

example_file.start()

And show statistics of objects’s activities during the importation process:

csv2oerp.show_stats()

Note

A progress statistics will be shown during the process if you install the python-progressbar package.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
csv2oerp-0.6.3.tar.gz (31.9 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page