diff options
| author | Thibault Delavallée <tde@openerp.com> | 2012-12-18 10:32:41 +0100 |
|---|---|---|
| committer | Thibault Delavallée <tde@openerp.com> | 2012-12-18 10:32:41 +0100 |
| commit | 2dbe4a696ecd7330b16d10ec38462fe6c8fa37ca (patch) | |
| tree | e7f1103c8b839aa1bffee9dfb961e08b3bc82e26 /addons/document_webdav | |
| parent | 6d2a0d270f0f0b9eb7d66eb384a8803a186db374 (diff) | |
| parent | 73980eba5f64c674b0bc366c714a9a38d3bb915a (diff) | |
[MERGE] Sync wirth trunk.
bzr revid: tde@openerp.com-20121218093241-y0id5g1r1k6yok42
Diffstat (limited to 'addons/document_webdav')
| -rw-r--r-- | addons/document_webdav/__init__.py | 10 | ||||
| -rw-r--r-- | addons/document_webdav/dav_fs.py | 50 | ||||
| -rw-r--r-- | addons/document_webdav/document_webdav.py | 5 | ||||
| -rw-r--r-- | addons/document_webdav/i18n/pt.po | 12 | ||||
| -rw-r--r-- | addons/document_webdav/nodes.py | 2 | ||||
| -rw-r--r-- | addons/document_webdav/redirect.py | 4 | ||||
| -rw-r--r-- | addons/document_webdav/test_davclient.py | 2 | ||||
| -rw-r--r-- | addons/document_webdav/webdav.py | 25 | ||||
| -rw-r--r-- | addons/document_webdav/webdav_server.py | 42 |
9 files changed, 93 insertions, 59 deletions
diff --git a/addons/document_webdav/__init__.py b/addons/document_webdav/__init__.py index 11bbd35f7c3..3dc4c104c80 100644 --- a/addons/document_webdav/__init__.py +++ b/addons/document_webdav/__init__.py @@ -20,13 +20,9 @@ ############################################################################## import logging -_logger = logging.getLogger(__name__) +import webdav +import webdav_server +import document_webdav -try: - import webdav - import webdav_server - import document_webdav -except ImportError: - _logger.info('document_webdav disabled please install PyWebDAV from http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-0.9.4.tar.gz&can=2&q=/') # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py index 1b826434f74..59e93fa3722 100644 --- a/addons/document_webdav/dav_fs.py +++ b/addons/document_webdav/dav_fs.py @@ -18,31 +18,31 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## -import pooler -import sql_db - import os import time import errno - -import netsvc +import re import urlparse - -from DAV.constants import COLLECTION #, OBJECT -from DAV.errors import DAV_Error, DAV_Forbidden, DAV_NotFound -from DAV.iface import dav_interface import urllib -from DAV.davcmd import copyone, copytree, moveone, movetree, delone, deltree -from cache import memoize -from tools import misc - -from webdav import mk_lock_response - try: - from tools.dict_tools import dict_merge2 + from pywebdav.lib.constants import COLLECTION # , OBJECT + from pywebdav.lib.errors import DAV_Error, DAV_Forbidden, DAV_NotFound + from pywebdav.lib.iface import dav_interface + from pywebdav.lib.davcmd import copyone, copytree, moveone, movetree, delone, deltree except ImportError: - from document.dict_tools import dict_merge2 + from DAV.constants import COLLECTION #, OBJECT + from DAV.errors import DAV_Error, DAV_Forbidden, DAV_NotFound + from DAV.iface import dav_interface + from DAV.davcmd import copyone, copytree, moveone, movetree, delone, deltree + +import openerp +from openerp import pooler, sql_db, netsvc +from openerp.tools import misc +from openerp.addons.document.dict_tools import dict_merge2 + +from cache import memoize +from webdav import mk_lock_response CACHE_SIZE=20000 @@ -355,7 +355,8 @@ class openerp_dav_handler(dav_interface): return self.parent.get_baseuri(self) + '/'.join(ajoin) @memoize(4) - def db_list(self): + def _all_db_list(self): + """return all databases who have module document_webdav installed""" s = netsvc.ExportService.getService('db') result = s.exp_list() self.db_name_list=[] @@ -364,7 +365,7 @@ class openerp_dav_handler(dav_interface): try: db = sql_db.db_connect(db_name) cr = db.cursor() - cr.execute("SELECT id FROM ir_module_module WHERE name = 'document' AND state='installed' ") + cr.execute("SELECT id FROM ir_module_module WHERE name = 'document_webdav' AND state='installed' ") res=cr.fetchone() if res and len(res): self.db_name_list.append(db_name) @@ -375,6 +376,15 @@ class openerp_dav_handler(dav_interface): cr.close() return self.db_name_list + def db_list(self, uri): + # import pudb;pudb.set_trace() + u = urlparse.urlsplit(uri) + h = u.hostname + d = h.split('.')[0] + r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d',d) + dbs = [i for i in self._all_db_list() if re.match(r, i)] + return dbs + def get_childs(self,uri, filters=None): """ return the child objects as self.baseuris for the given URI """ self.parent.log_message('get children: %s' % uri) @@ -382,7 +392,7 @@ class openerp_dav_handler(dav_interface): if not dbname: if cr: cr.close() - res = map(lambda x: self.urijoin(x), self.db_list()) + res = map(lambda x: self.urijoin(x), self.db_list(uri)) return res result = [] node = self.uri2object(cr, uid, pool, uri2[:]) diff --git a/addons/document_webdav/document_webdav.py b/addons/document_webdav/document_webdav.py index cb1315140a3..90150bab620 100644 --- a/addons/document_webdav/document_webdav.py +++ b/addons/document_webdav/document_webdav.py @@ -19,9 +19,10 @@ # ############################################################################## -from osv import osv, fields +from openerp.osv import fields, osv +from openerp.tools import config + import nodes -from tools import config class document_davdir(osv.osv): _inherit = 'document.directory' diff --git a/addons/document_webdav/i18n/pt.po b/addons/document_webdav/i18n/pt.po index fc5985eb6da..32736ef6929 100644 --- a/addons/document_webdav/i18n/pt.po +++ b/addons/document_webdav/i18n/pt.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2010-12-11 22:47+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" +"PO-Revision-Date: 2012-12-17 14:02+0000\n" +"Last-Translator: Rui Franco (multibase.pt) <Unknown>\n" "Language-Team: Portuguese <pt@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-04 05:44+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-18 05:01+0000\n" +"X-Generator: Launchpad (build 16372)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 @@ -31,7 +31,7 @@ msgstr "Documentos" #. module: document_webdav #: view:document.webdav.dir.property:0 msgid "Document property" -msgstr "" +msgstr "Propriedade do documento" #. module: document_webdav #: view:document.webdav.dir.property:0 @@ -168,7 +168,7 @@ msgstr "Criador" #. module: document_webdav #: view:document.webdav.file.property:0 msgid "Document Property" -msgstr "" +msgstr "Propriedade do documento" #. module: document_webdav #: model:ir.ui.menu,name:document_webdav.menu_properties diff --git a/addons/document_webdav/nodes.py b/addons/document_webdav/nodes.py index a8fedee4fe3..d6bb5a6655f 100644 --- a/addons/document_webdav/nodes.py +++ b/addons/document_webdav/nodes.py @@ -21,7 +21,7 @@ from document import nodes -from tools.safe_eval import safe_eval as eval +from openerp.tools.safe_eval import safe_eval as eval import time import urllib import uuid diff --git a/addons/document_webdav/redirect.py b/addons/document_webdav/redirect.py index c3dd9248f45..41cbe3b883b 100644 --- a/addons/document_webdav/redirect.py +++ b/addons/document_webdav/redirect.py @@ -22,8 +22,8 @@ import logging import urlparse -from service.websrv_lib import FixSendError, HTTPHandler, HttpOptions -from service.http_server import HttpLogHandler +from openerp.service.websrv_lib import FixSendError, HTTPHandler, HttpOptions +from openerp.service.http_server import HttpLogHandler _logger = logging.getLogger(__name__) class RedirectHTTPHandler(HttpLogHandler, FixSendError, HttpOptions, HTTPHandler): diff --git a/addons/document_webdav/test_davclient.py b/addons/document_webdav/test_davclient.py index 79ee471c69e..058dc1c748d 100644 --- a/addons/document_webdav/test_davclient.py +++ b/addons/document_webdav/test_davclient.py @@ -38,7 +38,7 @@ import xml.dom.minidom import httplib -from tools import config +from openerp.tools import config from xmlrpclib import Transport, ProtocolError import StringIO import base64 diff --git a/addons/document_webdav/webdav.py b/addons/document_webdav/webdav.py index bf8b843a0a0..aedad059c16 100644 --- a/addons/document_webdav/webdav.py +++ b/addons/document_webdav/webdav.py @@ -20,21 +20,28 @@ # ############################################################################## +import logging + +_logger = logging.getLogger(__name__) import xml.dom.minidom domimpl = xml.dom.minidom.getDOMImplementation() from xml.dom.minicompat import StringTypes import urlparse import urllib -from osv import osv -from tools.translate import _ - -from DAV import utils -from DAV.propfind import PROPFIND -from DAV.report import REPORT - - -import tools +from openerp.osv import osv +from openerp.tools.translate import _ + +try: + from pywebdav.lib import utils + from pywebdav.lib.propfind import PROPFIND + from pywebdav.lib.report import REPORT +except ImportError: + from DAV import utils + from DAV.propfind import PROPFIND + from DAV.report import REPORT + +from openerp import tools class Text2(xml.dom.minidom.Text): def writexml(self, writer, indent="", addindent="", newl=""): diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py index 70ad4d2657f..f801a56ee97 100644 --- a/addons/document_webdav/webdav_server.py +++ b/addons/document_webdav/webdav_server.py @@ -35,12 +35,21 @@ import logging -import netsvc +from openerp import netsvc from dav_fs import openerp_dav_handler -from tools.config import config -from DAV.WebDAVServer import DAVRequestHandler -from service import http_server -from service.websrv_lib import FixSendError, HttpOptions +from openerp.tools.config import config +try: + from pywebdav.lib.WebDAVServer import DAVRequestHandler + from pywebdav.lib.utils import IfParser, TagList + from pywebdav.lib.errors import DAV_Error, DAV_Forbidden, DAV_NotFound + from pywebdav.lib.propfind import PROPFIND +except ImportError: + from DAV.WebDAVServer import DAVRequestHandler + from DAV.utils import IfParser, TagList + from DAV.errors import DAV_Error, DAV_Forbidden, DAV_NotFound + from DAV.propfind import PROPFIND +from openerp.service import http_server +from openerp.service.websrv_lib import FixSendError, HttpOptions from BaseHTTPServer import BaseHTTPRequestHandler import urlparse import urllib @@ -48,9 +57,6 @@ import re import time from string import atoi import addons -from DAV.utils import IfParser, TagList -from DAV.errors import DAV_Error, DAV_Forbidden, DAV_NotFound -from DAV.propfind import PROPFIND # from DAV.constants import DAV_VERSION_1, DAV_VERSION_2 from xml.dom import minidom from redirect import RedirectHTTPHandler @@ -71,7 +77,7 @@ def OpenDAVConfig(**kw): return Config() -class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): +class DAVHandler(DAVRequestHandler, HttpOptions, FixSendError): verbose = False protocol_version = 'HTTP/1.1' @@ -88,7 +94,20 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): self._logger.debug(message) def handle(self): - self._init_buffer() + """Handle multiple requests if necessary.""" + self.close_connection = 1 + try: + self.handle_one_request() + while not self.close_connection: + self.handle_one_request() + except Exception as e: + try: + self.log_error("Request timed out: %r \n Trying old version of HTTPServer", e) + self._init_buffer() + except Exception as e: + #a read or a write timed out. Discard this connection + self.log_error("Not working neither, closing connection\n %r", e) + self.close_connection = 1 def finish(self): pass @@ -99,6 +118,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): return res def setup(self): + DAVRequestHandler.setup(self) self.davpath = '/'+config.get_misc('webdav','vdir','webdav') addr, port = self.server.server_name, self.server.server_port server_proto = getattr(self.server,'proto', 'http').lower() @@ -413,7 +433,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): data['lockowner'] = owners return data -from service.http_server import reg_http_service,OpenERPAuthProvider +from openerp.service.http_server import reg_http_service,OpenERPAuthProvider class DAVAuthProvider(OpenERPAuthProvider): def authenticate(self, db, user, passwd, client_address): |
