def enhance_node_infos(self, node): """ Add additional infos, if the node needs them """ text = node.text obj = self.get_obj_from_link(node) if not obj: # the url is broken! return enhancer_provider = ILinkEnhancerProvider(obj, None) if not enhancer_provider: # there isn't an adapter registered for this content-type return link_details = enhancer_provider.get_link_details() if not link_details: return additional_infos = [ x for x in (link_details.get("extension"), link_details.get("size")) if x ] if node.getchildren(): child = node.getchildren()[-1] if child.tail: child_postfix_text = child.tail else: child_postfix_text = "" additional_infos = " ({0})".format(", ".join(additional_infos)) child_postfix_text = child_postfix_text + additional_infos child.tail = child_postfix_text elif additional_infos and text: additional_infos = " ({0})".format(", ".join(additional_infos)) text = text + additional_infos if link_details.get("icon_url"): icon_tag = etree.Element("img") icon_tag.set("src", link_details.get("icon_url")) icon_tag.set("class", "attachmentLinkIcon") node.insert(0, icon_tag) if text: # move text after the image icon_tag.tail = text node.text = "" else: icon_tag.tail = " " node_children = node.getchildren() if node_children and not node_children[-1].tail: node_children[-1].tail = " ({0})".format( ", ".join(additional_infos)) if link_details.get("url_suffix"): self.update_href(node, link_details)
def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) login(self.portal, TEST_USER_NAME) self.file = api.content.create( type='File', title='file', container=self.portal, file=self.get_attachment(u'file.pdf', type='file'), ) self.csv = api.content.create( type='File', title='csv file', container=self.portal, file=self.get_attachment(u'file_csv.csv', type='file'), ) self.image = api.content.create( type='Image', title='image', container=self.portal, image=self.get_attachment(u'image.jpg', type='image'), ) self.document = api.content.create(type='Document', title='A page', container=self.portal) self.file_provider = ILinkEnhancerProvider(self.file, None) self.csv_provider = ILinkEnhancerProvider(self.csv, None) self.img_provider = ILinkEnhancerProvider(self.image, None)
def enhance_node_infos(self, node): """ Add additional infos, if the node needs them """ text = node.text obj = self.get_obj_from_link(node) if not obj: # the url is broken! return enhancer_provider = ILinkEnhancerProvider(obj, None) if not enhancer_provider: # there isn't an adapter registered for this content-type return link_details = enhancer_provider.get_link_details() if not link_details: return icon_tag = '' additional_infos = '' if link_details.get("icon_url"): icon_tag = etree.Element("img") icon_tag.set("src", link_details.get("icon_url")) icon_tag.set("class", "attachmentLinkIcon") icon_tag.set("alt", link_details.get("extension") or "") additional_infos = link_details.get("size") + ")" icon_tag.tail = additional_infos if node.getchildren(): child = node.getchildren()[-1] if child.tail: child.tail = child.tail + ' (' else: child.append(icon_tag) child.tail = ' (' elif additional_infos and text: node.text = node.text + ' (' node.append(icon_tag) if link_details.get("url_suffix"): self.update_href(node, link_details)
def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) login(self.portal, TEST_USER_NAME) file_path = os.path.join(os.path.dirname(__file__), "file.pdf") image_path = os.path.join(os.path.dirname(__file__), "image.jpg") self.file = api.content.create( type='File', title='file', container=self.portal, file=open(file_path)) self.image = api.content.create( type='Image', title='image', container=self.portal, image=open(image_path)) self.document = api.content.create( type='Document', title='A page', container=self.portal) self.file_provider = ILinkEnhancerProvider(self.file, None) self.img_provider = ILinkEnhancerProvider(self.image, None)
def enhance_node_infos(self, node): """ Add additional infos, if the node needs them """ text = node.text obj = self.get_obj_from_link(node) if not obj: # the url is broken! return enhancer_provider = ILinkEnhancerProvider(obj, None) if not enhancer_provider: # there isn't an adapter registered for this content-type return link_details = enhancer_provider.get_link_details() if not link_details: return additional_infos = [x for x in ( link_details.get('extension'), link_details.get('size')) if x] if additional_infos and text: text = " %s (%s)" % (text, ", ".join(additional_infos)) if link_details.get('icon_url'): icon_tag = etree.Element("img") icon_tag.set("src", link_details.get('icon_url')) icon_tag.set("class", "attachmentLinkIcon") node.insert(0, icon_tag) if text: # move text after the image icon_tag.tail = text node.text = "" else: icon_tag.tail = " " node_children = node.getchildren() if node_children: node_children[-1].tail = " (%s)" % ", ".join(additional_infos) if link_details.get('url_suffix'): self.update_href(node, link_details)
class TestAdapter(BaseTest): """ Test that collective.outputfilters.enhancelinks is properly installed. """ layer = COLLECTIVE_OUTPUTFILTERS_enhancelinks_FUNCTIONAL_TESTING def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) login(self.portal, TEST_USER_NAME) self.file = api.content.create( type='File', title='file', container=self.portal, file=self.get_attachment(u'file.pdf', type='file'), ) self.csv = api.content.create( type='File', title='csv file', container=self.portal, file=self.get_attachment(u'file_csv.csv', type='file'), ) self.image = api.content.create( type='Image', title='image', container=self.portal, image=self.get_attachment(u'image.jpg', type='image'), ) self.document = api.content.create(type='Document', title='A page', container=self.portal) self.file_provider = ILinkEnhancerProvider(self.file, None) self.csv_provider = ILinkEnhancerProvider(self.csv, None) self.img_provider = ILinkEnhancerProvider(self.image, None) def test_adapter_guess_mimetype(self): """Test if the method find the correct mimetype""" # I pass False because it isn't a DX content file_item = self.get_right_file(item=self.file, type='file') csv_item = self.get_right_file(item=self.csv, type='file') image_item = self.get_right_file(item=self.image, type='image') # File PDF mimetype = self.extract_mimetype(file_item) self.assertEqual(len(mimetype), 1) self.assertEqual(mimetype[0].id, 'PDF document') # Csv mimetype = self.extract_mimetype(csv_item) self.assertEqual(len(mimetype), 1) # ===================== WARNING ================================== # ATTENZIONE: questo singolo test è 'sbagliato': il vero risultato # dovrebbe essere `CSV document` ma il prodotto # `Products.MimetypesRegistry` ha il mimetype sbagliato e ho aperto # anche una issue su questo argomento # https://github.com/plone/Products.MimetypesRegistry/issues/17 # Quando questo test fallirà, probabilmente sarà stato aggiornato # e sarà da sistemare anche questo test. self.assertEqual(mimetype[0].id, 'text/comma-separated-values') # Image img_mimetype = self.extract_mimetype(image_item) self.assertEqual(len(img_mimetype), 1) self.assertEqual(img_mimetype[0].id, 'JPEG image') def test_adapter_format_obj_size(self): """Test if the method returns a correct obj size""" # File PDF self.assertEqual(self.file_provider.get_formatted_size(self.file.file), '8.56 KB') # CSV self.assertEqual(self.csv_provider.get_formatted_size(self.csv.file), '39 bytes') # Image self.assertEqual( self.img_provider.get_formatted_size(self.image.image), '5.13 KB') def test_adapter_extract_infos_from_mime(self): """" Test if the method returns the correct infos """ file_item = self.get_right_file(item=self.file, type='file') csv_item = self.get_right_file(item=self.csv, type='file') image_item = self.get_right_file(item=self.image, type='image') # File PDF mimetype = self.extract_mimetype(file_item) infos = self.file_provider.extract_infos(file_item, mimetype) self.assertIn(infos.get('icon_url'), FILE_ICON_URLS) self.assertEqual(infos.get('extension'), 'pdf') self.assertEqual(infos.get('size'), '8.56 KB') self.assertIn(infos.get('url_suffix'), FILE_DOWNLOAD_URLS) # CSV mimetype = self.extract_mimetype(csv_item) infos = self.csv_provider.extract_infos(csv_item, mimetype) # La successiva assertIn è strana per lo stesso motivo del WARNING che # potete trovare nei commenti più su. Il rilevamento del csv è buggato # e quindi l'icona restituita è 'text.png' che non è necessariamente # sbagliata però si potrebbe fare di meglio. self.assertIn(infos.get('icon_url'), CSV_ICON_URLS) self.assertEqual(infos.get('extension'), 'csv') self.assertEqual(infos.get('size'), '39 bytes') self.assertIn(infos.get('url_suffix'), CSV_DOWNLOAD_URLS) # Image img_mimetype = self.extract_mimetype(image_item) infos = self.img_provider.extract_infos(image_item, img_mimetype) self.assertIn(infos.get('icon_url'), IMAGE_ICON_URLS) self.assertEqual(infos.get('extension'), 'jpg') self.assertEqual(infos.get('size'), '5.13 KB') self.assertEqual(infos.get('url_suffix'), '') def test_adapter_for_file(self): """Test if the view returns the correct infos for a file""" infos = self.file_provider.get_link_details() self.assertIn(infos.get('icon_url'), FILE_ICON_URLS) self.assertEqual(infos.get('extension'), 'pdf') self.assertEqual(infos.get('size'), '8.56 KB') self.assertIn(infos.get('url_suffix'), FILE_DOWNLOAD_URLS) def test_adapter_for_csv(self): """Test if the view returns the correct infos for a file""" infos = self.csv_provider.get_link_details() self.assertIn(infos.get('icon_url'), CSV_ICON_URLS) self.assertEqual(infos.get('extension'), 'csv') self.assertEqual(infos.get('size'), '39 bytes') self.assertIn(infos.get('url_suffix'), CSV_DOWNLOAD_URLS) def test_adapter_for_image(self): """Test if the view returns the correct infos for an image""" infos = self.img_provider.get_link_details() self.assertIn(infos.get('icon_url'), IMAGE_ICON_URLS) self.assertEqual(infos.get('extension'), 'jpg') self.assertEqual(infos.get('size'), '5.13 KB') self.assertEqual(infos.get('url_suffix'), '')
class TestAdapter(unittest.TestCase): """ Test that collective.outputfilters.enhancelinks is properly installed. """ layer = COLLECTIVE_OUTPUTFILTERS_enhancelinks_FUNCTIONAL_TESTING def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) login(self.portal, TEST_USER_NAME) file_path = os.path.join(os.path.dirname(__file__), "file.pdf") image_path = os.path.join(os.path.dirname(__file__), "image.jpg") self.file = api.content.create( type='File', title='file', container=self.portal, file=open(file_path)) self.image = api.content.create( type='Image', title='image', container=self.portal, image=open(image_path)) self.document = api.content.create( type='Document', title='A page', container=self.portal) self.file_provider = ILinkEnhancerProvider(self.file, None) self.img_provider = ILinkEnhancerProvider(self.image, None) def test_adapter_guess_mimetype(self): """Test if the method find the correct mimetype""" # I pass False because it isn't a DX content mimetype = self.file_provider.guess_mimetype( self.file.getFile().getContentType(), self.file.getFile().filename) self.assertEqual(len(mimetype), 1) self.assertEqual(mimetype[0].id, 'PDF document') img_mimetype = self.img_provider.guess_mimetype( self.image.getFile().getContentType(), self.image.getFile().filename) self.assertEqual(len(img_mimetype), 1) self.assertEqual(img_mimetype[0].id, 'JPEG image') def test_adapter_format_obj_size(self): """Test if the method returns a correct obj size""" self.assertEqual( self.file_provider.get_formatted_size(self.file.getFile()), '8.4 KB') self.assertEqual( self.img_provider.get_formatted_size(self.image.getFile()), '5.0 KB') def test_adapter_extract_infos_from_mime(self): """ Test if the method returns the correct infos """ mimetype = self.file_provider.guess_mimetype( self.file.getFile().getContentType(), self.file.getFile().filename) infos = self.file_provider.extract_infos( self.file.getFile(), mimetype) self.assertEqual(infos.get('icon_url'), 'http://nohost/plone/pdf.png') self.assertEqual(infos.get('extension'), 'pdf') self.assertEqual(infos.get('size'), '8.4 KB') self.assertEqual(infos.get('url_suffix'), '/at_download/file/file.pdf') mimetype = self.img_provider.guess_mimetype( self.image.getFile().getContentType(), self.image.getFile().filename) infos = self.img_provider.extract_infos( self.image.getFile(), mimetype) self.assertEqual(infos.get('icon_url'), 'http://nohost/plone/image.png') self.assertEqual(infos.get('extension'), 'jpg') self.assertEqual(infos.get('size'), '5.0 KB') self.assertEqual(infos.get('url_suffix'), '') def test_adapter_for_file(self): """Test if the view returns the correct infos for a file""" infos = self.file_provider.get_link_details() self.assertEqual(infos.get('icon_url'), 'http://nohost/plone/pdf.png') self.assertEqual(infos.get('extension'), 'pdf') self.assertEqual(infos.get('size'), '8.4 KB') self.assertEqual(infos.get('url_suffix'), '/at_download/file/file.pdf') def test_adapter_for_image(self): """Test if the view returns the correct infos for an image""" infos = self.img_provider.get_link_details() self.assertEqual(infos.get('icon_url'), 'http://nohost/plone/image.png') self.assertEqual(infos.get('extension'), 'jpg') self.assertEqual(infos.get('size'), '5.0 KB') self.assertEqual(infos.get('url_suffix'), '')