def export_to_file(self, aChunkSize=0, filename=None, target_mime=None, target_extension=None, ignore_conversion_problems=False, directory=None): if self._payload[self._idx['size']] == 0: return None if filename is None: filename = self.get_useful_filename(make_unique=True, directory=directory) success = gmPG2.bytea2file(data_query={ 'cmd': u'SELECT substring(data from %(start)s for %(size)s) FROM blobs.doc_obj WHERE pk=%(pk)s', 'args': { 'pk': self.pk_obj } }, filename=filename, chunk_size=aChunkSize, data_size=self._payload[self._idx['size']]) if not success: return None if target_mime is None: return filename if target_extension is None: target_extension = gmMimeLib.guess_ext_by_mimetype( mimetype=target_mime) target_path, name = os.path.split(filename) name, tmp = os.path.splitext(name) target_fname = gmTools.get_unique_filename(prefix='%s-converted-' % name, suffix=target_extension) _log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename, target_mime, target_fname) if gmMimeLib.convert_file(filename=filename, target_mime=target_mime, target_filename=target_fname): return target_fname _log.warning('conversion failed') if not ignore_conversion_problems: return None _log.warning( 'programmed to ignore conversion problems, hoping receiver can handle [%s]', filename) return filename
def save_to_file(self, aChunkSize=0, filename=None, target_mime=None, target_extension=None, ignore_conversion_problems=False, directory=None, adjust_extension=False, conn=None): if self._payload[self._idx['size']] == 0: return None if filename is None: filename = self.get_useful_filename(make_unique = True, directory = directory) success = gmPG2.bytea2file ( data_query = { 'cmd': 'SELECT substring(data from %(start)s for %(size)s) FROM blobs.doc_obj WHERE pk=%(pk)s', 'args': {'pk': self.pk_obj} }, filename = filename, chunk_size = aChunkSize, data_size = self._payload[self._idx['size']], conn = conn ) if not success: return None if target_mime is None: if filename.endswith('.dat'): if adjust_extension: return gmMimeLib.adjust_extension_by_mimetype(filename) return filename if target_extension is None: target_extension = gmMimeLib.guess_ext_by_mimetype(mimetype = target_mime) target_path, name = os.path.split(filename) name, tmp = os.path.splitext(name) target_fname = gmTools.get_unique_filename ( prefix = '%s-conv-' % name, suffix = target_extension ) _log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename, target_mime, target_fname) if gmMimeLib.convert_file ( filename = filename, target_mime = target_mime, target_filename = target_fname ): return target_fname _log.warning('conversion failed') if not ignore_conversion_problems: return None if filename.endswith('.dat'): if adjust_extension: filename = gmMimeLib.adjust_extension_by_mimetype(filename) _log.warning('programmed to ignore conversion problems, hoping receiver can handle [%s]', filename) return filename
def save_to_file(self, aChunkSize=0, target_mime=None, target_extension=None, ignore_conversion_problems=False): if self._payload[self._idx['is_textual']]: return None if self._payload[self._idx['data_size']] == 0: return None filename = gmTools.get_unique_filename(prefix='gm-data_snippet-') success = gmPG2.bytea2file(data_query={ 'cmd': 'SELECT substring(binary_data from %(start)s for %(size)s) FROM ref.keyword_expansion WHERE pk = %(pk)s', 'args': { 'pk': self.pk_obj } }, filename=filename, chunk_size=aChunkSize, data_size=self._payload[ self._idx['data_size']]) if not success: return None if target_mime is None: return filename if target_extension is None: target_extension = gmMimeLib.guess_ext_by_mimetype( mimetype=target_mime) target_fname = gmTools.get_unique_filename( prefix='gm-data_snippet-converted-', suffix=target_extension) _log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename, target_mime, target_fname) if gmMimeLib.convert_file(filename=filename, target_mime=target_mime, target_filename=target_fname): return target_fname _log.warning('conversion failed') if not ignore_conversion_problems: return None _log.warning( 'programmed to ignore conversion problems, hoping receiver can handle [%s]', filename) return filename
def encrypt_file_symmetric(filename=None, passphrase=None, comment=None, verbose=False, remove_unencrypted=False, convert2pdf=False): """Encrypt <filename> with a symmetric cipher. <convert2pdf> - True: convert <filename> to PDF, if possible, and encrypt that. """ assert (filename is not None), '<filename> must not be None' if convert2pdf: _log.debug('PDF encryption preferred, attempting conversion if needed') pdf_fname = gmMimeLib.convert_file(filename=filename, target_mime='application/pdf', target_filename=filename + '.pdf', verbose=verbose) if pdf_fname is not None: _log.debug('successfully converted to PDF') # remove non-pdf file gmTools.remove_file(filename) filename = pdf_fname # try PDF-inherent AES encrypted_filename = encrypt_pdf(filename=filename, passphrase=passphrase, verbose=verbose, remove_unencrypted=remove_unencrypted) if encrypted_filename is not None: return encrypted_filename # try 7z based AES encrypted_filename = aes_encrypt_file( filename=filename, passphrase=passphrase, comment=comment, verbose=verbose, remove_unencrypted=remove_unencrypted) if encrypted_filename is not None: return encrypted_filename # try GPG based AES return gpg_encrypt_file_symmetric(filename=filename, passphrase=passphrase, comment=comment, verbose=verbose, remove_unencrypted=remove_unencrypted)
def export_to_file( self, aChunkSize=0, filename=None, target_mime=None, target_extension=None, ignore_conversion_problems=False, directory=None, ): if self._payload[self._idx["size"]] == 0: return None if filename is None: filename = self.get_useful_filename(make_unique=True, directory=directory) success = gmPG2.bytea2file( data_query={ "cmd": u"SELECT substring(data from %(start)s for %(size)s) FROM blobs.doc_obj WHERE pk=%(pk)s", "args": {"pk": self.pk_obj}, }, filename=filename, chunk_size=aChunkSize, data_size=self._payload[self._idx["size"]], ) if not success: return None if target_mime is None: return filename if target_extension is None: target_extension = gmMimeLib.guess_ext_by_mimetype(mimetype=target_mime) target_path, name = os.path.split(filename) name, tmp = os.path.splitext(name) target_fname = gmTools.get_unique_filename(prefix="%s-converted-" % name, suffix=target_extension) _log.debug("attempting conversion: [%s] -> [<%s>:%s]", filename, target_mime, target_fname) if gmMimeLib.convert_file(filename=filename, target_mime=target_mime, target_filename=target_fname): return target_fname _log.warning("conversion failed") if not ignore_conversion_problems: return None _log.warning("programmed to ignore conversion problems, hoping receiver can handle [%s]", filename) return filename
def export_to_file(self, aChunkSize=0, target_mime=None, target_extension=None, ignore_conversion_problems=False): if self._payload[self._idx['is_textual']]: return None if self._payload[self._idx['data_size']] == 0: return None filename = gmTools.get_unique_filename(prefix = 'gm-data_snippet-') success = gmPG2.bytea2file ( data_query = { 'cmd': u'SELECT substring(binary_data from %(start)s for %(size)s) FROM ref.keyword_expansion WHERE pk = %(pk)s', 'args': {'pk': self.pk_obj} }, filename = filename, chunk_size = aChunkSize, data_size = self._payload[self._idx['data_size']] ) if not success: return None if target_mime is None: return filename if target_extension is None: target_extension = gmMimeLib.guess_ext_by_mimetype(mimetype = target_mime) target_fname = gmTools.get_unique_filename ( prefix = 'gm-data_snippet-converted-', suffix = target_extension ) _log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename, target_mime, target_fname) if gmMimeLib.convert_file ( filename = filename, target_mime = target_mime, target_filename = target_fname ): return target_fname _log.warning('conversion failed') if not ignore_conversion_problems: return None _log.warning('programmed to ignore conversion problems, hoping receiver can handle [%s]', filename) return filename
def save_to_file(self, aChunkSize=0, filename=None, target_mime=None, target_extension=None, ignore_conversion_problems=False, directory=None, adjust_extension=False, conn=None): if filename is None: filename = self.get_useful_filename(make_unique = True, directory = directory) filename = self.__download_to_file(filename = filename) if filename is None: return None if target_mime is None: if filename.endswith('.dat'): if adjust_extension: return gmMimeLib.adjust_extension_by_mimetype(filename) return filename if target_extension is None: target_extension = gmMimeLib.guess_ext_by_mimetype(mimetype = target_mime) target_path, name = os.path.split(filename) name, tmp = os.path.splitext(name) target_fname = gmTools.get_unique_filename ( prefix = '%s-conv-' % name, suffix = target_extension ) _log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename, target_mime, target_fname) converted_fname = gmMimeLib.convert_file ( filename = filename, target_mime = target_mime, target_filename = target_fname ) if converted_fname is not None: return converted_fname _log.warning('conversion failed') if not ignore_conversion_problems: return None if filename.endswith('.dat'): if adjust_extension: filename = gmMimeLib.adjust_extension_by_mimetype(filename) _log.warning('programmed to ignore conversion problems, hoping receiver can handle [%s]', filename) return filename
def encrypt_file_symmetric(filename: str = None, passphrase: str = None, comment: str = None, verbose: bool = False, remove_unencrypted: bool = False, convert2pdf: bool = False) -> str: """Encrypt file with a symmetric cipher. Args: filename: file to encrypt passphrase: minimum of 5 characters remove_unencrypted: remove unencrypted source file if encryption succeeded comment: a comment to be included within the encrypted output remove_unencrypted: remove unencrypted source file if encryption succeeds convert2pdf: attempt converting _filename_ to PDF and encrypt that on success Returns: Name of encrypted PDF or None. """ assert (filename is not None), '<filename> must not be None' if passphrase is None: # try GPG based AES only, as GPG is the only supported method # for securely getting a passphrase from the user return encrypt_file_symmetric_gpg( filename=filename, passphrase=None, comment=comment, verbose=verbose, remove_unencrypted=remove_unencrypted) # else try other methods, too if len(passphrase) < 5: _log.error('<passphrase> must be at least 5 characters/signs/digits') return None if convert2pdf: _log.debug('PDF encryption preferred, attempting conversion if needed') pdf_fname = gmMimeLib.convert_file(filename=filename, target_mime='application/pdf', target_filename=filename + '.pdf', verbose=verbose) if pdf_fname is not None: _log.debug('successfully converted to PDF') if remove_unencrypted: # remove non-pdf file gmTools.remove_file(filename) filename = pdf_fname # try PDF-based encryption encrypted_filename = encrypt_pdf(filename=filename, passphrase=passphrase, verbose=verbose, remove_unencrypted=remove_unencrypted) if encrypted_filename is not None: return encrypted_filename # try 7z based encryption encrypted_filename = encrypt_file_symmetric_7z( filename=filename, passphrase=passphrase, comment=comment, verbose=verbose, remove_unencrypted=remove_unencrypted) if encrypted_filename is not None: return encrypted_filename # try GPG based encryption return encrypt_file_symmetric_gpg(filename=filename, passphrase=passphrase, comment=comment, verbose=verbose, remove_unencrypted=remove_unencrypted)