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 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 check_mimetypes_in_archive(): mimetypes = {} cmd = 'SELECT pk FROM blobs.doc_med' doc_pks, idx = gmPG2.run_ro_queries(queries = [{'cmd': cmd}]) print('Detecting mimetypes in document archive ...') doc_idx = 0 part_count = 0 for pk_row in doc_pks: doc_idx += 1 print('\n#%s - document %s of %s: ' % (pk_row['pk'], doc_idx, len(doc_pks)), end = '') doc = cDocument(aPK_obj = pk_row['pk']) for part in doc.parts: part_count += 1 print('#%s:%s bytes, ' % (part['pk_obj'], part['size']), end = '') part_fname = part.save_to_file() mimetype = gmMimeLib.guess_mimetype(part_fname) try: mimetypes[mimetype]['count'] += 1 except KeyError: mimetypes[mimetype] = { 'count': 1, 'viewer': gmMimeLib.get_viewer_cmd(mimetype), 'editor': gmMimeLib.get_editor_cmd(mimetype), 'extension': gmMimeLib.guess_ext_by_mimetype(mimetype) } print('') print('') print('Number of documents :', len(doc_pks)) print('Number of parts :', part_count) print('Number of mime types:', len(mimetypes)) for mimetype in mimetypes: print('') print('<%s>' % mimetype) print(' Extension:', mimetypes[mimetype]['extension']) print(' Use count:', mimetypes[mimetype]['count']) print(' Viewer:', mimetypes[mimetype]['viewer']) print(' Editor:', mimetypes[mimetype]['editor']) return 0