summaryrefslogtreecommitdiff
path: root/addons/document
diff options
context:
space:
mode:
authorMustufa Rangwala <mra@mra-laptop>2010-12-23 09:40:57 +0530
committerMustufa Rangwala <mra@mra-laptop>2010-12-23 09:40:57 +0530
commit6002cc0ec2d02aeaf51b5bc3ee48ec2c9114bf5d (patch)
tree258164131375ad0928afb4644814f928b99ccb89 /addons/document
parent7cd83a7e4f23336495108fb6f1dd4eab0ad2ce9f (diff)
parent045728783b0a65af1b3cfeeaa74c1cab787ea384 (diff)
[MERGE] merge from trunk addons
bzr revid: mra@mra-laptop-20101222112024-yt47p2bd7kwvcqwy bzr revid: mra@mra-laptop-20101223041057-w5s862hm3fajcqkr
Diffstat (limited to 'addons/document')
-rw-r--r--addons/document/content_index.py8
-rw-r--r--addons/document/document_view.xml4
-rw-r--r--addons/document/nodes.py64
-rw-r--r--addons/document/test_cindex.py13
4 files changed, 65 insertions, 24 deletions
diff --git a/addons/document/content_index.py b/addons/document/content_index.py
index 6d49a29873f..72cb8f6e163 100644
--- a/addons/document/content_index.py
+++ b/addons/document/content_index.py
@@ -165,11 +165,9 @@ class contentIndex(object):
os.write(fd, content)
os.close(fd)
- fp = Popen(['file','-b','--mime',fname], shell=False, stdout=PIPE).stdout
- try:
- result = fp.read()
- finally:
- fp.close()
+ pop = Popen(['file','-b','--mime',fname], shell=False, stdout=PIPE)
+ (result, _) = pop.communicate()
+
mime2 = result.split(';')[0]
self.__logger.debug('File gave us: %s', mime2)
# Note that the temporary file still exists now.
diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml
index 536683f6a59..df5e78894fd 100644
--- a/addons/document/document_view.xml
+++ b/addons/document/document_view.xml
@@ -82,7 +82,6 @@
<group colspan="4" col="4" attrs="{'invisible': [('type','!=','ressource')]}">
<field name="ressource_type_id" on_change="onchange_content_id(ressource_type_id)"
attrs="{'required': [('type','=','ressource')] }"/>
- <field name="resource_find_all" groups="base.group_extended" />
<newline/>
<field name="resource_field" domain="[('model_id','=',ressource_type_id), ('ttype', 'in', ('char', 'selection', 'date', 'datetime'))]"/>
<field name="ressource_tree"/>
@@ -93,6 +92,9 @@
<field name="ressource_parent_type_id"/>
<field name="ressource_id" select="2" readonly="1"/>
</group>
+ <group colspan="4" col="2" attrs="{'invisible': [('type','!=','ressource'),('resource_parent_type_id','=',False)]}">
+ <field name="resource_find_all" groups="base.group_extended" />
+ </group>
</page>
<page string="Generated Files" groups="base.group_extended">
diff --git a/addons/document/nodes.py b/addons/document/nodes.py
index ee506d5eb2b..1b7aebcd389 100644
--- a/addons/document/nodes.py
+++ b/addons/document/nodes.py
@@ -837,7 +837,9 @@ class node_res_dir(node_class):
where.append(('id','=',self.resm_id))
if name:
- where.append((self.namefield,'=',name))
+ # The =like character will match underscores against any characters
+ # including the special ones that couldn't exist in a FTP/DAV request
+ where.append((self.namefield,'=like',name.replace('\\','\\\\')))
is_allowed = self.check_perms(1)
else:
is_allowed = self.check_perms(5)
@@ -858,12 +860,22 @@ class node_res_dir(node_class):
for bo in obj.browse(cr, uid, resids, context=ctx):
if not bo:
continue
- name = getattr(bo, self.namefield)
- if not name:
+ res_name = getattr(bo, self.namefield)
+ if not res_name:
continue
# Yes! we can't do better but skip nameless records.
+
+ # Escape the name for characters not supported in filenames
+ res_name = res_name.replace('/','_') # any other weird char?
+
+ if name and (res_name != name):
+ # we have matched _ to any character, but we only meant to match
+ # the special ones.
+ # Eg. 'a_c' will find 'abc', 'a/c', 'a_c', may only
+ # return 'a/c' and 'a_c'
+ continue
- res.append(self.res_obj_class(name, self.dir_id, self, self.context, self.res_model, bo))
+ res.append(self.res_obj_class(res_name, self.dir_id, self, self.context, self.res_model, bo))
return res
def _get_ttag(self,cr):
@@ -896,7 +908,10 @@ class node_res_obj(node_class):
self.domain = parent.domain
self.displayname = path
self.dctx_dict = parent.dctx_dict
- self.res_find_all = parent.res_find_all
+ if isinstance(parent, node_res_dir):
+ self.res_find_all = parent.res_find_all
+ else:
+ self.res_find_all = False
if res_bo:
self.res_id = res_bo.id
dc2 = self.context.context.copy()
@@ -1016,8 +1031,10 @@ class node_res_obj(node_class):
# Directory Structure display in tree structure
if self.res_id and directory.ressource_tree:
where1 = []
+ if name:
+ where1.append(('name','=like',name.replace('\\','\\\\')))
if obj._parent_name in obj.fields_get(cr, uid):
- where1 = where + [(obj._parent_name, '=', self.res_id)]
+ where1.append((obj._parent_name, '=', self.res_id))
namefield = directory.resource_field.name or 'name'
resids = obj.search(cr, uid, where1, context=ctx)
for bo in obj.browse(cr, uid, resids, context=ctx):
@@ -1026,27 +1043,37 @@ class node_res_obj(node_class):
res_name = getattr(bo, namefield)
if not res_name:
continue
+ res_name = res_name.replace('/', '_')
+ if name and (res_name != name):
+ continue
# TODO Revise
klass = directory.get_node_class(directory, dynamic=True, context=ctx)
- res.append(klass(res_name, dir_id=self.dir_id, parent=self, context=self.context, res_model=self.res_model, res_bo=bo))
+ rnode = klass(res_name, dir_id=self.dir_id, parent=self, context=self.context,
+ res_model=self.res_model, res_bo=bo)
+ rnode.res_find_all = self.res_find_all
+ res.append(rnode)
where2 = where + [('parent_id','=',self.dir_id) ]
ids = dirobj.search(cr, uid, where2, context=ctx)
+ bo = obj.browse(cr, uid, self.res_id, context=ctx)
+
for dirr in dirobj.browse(cr, uid, ids, context=ctx):
+ if name and (name != dirr.name):
+ continue
if dirr.type == 'directory':
klass = dirr.get_node_class(dirr, dynamic=True, context=ctx)
- res.append(klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = None, res_id = self.res_id))
+ res.append(klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = bo, res_id = self.res_id))
elif dirr.type == 'ressource':
# child resources can be controlled by properly set dctx
klass = dirr.get_node_class(dirr, context=ctx)
- res.append(klass(dirr.name,self,self.context, dirr, {'active_id': self.res_id}))
+ res.append(klass(dirr.name,self,self.context, dirr, {'active_id': self.res_id})) # bo?
fil_obj = dirobj.pool.get('ir.attachment')
if self.res_find_all:
where2 = where
- where3 = where2 + [('res_model', '=', self.res_model), ('res_id','=',self.res_id)]
- # print "where clause for dir_obj", where2
+ where3 = where2 + [('res_model', '=', self.res_model), ('res_id','=',self.res_id)]
+ # print "where clause for dir_obj", where3
ids = fil_obj.search(cr, uid, where3, context=ctx)
if ids:
for fil in fil_obj.browse(cr, uid, ids, context=ctx):
@@ -1057,17 +1084,19 @@ class node_res_obj(node_class):
# Get Child Ressource Directories
if directory.ressource_type_id and directory.ressource_type_id.id:
where4 = where + [('ressource_parent_type_id','=',directory.ressource_type_id.id)]
- where5 = where4 + [('ressource_id','=',0)]
+ where5 = where4 + ['|', ('ressource_id','=',0), ('ressource_id','=',self.res_id)]
dirids = dirobj.search(cr,uid, where5)
- where5 = where4 + [('ressource_id','=',self.res_id)]
- dirids = dirids + dirobj.search(cr,uid, where5)
for dirr in dirobj.browse(cr, uid, dirids, context=ctx):
if dirr.type == 'directory' and not dirr.parent_id:
klass = dirr.get_node_class(dirr, dynamic=True, context=ctx)
- res.append(klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = None, res_id = self.res_id))
+ rnode = klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = bo, res_id = self.res_id)
+ rnode.res_find_all = dirr.resource_find_all
+ res.append(rnode)
if dirr.type == 'ressource':
klass = dirr.get_node_class(dirr, context=ctx)
- res.append(klass(dirr.name, self, self.context, dirr, {'active_id': self.res_id}))
+ rnode = klass(dirr.name, self, self.context, dirr, {'active_id': self.res_id})
+ rnode.res_find_all = dirr.resource_find_all
+ res.append(rnode)
return res
def create_child_collection(self, cr, objname):
@@ -1092,7 +1121,8 @@ class node_res_obj(node_class):
'name': objname,
'ressource_parent_type_id': obj and obj.ressource_type_id.id or False,
'ressource_id': object2 and object2.id or False,
- 'parent_id' : False
+ 'parent_id' : False,
+ 'resource_find_all': False,
}
if (obj and (obj.type in ('directory'))) or not object2:
val['parent_id'] = obj and obj.id or False
diff --git a/addons/document/test_cindex.py b/addons/document/test_cindex.py
index d7ae7c4d160..05101a7a491 100644
--- a/addons/document/test_cindex.py
+++ b/addons/document/test_cindex.py
@@ -3,9 +3,13 @@
import sys
import os
import glob
+import time
+import logging
from optparse import OptionParser
+logging.basicConfig(level=logging.DEBUG)
+
parser = OptionParser()
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
@@ -15,6 +19,10 @@ parser.add_option("-C", "--content",
action="store_true", dest="docontent", default=False,
help="Disect content, rather than the file.")
+parser.add_option("--delay",
+ action="store_true", dest="delay", default=False,
+ help="delay after the operation, to inspect child processes")
+
(options, args) = parser.parse_args()
import content_index, std_index
@@ -34,9 +42,12 @@ for fname in args:
if options.verbose:
for line in res[:5]:
print line
+ if options.delay:
+ time.sleep(30)
except Exception,e:
import traceback
tb_s = reduce(lambda x, y: x+y, traceback.format_exception( sys.exc_type, sys.exc_value, sys.exc_traceback))
-
+ except KeyboardInterrupt:
+ print "Keyboard interrupt"
#eof