[FIX] Improvements after review.

- Only load indexer when module is installed;
- Protect non standard imports;
- Standardized README.rst.
This commit is contained in:
Ronald Portier 2016-11-11 12:10:44 +01:00
parent 2f7bf15718
commit ec31f52bb3
No known key found for this signature in database
GPG Key ID: A181F8124D7101D3
8 changed files with 110 additions and 68 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.rtf -diff

View File

@ -35,6 +35,7 @@ install:
- git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git ${HOME}/maintainer-quality-tools - git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git ${HOME}/maintainer-quality-tools
- export PATH=${HOME}/maintainer-quality-tools/travis:${PATH} - export PATH=${HOME}/maintainer-quality-tools/travis:${PATH}
- pip install --upgrade paramiko - pip install --upgrade paramiko
- pip install --upgrade pyth
- travis_install_nightly - travis_install_nightly
script: script:

View File

@ -1,3 +1,7 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
Index rtf documents Index rtf documents
=================== ===================
@ -11,6 +15,23 @@ Usage
Just installing the module will register the rtf indexer. No further user Just installing the module will register the rtf indexer. No further user
action or configuration required. action or configuration required.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/knowledge/8.0
.. repo_id is available in https://github.com/OCA/maintainer-tools/blob/master/tools/repos_with_ids.txt
.. branch is "8.0" for example
Bug Tracker
===========
Bugs are tracked on
`GitHub Issues <https://github.com/OCA/knowledge/issues>`_.
In case of trouble, please check there if your issue has already been
reported. If you spotted it first, help us smashing it by providing a
detailed and welcomed feedback.
Credits Credits
======= =======
@ -18,15 +39,15 @@ Contributors
------------ ------------
* Ronald Portier <ronald@therp.nl> * Ronald Portier <ronald@therp.nl>
* Icon courtesy of http://www.picol.org (refresh.svg) and * Icon courtesy of https://www.picol.org (refresh.svg) and
https://github.com/odoo/odoo/blob/8.0/addons/knowledge/static/description/icon.png https://github.com/odoo/odoo/blob/8.0/addons/knowledge/static/description/icon.png
Maintainer Maintainer
---------- ----------
.. image:: http://odoo-community.org/logo.png .. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association :alt: Odoo Community Association
:target: http://odoo-community.org :target: https://odoo-community.org
This module is maintained by the OCA. This module is maintained by the OCA.
@ -34,4 +55,4 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use. promote its widespread use.
To contribute to this module, please visit http://odoo-community.org. To contribute to this module, please visit https://odoo-community.org.

View File

@ -1,4 +1,4 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# © 2016 Therp BV <http://therp.nl> # © 2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import std_index from . import models

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# © 2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import ir_attachment

View File

@ -0,0 +1,74 @@
# -*- coding: utf-8 -*-
# © 2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import logging
from openerp import api, models
_logger = logging.getLogger(__name__)
class IrAttachment(models.Model):
_inherit = 'ir.attachment'
@api.noguess
def _register_hook(self, cr):
"""Only register our indexer if module is installed."""
import StringIO
try:
from pyth import document
from pyth.plugins.rtf15.reader import Rtf15Reader
from pyth.plugins.plaintext.writer import PlaintextWriter
except ImportError:
_logger.warn("pyth not found, RTF indexing disabled.")
return
from openerp.addons.document.content_index import indexer, cntIndex
from openerp.addons.document.std_index import _to_unicode
def improved_paragraph(self, paragraph, prefix=""):
"""Override method to insert image ignoring code."""
content = []
for text in paragraph.content:
# Begin patch =========\
if text.__class__ is document.Image:
continue
# End patch ===========/
content.append(u"".join(text.content))
content = u"".join(content).encode("utf-8")
for line in content.split("\n"):
self.target.write(" " * self.indent)
self.target.write(prefix)
self.target.write(line)
self.target.write("\n")
if prefix:
prefix = " "
PlaintextWriter.paragraph = improved_paragraph
class RtfDoc(indexer):
"""Index Rich Text Format (RTF) files."""
def _getMimeTypes(self):
return [
'application/rtf',
'application/x-rtf',
'text/rtf',
'text/richtext',
]
def _getExtensions(self):
return [
'.rtf',
]
def _doIndexContent(self, content):
"""Just get text contents of rtf file."""
s = StringIO.StringIO(content)
r = Rtf15Reader.read(s) # r will be pyth.document.Document
s.close()
w = PlaintextWriter.write(r) # w will be cStringIO.StringO
result = _to_unicode(w.getvalue())
return result
cntIndex.register(RtfDoc())

View File

@ -1,61 +0,0 @@
# -*- coding: utf-8 -*-
# © 2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import StringIO
from pyth import document
from pyth.plugins.rtf15.reader import Rtf15Reader
from pyth.plugins.plaintext.writer import PlaintextWriter
from openerp.addons.document.content_index import indexer, cntIndex
from openerp.addons.document.std_index import _to_unicode
def improved_paragraph(self, paragraph, prefix=""):
"""Override method to insert image ignoring code."""
content = []
for text in paragraph.content:
# Begin patch =========\
if text.__class__ is document.Image:
continue
# End patch ===========/
content.append(u"".join(text.content))
content = u"".join(content).encode("utf-8")
for line in content.split("\n"):
self.target.write(" " * self.indent)
self.target.write(prefix)
self.target.write(line)
self.target.write("\n")
if prefix: prefix = " "
PlaintextWriter.paragraph = improved_paragraph
class RtfDoc(indexer):
"""Index Rich Text Format (RTF) files."""
def _getMimeTypes(self):
return [
'application/rtf',
'application/x-rtf',
'text/rtf',
'text/richtext',
]
def _getExtensions(self):
return [
'.rtf',
]
def _doIndexContent(self, content):
"""Just get text contents of rtf file."""
s = StringIO.StringIO(content)
r = Rtf15Reader.read(s) # r will be pyth.document.Document
s.close()
w = PlaintextWriter.write(r) # w will be cStringIO.StringO
result = _to_unicode(w.getvalue())
return result
cntIndex.register(RtfDoc())

View File

@ -1,7 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# © 2016 Therp BV <http://therp.nl> # © 2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import base64
from openerp.tests.common import TransactionCase from openerp.tests.common import TransactionCase
from openerp.modules.module import get_module_resource from openerp.modules.module import get_module_resource
@ -10,8 +9,11 @@ class TestIndexRtf(TransactionCase):
def test_index_rtf(self): def test_index_rtf(self):
"""Test if the indexer indexes just the text in rtf documents.""" """Test if the indexer indexes just the text in rtf documents."""
attachment_model = self.env['ir.attachment']
# Force loading of indexer (normally _register_hooks runs after tests)
attachment_model._register_hook(self.env.cr)
# we do this to avoid error messages about word files in demo data # we do this to avoid error messages about word files in demo data
self.env['ir.attachment'].search([]).unlink() attachment_model.search([]).unlink()
# Now take rather large rtf test file, with only few actual words: # Now take rather large rtf test file, with only few actual words:
rtf_path = get_module_resource( rtf_path = get_module_resource(
'document_rtf_index', 'document_rtf_index',