I'd like to propose a (very) little feature request:

method store under class Field in dal.py can be modified as follows where line 3 and 4 are new in order to define the upload folder even in case you define a custom_store through the "uploadfolder" property of the Field... do you agree it could be usefull?

    def store(self, file, filename=None, path=None):
        if self.custom_store:
if self.uploadfolder: # line 3 path = self.uploadfolder # line 4
            return self.custom_store(file,filename,path)
        if not filename:
            filename = file.name
        filename = os.path.basename(filename.replace('/', os.sep)\
                                        .replace('\\', os.sep))
        m = re.compile('\.(?P<e>\w{1,5})$').search(filename)
        extension = m and m.group('e') or 'txt'
        uuid_key = web2py_uuid().replace('-', '')[-16:]
        encoded_filename = base64.b16encode(filename).lower()
        newfilename = '%s.%s.%s.%s' % \
            (self._tablename, self.name, uuid_key, encoded_filename)
        newfilename = newfilename[:200] + '.' + extension
        if isinstance(self.uploadfield,Field):
            blob_uploadfield_name = self.uploadfield.uploadfield
            keys={self.uploadfield.name: newfilename,
                  blob_uploadfield_name: file.read()}
            self.uploadfield.table.insert(**keys)
        elif self.uploadfield == True:
            if path:
                pass
            elif self.uploadfolder:
                path = self.uploadfolder
            elif self.db._adapter.folder:
path = os.path.join(self.db._adapter.folder, '..', 'uploads')
            else:
raise RuntimeError, "you must specify a Field(...,uploadfolder=...)"
            if self.uploadseparate:
path = os.path.join(path,"%s.%s" % (self._tablename, self.name),uuid_key[:2])
            if not os.path.exists(path):
                os.makedirs(path)
            pathfilename = os.path.join(path, newfilename)
            dest_file = open(pathfilename, 'wb')
            shutil.copyfileobj(file, dest_file)
            dest_file.close()
        return newfilename

cheers
    Manuele

Reply via email to