Update docstrings

This commit is contained in:
Stavros Korokithakis 2021-01-07 23:17:37 +02:00
parent 3762266edf
commit 0ae05719b3
No known key found for this signature in database
GPG Key ID: 26EA345ECD4C2A63
2 changed files with 39 additions and 5 deletions

View File

@ -5,7 +5,7 @@ repos:
- id: black
args: ["-l 90"]
- repo: https://github.com/asottile/reorder_python_imports
rev: v2.3.5
rev: v2.3.6
hooks:
- id: reorder-python-imports
- repo: https://gitlab.com/pycqa/flake8
@ -14,6 +14,12 @@ repos:
- id: flake8
args: ["--max-line-length=1000"]
language_version: python3
- repo: https://github.com/pycqa/pydocstyle
rev: 5.1.1
hooks:
- id: pydocstyle
args:
- --ignore=D100,D107,D203,D212
- repo: local
hooks:
- id: migrations-check

View File

@ -19,23 +19,30 @@ def contains_word(word: str, text: str) -> bool:
def slugify(text):
"""Convert `text` into a slug."""
return re.sub(r"[\W_]+", "-", text.lower()).strip("-")
class Note:
def __init__(self, id, parent_id, parent_title, title, body, updated_time):
"""A helper type for a note."""
def __init__(self, id, parent_id, parent_title, title, body, updated_time, tags=[]):
self.id = id
self.parent_id = parent_id
self.parent_title = parent_title
self.title = title
self.body = body
self.updated_time = datetime.fromtimestamp(updated_time)
self.tags = tags
def get_url(self):
"""Return the note's relative URL."""
return slugify(self.parent_title) + "/" + slugify(self.title)
class JoplinExporter:
"""The main exporter class."""
content_dir = Path("content")
static_dir = Path("static/resources")
joplin_dir = Path.home() / ".config/joplin-desktop"
@ -50,6 +57,8 @@ class JoplinExporter:
outfile.write('+++\nredirect_to = "welcome/stavros-notes/"\n+++')
def resolve_note_links(self, note: Note) -> str:
"""Resolve the links between notes and replace them in the body."""
def replacement(match):
item_id = match.group(1)
new_url = self.get_note_url_by_id(item_id)
@ -92,6 +101,15 @@ class JoplinExporter:
c.execute("""SELECT id, title FROM folders;""")
self.folders = {id: title for id, title in c.fetchall()}
# Get the tags by ID.
c.execute("""SELECT id, title FROM tags;""")
tags = {id: title for id, title in c.fetchall()}
# Get the tag IDs for each note ID.
c.execute("""SELECT note_id, tag_id FROM note_tags;""")
note_tags = defaultdict(list)
for note_id, tag_id in c.fetchall():
note_tags[note_id].append(tags[tag_id])
c.execute("""SELECT id, title, file_extension FROM resources;""")
self.resources = {id: (title, ext) for id, title, ext in c.fetchall()}
@ -100,7 +118,13 @@ class JoplinExporter:
self.note_lookup_dict = {}
for id, parent_id, title, body, updated_time in c.fetchall():
note = Note(
id, parent_id, self.folders[parent_id], title, body, updated_time / 1000
id,
parent_id,
self.folders[parent_id],
title,
body,
updated_time / 1000,
tags=note_tags[id],
)
self.notes[note.parent_id].append(note)
self.note_lookup_dict[note.id] = note
@ -108,6 +132,7 @@ class JoplinExporter:
conn.close()
def export(self):
"""Export all the notes to a static site."""
self.read_data()
# Private notes shouldn't be published.
@ -128,8 +153,11 @@ class JoplinExporter:
contents = []
note_counter = 0
for note in sorted(self.notes[folder_id], key=lambda n: n.title):
if contains_word("private", note.title) or contains_word(
"wip", note.title
if (
contains_word("private", note.title)
or contains_word("wip", note.title)
or "wip" in note.tags
or "private" in note.tags
):
print(
f"Note is unpublished, skipping: {folder_title} - {note.title}."