Ejemplo n.º 1
0
 def create_directory(self,
                      parent_directory,
                      name=None,
                      context=None,
                      **kw):
     parent = request.env['muk_dms.directory'].sudo().browse(
         parent_directory)
     uname = file.unique_name(name or _("New Directory"),
                              parent.child_directories.mapped('name'))
     directory = request.env['muk_dms.directory'].with_context(
         context or request.env.context).create({
             'name':
             uname,
             'parent_directory':
             parent_directory
         })
     return {
         'id': "directory_%s" % directory.id,
         'text': directory.name,
         'icon': "fa fa-folder-o",
         'type': "directory",
         'data': {
             'odoo_id': directory.id,
             'odoo_model': "muk_dms.directory",
             'odoo_record': {},
             'name': directory.name,
             'perm_read': directory.permission_read,
             'perm_create': directory.permission_create,
             'perm_write': directory.permission_write,
             'perm_unlink': directory.permission_unlink,
             'parent': "directory_%s" % parent_directory,
         },
         'children': False,
     }
Ejemplo n.º 2
0
 def archive_with_structure(self, name=None, format="zip", export="binary"):
     attachments = self.filtered(
         lambda rec: rec.type == "binary" and rec.datas)
     structure = groupby(attachments, lambda attach:
                         (attach.res_id, attach.res_name))
     if not name:
         name = uuid.uuid4().hex
     tmp_dir = tempfile.mkdtemp()
     try:
         base_dir = os.path.join(tmp_dir, name)
         os.mkdir(base_dir)
         for record, attachments in structure:
             dir_name = "%s_%s" % (record[0], slugify(
                 record[1])) if record[1] else uuid.uuid4().hex
             rec_dir = os.path.join(base_dir, dir_name)
             os.mkdir(rec_dir)
             unames = []
             for attach in attachments:
                 uname = uuid.uuid4().hex
                 if attach.datas_fname:
                     uname = unique_name(attach.datas_fname,
                                         unames,
                                         escape_suffix=True)
                 elif attach.mimetype:
                     uname = "%s%s" % (
                         uname, mimetypes.guess_extension(attach.mimetype))
                 unames.append(uname)
                 file_path = os.path.join(rec_dir, uname)
                 with closing(open(file_path, 'wb')) as writer:
                     writer.write(
                         base64.b64decode(attach.with_context({}).datas))
         return archive(base_dir, tmp_dir, name, format, export)
     finally:
         shutil.rmtree(tmp_dir)
Ejemplo n.º 3
0
 def _process_message(self, msg_dict, extra_values={}):
     names = self.sudo().files.mapped('name')
     for attachment in msg_dict['attachments']:
         uname = unique_name(attachment.fname, names, escape_suffix=True)
         self.env['muk_dms.file'].sudo().create({
             'content': attachment.content,
             'directory': self.id,
             'name': uname,
         })
         names.append(uname)
Ejemplo n.º 4
0
 def copy(self, default=None):
     self.ensure_one()
     default = dict(default or [])
     names = []
     if 'directory' in default:
         model = self.env['muk_dms.directory']
         directory = model.browse(default['directory'])
         names = directory.sudo().files.mapped('name')
     else:
         names = self.sudo().directory.files.mapped('name')
     default.update(
         {'name': file.unique_name(self.name, names, self.extension)})
     return super(File, self).copy(default)
Ejemplo n.º 5
0
 def message_new(self, msg_dict, custom_values=None):
     custom_values = custom_values if custom_values is not None else {}
     parent_directory_id = custom_values.get('parent_directory', None)
     parent_directory = self.sudo().browse(parent_directory_id)
     if not parent_directory_id or not parent_directory.exists():
         raise ValueError("No directory could be found!")
     if parent_directory.alias_process == "files":
         parent_directory._process_message(msg_dict)
         return parent_directory
     names = parent_directory.child_directories.mapped('name')
     subject = slugify(msg_dict.get('subject', _('Alias-Mail-Extraction')),
                       lower=False)
     defaults = dict(
         {'name': unique_name(subject, names, escape_suffix=True)},
         **custom_values)
     directory = super(Directory, self).message_new(msg_dict,
                                                    custom_values=defaults)
     directory._process_message(msg_dict)
     return directory
Ejemplo n.º 6
0
 def archive(self, name=None, format="zip", export="binary"):
     unames = []
     if not name:
         name = uuid.uuid4().hex
     tmp_dir = tempfile.mkdtemp()
     try:
         base_dir = os.path.join(tmp_dir, name)
         os.mkdir(base_dir)
         for attach in self.filtered(
                 lambda rec: rec.type == "binary" and rec.datas):
             uname = unique_name(attach.datas_fname or uuid.uuid4().hex,
                                 unames,
                                 escape_suffix=True)
             unames.append(uname)
             file_path = os.path.join(base_dir, uname)
             with closing(open(file_path, 'wb')) as writer:
                 writer.write(
                     base64.b64decode(attach.with_context({}).datas))
         return archive(base_dir, tmp_dir, name, format, export)
     finally:
         shutil.rmtree(tmp_dir)
Ejemplo n.º 7
0
 def copy(self, default=None):
     self.ensure_one()
     default = dict(default or [])
     names = []
     if 'root_storage' in default:
         storage = self.env['muk_dms.storage'].browse(default['root_storage'])
         names = storage.sudo().root_directories.mapped('name')
     elif 'parent_directory' in default:
         parent_directory = self.browse(default['parent_directory'])
         names = parent_directory.sudo().child_directories.mapped('name')
     elif self.is_root_directory:
         names = self.sudo().root_storage.root_directories.mapped('name')
     else:
         names = self.sudo().parent_directory.child_directories.mapped('name')
     default.update({'name': file.unique_name(self.name, names)})
     new = super(Directory, self).copy(default)
     for record in self.files:
         record.copy({'directory': new.id})
     for record in self.child_directories:
         record.copy({'parent_directory': new.id})
     return new
Ejemplo n.º 8
0
 def test_unique_name(self):
     self.assertEqual(file.unique_name("Test", ["A", "B"]), "Test")
     self.assertEqual(file.unique_name("Test", ["Test"]), "Test(1)")