Changed licencing terms
[odoo/odoo.git] / addons / document / content_index.py
1 # -*- coding: utf-8 -*-
2 ##############################################################################
3 #    
4 #    OpenERP, Open Source Management Solution
5 #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
6 #
7 #    This program is free software: you can redistribute it and/or modify
8 #    it under the terms of the GNU Affero General Public License as
9 #    published by the Free Software Foundation, either version 3 of the
10 #    License, or (at your option) any later version.
11 #
12 #    This program is distributed in the hope that it will be useful,
13 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #    GNU Affero General Public License for more details.
16 #
17 #    You should have received a copy of the GNU Affero General Public License
18 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.     
19 #
20 ##############################################################################
21
22 import time
23 import os
24 import StringIO
25 import odt2txt
26 import tempfile
27
28 #
29 # This should be the indexer
30 #
31 def _to_unicode(s):
32     try:
33         return s.decode('utf-8')
34     except UnicodeError:
35         try:
36             return s.decode('latin')
37         except UnicodeError:
38             try:
39                 return s.encode('ascii')
40             except UnicodeError:
41                 return s
42
43
44 def content_index(content, filename=None, content_type=None):
45     fname,ext = os.path.splitext(filename)
46     result = ''
47     if ext in ('.doc'): #or content_type ?
48         (stdin,stdout) = os.popen2('antiword -', 'b')
49         stdin.write(content)
50         stdin.close()
51         result = _to_unicode(stdout.read())
52     elif ext == '.pdf':
53         file_descriptor, file_name = tempfile.mkstemp(suffix=ext)
54         os.write(file_descriptor, content)
55         os.close(file_descriptor)
56         fp = os.popen('pdftotext -enc UTF-8 -nopgbrk '+file_name+' -', 'r')
57         result = fp.read()
58         fp.close()
59     elif ext in ('.xls','.ods','.odt','.odp'):
60         s = StringIO.StringIO(content)
61         o = odt2txt.OpenDocumentTextFile(s)
62         result = _to_unicode(o.toString())
63         s.close()
64     elif ext in ('.txt','.py','.patch','.html','.csv','.xml'):
65         result = content
66     #else:
67     #    result = content
68     return result
69
70 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: