2019-06-29 06:42:54 +00:00
|
|
|
from datetime import datetime
|
|
|
|
|
2019-06-30 05:15:46 +00:00
|
|
|
import bs4
|
|
|
|
from bs4 import BeautifulSoup
|
2019-06-29 06:42:54 +00:00
|
|
|
from django.contrib.auth.models import User
|
2019-06-30 05:15:46 +00:00
|
|
|
from django.utils import timezone
|
2019-06-29 06:42:54 +00:00
|
|
|
|
2019-06-30 05:15:46 +00:00
|
|
|
from bookmarks.models import Bookmark, Tag
|
2019-06-29 06:42:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
def import_netscape_html(html: str, user: User):
|
|
|
|
soup = BeautifulSoup(html, 'html.parser')
|
|
|
|
|
|
|
|
bookmark_tags = soup.find_all('dt')
|
|
|
|
|
|
|
|
for bookmark_tag in bookmark_tags:
|
|
|
|
_import_bookmark_tag(bookmark_tag, user)
|
|
|
|
|
|
|
|
|
2019-06-30 05:15:46 +00:00
|
|
|
def _import_bookmark_tag(bookmark_tag: bs4.Tag, user: User):
|
2019-06-29 06:42:54 +00:00
|
|
|
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()
|
|
|
|
|
2019-06-30 05:15:46 +00:00
|
|
|
# Set tags
|
|
|
|
tag_string = link_tag['tags']
|
|
|
|
tag_names = tag_string.strip().split(',')
|
|
|
|
|
|
|
|
tags = [_get_or_create_tag(tag_name, user) for tag_name in tag_names]
|
|
|
|
bookmark.tags.set(tags)
|
|
|
|
bookmark.save()
|
|
|
|
|
2019-06-29 06:42:54 +00:00
|
|
|
|
|
|
|
def _get_or_create_bookmark(url: str, user: User):
|
|
|
|
try:
|
|
|
|
return Bookmark.objects.get(url=url, owner=user)
|
|
|
|
except Bookmark.DoesNotExist:
|
|
|
|
return Bookmark()
|
2019-06-30 05:15:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
def _get_or_create_tag(name: str, user: User):
|
|
|
|
try:
|
|
|
|
return Tag.objects.get(name=name, owner=user)
|
|
|
|
except Tag.DoesNotExist:
|
|
|
|
tag = Tag(name=name, owner=user)
|
|
|
|
tag.date_added = timezone.now()
|
|
|
|
tag.save()
|
|
|
|
return tag
|