diff options
| author | Tejas Tank <tta@openerp.com> | 2012-08-17 16:16:10 +0530 |
|---|---|---|
| committer | Tejas Tank <tta@openerp.com> | 2012-08-17 16:16:10 +0530 |
| commit | f4f0d42a70d62320b0d0b0d3aab16336b696a485 (patch) | |
| tree | ac01c07c02a5284eb67d044e92e3255506e70a08 /addons/document_webdav | |
| parent | ae1ed5900caf1d0429ef731343af4ae364d989ae (diff) | |
| parent | 6666d5993f9753c6ec3aec721b41ebd3fbc6c18c (diff) | |
Merged with latest.
bzr revid: tta@openerp.com-20120817104610-h7pova57capzm1by
Diffstat (limited to 'addons/document_webdav')
43 files changed, 217 insertions, 226 deletions
diff --git a/addons/document_webdav/__openerp__.py b/addons/document_webdav/__openerp__.py index ec50d9301dc..4d39a4e8015 100644 --- a/addons/document_webdav/__openerp__.py +++ b/addons/document_webdav/__openerp__.py @@ -40,7 +40,8 @@ With this module, the WebDAV server for documents is activated. You can then use any compatible browser to remotely see the attachments of OpenObject. -After installation, the WebDAV server can be controlled by a [webdav] section in the server's config. +After installation, the WebDAV server can be controlled by a [webdav] section in +the server's config. Server Configuration Parameter: [webdav] @@ -55,7 +56,7 @@ Server Configuration Parameter: ; these options on Also implements IETF RFC 5785 for services discovery on a http server, -which needs explicit configuration in openerp-server.conf, too. +which needs explicit configuration in openerp-server.conf too. """, "depends" : ["base", "document"], "init_xml" : [], diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py index 772b7600f20..1b826434f74 100644 --- a/addons/document_webdav/dav_fs.py +++ b/addons/document_webdav/dav_fs.py @@ -78,13 +78,13 @@ def _str2time(cre): class BoundStream2(object): """Wraps around a seekable buffer, reads a determined range of data - + Note that the supplied stream object MUST support a size() which should return its data length (in bytes). - + A variation of the class in websrv_lib.py """ - + def __init__(self, stream, offset=None, length=None, chunk_size=None): self._stream = stream self._offset = offset or 0 @@ -98,8 +98,8 @@ class BoundStream2(object): def read(self, size=-1): if not self._stream: - raise IOError(errno.EBADF, "read() without stream") - + raise IOError(errno.EBADF, "read() without stream.") + if self._rem_length == 0: return '' elif self._rem_length < 0: @@ -110,7 +110,7 @@ class BoundStream2(object): rsize = size if self._chunk_size and self._chunk_size < rsize: rsize = self._chunk_size - + data = self._stream.read(rsize) self._rem_length -= len(data) @@ -136,25 +136,25 @@ class BoundStream2(object): """ if whence == os.SEEK_SET: if pos < 0 or pos > self._length: - raise IOError(errno.EINVAL,"Cannot seek") + raise IOError(errno.EINVAL,"Cannot seek.") self._stream.seek(pos - self._offset) self._rem_length = self._length - pos elif whence == os.SEEK_CUR: if pos > 0: if pos > self._rem_length: - raise IOError(errno.EINVAL,"Cannot seek past end") + raise IOError(errno.EINVAL,"Cannot seek past end.") elif pos < 0: oldpos = self.tell() if oldpos + pos < 0: - raise IOError(errno.EINVAL,"Cannot seek before start") + raise IOError(errno.EINVAL,"Cannot seek before start.") self._stream.seek(pos, os.SEEK_CUR) self._rem_length -= pos elif whence == os.SEEK_END: if pos > 0: - raise IOError(errno.EINVAL,"Cannot seek past end") + raise IOError(errno.EINVAL,"Cannot seek past end.") else: if self._length + pos < 0: - raise IOError(errno.EINVAL,"Cannot seek before start") + raise IOError(errno.EINVAL,"Cannot seek before start.") newpos = self._offset + self._length + pos self._stream.seek(newpos, os.SEEK_SET) self._rem_length = 0 - pos @@ -206,7 +206,7 @@ class openerp_dav_handler(dav_interface): self.parent.log_error("Cannot %s: %s", opname, str(e)) self.parent.log_message("Exc: %s",traceback.format_exc()) # see par 9.3.1 of rfc - raise DAV_Error(403, str(e) or 'Not supported at this path') + raise DAV_Error(403, str(e) or 'Not supported at this path.') except EnvironmentError, err: if cr: cr.close() import traceback @@ -218,7 +218,7 @@ class openerp_dav_handler(dav_interface): if cr: cr.close() self.parent.log_error("Cannot %s: %s", opname, str(e)) self.parent.log_message("Exc: %s",traceback.format_exc()) - raise default_exc("Operation failed") + raise default_exc("Operation failed.") def _get_dav_lockdiscovery(self, uri): """ We raise that so that the node API is used """ @@ -400,7 +400,7 @@ class openerp_dav_handler(dav_interface): domain = None if filters: domain = node.get_domain(cr, filters) - + if hasattr(filters, 'getElementsByTagNameNS'): hrefs = filters.getElementsByTagNameNS('DAV:', 'href') if hrefs: @@ -434,7 +434,7 @@ class openerp_dav_handler(dav_interface): except DAV_Error: raise except Exception, e: - self.parent.log_error("cannot get_children: "+ str(e)) + self.parent.log_error("Cannot get_children: "+str(e)+".") raise finally: if cr: cr.close() @@ -488,7 +488,7 @@ class openerp_dav_handler(dav_interface): if not node: raise DAV_NotFound2(uri2) # TODO: if node is a collection, for some specific set of - # clients ( web browsers; available in node context), + # clients ( web browsers; available in node context), # we may return a pseydo-html page with the directory listing. try: res = node.open_data(cr,'r') @@ -500,15 +500,15 @@ class openerp_dav_handler(dav_interface): assert start >= 0 if end and end < start: self.parent.log_error("Invalid range for data: %s-%s" %(start, end)) - raise DAV_Error(416, "Invalid range for data") + raise DAV_Error(416, "Invalid range for data.") if end: if end >= res.size(): - raise DAV_Error(416, "Requested data exceeds available size") + raise DAV_Error(416, "Requested data exceeds available size.") length = (end + 1) - start else: length = res.size() - start res = BoundStream2(res, offset=start, length=length) - + except TypeError,e: # for the collections that return this error, the DAV standard # says we'd better just return 200 OK with empty data @@ -564,10 +564,10 @@ class openerp_dav_handler(dav_interface): @memoize(CACHE_SIZE) def _get_dav_getcontentlength(self, uri): - """ return the content length of an object """ + """ return the content length of an object """ self.parent.log_message('get length: %s' % uri) result = 0 - cr, uid, pool, dbname, uri2 = self.get_cr(uri) + cr, uid, pool, dbname, uri2 = self.get_cr(uri) if not dbname: if cr: cr.close() return str(result) @@ -602,7 +602,7 @@ class openerp_dav_handler(dav_interface): cr, uid, pool, dbname, uri2 = self.get_cr(uri) if not dbname: return time.time() - try: + try: node = self.uri2object(cr, uid, pool, uri2) if not node: raise DAV_NotFound2(uri2) @@ -623,11 +623,11 @@ class openerp_dav_handler(dav_interface): @memoize(CACHE_SIZE) def get_creationdate(self, uri): - """ return the last modified date of the object """ + """ return the last modified date of the object """ cr, uid, pool, dbname, uri2 = self.get_cr(uri) if not dbname: raise DAV_Error, 409 - try: + try: node = self.uri2object(cr, uid, pool, uri2) if not node: raise DAV_NotFound2(uri2) @@ -643,7 +643,7 @@ class openerp_dav_handler(dav_interface): if not dbname: if cr: cr.close() return 'httpd/unix-directory' - try: + try: node = self.uri2object(cr, uid, pool, uri2) if not node: raise DAV_NotFound2(uri2) @@ -651,8 +651,8 @@ class openerp_dav_handler(dav_interface): return result #raise DAV_NotFound, 'Could not find %s' % path finally: - if cr: cr.close() - + if cr: cr.close() + def mkcol(self,uri): """ create a new collection see par. 9.3 of rfc4918 @@ -661,7 +661,7 @@ class openerp_dav_handler(dav_interface): cr, uid, pool, dbname, uri2 = self.get_cr(uri) if not uri2[-1]: if cr: cr.close() - raise DAV_Error(409, "Cannot create nameless collection") + raise DAV_Error(409, "Cannot create nameless collection.") if not dbname: if cr: cr.close() raise DAV_Error, 409 @@ -672,7 +672,7 @@ class openerp_dav_handler(dav_interface): nc = node.child(cr, uri2[-1]) if nc: cr.close() - raise DAV_Error(405, "Path already exists") + raise DAV_Error(405, "Path already exists.") self._try_function(node.create_child_collection, (cr, uri2[-1]), "create col %s" % uri2[-1], cr=cr) cr.commit() @@ -690,30 +690,30 @@ class openerp_dav_handler(dav_interface): node = self.uri2object(cr, uid, pool, uri2[:]) except Exception: node = False - + objname = misc.ustr(uri2[-1]) - + ret = None if not node: dir_node = self.uri2object(cr, uid, pool, uri2[:-1]) if not dir_node: cr.close() - raise DAV_NotFound('Parent folder not found') + raise DAV_NotFound('Parent folder not found.') newchild = self._try_function(dir_node.create_child, (cr, objname, data), "create %s" % objname, cr=cr) if not newchild: cr.commit() cr.close() - raise DAV_Error(400, "Failed to create resource") - + raise DAV_Error(400, "Failed to create resource.") + uparts=urlparse.urlparse(uri) fileloc = '/'.join(newchild.full_path()) if isinstance(fileloc, unicode): fileloc = fileloc.encode('utf-8') # the uri we get is a mangled one, where the davpath has been removed davpath = self.parent.get_davpath() - + surl = '%s://%s' % (uparts[0], uparts[1]) uloc = urllib.quote(fileloc) hurl = False @@ -727,19 +727,19 @@ class openerp_dav_handler(dav_interface): ret = (str(hurl), etag) else: self._try_function(node.set_data, (cr, data), "save %s" % objname, cr=cr) - + cr.commit() cr.close() return ret def rmcol(self,uri): """ delete a collection """ - cr, uid, pool, dbname, uri2 = self.get_cr(uri) + cr, uid, pool, dbname, uri2 = self.get_cr(uri) if not dbname: if cr: cr.close() raise DAV_Error, 409 - node = self.uri2object(cr, uid, pool, uri2) + node = self.uri2object(cr, uid, pool, uri2) self._try_function(node.rmcol, (cr,), "rmcol %s" % uri, cr=cr) cr.commit() @@ -748,14 +748,14 @@ class openerp_dav_handler(dav_interface): def rm(self,uri): cr, uid, pool,dbname, uri2 = self.get_cr(uri) - if not dbname: + if not dbname: if cr: cr.close() raise DAV_Error, 409 node = self.uri2object(cr, uid, pool, uri2) res = self._try_function(node.rm, (cr,), "rm %s" % uri, cr=cr) if not res: if cr: cr.close() - raise OSError(1, 'Operation not permited.') + raise OSError(1, 'Invalid Action!') cr.commit() cr.close() return 204 @@ -922,8 +922,8 @@ class openerp_dav_handler(dav_interface): return result def unlock(self, uri, token): - """ Unlock a resource from that token - + """ Unlock a resource from that token + @return True if unlocked, False if no lock existed, Exceptions """ cr, uid, pool, dbname, uri2 = self.get_cr(uri) @@ -937,7 +937,7 @@ class openerp_dav_handler(dav_interface): except AttributeError: # perhaps the node doesn't support locks cr.close() - raise DAV_Error(400, 'No locks for this resource') + raise DAV_Error(400, 'No locks for this resource.') res = self._try_function(node_fn, (cr, token), "unlock %s" % uri, cr=cr) cr.commit() @@ -959,14 +959,14 @@ class openerp_dav_handler(dav_interface): node = self.uri2object(cr, uid, pool, uri2[:]) except Exception: node = False - + objname = misc.ustr(uri2[-1]) - + if not node: dir_node = self.uri2object(cr, uid, pool, uri2[:-1]) if not dir_node: cr.close() - raise DAV_NotFound('Parent folder not found') + raise DAV_NotFound('Parent folder not found.') # We create a new node (file) but with empty data=None, # as in RFC4918 p. 9.10.4 @@ -975,8 +975,8 @@ class openerp_dav_handler(dav_interface): if not node: cr.commit() cr.close() - raise DAV_Error(400, "Failed to create resource") - + raise DAV_Error(400, "Failed to create resource.") + created = True try: @@ -984,7 +984,7 @@ class openerp_dav_handler(dav_interface): except AttributeError: # perhaps the node doesn't support locks cr.close() - raise DAV_Error(400, 'No locks for this resource') + raise DAV_Error(400, 'No locks for this resource.') # Obtain the lock on the node lres, pid, token = self._try_function(node_fn, (cr, lock_data), "lock %s" % objname, cr=cr) @@ -992,10 +992,10 @@ class openerp_dav_handler(dav_interface): if not lres: cr.commit() cr.close() - raise DAV_Error(423, "Resource already locked") - + raise DAV_Error(423, "Resource already locked.") + assert isinstance(lres, list), 'lres: %s' % repr(lres) - + try: data = mk_lock_response(self, uri, lres) cr.commit() diff --git a/addons/document_webdav/document_webdav.py b/addons/document_webdav/document_webdav.py index da463c9eb1b..f53353dd43c 100644 --- a/addons/document_webdav/document_webdav.py +++ b/addons/document_webdav/document_webdav.py @@ -43,7 +43,7 @@ class document_davdir(osv.osv): elif dbro.type == 'ressource': return nodes.node_res_dir else: - raise ValueError("dir node for %s type", dbro.type) + raise ValueError("Directory node for %s type.", dbro.type) def _prepare_context(self, cr, uid, nctx, context=None): nctx.node_file_class = nodes.node_file @@ -67,18 +67,18 @@ document_davdir() class dav_dir_property(osv.osv): """ Arbitrary WebDAV properties, attached to document.directories. - + Some DAV properties have to be settable at directories, depending on the database directory structure. - + Example would be the principal-URL. - + There _can_ be properties without a directory, which means that they globally apply to all the directories (aka. collections) of the present database. """ _name = 'document.webdav.dir.property' - + _columns = { 'create_date': fields.datetime('Date Created', readonly=True), 'create_uid': fields.many2one('res.users', 'Creator', readonly=True), @@ -90,25 +90,25 @@ class dav_dir_property(osv.osv): 'value': fields.text('Value'), 'do_subst': fields.boolean('Substitute', required=True), } - + _defaults = { 'do_subst': False, } - + dav_dir_property() class dav_file_property(osv.osv): """ Arbitrary WebDAV properties, attached to ir.attachments. - + A special case is the locks that can be applied on file nodes. - + There _can_ be properties without a file (RFC?), which means that they globally apply to all the attachments of the present database. - + TODO access permissions, per property. """ _name = 'document.webdav.file.property' - + _columns = { 'create_date': fields.datetime('Date Created', readonly=True), 'create_uid': fields.many2one('res.users', 'Creator', readonly=True), @@ -120,11 +120,11 @@ class dav_file_property(osv.osv): 'value': fields.text('Value'), 'do_subst': fields.boolean('Substitute', required=True), } - + _defaults = { 'do_subst': False, } - + dav_file_property() #eof diff --git a/addons/document_webdav/i18n/ar.po b/addons/document_webdav/i18n/ar.po index 5cccadf73fe..be15d1886f1 100644 --- a/addons/document_webdav/i18n/ar.po +++ b/addons/document_webdav/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/bg.po b/addons/document_webdav/i18n/bg.po index 1715e422103..fde05f6faab 100644 --- a/addons/document_webdav/i18n/bg.po +++ b/addons/document_webdav/i18n/bg.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/ca.po b/addons/document_webdav/i18n/ca.po index 517c9844197..0d1409a37c7 100644 --- a/addons/document_webdav/i18n/ca.po +++ b/addons/document_webdav/i18n/ca.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/cs.po b/addons/document_webdav/i18n/cs.po index 8cc548c26ca..d98c27df5b2 100644 --- a/addons/document_webdav/i18n/cs.po +++ b/addons/document_webdav/i18n/cs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/da.po b/addons/document_webdav/i18n/da.po index 173990f7427..79316ecf4ed 100644 --- a/addons/document_webdav/i18n/da.po +++ b/addons/document_webdav/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/de.po b/addons/document_webdav/i18n/de.po index ab78683e27a..be4b5dbd216 100644 --- a/addons/document_webdav/i18n/de.po +++ b/addons/document_webdav/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/el.po b/addons/document_webdav/i18n/el.po index 23497def081..cf4e4358a59 100644 --- a/addons/document_webdav/i18n/el.po +++ b/addons/document_webdav/i18n/el.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/en_GB.po b/addons/document_webdav/i18n/en_GB.po index 9197218fd2b..130cd04e8e9 100644 --- a/addons/document_webdav/i18n/en_GB.po +++ b/addons/document_webdav/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/es.po b/addons/document_webdav/i18n/es.po index d13f2ed4d2e..0fddb6b85cc 100644 --- a/addons/document_webdav/i18n/es.po +++ b/addons/document_webdav/i18n/es.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/es_CR.po b/addons/document_webdav/i18n/es_CR.po index 437587a00e8..8405f5b3e09 100644 --- a/addons/document_webdav/i18n/es_CR.po +++ b/addons/document_webdav/i18n/es_CR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" "Language: es\n" #. module: document_webdav diff --git a/addons/document_webdav/i18n/es_EC.po b/addons/document_webdav/i18n/es_EC.po index 008e9067bec..69731b31a33 100644 --- a/addons/document_webdav/i18n/es_EC.po +++ b/addons/document_webdav/i18n/es_EC.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/es_PY.po b/addons/document_webdav/i18n/es_PY.po index d03fb657631..53990abd187 100644 --- a/addons/document_webdav/i18n/es_PY.po +++ b/addons/document_webdav/i18n/es_PY.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/et.po b/addons/document_webdav/i18n/et.po index e7b20737680..36ff37eab87 100644 --- a/addons/document_webdav/i18n/et.po +++ b/addons/document_webdav/i18n/et.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/eu.po b/addons/document_webdav/i18n/eu.po index 74492ab4747..0abc054c139 100644 --- a/addons/document_webdav/i18n/eu.po +++ b/addons/document_webdav/i18n/eu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/fi.po b/addons/document_webdav/i18n/fi.po index 8385e9da222..053f8bed734 100644 --- a/addons/document_webdav/i18n/fi.po +++ b/addons/document_webdav/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/fr.po b/addons/document_webdav/i18n/fr.po index 030bd678e50..7b15e2a15c6 100644 --- a/addons/document_webdav/i18n/fr.po +++ b/addons/document_webdav/i18n/fr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/gl.po b/addons/document_webdav/i18n/gl.po index 953287090e4..d048adf1b40 100644 --- a/addons/document_webdav/i18n/gl.po +++ b/addons/document_webdav/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/gu.po b/addons/document_webdav/i18n/gu.po index 6a02ffc6226..b5768300597 100644 --- a/addons/document_webdav/i18n/gu.po +++ b/addons/document_webdav/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/hr.po b/addons/document_webdav/i18n/hr.po index 31713bc4981..ac51f82627e 100644 --- a/addons/document_webdav/i18n/hr.po +++ b/addons/document_webdav/i18n/hr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/hu.po b/addons/document_webdav/i18n/hu.po index dd15a00d2e2..21d0c9974af 100644 --- a/addons/document_webdav/i18n/hu.po +++ b/addons/document_webdav/i18n/hu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/id.po b/addons/document_webdav/i18n/id.po index b62de6a1076..5ef97a916fe 100644 --- a/addons/document_webdav/i18n/id.po +++ b/addons/document_webdav/i18n/id.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/it.po b/addons/document_webdav/i18n/it.po index a72787ccdaf..b6ca5326a8d 100644 --- a/addons/document_webdav/i18n/it.po +++ b/addons/document_webdav/i18n/it.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/ja.po b/addons/document_webdav/i18n/ja.po index b04a7a9b6c3..179a2772de7 100644 --- a/addons/document_webdav/i18n/ja.po +++ b/addons/document_webdav/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/mn.po b/addons/document_webdav/i18n/mn.po index c3434b51c18..5734661e2ec 100644 --- a/addons/document_webdav/i18n/mn.po +++ b/addons/document_webdav/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/nl.po b/addons/document_webdav/i18n/nl.po index c5cb3b186e3..1b48cc29f65 100644 --- a/addons/document_webdav/i18n/nl.po +++ b/addons/document_webdav/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:13+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/pl.po b/addons/document_webdav/i18n/pl.po index 3e44ddb1d53..7805c315607 100644 --- a/addons/document_webdav/i18n/pl.po +++ b/addons/document_webdav/i18n/pl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/pt.po b/addons/document_webdav/i18n/pt.po index 5325b09e526..fe61c9618ea 100644 --- a/addons/document_webdav/i18n/pt.po +++ b/addons/document_webdav/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/pt_BR.po b/addons/document_webdav/i18n/pt_BR.po index d6d8cc74915..466d4a2a85d 100644 --- a/addons/document_webdav/i18n/pt_BR.po +++ b/addons/document_webdav/i18n/pt_BR.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-02-08 00:36+0000\n" -"PO-Revision-Date: 2011-01-29 15:36+0000\n" -"Last-Translator: Adriano Prado <adrianojprado@hotmail.com>\n" +"PO-Revision-Date: 2012-07-28 18:55+0000\n" +"Last-Translator: Fábio Martinelli <webmaster@guaru.net>\n" "Language-Team: Brazilian Portuguese <pt_BR@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-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 @@ -26,7 +26,7 @@ msgstr "Dada de Criação" #. module: document_webdav #: model:ir.ui.menu,name:document_webdav.menu_document_props msgid "Documents" -msgstr "" +msgstr "Documentos" #. module: document_webdav #: constraint:document.directory:0 @@ -45,17 +45,17 @@ msgstr "Procurar Propriedades dos Documentos" #: view:document.webdav.file.property:0 #: field:document.webdav.file.property,namespace:0 msgid "Namespace" -msgstr "" +msgstr "Namespace" #. module: document_webdav #: field:document.directory,dav_prop_ids:0 msgid "DAV properties" -msgstr "" +msgstr "Propriedades DAV" #. module: document_webdav #: model:ir.model,name:document_webdav.model_document_webdav_file_property msgid "document.webdav.file.property" -msgstr "" +msgstr "document.webdav.file.property" #. module: document_webdav #: view:document.webdav.dir.property:0 @@ -66,18 +66,18 @@ msgstr "Agrupar Por..." #. module: document_webdav #: view:document.directory:0 msgid "These properties will be added to WebDAV requests" -msgstr "" +msgstr "Estas propriedades serão adicionadas para requisições WebDAV" #. module: document_webdav #: model:ir.actions.act_window,name:document_webdav.action_file_props_form msgid "DAV Properties for Documents" -msgstr "" +msgstr "Propriedades DAV para Documentos" #. module: document_webdav #: code:addons/document_webdav/webdav.py:37 #, python-format msgid "PyWebDAV Import Error!" -msgstr "" +msgstr "Erro de Iimportação PyWEbDAV!" #. module: document_webdav #: view:document.webdav.file.property:0 @@ -88,7 +88,7 @@ msgstr "Documento" #. module: document_webdav #: model:ir.ui.menu,name:document_webdav.menu_folder_props msgid "Folders" -msgstr "" +msgstr "Pastas" #. module: document_webdav #: sql_constraint:document.directory:0 @@ -103,7 +103,7 @@ msgstr "Contexo dinâmico" #. module: document_webdav #: view:document.directory:0 msgid "WebDAV properties" -msgstr "" +msgstr "Propriedades WebDAV" #. module: document_webdav #: sql_constraint:document.directory:0 @@ -118,11 +118,14 @@ msgid "" "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" "0.9.4.tar.gz&can=2&q=/" msgstr "" +"Por favor instale o PyWebDAV de " +"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" +"0.9.4.tar.gz&can=2&q=/" #. module: document_webdav #: model:ir.actions.act_window,name:document_webdav.action_dir_props_form msgid "DAV Properties for Folders" -msgstr "" +msgstr "Propriedades DAV para as pastas" #. module: document_webdav #: view:document.directory:0 @@ -140,7 +143,7 @@ msgstr "Nome" #. module: document_webdav #: model:ir.model,name:document_webdav.model_document_webdav_dir_property msgid "document.webdav.dir.property" -msgstr "" +msgstr "document.webdav.dir.property" #. module: document_webdav #: field:document.webdav.dir.property,value:0 @@ -180,12 +183,12 @@ msgstr "Criador" #. module: document_webdav #: model:ir.ui.menu,name:document_webdav.menu_properties msgid "DAV Properties" -msgstr "" +msgstr "Propriedades DAV" #. module: document_webdav #: sql_constraint:document.directory:0 msgid "Directory must have a parent or a storage" -msgstr "" +msgstr "O diretório precisa ter um pai ou um armazenamento" #. module: document_webdav #: field:document.webdav.dir.property,do_subst:0 diff --git a/addons/document_webdav/i18n/ro.po b/addons/document_webdav/i18n/ro.po index 3a8e813e999..9345eaa57d8 100644 --- a/addons/document_webdav/i18n/ro.po +++ b/addons/document_webdav/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/ru.po b/addons/document_webdav/i18n/ru.po index 1378090be02..deef40433db 100644 --- a/addons/document_webdav/i18n/ru.po +++ b/addons/document_webdav/i18n/ru.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/sl.po b/addons/document_webdav/i18n/sl.po index 72f0f56d359..d43c0e4ede7 100644 --- a/addons/document_webdav/i18n/sl.po +++ b/addons/document_webdav/i18n/sl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/sr.po b/addons/document_webdav/i18n/sr.po index 975f83d2bbb..1667ac3f0c8 100644 --- a/addons/document_webdav/i18n/sr.po +++ b/addons/document_webdav/i18n/sr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/sr@latin.po b/addons/document_webdav/i18n/sr@latin.po index b71777016d8..5d4236ffd0f 100644 --- a/addons/document_webdav/i18n/sr@latin.po +++ b/addons/document_webdav/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/sv.po b/addons/document_webdav/i18n/sv.po index 9484ee33386..1281ccaf622 100644 --- a/addons/document_webdav/i18n/sv.po +++ b/addons/document_webdav/i18n/sv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/tr.po b/addons/document_webdav/i18n/tr.po index a111fe11d3a..f15d2c54680 100644 --- a/addons/document_webdav/i18n/tr.po +++ b/addons/document_webdav/i18n/tr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/i18n/zh_CN.po b/addons/document_webdav/i18n/zh_CN.po index cf7af2836b5..edfff77e05a 100644 --- a/addons/document_webdav/i18n/zh_CN.po +++ b/addons/document_webdav/i18n/zh_CN.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-14 06:14+0000\n" -"X-Generator: Launchpad (build 15614)\n" +"X-Launchpad-Export-Date: 2012-08-07 05:25+0000\n" +"X-Generator: Launchpad (build 15745)\n" #. module: document_webdav #: field:document.webdav.dir.property,create_date:0 diff --git a/addons/document_webdav/test_davclient.py b/addons/document_webdav/test_davclient.py index a4dda231bd8..f1f2e58c835 100755 --- a/addons/document_webdav/test_davclient.py +++ b/addons/document_webdav/test_davclient.py @@ -69,9 +69,9 @@ class PersistentTransport(Transport): host, extra_headers, x509 = Transport.get_host_info(self,host) if extra_headers == None: extra_headers = [] - + extra_headers.append( ( 'Connection', 'keep-alive' )) - + return host, extra_headers, x509 def _parse_response(self, file, sock, response): @@ -122,9 +122,9 @@ class PersistentTransport(Transport): resp = h._conn.getresponse() # TODO: except BadStatusLine, e: - + errcode, errmsg, headers = resp.status, resp.reason, resp.msg - + if errcode != 200: raise ProtocolError( @@ -145,7 +145,7 @@ class PersistentTransport(Transport): class CompressedTransport(PersistentTransport): def send_content(self, connection, request_body): connection.putheader("Content-Type", "text/xml") - + if len(request_body) > 512 or True: buffer = StringIO.StringIO() output = gzip.GzipFile(mode='wb', fileobj=buffer) @@ -176,7 +176,7 @@ class SafePersistentTransport(PersistentTransport): class AuthClient(object): def getAuth(self, atype, realm): raise NotImplementedError("Cannot authenticate for %s" % atype) - + def resolveFailedRealm(self, realm): """ Called when, using a known auth type, the realm is not in cache """ @@ -195,7 +195,7 @@ class BasicAuthClient(AuthClient): _logger.debug("missing key: \"%s\"" % realm) self.resolveFailedRealm(realm) return 'Basic '+ self._realm_dict[realm] - + def addLogin(self, realm, username, passwd): """ Add some known username/password for a specific login. This function should be called once, for each realm @@ -210,7 +210,7 @@ class BasicAuthClient(AuthClient): class addAuthTransport: """ Intermediate class that authentication algorithm to http transport """ - + def setAuthClient(self, authobj): """ Set the authentication client object. This method must be called before any request is issued, that @@ -218,7 +218,7 @@ class addAuthTransport: """ assert isinstance(authobj, AuthClient) self._auth_client = authobj - + def request(self, host, handler, request_body, verbose=0): # issue XML-RPC request @@ -226,7 +226,7 @@ class addAuthTransport: h = self.make_connection(host) if verbose: h.set_debuglevel(1) - + tries = 0 atype = None realm = None @@ -246,7 +246,7 @@ class addAuthTransport: resp = h._conn.getresponse() # except BadStatusLine, e: tries += 1 - + if resp.status == 401: if 'www-authenticate' in resp.msg: (atype,realm) = resp.msg.getheader('www-authenticate').split(' ',1) @@ -258,7 +258,7 @@ class addAuthTransport: _logger.debug("Resp: %r %r", resp.version,resp.isclosed(), resp.will_close) _logger.debug("Want to do auth %s for realm %s", atype, realm) if atype != 'Basic': - raise ProtocolError(host+handler, 403, + raise ProtocolError(host+handler, 403, "Unknown authentication method: %s" % atype, resp.msg) continue # with the outer while loop else: @@ -268,17 +268,17 @@ class addAuthTransport: if resp.status != 200: raise ProtocolError( host + handler, resp.status, resp.reason, resp.msg ) - + self.verbose = verbose - + try: sock = h._conn.sock except AttributeError: sock = None - + return self._parse_response(h.getfile(), sock, resp) - raise ProtocolError(host+handler, 403, "No authentication",'') + raise ProtocolError(host+handler, 403, "No authentication.",'') class PersistentAuthTransport(addAuthTransport,PersistentTransport): pass @@ -302,7 +302,7 @@ class HTTPSConnection(httplib.HTTPSConnection): self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ca_certs=ca_certs, cert_reqs=cert_reqs) - + def getpeercert(self): import ssl @@ -316,14 +316,14 @@ class HTTPSConnection(httplib.HTTPSConnection): if cert[0-lf] != '\n': cert = cert[:0-lf]+'\n'+cert[0-lf:] _logger.debug("len-footer: %s cert: %r", lf, cert[0-lf]) - + return cert class DAVClient(object): """An instance of a WebDAV client, connected to the OpenERP server """ - + def __init__(self, user=None, passwd=None, dbg=0, use_ssl=False, useragent=False, timeout=None): if use_ssl: self.host = config.get_misc('httpsd', 'interface', False) @@ -353,10 +353,10 @@ class DAVClient(object): def get_creds(self, obj, cr, uid): """Read back the user credentials from cr, uid - + @param obj is any orm object, in order to use its pool @param uid is the numeric id, which we will try to reverse resolve - + note: this is a hackish way to get the credentials. It is expected to break if "base_crypt" is used. """ @@ -366,7 +366,7 @@ class DAVClient(object): self.user = res[0]['login'] self.passwd = res[0]['password'] if self.passwd.startswith('$1$'): - # md5 by base crypt. We cannot decode, wild guess + # md5 by base crypt. We cannot decode, wild guess # that passwd = login self.passwd = self.user return True @@ -402,7 +402,7 @@ class DAVClient(object): r1 = conn.getresponse() except httplib.BadStatusLine, bsl: log.warning("Bad status line: %s", bsl.line) - raise Exception('Bad status line') + raise Exception('Bad status line.') if r1.status == 401: # and r1.headers: if 'www-authenticate' in r1.msg: (atype,realm) = r1.msg.getheader('www-authenticate').split(' ',1) @@ -415,7 +415,7 @@ class DAVClient(object): auths = base64.encodestring(self.user + ':' + self.passwd) if auths[-1] == "\n": auths = auths[:-1] - hdrs['Authorization']= 'Basic '+ auths + hdrs['Authorization']= 'Basic '+ auths #sleep(1) conn.request(method, path, body, hdrs ) r1 = conn.getresponse() @@ -437,7 +437,7 @@ class DAVClient(object): doc = xml.dom.minidom.parseString(data1) _logger.debug("XML Body:\n %s", doc.toprettyxml(indent="\t")) except Exception: - _logger.warning("could not print xml", exc_info=True) + _logger.warning("Cannot print XML.", exc_info=True) pass conn.close() return r1.status, r1.msg, data1 @@ -475,10 +475,10 @@ class DAVClient(object): assert s == 200, "Status: %r" % s assert 'OPTIONS' in m.getheader('Allow') _logger.debug('Options: %r', m.getheader('Allow')) - + if expect: self._assert_headers(expect, m) - + def _parse_prop_response(self, data): """ Parse a propfind/propname response """ @@ -488,7 +488,7 @@ class DAVClient(object): if node.nodeType == node.TEXT_NODE: rc.append(node.data) return ''.join(rc) - + def getElements(node, namespaces=None, strict=False): for cnod in node.childNodes: if cnod.nodeType != node.ELEMENT_NODE: @@ -534,10 +534,10 @@ class DAVClient(object): rstatus = int(sta) else: _logger.debug("What is <%s> inside a <propstat>?", pno.tagName) - + else: _logger.debug("Unknown node: %s", cno.tagName) - + res.setdefault(href,[]).append((status, res_nss)) return res @@ -558,7 +558,7 @@ class DAVClient(object): propstr += '<ns%d:%s xmlns:ns%d="%s" />' %(nscount, p, nscount, ns) nscount += 1 propstr += '</prop>' - + body="""<?xml version="1.0" encoding="utf-8"?> <propfind xmlns="DAV:">%s</propfind>""" % propstr hdrs = { 'Content-Type': 'text/xml; charset=utf-8', @@ -566,7 +566,7 @@ class DAVClient(object): 'Depth': depth, } - s, m, d = self._http_request(self.davpath + path, method='PROPFIND', + s, m, d = self._http_request(self.davpath + path, method='PROPFIND', hdrs=hdrs, body=body) assert s == 207, "Bad status: %s" % s ctype = m.getheader('Content-Type').split(';',1)[0] @@ -578,7 +578,7 @@ class DAVClient(object): else: assert len(res) >= 1 return res - + def gd_propname(self, path, depth=0): body="""<?xml version="1.0" encoding="utf-8"?> @@ -587,7 +587,7 @@ class DAVClient(object): 'Accept': 'text/xml', 'Depth': depth } - s, m, d = self._http_request(self.davpath + path, method='PROPFIND', + s, m, d = self._http_request(self.davpath + path, method='PROPFIND', hdrs=hdrs, body=body) assert s == 207, "Bad status: %s" % s ctype = m.getheader('Content-Type').split(';',1)[0] @@ -605,7 +605,7 @@ class DAVClient(object): def gd_lsl(self, path): """ Return a list of 'ls -l' kind of data for a folder - + This is based on propfind. """ @@ -616,7 +616,7 @@ class DAVClient(object): propnames = [ l[1] for l in lspairs] propres = self.gd_propfind(path, props=propnames, depth=1) - + res = [] for href, pr in propres.items(): lsline = {} @@ -638,9 +638,9 @@ class DAVClient(object): lsline[lsp[0]] = lsp[2] else: _logger.debug("Strange status: %s", st) - + res.append(lsline) - + return res def gd_get(self, path, crange=None, mime=None, compare=None): @@ -651,7 +651,7 @@ class DAVClient(object): if isinstance(crange, tuple): crange = [crange,] if not isinstance(crange, list): - raise TypeError("Range must be a tuple or list of tuples") + raise TypeError("Range must be a tuple or list of tuples.") rs = [] for r in crange: rs.append('%d-%d' % r) @@ -683,13 +683,13 @@ class DAVClient(object): return ctype, rrange, d def gd_put(self, path, body=None, srcpath=None, mime=None, noclobber=False, ): - """ HTTP PUT + """ HTTP PUT @param noclobber will prevent overwritting a resource (If-None-Match) @param mime will set the content-type """ hdrs = { } if not (body or srcpath): - raise ValueError("PUT must have something to send") + raise ValueError("PUT must have something to send.") if (not body) and srcpath: fd = open(srcpath, 'rb') body = fd.read() @@ -698,7 +698,7 @@ class DAVClient(object): hdrs['Content-Type'] = mime if noclobber: hdrs['If-None-Match'] = '*' - s, m, d = self._http_request(self.davpath + path, method='PUT', + s, m, d = self._http_request(self.davpath + path, method='PUT', hdrs=hdrs, body=body) assert s == (201), "Bad status: %s" % s etag = m.getheader('ETag') diff --git a/addons/document_webdav/webdav.py b/addons/document_webdav/webdav.py index baa394e94a1..903dd6a16ba 100644 --- a/addons/document_webdav/webdav.py +++ b/addons/document_webdav/webdav.py @@ -65,7 +65,7 @@ class Prop2xml(object): def createText2Node(self, data): if not isinstance(data, StringTypes): - raise TypeError, "node contents must be a string" + raise TypeError, "Node contents must be a string." t = Text2() t.data = data t.ownerDocument = self.doc diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py index 65ebb49ff5f..28909e61167 100644 --- a/addons/document_webdav/webdav_server.py +++ b/addons/document_webdav/webdav_server.py @@ -73,7 +73,7 @@ def OpenDAVConfig(**kw): class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): verbose = False - + protocol_version = 'HTTP/1.1' _HTTP_OPTIONS= { 'DAV' : ['1', '2'], 'Allow' : [ 'GET', 'HEAD', 'COPY', 'MOVE', 'POST', 'PUT', @@ -119,7 +119,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): if up.path.startswith(self.davpath): self.headers['Destination'] = up.path[len(self.davpath):] else: - raise DAV_Forbidden("Not allowed to copy/move outside webdav path") + raise DAV_Forbidden("Not allowed to copy/move outside webdav path.") # TODO: locks DAVRequestHandler.copymove(self, CLASS) @@ -304,7 +304,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): res = dc.unlock(uri, token) except DAV_Error, (ec, dd): return self.send_status(ec, dd) - + if res == True: self.send_body(None, '204', 'OK', 'Resource unlocked.') else: @@ -338,7 +338,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): if isinstance(ldif, list): if len(ldif) !=1 or (not isinstance(ldif[0], TagList)) \ or len(ldif[0].list) != 1: - raise DAV_Error(400, "Cannot accept multiple tokens") + raise DAV_Error(400, "Cannot accept multiple tokens.") ldif = ldif[0].list[0] if ldif[0] == '<' and ldif[-1] == '>': ldif = ldif[1:-1] @@ -352,7 +352,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): lock_data.update(self._lock_unlock_parse(body)) if lock_data['refresh'] and not lock_data.get('token', False): - raise DAV_Error(400, 'Lock refresh must specify token') + raise DAV_Error(400, 'Lock refresh must specify token.') lock_data['depth'] = depth @@ -487,7 +487,7 @@ class dummy_dav_interface(object): class DAVStaticHandler(http_server.StaticHTTPHandler): """ A variant of the Static handler, which will serve dummy DAV requests """ - + verbose = False protocol_version = 'HTTP/1.1' _HTTP_OPTIONS= { 'DAV' : ['1', '2'], @@ -503,13 +503,13 @@ class DAVStaticHandler(http_server.StaticHTTPHandler): self.end_headers() if hasattr(self, '_flush'): self._flush() - + if self.command != 'HEAD': self.wfile.write(content) def do_PROPFIND(self): """Answer to PROPFIND with generic data. - + A rough copy of python-webdav's do_PROPFIND, but hacked to work statically. """ @@ -575,7 +575,7 @@ try: handler._config = conf reg_http_service(directory, DAVHandler, DAVAuthProvider) _logger.info("WebDAV service registered at path: %s/ "% directory) - + if not (config.get_misc('webdav', 'no_root_hack', False)): # Now, replace the static http handler with the dav-enabled one. # If a static-http service has been specified for our server, then @@ -592,7 +592,7 @@ try: # an _ugly_ hack: we put that dir back in tools.config.misc, so that # the StaticHttpHandler can find its dir_path. config.misc.setdefault('static-http',{})['dir_path'] = dir_path - + reg_http_service('/', DAVStaticHandler) except Exception, e: @@ -617,10 +617,10 @@ def init_well_known(): init_well_known() class PrincipalsRedirect(RedirectHTTPHandler): - - + + redirect_paths = {} - + def _find_redirect(self): for b, r in self.redirect_paths.items(): if self.path.startswith(b): @@ -628,7 +628,7 @@ class PrincipalsRedirect(RedirectHTTPHandler): return False def init_principals_redirect(): - """ Some devices like the iPhone will look under /principals/users/xxx for + """ Some devices like the iPhone will look under /principals/users/xxx for the user's properties. In OpenERP we _cannot_ have a stray /principals/... working path, since we have a database path and the /webdav/ component. So, the best solution is to redirect the url with 301. Luckily, it does work in diff --git a/addons/document_webdav/webdav_view.xml b/addons/document_webdav/webdav_view.xml index 44af9f2af3a..5a0cb75274e 100644 --- a/addons/document_webdav/webdav_view.xml +++ b/addons/document_webdav/webdav_view.xml @@ -5,7 +5,6 @@ <record model="ir.ui.view" id="view_dir_props_form"> <field name="name">document.webdav.dir.property.form</field> <field name="model">document.webdav.dir.property</field> - <field name="type">form</field> <field name="arch" type="xml"> <form string="Properties"> <group col="4"> @@ -22,7 +21,6 @@ <record model="ir.ui.view" id="view_dir_props_tree"> <field name="name">document.webdav.dir.property.tree</field> <field name="model">document.webdav.dir.property</field> - <field name="type">tree</field> <field name="arch" type="xml"> <tree string="Properties" toolbar="1"> <field name="dir_id" /> @@ -35,13 +33,9 @@ <record id="view_dir_props_filter" model="ir.ui.view"> <field name="name">Search View: Directory DAV properties</field> <field name="model">document.webdav.dir.property</field> - <field name="type">search</field> <field name="arch" type="xml"> <search string="Search Document properties"> - <field name="name" - filter_domain="['|', ('name','ilike',self), ('namespace','ilike',self)]" - string="Document property"/> - <newline/> + <field name="name" filter_domain="['|', ('name','ilike',self), ('namespace','ilike',self)]" string="Document property"/> <group expand="0" string="Group By..." groups="base.group_no_one"> <filter string="Dir" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'dir_id'}"/> <filter string="Namespace" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'namespace'}"/> @@ -76,7 +70,6 @@ <field name="name">document.directory.webdav.inherit</field> <field name="model">document.directory</field> <field name="inherit_id" ref="document.view_document_directory_form" /> - <field name="type">form</field> <field name="arch" type="xml"> <xpath expr="/form/notebook/page[@string='Dynamic context']" position="after" version="7.0"> <page string="WebDAV properties"> @@ -106,7 +99,6 @@ <record model="ir.ui.view" id="view_file_props_form"> <field name="name">document.webdav.file.property.form</field> <field name="model">document.webdav.file.property</field> - <field name="type">form</field> <field name="arch" type="xml"> <form string="Properties"> <group col="4"> @@ -124,7 +116,6 @@ <record model="ir.ui.view" id="view_file_props_tree"> <field name="name">document.webdav.file.property.tree</field> <field name="model">document.webdav.file.property</field> - <field name="type">tree</field> <field name="arch" type="xml"> <tree string="Properties" toolbar="1"> <field name="file_id" /> @@ -137,13 +128,9 @@ <record id="view_file_props_filter" model="ir.ui.view"> <field name="name">Search View: File DAV properties</field> <field name="model">document.webdav.file.property</field> - <field name="type">search</field> <field name="arch" type="xml"> <search string="Search Document properties"> - <field name="name" - filter_domain="['|', ('name','ilike',self), ('namespace','ilike',self)]" - string="Document Property"/> - <newline/> + <field name="name" filter_domain="['|', ('name','ilike',self), ('namespace','ilike',self)]" string="Document Property"/> <group expand="0" string="Group By..." groups="base.group_no_one"> <filter string="Document" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'file_id'}"/> <filter string="Namespace" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'namespace'}"/> |
