[ADD] add cmis module: It allows to configure a CMIS backend in OpenERP

This commit is contained in:
EL HADJI DEM 2014-03-21 18:35:36 -04:00 committed by Sandy Carter
parent 9be2cbb603
commit b347e6c510
7 changed files with 364 additions and 0 deletions

26
cmis/__init__.py Normal file
View File

@ -0,0 +1,26 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2014 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import cmis_model
from . import backend
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

62
cmis/__openerp__.py Normal file
View File

@ -0,0 +1,62 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2014 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'CMIS',
'version': '0.1',
'category': 'Connector',
'summary': 'Cmis Connector',
'description': """
Cmis Connector
==============
This module is the base for OpenERP modules implementing different integration scenario with a CMIS server.
It allows you to configure a CMIS backend in OpenERP.
Configuration
=============
Create a new CMIS backend with the host, login and password.
Contributors
------------
* El Hadji Dem (elhadji.dem@savoirfairelinux.com)
""",
'author': 'Savoir-faire Linux',
'website': 'www.savoirfairelinux.com',
'license': 'AGPL-3',
'depends': [
'connector',
],
'data': [
'cmis_model_view.xml',
'cmis_menu.xml',
],
'js': [],
'qweb': [],
'test': [],
'demo': [],
'installable': True,
'auto_install': False,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

32
cmis/backend.py Normal file
View File

@ -0,0 +1,32 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2014 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import openerp.addons.connector.backend as backend
cmis = backend.Backend('cmis')
""" Generic CMIS Backend """
cmis1700 = backend.Backend(parent=cmis, version='1.7')
""" CMIS Backend for version 1.7 """
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

17
cmis/cmis_menu.xml Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<menuitem id="menu_cmis_root"
parent="connector.menu_connector_root"
name="Cmis"
sequence="10"
groups="connector.group_connector_manager"/>
<menuitem id="menu_cmis_backend"
name="Backends"
parent="menu_cmis_root"
action="action_cmis_backend"/>
</data>
</openerp>

121
cmis/cmis_model.py Normal file
View File

@ -0,0 +1,121 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2014 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import orm, fields, osv
from openerp.tools.translate import _
from openerp.addons.connector.queue.job import job
from cmislib.model import CmisClient
import openerp.addons.connector as connector
from openerp.addons.connector.session import ConnectorSession
class cmis_backend(orm.Model):
_name = 'cmis.backend'
_description = 'CMIS Backend'
_inherit = 'connector.backend'
_backend_type = 'cmis'
def _select_versions(self, cr, uid, context=None):
return [('1.7', '1.7')]
# Test connection with GED
def _auth(self, cr, uid, context=None):
if context is None:
context = {}
# Get the url, user and password for GED
ids = self.search(cr, uid, [])
res = self.read(cr, uid, ids,
['location',
'username',
'password'], context=context)[0]
url = res['location']
user_name = res['username']
user_password = res['password']
client = CmisClient(url, user_name, user_password)
if not client:
raise osv.except_osv(_('Cmis connection Error!'),
_("Check your cmis account configuration."))
return client
def test_directory_of_write(self, cr, uid, ids, context=None):
if context is None:
context = {}
cmis_backend_obj = self.pool.get('cmis.backend')
#login with the cmis account
client = cmis_backend_obj._auth(cr, uid, context=context)
repo = client.defaultRepository
folder_path_write = cmis_backend_obj.read(cr, uid, ids, ['initial_directory_write'],
context=context)[0]['initial_directory_write']
# Testing the path
rs = repo.query("SELECT cmis:path FROM cmis:folder ")
bool_path_write = self.test_existing_path(rs, folder_path_write)
self.get_error_for_path(bool_path_write, folder_path_write)
def test_directory_of_read(self, cr, uid, ids, context=None):
if context is None:
context = {}
cmis_backend_obj = self.pool.get('cmis.backend')
#login with the cmis account
client = cmis_backend_obj._auth(cr, uid, context=context)
repo = client.defaultRepository
folder_path_read = cmis_backend_obj.read(cr, uid, ids, ['initial_directory_read'],
context=context)[0]['initial_directory_read']
# Testing the path
rs = repo.query("SELECT cmis:path FROM cmis:folder ")
bool_path_read = self.test_existing_path(rs, folder_path_read)
self.get_error_for_path(bool_path_read, folder_path_read)
def test_existing_path(self, rs, folder_path):
for one_rs in rs:
# Print name of files
props = one_rs.getProperties()
if props['cmis:path'] != folder_path:
bool = False
else:
bool = True
break
return bool
def get_error_for_path(self, bool, path):
if bool:
raise osv.except_osv(_('Cmis Message'),
_("Path is correct for : " + path))
else:
raise osv.except_osv(_('Cmis Error!'),
_("Error path for : " + path))
_columns = {
'version': fields.selection(
_select_versions,
string='Version',
required=True),
'location': fields.char('Location', size=128, help="Location."),
'username': fields.char('Username', size=64, help="Username."),
'password': fields.char('Password', size=64, help="Password."),
'initial_directory_read': fields.char('Initial directory of read',
size=128, help="Initial directory of read."),
'initial_directory_write': fields.char('Initial directory of write',
size=128, help="Initial directory of write."),
}
# vim:expandtab:smartindent:toabstop=4:softtabstop=4:shiftwidth=4:

67
cmis/cmis_model_view.xml Normal file
View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_cmis_backend_form" model="ir.ui.view">
<field name="name">cmis.backend.form</field>
<field name="model">cmis.backend</field>
<field name="arch" type="xml">
<form string="CMIS Backend" version="7.0">
<sheet>
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name" class="oe_inline" />
</h1>
<group name="cmis" string="Cmis Configuration">
<group colspan="4" col="4">
<field name="version" colspan="4"/>
<field name="location" placeholder="e.g. http://localhost:8081/alfresco/s/cmis"
colspan="4"/>
<field name="username" colspan="2"/>
<field name="password" colspan="2" password="True"/>
</group>
</group>
<group name="directory_conf" string="Directory Configuration">
<group colspan="4" col="4">
<field name="initial_directory_read" colspan="2"/>
<field name="initial_directory_write" colspan="2"/>
</group>
</group>
<group colspan="4" col="4">
<div>
<button name="test_directory_of_read"
type="object"
class="oe_highlight"
string="Test Directory of read"/>
<button name="test_directory_of_write"
type="object"
class="oe_highlight"
string="Test Directory of write"/>
</div>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_cmis_backend_tree" model="ir.ui.view">
<field name="name">cmis.backend.tree</field>
<field name="model">cmis.backend</field>
<field name="arch" type="xml">
<tree string="CMIS Backend" version="7.0">
<field name="name"/>
<field name="username"/>
<field name="location"/>
</tree>
</field>
</record>
<record id="action_cmis_backend" model="ir.actions.act_window">
<field name="name">CMIS Backends</field>
<field name="res_model">cmis.backend</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_cmis_backend_tree"/>
</record>
</data>
</openerp>

39
cmis/connector.py Normal file
View File

@ -0,0 +1,39 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2014 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import orm, fields
from openerp.addons.connector.connector import (Environment,
install_in_connector)
install_in_connector()
def get_environment(session, model_name, backend_id):
""" Create an environment to work with. """
backend_record = session.browse('cmis.backend', backend_id)
env = Environment(backend_record, session, model_name)
lang = backend_record.default_lang_id
lang_code = lang.code if lang else 'en_US'
env.set_lang(code=lang_code)
return env
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: