1
0
mirror of https://github.com/aquatix/digimarks.git synced 2025-12-06 19:45:12 +01:00

Typing and docstring improvements

This commit is contained in:
2025-09-22 12:26:57 +02:00
parent 651a7e4ece
commit bf6cd081f9
4 changed files with 21 additions and 20 deletions

View File

@@ -2,20 +2,24 @@
class BookmarkNotFound(Exception):
def __init__(self, message='Bookmark not found'):
"""A bookmark was not found."""
def __init__(self, message: str ='Bookmark not found'):
"""Initialise the exception.
:param str message: The message for the exception
"""
super().__init__(message)
self.message = message
self.message: str = message
class BookmarkAlreadyExists(Exception):
def __init__(self, message='Bookmark already exists'):
"""A bookmark already exists for this URL and this user."""
def __init__(self, message: str ='Bookmark already exists'):
"""Initialise the exception.
:param str message: The message for the exception
"""
super().__init__(message)
self.message = message
self.message: str = message

View File

@@ -299,7 +299,7 @@ async def list_bookmarks_for_tag_for_user(
tag_key: str,
) -> list[str]:
"""List all tags in use by the user."""
logger.info('List bookmarks for tag %s user %s', user_key)
logger.info('List bookmarks for tag "%s" by user %s', tag_key, user_key)
return await tags_service.list_bookmarks_for_tag_for_user(session, user_key, tag_key)

View File

@@ -5,7 +5,7 @@ Contains the bookmarks administration, users, tags, public tags and more.
from datetime import UTC, datetime
from http import HTTPStatus
from typing import Optional, Type, TypeVar
from typing import TypeVar
from pydantic import AnyUrl, computed_field
from sqlmodel import AutoString, Field, SQLModel
@@ -16,8 +16,6 @@ DEFAULT_THEME = 'freshgreen'
class User(SQLModel, table=True):
"""User account."""
__tablename__ = 'user'
id: int = Field(primary_key=True)
username: str
key: str
@@ -28,23 +26,23 @@ class User(SQLModel, table=True):
class Visibility:
"""Options for visibility of an object."""
VISIBLE = 0
DELETED = 1
HIDDEN = 2
VISIBLE: int = 0
DELETED: int = 1
HIDDEN: int = 2
# Type var used for building custom types for the DB
T = TypeVar('T')
def build_custom_type(internal_type: Type[T]) -> Type[AutoString]:
def build_custom_type(internal_type: type[T]) -> type[AutoString]:
"""Create a type that is compatible with the database.
Based on https://github.com/fastapi/sqlmodel/discussions/847
"""
class CustomType(AutoString):
def process_bind_param(self, value, dialect) -> Optional[str]:
def process_bind_param(self, value, dialect) -> str | None:
if value is None:
return None
@@ -57,7 +55,7 @@ def build_custom_type(internal_type: Type[T]) -> Type[AutoString]:
return str(value)
def process_result_value(self, value, dialect) -> Optional[T]:
def process_result_value(self, value, dialect) -> T | None:
if value is None:
return None
@@ -69,8 +67,6 @@ def build_custom_type(internal_type: Type[T]) -> Type[AutoString]:
class Bookmark(SQLModel, table=True):
"""Bookmark object."""
__tablename__ = 'bookmark'
id: int = Field(primary_key=True)
user_key: str = Field(foreign_key='user.key', nullable=False)
title: str = Field(default='', nullable=False)
@@ -93,7 +89,7 @@ class Bookmark(SQLModel, table=True):
@computed_field
@property
def tag_list(self) -> list:
def tag_list(self) -> list[str]:
"""The tags but as a proper list."""
if self.tags:
return self.tags.split(',')
@@ -104,8 +100,6 @@ class Bookmark(SQLModel, table=True):
class PublicTag(SQLModel, table=True):
"""Public tag object."""
__tablename__ = 'publictag'
id: int = Field(primary_key=True)
tag_key: str
user_key: str = Field(foreign_key='user.key')

View File

@@ -53,7 +53,10 @@ def clean_tags(tags_list: list) -> list[str]:
def list_tags_for_bookmarks(bookmarks: Sequence[Bookmark]) -> list[str]:
"""Generate a unique list of the tags from the list of bookmarks."""
"""Generate a unique list of the tags from the list of bookmarks.
:param Sequence[Bookmark] bookmarks: List of bookmarks to create the list of tags from
"""
tags = []
for bookmark in bookmarks:
tags += bookmark.tag_list