def _import_bookmark_tag(netscape_bookmark: NetscapeBookmark, user: User): # Either modify existing bookmark for the URL or create new one bookmark = _get_or_create_bookmark(netscape_bookmark.href, user) bookmark.url = netscape_bookmark.href if netscape_bookmark.date_added: bookmark.date_added = datetime.utcfromtimestamp( int(netscape_bookmark.date_added)).astimezone() else: bookmark.date_added = timezone.now() bookmark.date_modified = bookmark.date_added bookmark.unread = False bookmark.title = netscape_bookmark.title if netscape_bookmark.description: bookmark.description = netscape_bookmark.description bookmark.owner = user bookmark.save() # Set tags tag_names = parse_tag_string(netscape_bookmark.tag_string) tags = get_or_create_tags(tag_names, user) bookmark.tags.set(tags) bookmark.save()
def _import_bookmark_tag(bookmark_tag: bs4.Tag, user: User): link_tag = bookmark_tag.a if link_tag is None: return # Either modify existing bookmark for the URL or create new one url = link_tag['href'] bookmark = _get_or_create_bookmark(url, user) bookmark.url = url bookmark.date_added = datetime.utcfromtimestamp(int(link_tag['add_date'])) bookmark.date_modified = bookmark.date_added bookmark.unread = link_tag['toread'] == '1' bookmark.title = link_tag.string bookmark.owner = user bookmark.save() # Set tags tag_string = link_tag['tags'] tag_names = parse_tag_string(tag_string) tags = get_or_create_tags(tag_names, user) bookmark.tags.set(tags) bookmark.save()
def untag_bookmarks(bookmark_ids: [Union[int, str]], tag_string: str, current_user: User): sanitized_bookmark_ids = _sanitize_id_list(bookmark_ids) bookmarks = Bookmark.objects.filter(owner=current_user, id__in=sanitized_bookmark_ids) tag_names = parse_tag_string(tag_string, ' ') tags = get_or_create_tags(tag_names, current_user) for bookmark in bookmarks: bookmark.tags.remove(*tags) bookmark.date_modified = timezone.now() Bookmark.objects.bulk_update(bookmarks, ['date_modified'])
def test_parse_tag_string_returns_list_of_tag_names(self): self.assertCountEqual(parse_tag_string('book, movie, album'), ['book', 'movie', 'album'])
def test_parse_tag_string_deduplicates_tag_names(self): self.assertEqual(len(parse_tag_string('book,book,Book,BOOK')), 1)
def test_parse_tag_string_handles_invalid_input(self): self.assertListEqual(parse_tag_string(None), []) self.assertListEqual(parse_tag_string(''), [])
def test_parse_tag_string_handles_whitespace(self): self.assertCountEqual( parse_tag_string('\t book, movie \t, album, \n\r'), ['album', 'book', 'movie'])
def test_parse_tag_string_orders_tag_names_alphabetically(self): self.assertListEqual(parse_tag_string('book,movie,album'), ['album', 'book', 'movie']) self.assertListEqual(parse_tag_string('Book,movie,album'), ['album', 'Book', 'movie'])
def test_parse_tag_string_respects_separator(self): self.assertCountEqual(parse_tag_string('book movie album', ' '), ['book', 'movie', 'album'])
def _update_bookmark_tags(bookmark: Bookmark, tag_string: str, user: User): tag_names = parse_tag_string(tag_string, ' ') tags = get_or_create_tags(tag_names, user) bookmark.tags.set(tags)