def fget(self):
     if EvernoteApiWrapper.is_evernote_url(self._href):
         if self._ref_item is None:
             self._ref_item = self._adaptor.wp_item_from_note(self._href)
         return self._ref_item
     else:
         return self._href
 def _find_ref_items(self):
     for a_tag in self._content_node.findall('.//a'):
         href = a_tag.get('href', '')
         if EvernoteApiWrapper.is_evernote_url(href):
             # Add a late-loading function in case this will never be needed
             def load_item(link):
                 return lambda: self._adaptor.wp_item_from_note(link)
             self._wp_item._ref_wp_items[href] = load_item(href)
Exemple #3
0
 def setUp(self, mock_logging, mock_init_wp_client, mock_init_en_client):
     super(TestEvernoteDetach, self).setUp()
     wordpress_evernote.logger = self.wp_en_logger = MagicMock()
     self.evernote = EvernoteApiWrapper(token='123')
     self.evernote.get_note = MagicMock(side_effect=mocked_get_note)
     self.evernote.updateNote = MagicMock()
     self.wordpress = WordPressApiWrapper('xmlrpc.php', 'user', 'password')
     self.adaptor = EvernoteWordpressAdaptor(self.evernote, self.wordpress)
 def render_line_element(e, line_so_far):
     tag = e.tag.lower()
     if 'a' == tag:
         href = e.get('href', '')
         text = e.text
         if EvernoteApiWrapper.is_evernote_url(href):
             ref_item = self._adaptor.wp_item_from_note(href)
             return ref_item.markdown_ref(text)
         else:
             return href
     elif 'span' == tag:
         return e.text
     elif 'en-todo' == tag:
         return '❑'
     elif 'en-media' == tag:
         logger.warn('Unexpected en-media element in content: %s',
                     ET.tostring(e))
         return ''
     else:
         raise NoteParserError('Invalid tag "%s" in content paragraph' %
                               (ET.tostring(e)))
 def wp_item_from_note(self, note_link):
     """Factory builder of WordPressItem from Evernote note.
     
     :param note_link: Evernote note link string for note to create.
     """
     if isinstance(note_link, basestring):
         guid = EvernoteApiWrapper.get_note_guid(note_link)
     else:
         note = note_link
         guid = note.guid
     # return parsed note from cache, if cached
     if guid in self.cache:
         return self.cache[guid]
     # not cached - parse and cache result
     if isinstance(note_link, basestring):
         note = self.evernote.get_note(guid)
     wp_item = WordPressItem()
     wp_item._underlying_en_note = note
     self.cache[guid] = wp_item
     item_dom = self._parse_note_xml(note.content)
     # Copy metadata fields to wp_item internal fields
     # Convert from Evernote attribute name to internal name if needed
     name_mappings = {
         'type': 'post_type',
         'hemingwayapp-grade': 'hemingway_grade',
     }
     for metadata in item_dom.findall(".//div[@id='metadata']/p"):
         if metadata.text is None:
             continue
         if metadata.text.startswith('#'):
             continue
         pos = metadata.text.find('=')
         attr_name = metadata.text[:pos]
         attr_name = name_mappings.get(attr_name, attr_name)
         metadata.text = metadata.text[pos+1:]
         wp_item.set_wp_attribute(attr_name,
                                  WpEnAttribute.create(self, attr_name,
                                                       metadata, wp_item))
     # Determine post type and continue initialization accordingly
     if wp_item.post_type in ('post', 'page'):
         # Initialize as WordPress post, and set content
         wp_item.__class__ = WordPressPost
         wp_item.set_wp_attribute(
             'content', WpEnContent(item_dom.find(".//div[@id='content']"),
                                    wp_item, self))
     else:
         # Initialize as WordPress image attachment, and fetch image
         wp_item.__class__ = WordPressImageAttachment
         wp_item._filename = note.title
         if not note.resources or 0 == len(note.resources):
             raise NoteParserError('Note (%s) has no attached resources' %
                                   (note.title))
         resource = note.resources[0]
         if 1 < len(note.resources):
             logger.warning('Note has too many attached resources (%d). '
                            'Choosing the first one, arbitrarily.',
                            len(note.resources))
         def fetch_bits(guid, name):
             def fetch():
                 logger.debug('Fetching image %s', name)
                 return self.evernote.get_resource_data(guid)
             return fetch
         wp_item._get_image_data = fetch_bits(resource.guid, note.title)
         wp_item._image_mime = resource.mime
     return wp_item
Exemple #6
0
 def setUp(self, mock_init_en_client):
     wordpress.logger = Mock()
     wordpress_evernote.logger = Mock()
     self.evernote = EvernoteApiWrapper(token='123')
     self.evernote.get_note = MagicMock(side_effect=mocked_get_note)
     self.adaptor = EvernoteWordpressAdaptor(self.evernote, None)