diff options
| author | Fabien Pinckaers <fp@tinyerp.com> | 2009-08-03 09:01:56 +0200 |
|---|---|---|
| committer | Fabien Pinckaers <fp@tinyerp.com> | 2009-08-03 09:01:56 +0200 |
| commit | 5ebd3bc12cb0940d95dbfeb78e60e5a4ce174d06 (patch) | |
| tree | fbbea591e5cd0659abc53f92d24adba143dc45f0 /addons/document/document.py | |
| parent | 3472508614e7ee985d8f87faf4e6a658d5bdca56 (diff) | |
| parent | 738dc7153439aa6a02a35a23449214265547e516 (diff) | |
merge
bzr revid: fp@tinyerp.com-20090803070156-38o2tyzljrlsuh84
Diffstat (limited to 'addons/document/document.py')
| -rw-r--r-- | addons/document/document.py | 64 |
1 files changed, 52 insertions, 12 deletions
diff --git a/addons/document/document.py b/addons/document/document.py index 585031e1fc5..1a66145a9d8 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -66,8 +66,10 @@ def random_name(): # root: if we are at the first directory of a ressource # INVALID_CHARS={'*':str(hash('*')), '|':str(hash('|')) , "\\":str(hash("\\")), '/':'__', ':':str(hash(':')), '"':str(hash('"')), '<':str(hash('<')) , '>':str(hash('>')) , '?':str(hash('?'))} + + class node_class(object): - def __init__(self, cr, uid, path,object,object2=False, context={}, content=False, type='collection', root=False): + def __init__(self, cr, uid, path, object, object2=False, context={}, content=False, type='collection', root=False): self.cr = cr self.uid = uid self.path = path @@ -92,7 +94,7 @@ class node_class(object): where.append( ('parent_id','=',self.object.id) ) where.append( ('res_id','=',False) ) if nodename: - where.append( (fobj._rec_name,'like',nodename) ) + where.append( (fobj._rec_name,'=',nodename) ) for content in self.object.content_ids: if self.object2 or not content.include_name: if content.include_name: @@ -135,7 +137,7 @@ class node_class(object): where = [] if nodename: nodename = self.get_translation(nodename, self.context['lang']) - where.append(('name','like',nodename)) + where.append(('name','=',nodename)) if (self.object and self.object.type=='directory') or not self.object2: where.append(('parent_id','=',self.object and self.object.id or False)) else: @@ -161,7 +163,7 @@ class node_class(object): fobj = pool.get('ir.attachment') vargs = [('parent_id','=',False),('res_id','=',False)] if nodename: - vargs.append(('name','like',nodename)) + vargs.append(('name','=',nodename)) file_ids=fobj.search(self.cr,self.uid,vargs) res = fobj.browse(self.cr, self.uid, file_ids, context=self.context) @@ -171,9 +173,9 @@ class node_class(object): pool = pooler.get_pool(self.cr.dbname) obj = pool.get(self.object.ressource_type_id.model) if len(obj.fields_get(self.cr, self.uid, ['dirname'])): - _dirname_field = 'dirname' + _dirname_field = 'dirname' else: - _dirname_field = 'name' + _dirname_field = 'name' name_for = obj._name.split('.')[-1] if nodename and nodename.find(name_for) == 0 : @@ -186,7 +188,7 @@ class node_class(object): if nodename.find(INVALID_CHARS[invalid]) : nodename=nodename.replace(INVALID_CHARS[invalid],invalid) nodename = self.get_translation(nodename, self.context['lang']) - where.append((_dirname_field,'like',nodename)) + where.append((_dirname_field,'=',nodename)) if self.object.ressource_tree: if obj._parent_name in obj.fields_get(self.cr,self.uid): @@ -205,14 +207,16 @@ class node_class(object): ids = obj.search(self.cr, self.uid, where) res = obj.browse(self.cr, self.uid, ids,self.context) - for r in res: + for r in res: if len(obj.fields_get(self.cr, self.uid, [_dirname_field])): r.name = eval('r.'+_dirname_field) else: - r.name = name_for+'%d'%r.id + r.name = False + if not r.name: + r.name = name_for + '%d'%r.id for invalid in INVALID_CHARS: if r.name.find(invalid) : - r.name=r.name.replace(invalid,INVALID_CHARS[invalid]) + r.name = r.name.replace(invalid,INVALID_CHARS[invalid]) result2 = map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name.replace('/','__'), self.object, x, context=self.context, root=x.id), res) if result2: if self.object.ressource_tree: @@ -323,7 +327,7 @@ class document_directory(osv.osv): where = [] if nodename: nodename = self.get_translation(nodename, self.context['lang']) - where.append(('name','like',nodename)) + where.append(('name','=',nodename)) if object: where.append(('parent_id','=',object.id)) ids = self.search(cr, uid, where, context) @@ -718,9 +722,45 @@ class document_configuration_wizard(osv.osv_memory): 'host': fields.char('Server Address', size=64, help="Put here the server address or IP. " \ "Keep localhost if you don't know what to write.", required=True) } + + def detect_ip_addr(self, cr, uid, context=None): + def _detect_ip_addr(self, cr, uid, context=None): + from array import array + import socket + from struct import pack, unpack + + try: + import fcntl + except ImportError: + fcntl = None + + if not fcntl: # not UNIX: + host = socket.gethostname() + ip_addr = socket.gethostbyname(host) + else: # UNIX: + # get all interfaces: + nbytes = 128 * 32 + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + names = array('B', '\0' * nbytes) + outbytes = unpack('iL', fcntl.ioctl( s.fileno(), 0x8912, pack('iL', nbytes, names.buffer_info()[0])))[0] + namestr = names.tostring() + ifaces = [namestr[i:i+32].split('\0', 1)[0] for i in range(0, outbytes, 32)] + + for ifname in [iface for iface in ifaces if iface != 'lo']: + ip_addr = socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, pack('256s', ifname[:15]))[20:24]) + break + return ip_addr + + try: + ip_addr = _detect_ip_addr(self, cr, uid, context) + except: + ip_addr = 'localhost' + return ip_addr + _defaults = { - 'host': lambda *args: 'localhost' + 'host': detect_ip_addr, } + def action_cancel(self,cr,uid,ids,conect=None): return { 'view_type': 'form', |
