1
0
mirror of https://github.com/aquatix/digimarks.git synced 2025-12-07 00:15:10 +01:00

Merge branch 'fastapi' of github.com:aquatix/digimarks into fastapi

This commit is contained in:
2025-05-04 13:18:12 +02:00

View File

@@ -51,6 +51,7 @@ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base() Base = declarative_base()
@asynccontextmanager @asynccontextmanager
async def lifespan(the_app: FastAPI): async def lifespan(the_app: FastAPI):
"""Upon start, initialise an AsyncClient and assign it to an attribute named requests_client on the app object.""" """Upon start, initialise an AsyncClient and assign it to an attribute named requests_client on the app object."""
@@ -58,6 +59,7 @@ async def lifespan(the_app: FastAPI):
yield yield
await the_app.requests_client.aclose() await the_app.requests_client.aclose()
app = FastAPI(lifespan=lifespan) app = FastAPI(lifespan=lifespan)
templates = Jinja2Templates(directory='templates') templates = Jinja2Templates(directory='templates')
@@ -110,9 +112,9 @@ def unique_ever_seen(iterable, key=None):
def clean_tags(tags_list): def clean_tags(tags_list):
"""Generate unique list of the tags. """Generate a unique list of the tags.
:param list tags_list: list with all tags :param list tags_list: List with all tags
:return: deduplicated list of the tags, without leading or trailing whitespace :return: deduplicated list of the tags, without leading or trailing whitespace
:rtype: list :rtype: list
""" """
@@ -233,7 +235,9 @@ class Bookmark(Base):
def set_status_code(self, request: Request) -> int: def set_status_code(self, request: Request) -> int:
"""Check the HTTP status of the url, as it might not exist for example.""" """Check the HTTP status of the url, as it might not exist for example."""
try: try:
result = request.app.requests_client.head(self.url, headers={'User-Agent': DIGIMARKS_USER_AGENT}, timeout=30) result = request.app.requests_client.head(
self.url, headers={'User-Agent': DIGIMARKS_USER_AGENT}, timeout=30
)
self.http_status = result.status_code self.http_status = result.status_code
except httpx.HTTPError as err: except httpx.HTTPError as err:
logger.error('Failed to do head info fetching for %s: %s', self.url, str(err)) logger.error('Failed to do head info fetching for %s: %s', self.url, str(err))
@@ -440,9 +444,9 @@ def _find_bookmarks(user_key: str, filter_text) -> list[Bookmark]:
.where( .where(
Bookmark.userkey == user_key, Bookmark.userkey == user_key,
( (
Bookmark.title.contains(filter_text) Bookmark.title.contains(filter_text)
| Bookmark.url.contains(filter_text) | Bookmark.url.contains(filter_text)
| Bookmark.note.contains(filter_text) | Bookmark.note.contains(filter_text)
), ),
Bookmark.status == Bookmark.VISIBLE, Bookmark.status == Bookmark.VISIBLE,
) )
@@ -519,7 +523,7 @@ def get_bookmarks(request: Request, user_key, filter_method=None, sort_method=No
.order_by(Bookmark.created_date.desc()) .order_by(Bookmark.created_date.desc())
) )
return bookmarks, bookmark_tags, filter_text #, message return bookmarks, bookmark_tags, filter_text # , message
@app.get('/{user_key}', response_class=HTMLResponse) @app.get('/{user_key}', response_class=HTMLResponse)
@@ -665,7 +669,7 @@ def add_bookmark(request: Request, user_key: str):
) )
def update_bookmark(request: Request, user_key: str, url_hash: str=None): def update_bookmark(request: Request, user_key: str, url_hash: str = None):
"""Add (no urlhash) or edit (urlhash is set) a bookmark.""" """Add (no urlhash) or edit (urlhash is set) a bookmark."""
title = request.form.get('title') title = request.form.get('title')
url = request.form.get('url') url = request.form.get('url')
@@ -994,7 +998,7 @@ def add_user(system_key):
new_user.save() new_user.save()
all_tags[new_user.key] = [] all_tags[new_user.key] = []
return {'user': f'/{new_user.key.decode("utf-8")}'} return {'user': f'/{new_user.key.decode("utf-8")}'}
raise HTTPException(status_code=404, detail='I can\'t let you do that Dave') raise HTTPException(status_code=404, detail="I can't let you do that Dave")
@app.route('/<system_key>/refreshfavicons') @app.route('/<system_key>/refreshfavicons')
@@ -1011,7 +1015,7 @@ def refresh_favicons(system_key):
print(e) print(e)
bookmark.set_favicon() bookmark.set_favicon()
return {'message': 'Done refreshing icons'} return {'message': 'Done refreshing icons'}
raise HTTPException(status_code=404, detail='I can\'t let you do that Dave') raise HTTPException(status_code=404, detail="I can't let you do that Dave")
@app.route('/<system_key>/findmissingfavicons') @app.route('/<system_key>/findmissingfavicons')
@@ -1022,7 +1026,7 @@ def find_missing_favicons(request: Request, system_key: str):
for bookmark in bookmarks: for bookmark in bookmarks:
try: try:
if not bookmark.favicon or not os.path.isfile( if not bookmark.favicon or not os.path.isfile(
os.path.join(settings.media_dir, 'favicons', bookmark.favicon) os.path.join(settings.media_dir, 'favicons', bookmark.favicon)
): ):
# This favicon is missing # This favicon is missing
# Clear favicon, so fallback can be used instead of showing a broken image # Clear favicon, so fallback can be used instead of showing a broken image
@@ -1034,7 +1038,8 @@ def find_missing_favicons(request: Request, system_key: str):
except OSError as e: except OSError as e:
print(e) print(e)
return {'message': 'Done finding missing icons'} return {'message': 'Done finding missing icons'}
raise HTTPException(status_code=404, detail='I can\'t let you do that Dave') raise HTTPException(status_code=404, detail="I can't let you do that Dave")
# Initialisation == create the bookmark, user and public tag tables if they do not exist # Initialisation == create the bookmark, user and public tag tables if they do not exist
# TODO: switch to alembic migrations # TODO: switch to alembic migrations