summaryrefslogtreecommitdiff
path: root/addons/document_webdav
diff options
context:
space:
mode:
authorThibault Delavallée <tde@openerp.com>2012-12-18 10:32:41 +0100
committerThibault Delavallée <tde@openerp.com>2012-12-18 10:32:41 +0100
commit2dbe4a696ecd7330b16d10ec38462fe6c8fa37ca (patch)
treee7f1103c8b839aa1bffee9dfb961e08b3bc82e26 /addons/document_webdav
parent6d2a0d270f0f0b9eb7d66eb384a8803a186db374 (diff)
parent73980eba5f64c674b0bc366c714a9a38d3bb915a (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__.py10
-rw-r--r--addons/document_webdav/dav_fs.py50
-rw-r--r--addons/document_webdav/document_webdav.py5
-rw-r--r--addons/document_webdav/i18n/pt.po12
-rw-r--r--addons/document_webdav/nodes.py2
-rw-r--r--addons/document_webdav/redirect.py4
-rw-r--r--addons/document_webdav/test_davclient.py2
-rw-r--r--addons/document_webdav/webdav.py25
-rw-r--r--addons/document_webdav/webdav_server.py42
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):