Skip to main content

Improve the lookups of Flickr users

ID
cbca601
date
2024-03-20 09:43:19+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
65938eb
message
Improve the lookups of Flickr users
changed files
4 files, 33 additions, 5 deletions

Changed files

flickr/fluser_lookup.py (1748) → flickr/fluser_lookup.py (2251)

diff --git a/flickr/fluser_lookup.py b/flickr/fluser_lookup.py
index 2c36307..f6c7f0c 100755
--- a/flickr/fluser_lookup.py
+++ b/flickr/fluser_lookup.py
@@ -12,13 +12,27 @@ Look up a user by URL or path alias.
 """
 
 import sys
+from typing import TypedDict
 
 from flickr_photos_api import FlickrPhotosApi
+from flickr_url_parser import is_flickr_user_id
 import hyperlink
 import keyring
 
 
-def get_user_id(user_text: str) -> str:
+class PathAlias(TypedDict):
+    path_alias: str
+
+
+class UserId(TypedDict):
+    id: str
+
+
+def get_user_id(user_text: str) -> PathAlias | UserId:
+    # e.g. 35468159852@N01
+    if is_flickr_user_id(user_text):
+        return {"id": user_text}
+
     u = hyperlink.URL.from_text(user_text)
 
     # e.g. https://www.youtube.com/watch?v=0naRXbQQ838
@@ -30,9 +44,15 @@ def get_user_id(user_text: str) -> str:
     ):
         return {"path_alias": u.path[1]}
 
+    # e.g. "https://www.flickr.com/photos/35468159852@N01/"
     # e.g. https://www.flickr.com/photos/powerhouse_museum/2532449275/
     if u.host == "www.flickr.com" and len(u.path) >= 2 and u.path[0] == "photos":
-        return {"path_alias": u.path[1]}
+        if is_flickr_user_id(u.path[1]):
+            return {"id": u.path[1]}
+        else:
+            return {"path_alias": u.path[1]}
+
+    raise ValueError(f"Cannot get Flickr user from {user_text!r}")
 
 
 if __name__ == "__main__":

flickr/test_fluser_lookup.py (501) → flickr/test_fluser_lookup.py (714)

diff --git a/flickr/test_fluser_lookup.py b/flickr/test_fluser_lookup.py
index f6c9a05..42edef4 100644
--- a/flickr/test_fluser_lookup.py
+++ b/flickr/test_fluser_lookup.py
@@ -14,6 +14,14 @@ from fluser_lookup import get_user_id
             "https://www.flickr.com/photos/powerhouse_museum/2532449275/",
             {"path_alias": "powerhouse_museum"},
         ),
+        (
+            "35468159852@N01",
+            {"id": "35468159852@N01"},
+        ),
+        (
+            "https://www.flickr.com/photos/35468159852@N01/",
+            {"id": "35468159852@N01"},
+        ),
     ],
 )
 def test_get_user_id(user_text, user_id):

requirements.in (328) → requirements.in (335)

diff --git a/requirements.in b/requirements.in
index 7f46249..1dc141e 100644
--- a/requirements.in
+++ b/requirements.in
@@ -7,7 +7,7 @@ datasette
 datasette-render-image-tags
 flake8
 flickr-photos-api
-flickr-url-parser
+flickr-url-parser>=1.8.2
 google-api-python-client==1.7.2
 google-auth-oauthlib==0.4.1
 httpx

requirements.txt (4907) → requirements.txt (4923)

diff --git a/requirements.txt b/requirements.txt
index b9af2e5..48a5f58 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,7 +2,7 @@
 # This file is autogenerated by pip-compile with Python 3.12
 # by the following command:
 #
-#    pip-compile
+#    pip-compile requirements.in
 #
 aiofiles==23.2.1
     # via datasette
@@ -62,7 +62,7 @@ flake8==6.1.0
     # via -r requirements.in
 flickr-photos-api==1.5.7
     # via -r requirements.in
-flickr-url-parser==1.7.1
+flickr-url-parser==1.8.2
     # via
     #   -r requirements.in
     #   flickr-photos-api