aboutsummaryrefslogtreecommitdiffstats
path: root/src/tmview/cli.py
diff options
context:
space:
mode:
authorLouis Burda <dev@sinitax.com>2026-02-26 16:29:37 +0100
committerLouis Burda <dev@sinitax.com>2026-02-26 16:29:37 +0100
commitc9753f216c1be51c249e7c947cda8cb3d1a945d0 (patch)
tree57970922d78d467cfbecc3e8ddefeb08ca43b6bc /src/tmview/cli.py
parent906424e8acb5adf1eff58c2f45b85616cb5651d7 (diff)
downloadtmview-py-main.tar.gz
tmview-py-main.zip
Implement image similarity searchHEADmain
Diffstat (limited to 'src/tmview/cli.py')
-rw-r--r--src/tmview/cli.py40
1 files changed, 29 insertions, 11 deletions
diff --git a/src/tmview/cli.py b/src/tmview/cli.py
index 0b3948c..cebb95d 100644
--- a/src/tmview/cli.py
+++ b/src/tmview/cli.py
@@ -21,7 +21,7 @@ def main():
prog="tmview",
description="Search EU trademark registries via TMview",
)
- parser.add_argument("query", help="Trademark search term")
+ parser.add_argument("query", nargs="?", help="Trademark name to search for")
parser.add_argument(
"-o", "--offices",
metavar="CODES",
@@ -50,6 +50,11 @@ def main():
help="Show fetch timestamp column in table output",
)
parser.add_argument(
+ "--similar-to",
+ metavar="IMAGE",
+ help="Find trademarks with visually similar logos to IMAGE",
+ )
+ parser.add_argument(
"-d", "--download-logos",
metavar="DIR",
help="Download trademark logo images to DIR",
@@ -80,6 +85,9 @@ def main():
args = parser.parse_args()
+ if not args.query and not args.similar_to:
+ parser.error("provide a search query or --similar-to IMAGE")
+
limit = min(args.limit, 100)
if args.offices:
@@ -98,15 +106,25 @@ def main():
sys.exit(1)
try:
- with console.status(f'[bold green]Searching TMview for "{args.query}"…[/bold green]'):
- result = tm_client.search(
- query=args.query,
- offices=offices,
- limit=limit,
- page=args.page,
- classes=classes,
- status=args.status,
- )
+ if args.similar_to:
+ status_msg = f"[bold green]Searching TMview for logos similar to {args.similar_to}…[/bold green]"
+ with console.status(status_msg):
+ result = tm_client.search_by_image(
+ image_path=args.similar_to,
+ offices=offices,
+ limit=limit,
+ page=args.page,
+ )
+ else:
+ with console.status(f'[bold green]Searching TMview for "{args.query}"…[/bold green]'):
+ result = tm_client.search(
+ query=args.query,
+ offices=offices,
+ limit=limit,
+ page=args.page,
+ classes=classes,
+ status=args.status,
+ )
except RuntimeError as exc:
console.print(f"[red]Error: {exc}[/red]")
console.print("[dim]Suggestion: check your connection or retry in a few seconds.[/dim]")
@@ -118,7 +136,7 @@ def main():
if args.json_output:
tm_output.print_json(result)
else:
- tm_output.print_table(result, args.query, verbose=args.verbose)
+ tm_output.print_table(result, args.query, verbose=args.verbose, image_path=args.similar_to)
if args.download_logos:
trademarks = result["trademarks"]