def convert_all(context): catalog = getToolByName(context, 'portal_catalog') portal = getSite() gsettings = GlobalSettings(portal) for brain in catalog(object_provides=OBJECT_PROVIDES): file_item = brain.getObject() if not allowedDocumentType(file_item, gsettings.auto_layout_file_types): continue # let's not switch to the document viewer view # until the document is converted. The conversion # process will check if the layout is set correctly. if file_item.getLayout() != 'documentviewer': settings = Settings(file_item) settings.last_updated = DateTime('1999/01/01').ISO8601() queueJob(file_item) else: settings = Settings(file_item) # also convert if there was an error. if settings.successfully_converted == False: settings.last_updated = DateTime('1999/01/01').ISO8601() settings.filehash = '' queueJob(file_item)
def handle_file_creation(obj, event): if obj.portal_type == 'Image': return qi = getToolByName(obj, 'portal_quickinstaller', None) if not qi: return if not qi.isProductInstalled('collective.documentviewer'): return if getRequest().get('plone.app.contenttypes_migration_running', False): """Don't migrate while running a plone.app.contenttypes migration. """ return site = getPortal(obj) gsettings = GlobalSettings(site) if not allowedDocumentType(obj, gsettings.auto_layout_file_types): return auto_layout = gsettings.auto_select_layout if auto_layout and obj.getLayout() != 'documentviewer': obj.setLayout('documentviewer') if obj.getLayout() == 'documentviewer' and gsettings.auto_convert: queueJob(obj)
def convert_all(context): catalog = getToolByName(context, 'portal_catalog') portal = getSite() gsettings = GlobalSettings(portal) for brain in catalog(object_provides=IFileContent.__identifier__): file = brain.getObject() if not allowedDocumentType(file, gsettings.auto_layout_file_types): continue # let's not switch to the document viewer view # until the document is converted. The conversion # process will check if the layout is set correctly. if file.getLayout() != 'documentviewer': settings = Settings(file) settings.last_updated = DateTime('1999/01/01').ISO8601() queueJob(file) else: settings = Settings(file) # also convert if there was an error. if settings.successfully_converted == False: settings.last_updated = DateTime('1999/01/01').ISO8601() settings.filehash = '' queueJob(file)
def handle_convert_document(obj, event): """Convert document """ site = getSite() gsettings = GlobalSettings(site) if not allowedDocumentType(obj, gsettings.auto_layout_file_types): return queueJob(obj)
def convert_all(only_unconverted=True): """Convert all files. Defaults to convert only files, which haven't been converted yet. """ site = getSite() qi = getToolByName(site, 'portal_quickinstaller', None) if not qi: return if not qi.isProductInstalled('collective.documentviewer'): return if getRequest().get('plone.app.contenttypes_migration_running', False): """Don't migrate while running a plone.app.contenttypes migration. """ return cat = getToolByName(site, 'portal_catalog') res = cat(portal_type='File') length = len(res) async_enabled = celeryInstalled() for cnt, item in enumerate(res, 1): logger.info('processing %s/%s', cnt, length) obj = item.getObject() settings = Settings(obj) if only_unconverted and settings.successfully_converted: continue gsettings = GlobalSettings(site) if not allowedDocumentType(obj, gsettings.auto_layout_file_types): continue auto_layout = gsettings.auto_select_layout if auto_layout and obj.getLayout() != 'documentviewer': obj.setLayout('documentviewer') if obj.getLayout() == 'documentviewer' and gsettings.auto_convert: queueJob(obj) if not async_enabled: # conversion lasts an eternity. commit the results immediately. transaction.commit()
def handle_file_creation(object, event): qi = getToolByName(object, 'portal_quickinstaller') if not qi.isProductInstalled('collective.documentviewer'): return site = getPortal(object) gsettings = GlobalSettings(site) if not allowedDocumentType(object, gsettings.auto_layout_file_types): return auto_layout = gsettings.auto_select_layout if auto_layout and object.getLayout() != 'documentviewer': object.setLayout('documentviewer') if object.getLayout() == 'documentviewer' and gsettings.auto_convert: queueJob(object)
def handle_file_creation(obj, event): qi = getToolByName(obj, 'portal_quickinstaller') if not qi.isProductInstalled('collective.documentviewer'): return site = getPortal(obj) gsettings = GlobalSettings(site) if not allowedDocumentType(obj, gsettings.auto_layout_file_types): return auto_layout = gsettings.auto_select_layout if auto_layout and obj.getLayout() != 'documentviewer': obj.setLayout('documentviewer') if obj.getLayout() == 'documentviewer' and gsettings.auto_convert: queueJob(obj)
def handle_file_creation(obj, event): if _should_skip_handler(obj): return qi = getToolByName(obj, 'portal_quickinstaller', None) if not qi: return if not qi.isProductInstalled('collective.documentviewer'): return gsettings = GlobalSettings(api.portal.get()) if not allowedDocumentType(obj, gsettings.auto_layout_file_types): return auto_layout = gsettings.auto_select_layout if auto_layout and obj.getLayout() != 'documentviewer': obj.setLayout('documentviewer') if obj.getLayout() == 'documentviewer' and gsettings.auto_convert: queueJob(obj)
def __call__(self): """ - handle queuing - csrf protection - async - queue position """ mtool = getToolByName(self.context, 'portal_membership') self.manager = mtool.checkPermission('cmf.ManagePortal', self.context) self.async_installed = asyncInstalled() self.converting = False if self.enabled(): req = self.request if req.get('REQUEST_METHOD', 'POST') and \ 'form.action.queue' in req.form.keys(): authenticator = getMultiAdapter((self.context, self.request), name=u"authenticator") if not authenticator.verify(): raise Unauthorized settings = Settings(self.context) settings.last_updated = DateTime('1999/01/01').ISO8601() settings.filehash = '--foobar--' queueJob(self.context) self.converting = True if self.async_installed: self.position = JobRunner(self.context).find_position() queueJob(self.context) else: return self.request.response.redirect( self.context.absolute_url() + '/view') else: if self.async_installed: self.position = JobRunner(self.context).find_position() if self.position > -1: self.converting = True return super(Convert, self).__call__() self.request.response.redirect(self.context.absolute_url() + '/view')
def processFiles(self, data, folder, title=None): """ Prepara os arquivos após o upload, adiciona um novo tipo ArquivoBiblioteca @param data: Arquivo tipo NamedFile @param folter: Objeto folder onde o arquivo será criado @return: retorna o objeto ArquivoBiblioteca criado """ filename = data.filename blob = data.data ctype = data.contentType size = data.getSize() id = self.generateIdForContext(folder, idnormalizer.normalize(filename)) pt = getToolByName(self.context, 'portal_types') type_info = pt.getTypeInfo('ArquivoBiblioteca') a_biblioteca = type_info._constructInstance(folder, id) a_biblioteca.setFile(blob) file = a_biblioteca.getFile() file.setContentType(ctype) file.setFilename(filename) titulo_arq = title or filename a_biblioteca.setContentType(ctype) a_biblioteca.setFilename(filename) a_biblioteca.setTitle(titulo_arq) a_biblioteca.setUid_pratica(folder) a_biblioteca.reindexObject() queueJob(a_biblioteca) return a_biblioteca
def handle_file_creation(obj, event): if obj.portal_type == "Image": return qi = getToolByName(obj, "portal_quickinstaller", None) if not qi: return if not qi: return if not qi.isProductInstalled("collective.documentviewer"): return site = getPortal(obj) gsettings = GlobalSettings(site) if not allowedDocumentType(obj, gsettings.auto_layout_file_types): return auto_layout = gsettings.auto_select_layout if auto_layout and obj.getLayout() != "documentviewer": obj.setLayout("documentviewer") if obj.getLayout() == "documentviewer" and gsettings.auto_convert: queueJob(obj)
def test_status(self): obj = self.portal['file'] preview_adapter = adapter.CategorizedObjectPreviewAdapter(obj) gsettings = GlobalSettings(self.portal) self.assertEqual(gsettings.auto_layout_file_types, ['pdf']) obj.file.contentType = 'application/rtf' self.assertEqual(preview_adapter.status, 'not_convertable') self.assertFalse(preview_adapter.converted) obj.file.contentType = 'application/pdf' self.assertEqual(preview_adapter.status, 'not_converted') self.assertFalse(preview_adapter.converted) ann = IAnnotations(obj)['collective.documentviewer'] ann['filehash'] = '--foobar--' obj.file.contentType = 'application/pdf' self.assertEqual(preview_adapter.status, 'in_progress') self.assertFalse(preview_adapter.converted) queueJob(obj) # not a real PDF actually... self.assertEqual(preview_adapter.status, 'conversion_error') self.assertFalse(preview_adapter.converted) # enable every supported types including txt gsettings.auto_layout_file_types = CONVERTABLE_TYPES.keys() obj.file.contentType = 'text/plain' # collective.documentviewer checks if element was modified # or it does not convert again sleep(1) obj.notifyModified() queueJob(obj) self.assertEqual(preview_adapter.status, 'converted') self.assertTrue(preview_adapter.converted)
def submitDocumentViewer(wfStateInfo): originalfile = wfStateInfo.object if originalfile.getLayout() != 'documentviewer': originalfile.setLayout('documentviewer') queueJob(originalfile)
def update(self): #Zerando a variavel de retorno self.retorno = {} try: context = aq_inner(self.context) #TODO: Alterar os nomes das variaveis file_data = self.request.form.get('file', '') new_file = self.request.form.get('new_file', '') try: new_file = eval(new_file) except: new_file = False folder_path = self.request.form.get('folder_path', '') p_membership = getToolByName(context, "portal_membership") user_admin = p_membership.getMemberById('admin') # stash the existing security manager so we can restore it old_security_manager = getSecurityManager() # create a new context, as the owner of the folder newSecurityManager(self.request,user_admin) if file_data: #Mudando de contexto de acordo com o meu folder_path if folder_path and folder_path != '/': context = create_or_set_folder_path(folder_path.split('/'), context) title = file_name = file_data.filename id_file_name = normalize_id_to_file_name(title, context) description = '' mime_type = mimetypes.guess_type(file_name)[0] portal_type = 'File' upload_with = "CLASSIC FORM POST" #Verifico aqui se existe o arquivo no meu contexto try: newid = get_id_from_filename(file_name, context) except MissingExtension: raise Exception('missingExtensionFile') if newid in context or id_file_name in context: updated_object = context.get(newid, False) or context[id_file_name] mtool = getToolByName(context, 'portal_membership') if mtool.checkPermission(ModifyPortalContent, updated_object): can_overwrite = True else: can_overwrite = False if not can_overwrite: logger.debug("The file id for %s already exists, upload rejected" % file_name) raise Exception('serverErrorAlreadyExists') overwritten_file = updated_object else: overwritten_file = None if overwritten_file is not None: logger.info("reuploading %s file with %s : title=%s, description=%s, mime_type=%s" % \ (overwritten_file.absolute_url(), upload_with, title, description, mime_type)) try : f = vindula_file_updater(overwritten_file, file_name, title, description, mime_type, file_data) if f['success'] is not None: queueJob(f['success']) except Exception, e: logger.error("Error updating %s file : %s", file_name, str(e)) raise Exception("Error updating %s file : %s" % (file_name, str(e))) else: logger.info("uploading file with %s : filename=%s, title=%s, description=%s, mime_type=%s, portal_type=%s" % \ (upload_with, file_name, title, description, mime_type, portal_type)) try : f = vindula_file_factory(context, file_name, title, description, mime_type, file_data, portal_type) except Exception, e: logger.error("Error creating %s file : %s", file_name, str(e)) raise Exception("Error updating %s file : %s" % (file_name, str(e))) if f['success'] is not None : o = f['success'] self.retorno['uid'] = o.UID() logger.info("file url: %s" % o.absolute_url())